Pintos
-
[Pintos] 시스템 콜 - Open, Close개발 공부의 시작/pintos 2022. 11. 29. 21:22
운영체제(OS)는 다양한 서비스를 수행하기 위해 하드웨어를 직접적으로 관리함. 하지만 응용프로그램은 OS가 제공하는 인터페이스인 시스템 콜을 통해서만 하드웨어의 자원을 사용할 수 있음. 응용프로그램의 요청에 따라 운영체제의 커널에 접근하여 커널이 제공하는 서비스를 사용할 수 있음. C언어를 예로 들면 #include int main() { printf("Hello World!"); return 0; } printf 함수의 실행은 사용자 모드에서 실행되어 stdio 라이브러리를 호출한다. stdio 라이브러리는 시스템 콜인 write 함수를 호출하고, 커널 모드로 실행 흐름이 전환된다. 커널은 호출을 실행하여 모니터에 Hello World!를 출력하고 사용자 모드로 실행 흐름을 전환하여 함수의 다음 단계를..
-
[Pintos] Priority Scheduler개발 공부의 시작/pintos 2022. 11. 18. 02:03
문제 상황: Pintos의 스케쥴러는 리스트에 삽입되는 순서대로 스레드를 스케쥴링한다. 우선순위에 따라 스레드를 정렬해서 우선순위가 높은 스레드를 먼저 스케쥴링 할 수 있도록 한다. 개선 사항 1 - Priority Scheduling : 🔖 스케쥴링되는 스레드는 ready_list에서 가장 우선순위가 높은 스레드여야 한다. 이를 위해 리스트 안에 스레드를 삽입할 때마다 스레드를 우선순위에 따라 정렬되도록 만들었다. 이렇게 되면 리스트의 가장 앞에 우선순위가 가장 높은 스레드가 위치하게 된다. 그리고 스케쥴링은 리스트의 맨 앞의 스레드를 대상으로 하게 된다 🔖 리스트 안에 스레드가 삽입되는 경우는 총 3가지이다. 스레드가 생성될 때 CPU를 점유하고 있던 스레드가 대기상태로 돌아갈 때 block 상태의 ..
-
[Pintos] Project 1 - Alarm-Clock개발 공부의 시작/pintos 2022. 11. 18. 01:23
문제 상황: Alarm clock은 호출한 프로세스를 정해진 시간 이후에 다시 시작하도록 하는 함수이다. 하지만 Pintos에서는 해당 기능이 Busy Waiting 방식으로 구현되어 있다. void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); ASSERT (intr_get_level () == INTR_ON); while (timer_elapsed (start) < ticks) thread_yield (); } timer.c의 timer_sleep이라는 함수를 통해 tick동안 시간이 경과되지 않은 스레드는 CPU를 점유할 수 없도록 구현되어 있다. 하지만 현재시간을 확인하고 충분한 시간이 경과할 때 까지 계속해서 thread_yield..
-
[Pintos] 개요개발 공부의 시작/pintos 2022. 11. 18. 01:22
👉🏻 카이스트 핀토스 프로젝트 → Stanford PintOS에서 수정된 버전을 사용한다. 👉🏻 수정된 버전을 사용하므로, 메뉴얼을 꼭 따라야 한다. 따로 진행중이던 pintos 프로젝트가 있다면, 최신 메뉴얼에 따라서 몇가지 필수 사항들을 다시 구현해야 한다. 👉🏻 pintos-kaist는 x86-64 아키텍쳐에서 동작하는 간단한 os 프레임워크다. 스탠포드 대학교의 pintos 프로젝트의 변형이다. Pintos (이제 pintos-kaist) 는 kernel threads , loading and running user programs , a file system 의 모든 구현을 매우 간단한 방법으로 지원한다. 👉🏻Pintos 프로젝트에서 위 3가지 기능을 강화시킨다. kernel threads lo..