목차
제1부 UNIX 커널의 생성 및 부팅, 그리고 메모리 관리
1장 UNIX 커널의 생성 및 부팅 = 13
1.1 UNIX 커널의 생성 및 장착 = 13
2장 어드레스 매핑기법 = 17
3장 기본적인 커널 매핑 테이블 작성(physicla mode) = 21
3.1 bootstrap 과정 = 21
3.2 MC68000 계열의 경우(_start()) = 23
3.3 WE32000 계열의 경우(pstart()) = 29
4장 메모리 관리를 위한 메모리 풀(pool)의 구성(virtual mode) = 35
4.1 커널 virtual 어드레스 풀의 구성 = 36
4.2 물리 메모리 페이지 풀의 구성(mlsetup()) = 45
5장 프로세스 스위칭 모드(time sharing mode)로의 전환 = 49
5.1 프로세스 0(shed() : 메모리 스케줄러)을 위한 초기화(pOinit()) = 50
5.2 프로세스 0의 탄생 = 51
5.3 "u" block("u" area)의 교체 = 53
5.3.1 MC68000 계열의 경우 = 53
5.3.2 WE32000 계열의 경우 = 54
6장 a.out 포맷 = 57
6.1 a.out의 포맷 = 58
6.2 text, data, bss section = 62
7장 프로세스 이미지 관리 = 65
7.1 프로세스 이미지의 공유 = 65
7.2 region 테이블과 pregion 테이블 = 66
7.3 프로세스 이미지와 pregion, region, 그리고 page 테이블 = 67
7.4 page 테이블(PDT : Page Descriptor Table)의 할당 = 70
7.5 pregion 테이블과 region 테이블의 할당 = 74
7.6 region 관리를 위한 유틸리티 함수 = 76
7.7 attachreg(), growreg(), loadreg() 함수 = 81
7.8 Disk Block Descriptor(DBD) = 85
7.9 mapreg()과 loadreg() 함수 = 88
7.9.1 magic number 0410 타입 = 88
7.9.2 magic number 0413 타입 = 89
8장 메모리 스케줄링(memory scheduling) = 93
8.1 swapping의 종류 = 93
8.2 swap device = 94
8.3 swapping을 위한 준비 = 99
8.4 swapping out = 102
8.5 getpages() 함수 = 109
8.6 primary swapper(sched() : 메모리 스케줄러) = 115
8.7 secondary swapper(vhand() : page stealer) = 123
9장 page fault(swapping in) = 129
9.1 exception & interrupt = 129
9.1.1 WE32000 계열의 경우 = 129
9.1.2 MC68000 계열의 경우 = 130
9.2 translation fault(swapping in) = 131
9.3 protection fault = 133
9.4 page의 free = 135
10장 메모리 관리와 관련된 시스템 콜 = 139
10.1 fork() 시스템 콜 = 139
10.2 exec() 시스템 콜 = 149
10.3 brk() 시스템 콜 = 161
2부 프로세스 관리 및 IPC
11장 WE32000 계열의 interrupt, trap 메커니즘 = 165
11.1 Process Control Block(PCB) = 165
11.2 CALLPS, RETPS instruction과 %pcbp, %r0 그리고 인터럽트 스택(%isp) = 166
11.3 GATE, RETG instruction과 gate 테이블 = 168
11.4 reset exception, process exception, stack exception = 170
11.5 interrupt = 170
11.6 모드 전환(유저 모드, 커널 모드) = 171
11.7 시스템 콜과 normal exception = 172
12장 WE32000 계열의 프로세스 스위칭 기법 = 175
12.1 프로세스 스위칭의 원인 = 175
12.2 runrun 플래그 = 176
12.3 프로세스 스위칭(process context switching) = 178
12.4 스위칭의 예 : 시스템 콜 수행도중 스스로 CPU를 반납하는 경우 = 179
12.5 시스템 콜 과정과 스위칭 = 181
12.6 normal exception과 스위칭 = 187
12.7 clock interrupt와 스위칭 = 190
12.8 stack exception과 스위칭 = 194
12.9 스스로 스위칭을 원하는 경우(setch()) = 199
12.10 pswtch() 루틴 = 201
12.11 setrq() 루틴 = 203
13장 MC68000 계열의 인터럽트, 트랩 매커니즘 = 205
13.1 exception vector table = 205
13.2 exception 발생시의 stack frame format = 207
13.3 RTE instruction = 208
13.4 MOVEM instruction = 208
13.5 인터럽트 처리루틴 = 211
13.6 시스템 콜 및 트랩 처리루틴 = 213
14장 MC68000 계열의 스위칭 기법 = 219
14.1 context save = 220
14.2 context restore & resume = 221
14.3 스위칭 루틴(swtch(),qswtch()) = 224
15장 프로세스의 수명주기 = 229
15.1 프로세스의 탄생 = 229
15.1.1 WE32000 계열의 경우 = 233
15.1.2 MC68000 계열의 경우 = 234
15.2 최초의 유저 프로세스 이미지(icode) = 236
15.2.1 WE32000 계열의 경우 = 237
15.2.2 MC68000 계열의 경우 = 240
15.3 프로세스의 상태 = 242
16장 프로세스 우선순위(priority) = 247
16.1 프로세스 priority와 관련된 proc 테이블의 엔트리 = 247
16.2 프로세스 priority의 계산 = 249
17장 프로세스 스케줄링(dispatch) = 253
17.1 disp() 함수 = 253
17.2 프로세스 스케줄링 시나리오 = 255
18장 sleep과 wake up = 259
18.1 자원의 공유 및 프로세스의 동기화 = 259
18.2 sleep과 wake up 사이의 매개체 = 261
18.3 sleep과 system priority = 262
18.4 setjmp()와 longjmp() 함수 = 266
18.5 sleep() 함수 = 268
18.6 wakeup() 함수 = 271
19장 signal(신호) = 273
19.1 signal의 유형 = 273
19.2 signal의 전송과 proc 테이블의 p_sig 엔트리 = 276
19.3 proc 테이블의 p_hold와 p_chold 엔트리 = 277
19.4 psignal() 함수 = 278
19.5 signal에 대한 대응처리 (issig()와 psig() 함수) = 278
19.5.1 WE32000 계열의 경우 = 282
19.5.2 MC68000 계열의 경우 = 284
20장 signal과 관련된 시스템 콜 1 = 287
(signal(), sigset(), sighold(), sigrelse(), siginore(), sigpause()) = 287
21장 signal과 관련된 시스템 콜 2 (kill()) = 291
21.1 real user(group) id와 effective user(group) id = 291
21.2 process group id = 294
21.3 kill() 시스템 콜 = 296
21.4 signal() 함수 = 296
22장 signal과 관련된 시스템 콜 3 (wait(), exit()) = 299
22.1 parent-child-sibling 리스트 = 299
22.2 exit() 시스템 콜 = 301
22.3 wait() 시스템 콜 = 304
22.4 wait() 시스템 콜의 리턴 값 = 305
22.5 freeproc() 함수 = 307
23장 IPC(Inter Precess Communication) = 310
23.1 공유 자원을 사용하는 절차 = 310
23.2 공유 자원의 설정(ipcget() 함수) = 311
23.3 공유 자원의 id 관리 = 312
23.4 shared memory = 315
23.4.1 shared memory의 설정 = 315
23.4.2 shared memory의 attach = 317
23.4.3 shared memory의 datach = 319
23.4.4 shared memory의 free(취소) = 320
23.4.5 shared memory와 관련된 시스템 콜 = 322
23.5 message queues = 322
23.5.1 message queues의 설정 = 323
23.5.2 message의 send = 323
23.5.3 message의 receive = 325
23.5.4 message queues의 free(취소) = 327
23.5.5 커널 내의 message buffer = 328
23.5.6 message queues와 관련된 시스템 콜 = 329
23.6 semaphore = 329
23.6.1 semaphore의 설정 = 330
23.6.2 semaphore 값의 초기화 = 331
23.6.3 semaphore operation = 331
23.6.4 on exit entry의 구성 = 335
23.6.5 semaphore의 free(취소) = 337
23.6.6 semaphore operation의 atomicity(원자성) = 337
그림 색인 = 339
색인 = 343