목차
머리말
제1장 Bellona2 커널의 개요
1.1 들어가기에 앞서 = 14
1.2 Bellona2는 어떻게 만들어졌나? = 15
1.3 주요 기능 = 20
1.4 당부의 말씀 = 24
제2장 Bellona2 커널 이미지
2.1 커널 이미지 = 28
2.1.1 어떤 언어를 선택할 것인가? = 28
2.1.2 커널의 컴파일/링크 옵션 = 29
2.2 부트 이미지 만들기 = 33
2.2.1 부트 이미지 생성 프로그램 = 34
2.3 커널 이미지 로더 = 37
2.3.1 커널 이미지로의 제어 이행 = 42
2.4 커널 이미지 재배치 = 44
2.4.1 섹션의 재배치 = 46
2.4.2 PE 파일의 섹션 헤더 = 46
2.4.3 주소의 재배치 = 49
2.4.4 재배치 정보 = 50
2.4.5 커널 이미지 배치 구조 = 53
2.5 부트 섹터 = 55
2.6 요약 = 60
제3장 주변장치 다루기
3.1 화면 출력 = 64
3.1.1 단순한 형태가 가장 좋다. = 65
3.1.2 printf 함수 만들기 = 66
3.1.3 커서 옮기기 = 68
3.2 키보드 = 69
3.2.1 간단한 키보드 인터럽트 핸들러 = 71
3.2.2 스캔 코드 처리 방법 = 73
3.2.3 키보드 LED 변경 = 85
3.3 하드디스크 = 88
3.3.1 초창기 IDE 하드디스크의 용량 제한 = 89
3.3.2 LBA(Logical Block Address) = 90
3.3.3 하드디스크의 물리적 정보 인식 = 91
3.3.4 하드디스크를 액세스하기 위한 레지스터들 = 100
3.3.5 섹터 읽어들이기 = 102
3.4 플로피디스크 = 106
3.4.1 플로피디스크의 접근 계층 = 107
3.4.2 플로피디스크의 접근 방법 = 108
3.4.3 트랙 읽기 = 114
3.4.4 IRQ 6 = 119
3.5 타이머 = 121
3.5.1 타이머 인터럽트의 발생 간격 조정 = 121
3.5.2 Bellona2 커널의 타이머 인터럽트 핸들러 = 123
3.6 CD-ROM 드라이브 = 126
3.6.1 CD-ROM에 접근하기 위한 레지스터들 = 127
3.6.2 CD-ROM 드라이브로부터 제품 번호와 일련 번호 구하기 = 129
3.6.3 ATAPI 전송 프로토콜 = 134
3.6.4 CD-ROM의 용량 알아내기 = 136
제4장 디바이스 드라이버
4.1 블록 디바이스 드라이버 = 142
4.1.1 일관성 있는 접근 방법 제공 = 142
4.1.2 내장형 드라이버와 동적 드라이버 = 143
4.1.3 블록 디바이스, 블록 디바이스 드라이버, 그리고 저장매체 = 144
4.1.4 블록 디바이스 드라이버 인식 번호 = 145
4.1.5 블록 디바이스 표준 함수 = 147
4.1.6 블록 디바이스 구조체 = 149
4.1.7 블록 디바이스 드라이버 관련 함수 = 153
4.1.8 램 디스크 드라이버 = 155
4.1.9 플로피디스크 드라이버 = 163
4.1.10 하드디스크 드라이버 = 174
4.1.11 하드디스크 파티션 디바이스 드라이버 = 182
4.1.12 블록 디바이스 드라이버 요약 = 187
4.2 문자 디바이스 드라이버 = 188
4.2.1 문자 디바이스 드라이버의 개요 = 188
4.2.2 키보드 디바이스 드라이버 = 194
4.2.3 시리얼 포트 디바이스 드라이버 = 197
4.2.4 표준 출력 디바이스 드라이버 = 207
제5장 파일 시스템
5.1 가상 파일 시스템 = 211
5.1.1 가상 파일 시스템의 개념 = 211
5.1.2 가상 파일 시스템을 표현하기 위한 구조체 = 212
5.2 파일 시스템 캐시 매니저 = 214
5.2.1 캐시를 두는 이유 = 214
5.2.2 해시 테이블 = 215
5.2.3 캐시 매니저와 해시 인덱스를 표현하기 위한 구조체 = 217
5.3 파일 관리를 위한 노드 구조체 = 219
5.3.1 Vnode의 개요 = 219
5.3.2 Vnode 구조체 = 220
5.3.3 Vnode 해시 = 222
5.3.4 파일 시스템 고유 데이터 = 223
5.4 루트 파일 시스템과 파일 시스템의 마운트 = 224
5.4.1 마운트의 개요 = 224
5.4.2 루트 파일 시스템 = 225
5.4.3 파일 시스템의 테스트 = 225
5.5 파일 시스템의 초기화 = 226
5.6 FAT32 파일 시스템 = 227
5.6.1 FAT 파일 시스템 = 227
5.6.2 FAT32 자료구조 = 228
5.6.3 FAT32 파일 시스템의 마운트 과정 = 231
5.6.4 FAT32 파일 시스템의 디렉토리 엔트리 = 237
5.7 파일 디스크립터 = 242
5.8 파일 관련 함수 = 244
5.8.1 파일 오픈하기 = 244
5.8.2 파일 읽기 = 248
5.8.3 파일 닫기 = 251
5.8.4 파일명 변경 = 253
5.9 FAT12 파일 시스템의 인식 = 255
5.10 FAT16 파일 시스템의 인식 = 257
5.11 윈도우 상에서의 파일 시스템 테스트 = 258
5.12 표준 입력, 표준 출력, 표준 에러 핸들 = 261
5.13 파일 시스템 구현에 있어서 아쉬운 점 = 264
제6장 메모리 관리
6.1 페이징 = 266
6.1.1 페이징의 장점 = 266
6.1.2 페이징 기능 활성화 = 268
6.1.3 페이지 디렉토리와 페이지 테이블 = 269
6.2 물리 메모리 = 272
6.2.1 물리 메모리 크기 구하기 = 272
6.2.2 물리 메모리 관리 테이블 = 273
6.3 메모리 = 277
6.3.1 메모리 모델의 종류 = 277
6.3.2 Bellona2 커널의 메모리 모델 = 281
6.4 가상 주소 공간의 관리 = 283
6.5 메모리 블록의 단편화 = 285
6.6 메모리의 할당과 해제시 고려해야 할 사항 = 288
6.7 메모리 할당 방법 = 290
6.7.1 메모리 풀 = 290
6.7.2 메모리 블록 관련 자료구조 = 293
6.8 kmalloc과 kfree 함수 = 297
6.9 공유 메모리 = 302
6.9.1 공유 메모리의 개요 = 302
6.9.2 공유 메모리를 이용한 예제 프로그램 = 307
6.10 Bellona2 커널의 메모리 관리 시스템 요약 = 310
6.11 향후 보강이 필요한 부분 = 311
제7장 프로세스 관리
7.1 프로세스와 쓰레드 = 314
7.2 다중 쓰레드 모델 = 315
7.3 멀티태스킹 = 317
7.4 스케줄링 = 319
7.5 프로세스의 주소 공간 = 322
7.6 프로세스를 표현하기 위한 자료구조 = 324
7.7 쓰레드를 위한 스택 = 327
7.8 쓰레드를 표현하기 위한 자료구조 = 332
7.9 쓰레드의 상태 변화 = 335
7.10 이벤트와 웨이트 오브젝트 = 337
7.11 타임아웃 오브젝트 = 344
7.12 프로세스와 쓰레드에 관련된 구조체의 상관관계 = 350
7.13 프로세스와 쓰레드의 생성 = 351
7.14 프로세스와 쓰레드의 종료 = 356
7.15 init 쓰레드 = 359
7.16 응용 프로그램에서 쓰레드의 생성과 종료 = 361
7.17 태스크 스위칭 = 367
7.18 시그널 = 373
7.19 세마포어 = 380
제8장 동적 모듈
8.1 동적 모듈과 응용 프로그램과의 차이점 = 396
8.2 동적 모듈 구조체(ModuleStt) = 397
8.3 외부 모듈과 함수 공유 = 400
8.4 외부 함수 호출 절차 = 404
8.5 동적 모듈의 로딩 = 407
8.6 동적 모듈의 언로딩 = 410
8.7 동적 모듈 예제 = 411
제9장 커널 디버거
9.1 디버거의 개요 = 416
9.1.1 에러의 종류 = 417
9.1.2 디버거가 있는 경우와 없는 경우 = 418
9.1.3 디버거가 갖추어야 할 기본적인 기능 = 418
9.1.4 가장 원시적인 디버깅 수단 = 420
9.1.5 디버거가 디버거를 디버깅해(?) = 421
9.1.6 소스 레벨 디버깅 = 421
9.2 하드웨어적인 디버깅 지원 = 422
9.2.1 디버깅 지원 수단 = 423
9.2.2 디버그 레지스터 = 424
9.2.3 디버그 인터럽트 = 426
9.2.4 페이지 폴트 = 428
9.3 Bellona2 커널 디버거의 주요 기능 = 432
9.3.1 브레이크 포인트 설정 = 433
9.3.2 역어셈블 = 440
9.3.3 어셈블 = 462
9.4 커널 디버거의 명령어 = 469
제10장 응용 프로그램
10.1 컴파일과 링크 옵션 = 484
10.2 프로그램 로더 = 487
10.3 프로그램 내부 구조 = 495
10.4 재배치 엔트리 처리 = 502
10.5 프로그램의 디버깅 정보 = 505
10.6 응용 프로그램 제작을 위한 라이브러리 = 514
10.7 시스템 콜 = 516
제11장 Bellona2 커널로 시스템 부팅하기
11.1 부팅 디스크의 제작 = 526
11.2 실행 환경 = 530
11.3 명령어 = 530
11.3.1 부팅하기 = 530
11.3.2 디버깅 정보 로딩 = 532
11.3.3 도움말 = 533
11.3.4 쓰레드 다루기 = 535
11.3.5 프로세스 다루기 = 538
11.3.6 역어셈블 명령 = 539
11.3.7 커널 디버거 관련 명령 = 540
11.3.8 메모리 덤프 = 542
11.3.9 커널 내의 자료구조 살펴보기 = 543
11.3.10 디바이스 드라이버 리스트 출력 = 545
11.3.11 파일 시스템 관련 명령 = 546
11.3.12 히든 카드? = 547
11.4 맺음말 = 547
부록 : 기계어 코드 테이블
1바이트 기계어 코드 테이블 = 550
2바이트 기계어 코드 테이블 = 552
찾아보기 = 554