Pintos 24

PintOS Project 1.2(3) - Priority Inversion (정글사관학교 59일차 TIL)

1. 과제 개요: Priority Inversion Problem 해결 이번 과제에서는 Priority Inversion Problem을 해결하는 것이 목표이며, 이를 위해 3가지 도네이션 기능을 구현해야 한다. 이를 위해 먼저 priority inversion problem이 무엇인지부터 이해하고 넘어가보자. Priority Inversion Problem: 우선순위가 높은 스레드가 우선순위가 낮은 스레드를 기다리는 현상 아래 이미지만 보면 뭔 소린가 싶을 거다. 차근차근 설명에 들어간다. 아래 이미지에서 priority가 높은 순은 주황(High, H) > 파랑(Medium, M) > 연두(Low, L)이다. 여기서 연두와 주황은 Lock A를, 파랑은 Lock B에 접근하려고 한다고 하자. 즉, 여..

PintOS Project 1.2(2) - Priority Scheduling-Synchronization(정글사관학교 58일차 TIL)

1. 과제 개요: FIFO -> Priority Scheduling 기반으로 thread가 CPU 점유하도록 구현 현재 핀토스는 semaphore를 대기하고 있는 스레드 리스트인 waiters가 FIFO로 구현되어 있다고 한다. 이게 무슨 말인지부터 이해하도록 하자. 먼저 세마포어에 대해 간단히 짚고 넘어간다. 저번 과제 1.1에서 Process synchronization에 대해 간략하게 소개했다. 동시에 서로 다른 프로세스 혹은 스레드가 공유 자원에 접근하면 충돌이 발생하기 때문에 이를 막아줘야 한다. 이 공유 데이터가 존재하는 영역을 critical section(임계 구역)이라고 하며, 하나의 스레드가 여기에 들어와 작업하고 있으면 다른 애들은 바깥에서 줄 서서 기다리고 있어야 한다. 이를 해결하..

PintOS Project 1.2(1) - Priority Scheduling(정글사관학교 57일차 TIL)

이어서 바로 과제 2 진행. 과제 1 겨우 끝내고 2를 보니 만만해보였는데 양이 엄청 산더미였더라..하지만 쫄지 않고 몰입 간드아 1. 과제 목표: RR(라운드 로빈) 방식의 스케쥴링을 Priority Scheduling 방식으로 수정 위 과제를 이해하기 위해서는 간단하게 RR과 Priority Scheduling 방식에 대한 이해가 필요하다. (추후 다시 정리 예정) 여기서는 FCFS, SJF는 다루지 않겠다. CPU 스케쥴링이란, 비싼 자원인 CPU를 어떻게든 효율적으로 사용해 최대한의 퍼포먼스를 내기 위해 고안된 방식이다. 쉽게 말해 "얼마나 CPU한테 단위 시간 당 많은 일을 시킬 것인가?"인데, 단순히 많이 일하는 것만이 능사는 아니다. 1) CPU 이용률, 그리고 주어진 시간 동안 몇개의 일을..

PintOS Project 1.1 - Alarm clock (정글사관학교 56일차 TIL)

대망의 핀토스 프로젝트가 시작됐다. 오늘은 시작한지 5일차. 운영체제 이론 공부(~데드락)를 마치고 과제를 보니까 이건 뭐 또다른 신세계.. 하지만 조급해하지 않고 차근차근 공부해보자. 과제 설명부터 보겠다. (과제 링크는 여기) Reimplement timer_sleep(), defined in devices/timer.c. 현재 코드는 작동하나, 지금 코드는 busy-wait 방식이다. 이는 현재 시간(tick)을 계속 체크한 뒤, 충분한 시간이 지나기 전까지 계속해서 thread_yield() 함수를 호출하는 루프를 돈다. 이러한 busy waiting을 피하기 위해 코드를 다시 짜라. 쓰레드 호출을 최소한 x 시간이 지난 후에 진행할 수 있도록 지연해라. 만약 시스템이 idle 상태가 아니라면, ..