본문 바로가기

pintos

(4)
Pintos Project 1 Threads. Advanced Scheduler 우선순위 스케쥴링을 하게 되면 발생하는 문제 중 하나로 우선순위가 낮은 스레드가 긴 시간동안 CPU를 점유하지 못하는 starvation 문제가 있다. 이를 해결하기 위해서 pintos document가 제시하는 방법은 BSD Scheduler이다. 기본 골자는 CPU를 많이 점유했던 애들의 우선순위는 낮추는 방향으로, CPU를 점유하지 못했던 스레드들의 우선순위는 올리는 방향으로 런타임 중에 우선순위들을 꾸준히 수정해주는 것이다. 이를 위해서 스레드별로 nice, recent_cpu라는 값을 새로 정의하고 시스템 전체에서 load_avg라는 값을 따로 관리하게 된다. 스레드의 우선순위는 $PRI\_MAX - recent\_cpu/4 - nice*2$로 결정된다. nice란 스레드의 nice한 정도라고 ..
Pintos Project 1 Threads. Priority Donation 우선순위를 스케쥴링을 할 때, 현재 실행중인 얻고자 하는 lock을 소유하고 있는 스레드가 나보다 우선순위가 낮다면 lock을 절대 얻지 못하는 문제가 발생한다. 이를 해결하기 위한 방법으로 제시하는 것이 priority donation이다. lock을 소유하고자 하는 스레드에서 lock을 소유하고 있는 스레드의 우선순위를 자신만큼 올려주는 것이다. 이를 priority donation이라고 부른다. 다행히도 테스트에서 요구하는 것은 lock에 대해서만 이를 구현해주는 것이다. 이제 donation은 lock에 대해서만 일어난다고 가정하고 진행하자. 일단, donation이 일어날 조건은 현재 실행중인 스레드가 소유하고자 하는 lock이 다른 스레드에 의해서 점유되어 있고 그 스레드는 실행되고 있지 않은..
Pintos Project 1 Threads. Priority Scheduling Project 1의 중요 목표로 우선순위 스케쥴링을 구현해야 한다. 기존의 스케쥴러는 FIFO(First-in First-out) ronud-robin 방식으로 스케쥴링을 하고 있다. 이것을 우선순위 스케쥴링으로 바꿔줘야 한다. 이를 위해 신경써야 할 부분은 아래와 같다. FIFO 형식으로 다음 실행될 스레드를 찾고 있는데, 이를 우선순위가 높은 스레드부터 찾도록 바꿔줘야 한다. ready_list가 ready queue의 역할을 하고 있는데 ready_list를 우선순위가 높은 스레드가 먼저 오도록 유지하게 하자. ready_list뿐만 아니라 semaphore를 기다리고 있는 스레드들 중에서도 우선순위가 높은 스레드부터 semaphore를 소유할 수 있도록 해야 한다. 현재 스케쥴러는 실행되고 있는 ..
Pintos Project 1 Threads. 소개 및 Alarm Clock pintos는 스탠포드에서 만든 교육용 OS이며, skeleton 코드만 주어지고 보통 학생이 비어있는 기능들을 채워나가며 과제를 수행한다. 국내외 대학교 중에 이를 운영체제 수업시에 전체 학기 동안 진행하는 과제로 선택하는 경우가 많다. 과제는 크게 Threads, User Program, Virtual Memory, File system으로 나눠진다. 학교에서 운영체제 수업을 들으면서 Threads 일부분, User Program은 전부, VM도 일부 해봤는데 그냥 전체를 다 해보고 싶어서 얼마 전부터 정말 조금씩 하고 있다. 현재 Threads의 일부를 마쳐서 그 내용을 정리하고자 글을 쓴다. Project1 Threads 이 프로젝트는 세가지 부분으로 나뉜다. 첫째는 Alarm Clock(slee..