</>PatchNote
목록으로

2023-04-14

운영체제 #0 — 시작하며

Operating SystemOS 2023xv6

3학년 1학기에 들은 운영체제 수업을 정리한다.

이 수업은 세 축으로 굴러갔다. 슬라이드를 따라가는 이론 강의, 매주 질문에 답을 써서 내는 실습(lab), 그리고 xv6를 직접 뜯어고치는 프로젝트 세 개다. 셋이 서로 다른 얘기를 하는 게 아니라, 이론에서 이름을 배우고 실습에서 그 이름을 xv6 코드에서 찾고 프로젝트에서 그걸 직접 바꾸는 구조였다.

이 시리즈의 구성

정리는 그 세 축을 따라간다.

내용출처
#1컴퓨터 시스템 개요 — 레지스터, fetch-execute, 인터럽트, 캐시이론
#2운영체제 개요 — 멀티프로그래밍, dual mode, 시스템 콜이론
#3프로세스와 스레드 — PCB, 상태 전이, fork/exec이론 + lab
#4CPU 스케줄링 — FCFS부터 MLFQ까지이론
#5프로세스 동기화 — race condition, 세마포어, 데드락이론 + lab
#6xv6의 trap과 시스템 콜 — IDT, alltraps, 부팅 과정실습
#7xv6에 MLFQ 스케줄러 얹기Project 1
#8메모리 관리 — 할당 전략, 페이지 교체, CoWlab
#9xv6에 LWP와 프로세스 매니저 만들기Project 2
#10xv6 파일 시스템 확장 — multi indirect, symlink, buffered I/OProject 3

xv6

실습과 프로젝트의 무대는 전부 xv6다. MIT에서 만든 교육용 유닉스로, 6th Edition UNIX를 x86에서 돌아가게 다시 쓴 물건이다. 코드가 만 줄이 안 되기 때문에 "스케줄러가 어디 있냐"를 찾는 데 시간을 쓰지 않아도 된다. proc.c를 열면 scheduler()가 있고, 그게 정말로 전부다.

교과서에서 "PCB에는 프로세스의 상태와 레지스터와 스케줄링 정보가 들어있다"고 읽은 다음 proc.hstruct proc을 열어보면 정말로 그것들이 필드로 하나씩 박혀 있다. 이 수업에서 제일 좋았던 게 그 대응이었다.

쓰는 방식

슬라이드를 그대로 옮기지는 않는다. 그때 내가 헷갈렸던 지점과 어떻게 납득했는지를 남기는 쪽에 가깝다. 그래서 중간중간 "이건 아직 잘 모르겠다"로 끝나는 문단이 있다. 당시 노트에 그렇게 적혀 있던 것들이고, 굳이 지우지 않았다.