목록으로
2023-04-14
운영체제 #0 — 시작하며
Operating SystemOS 2023xv6
3학년 1학기에 들은 운영체제 수업을 정리한다.
이 수업은 세 축으로 굴러갔다. 슬라이드를 따라가는 이론 강의, 매주 질문에 답을 써서 내는 실습(lab), 그리고 xv6를 직접 뜯어고치는 프로젝트 세 개다. 셋이 서로 다른 얘기를 하는 게 아니라, 이론에서 이름을 배우고 실습에서 그 이름을 xv6 코드에서 찾고 프로젝트에서 그걸 직접 바꾸는 구조였다.
이 시리즈의 구성
정리는 그 세 축을 따라간다.
| 편 | 내용 | 출처 |
|---|---|---|
| #1 | 컴퓨터 시스템 개요 — 레지스터, fetch-execute, 인터럽트, 캐시 | 이론 |
| #2 | 운영체제 개요 — 멀티프로그래밍, dual mode, 시스템 콜 | 이론 |
| #3 | 프로세스와 스레드 — PCB, 상태 전이, fork/exec | 이론 + lab |
| #4 | CPU 스케줄링 — FCFS부터 MLFQ까지 | 이론 |
| #5 | 프로세스 동기화 — race condition, 세마포어, 데드락 | 이론 + lab |
| #6 | xv6의 trap과 시스템 콜 — IDT, alltraps, 부팅 과정 | 실습 |
| #7 | xv6에 MLFQ 스케줄러 얹기 | Project 1 |
| #8 | 메모리 관리 — 할당 전략, 페이지 교체, CoW | lab |
| #9 | xv6에 LWP와 프로세스 매니저 만들기 | Project 2 |
| #10 | xv6 파일 시스템 확장 — multi indirect, symlink, buffered I/O | Project 3 |
xv6
실습과 프로젝트의 무대는 전부 xv6다. MIT에서 만든 교육용 유닉스로,
6th Edition UNIX를 x86에서 돌아가게 다시 쓴 물건이다. 코드가 만 줄이 안 되기
때문에 "스케줄러가 어디 있냐"를 찾는 데 시간을 쓰지 않아도 된다. proc.c를 열면
scheduler()가 있고, 그게 정말로 전부다.
교과서에서 "PCB에는 프로세스의 상태와 레지스터와 스케줄링 정보가 들어있다"고
읽은 다음 proc.h의 struct proc을 열어보면 정말로 그것들이 필드로 하나씩
박혀 있다. 이 수업에서 제일 좋았던 게 그 대응이었다.
쓰는 방식
슬라이드를 그대로 옮기지는 않는다. 그때 내가 헷갈렸던 지점과 어떻게 납득했는지를 남기는 쪽에 가깝다. 그래서 중간중간 "이건 아직 잘 모르겠다"로 끝나는 문단이 있다. 당시 노트에 그렇게 적혀 있던 것들이고, 굳이 지우지 않았다.