본문 바로가기

운영체제9

PintOS | Project3. Virtual Memory | 트러블 모음 2 Stack growth 트러블 모음 pt-write-code2 테스트 케이스 pt-write-code2 테스트는 잘못된 영역(코드 세그먼트)에 read() 시도를 하는 테스트이다. 메모리 관점에서 보면 read() 시스템콜은 파일의 데이터를 읽어서 메모리의 버퍼에 쓰는 작업을 포함한다. 그러나 현재는 코드 세그먼트는 not writable 해야 하는데, read()가 되고 있는 상황, 즉 not writable한 페이지에 write가 되는 상황이다. 문제상황을 실제 파일에서 확인해보았다. pt-write-code2 테스트 코드는 다음과 같으며, void test_main (void) { int handle; CHECK ((handle = open ("sample.txt")) > 1, "open \\"sa.. 2023. 12. 27.
PintOS | Project3. Virtual Memory | 트러블 모음 1 Anonymous Page 1. Lazy Loading - thread_current()에서 터지는 문제 spt_insert_page 에서 문제를 발견할 수 있었다. hash_insert()는 첫번째 인자로 hash 구조체를 받아야 하는데, spt를 줬다. &spt 를 &spt->spt_pages 로 바꿔주니 문제 해결 2. Page fault 핸들링 때, spt에서 페이지를 찾지 못하는 문제 exit(-33)을 어디에 넣어놨냐면 .. 뭐가 문제였을까?? 애초에 page를 spt에 제대로 넣어주지 못했거나, 제대로 넣어줬으나 탐색 과정상의 문제로 찾지 못하는 상황인 듯 하다. 여기서 출발하여 원인을 탐색하다보니 다음과 같은 문제점을 발견할 수 있었다. vm_stack_growth(), setup_stac.. 2023. 12. 24.
운영체제 | 가상메모리 | 페이징과 주소번역 더 알아보기 큰 그림 요약 가상 메모리는 다음 페이지들의 집합으로 표현될 수 있다: 메인메모리에 로드된 cached page (익명 페이지와 file-backed page들) cached page는 메인메모리에 복제(load)되어 캐싱된 페이지를 뜻한다. cached 메모리의 경우 해당 프로세스(스레드) 페이지 테이블 중에서, 해당 페이지에 해당하는 PTE의 valid bit (다른 말로 present bit)가 1로 설정된다. 해당 프로세스(스레드) 페이지 테이블의 위치는 PTBR 에 저장된다. 메인메모리에 로드되지 않은 데이터 cached page 였다가 스왑 아웃된 uncached page: cached page 였다가 스왑 아웃된 uncached 페이지 중 익명 페이지들은 스왑 영역 안에 존재하게 된다. fi.. 2023. 12. 16.
PintOS | Project1. Threads | Advanced Scheduling (4.4 BSD) 핀토스 프로젝트에서는 4.4 BSD 스케줄러를 채택하고 있다. BSD는 Berkeley Software Distribution의 약자이고, UNIX의 한 버전인 4.4 BSD에서 사용되는 프로세스 스케줄러라고 한다. 앞서 공부했던 MLFQ 기반에서 변형된 버전이다. 이번 기록에서는 4.4 BSD를 구현하면서 이해한 바와 고민했던 내용들을 적어보는 시간을 가져보고자 한다. BSD의 스케줄링 철학 BSD 스케줄러의 핵심 철학은 다음과 같다. If the thread is nicer, lower the priority. If the thread have been using lots of CPU recently, lower the priority. For all threads, priority is recalc.. 2023. 12. 4.
운영체제 | CPU 스케줄링 알고리즘 | MLFQ 멀티 레벨 피드백 큐(MLFQ, Multi-level Feedback Queue) 우선순위 스케줄러의 발전된 형태 중 하나이며, Windows에서도 일부 채택되는 방식이다. (Linux는 현재 RB 트리를 활용하는 CFS(Completelty Fair Scheduler)를 사용한다고 한다.) MLFQ의 목표 두 가지 1. 반환 시간 최적화: 짧은 작업을 먼저 실행시킨다 2. 응답 시간 최적화: 대화형 사용자에게 응답이 빠른 시스템이라는 느낌 주기 근데 시스템은 작업의 실행 시간을 미리 알 수 없다. 따라서 핵심적인 질문은 다음과 같다: 작업의 실행 시간에 대한 선행 정보 없이 어떻게 위 목표를 달성할 수 있는가? MLFQ의 규칙 MLFQ는 여러 개의 큐로 구성되며, 각각 다른 우선순위(Priority l.. 2023. 11. 29.
운영체제 | CPU 스케줄링 알고리즘 | RR, SJF, STCF 협조적이든 비협조적이든 프로세스(쓰레드) 전환을 한다고 쳐. 그럼 지금 실행 중인 애는 ready list에 가겠지? 아니면 I/O 인터럽트로 blocked가 된다고 쳐. 이제 그 다음에 실행할 녀석을 어떻게 고르냐가 문제임. 무조건 ready list에 들어온대로 처리할까? 그것도 초기에 쓰였던 방법 중 하나임. FIFO 또는 FCFS(First Come First Serve)라고 불리는 방식. 이런 걸 스케줄링 알고리즘이라고 함. 어떻게 스케줄링을 할지에 대한 이야기. 스케줄링 평가 기준: 평균 반환시간 스케줄링의 평가 항목: 어떤 스케줄링 알고리즘이 얼마나 좋은지를 어떻게 평가할까? 기준은 두가지임. 1. 반환 시간(turnaround time): 작업 완료시간 - 시작시간 (대략 작업 리스트에 .. 2023. 11. 26.
운영체제 | 프로세스, 쓰레드의 상태와 생애주기 2023. 11. 24.
운영체제 | 프로세스(Process), 쓰레드(Thread) 프로세스, 쓰레드가 뭔가요? 프로세스: 프로세스는 실행 중인 프로그램의 인스턴스로, 독립적인 메모리 공간(가상 메모리)와 자원(파일 핸들, 네트워크 연결 등)을 가진다. OS가 프로세스의 생성 및 관리를 맡는다. 쓰레드: 쓰레드는 프로세스 내의 실행 흐름 단위로, 상위 프로세스의 자원과 메모리(코드, 데이터, 힙)를 공유한다. 각 쓰레드는 독립적인 스택 공간을 가지며, 멀티쓰레딩을 통해 프로세스 내에서 여러 작업을 동시에 수행할 수 있다. 프로세스(Process) 프로세스는 실행 중인 프로그램의 인스턴스라는 말은 다음과 같이 비유할 수 있다. 보조기억장치의 프로그램 실행 파일 = 설계도 보조기억장치의 실행 파일은 프로그램의 코드와 데이터를 포함하고 있다. 이 파일은 프로그램이 어떻게 동작해야 하는지에 대.. 2023. 11. 24.
CS:APP | Chapter 1 | 컴퓨터 시스템 overview CSAPP 1장의 각 소단원을 읽으면서 주요 내용과 추가적으로 알아본 정보들을 기록하는 포스팅😎 1장은 컴퓨터 시스템 전반을 얕고 넓게 훑는 챕터이다. 글자색이 다른 부분은 내가 따로 추가한 생각 혹은 정보이다 (= 틀릴 수도 있다) 1.1 정보는 비트와 컨텍스트로 이루어진다 소스 프로그램은 byte(= 8 bit) 단위로 구성된다. 대부분의 컴퓨터 시스템은 text 문자를 아스키 표준을 사용하여 표시한다. 아스키 표준은 각 문자를 byte 길이의 정수 값으로 나타낸다. 텍스트 파일: hello.c 처럼 아스키 문자들로만 이루어진 파일 바이너리 파일: 텍스트 파일을 제외한 다른 모든 파일 컨텍스트(context) 모든 시스템 내부의 정보는 bit들로 표시됨. 서로 다른 객체들을 구분하는 유일한 방법은 이.. 2023. 10. 26.