0부터 시작하는 OS 자작 입문
땅끝
2024-01-05 08:48
172
0
본문
0부터 시작하는 OS 자작 입문
도서명 : 0부터 시작하는 OS 자작 입문
저자/출판사 : 우치다,코타, 에이콘출판
쪽수 : 968쪽
출판일 : 2022-06-30
ISBN : 9791161756592
정가 : 60000
0장. OS를 개인이 만들 수 있다고?
0.1 OS 만드는 방법
0.2 도대체 OS란 뭘까?
칼럼 0.1 OS 사양 및 POSIX
03 OS 자작 절차
0.4 OS 자작의 즐거움
0.5 OS 자작의 구성
1장. PC의 구조와 HelloWorld
1.1 HelloWorld
1.2 USB 메모리의 디바이스명을 찾는 방법
1.3 WSL 활용하기
1.4 에뮬레이터 활용하기
1.5 결국 무엇을 한 건가?
1.6 어쨌든 손을 움직여보자
1.7 UEFI BIOS를 통한 기동
1.8 OS를 만드는 도구
1.9 C 언어로 HelloWorld
칼럼 1.1 PE와 COFF와 ELF
2장. EDK II 입문과 메모리 맵
2.1 EDK II 입문
2.2 EDK II로 HelloWorld(osbook_day02a)
칼럼 2.1 인클루드
2.3 메인 메모리
2.4 메모리 맵
2.5 메모리 맵의 취득(osbook_day02b)
2.6 메모리 맵의 파일 보존
2.7 메모리 맵 확인
2.8 포인터 입문(1): 어드레스와 포인터
2.9 포인터와 화살표 연산자
칼럼 2.2 포인터의 포인터
3장. 화면표시 연습과 부트로더
3.1 QEMU 모니터
3.2 레지스터
3.3 최초의 커널(osbook_day03a)
칼럼 3.1 레드존
3.4 부트로더에서 픽셀 그리기(osbook_day03b)
3.5 커널에서 픽셀 그리기(osbook_day03c)
3.6 에러 처리를 해 보자(osbook_day03d)
칼럼 3.2 포인터 캐스트
3.7 포인터 입문(2): 포인터와 어셈블리 언어
4장. 픽셀 그리기와 make 입문
4.1 make 입문(osbook_day04a)
4.2 픽셀을 자유자재로 그리기(osbook_day04b)
칼럼 4.1 ABI
4.3 C++의 기능을 사용해 다시 작성하자(osbook_day04c)
칼럼 4.2 컴파일 오류는 친구
4.4 vtable
4.5 로더를 개량하자(osbook_day04d)
5장. 문자 표시와 콘솔 클래스
5.1 문자를 써보자(osbook_day05a)
칼럼 5.1 참조와 포인터
5.2 분할 컴파일(osbook_day05b)
5.3 폰트를 늘려보자(osbook_day05c)
5.4 문자열 그리기와 sprintf() (osbook_day05d)
5.5 콘솔 클래스(osbook_day05e)
5.6 printk() (osbook_day05f)
6장. 마우스 입력과 PCI
6.1 마우스 커서(osbook_day06a)
6.2 USB 호스트 드라이버
6.3 PCI 디바이스 탐색(osbook_day06b)
6.4 폴링으로 마우스 입력(osbook_day06c)
칼럼 6.1 로그함수
칼럼 6.2 static_cast〈uint64_t〉(0xf)의 수수께끼
7장. 인터럽트와 FIFO
7.1 인터럽트(osbook_day07a)
7.2 인터럽트 핸들러
7.3 인터럽트 벡터
7.4 인터럽트 디스크립터 설정
7.5 MSI 인터럽트
7.6 인터럽트 정리
7.7 인터럽트 핸들러의 고속화(osbook_day07b)
7.8 FIFO와 FILO
7.9 큐의 구현
7.10 큐를 사용해서 인터럽트 고속화
8장. 메모리 관리
8.1 메모리 관리
8.2 UEFI 메모리 맵(osbook_day08a)
8.3 데이터 구조의 이동(osbook_day08b)
8.4 스택 영역의 이동
8.5 세그멘테이션 설정
8.6 페이징 설정
8.7 메모리 관리에 도전(osbook_day08c)
9장. 중첩처리
9.1 중첩처리(osbook_day09a)
9.2 new 연산자
9.3 중첩처리의 원리
칼럼 9.1 스마트 포인터
9.4 중첩처리의 시간 측정(osbook_day09b)
9.5 중첩처리의 고속화(osbook_day09c)
9.6 스크롤 처리의 시간측정(osbook_day09d)
9.7 스크롤 처리의 고속화(osbook_day09e)
10장. 윈도우
10.1 마우스 개량(osbook_day10a)
10.2 최초의 윈도우(osbook_day10b)
10.3 고속 카운터(osbook_day10c)
10.4 깜박거림 해소(osbook_day10d)
10.5 백버퍼
10.6 윈도우의 드래그 이동(osbook_day10f)
10.7 윈도우만 드래그 이동(osbook_day10g)
11장. 타이머와 ACPI
11.1 소스코드 정리(osbook_day11a)
11.2 타이머 인터럽트(osbook_day11b)
11.3 세밀하게 시간을 측정하자(osbook_day11c)
칼럼 11.1 volatile의 필요성
11.4 여러 개의 타이머와 타임아웃 통지(osbook_day11d)
11.5 ACPI PM 타이머와 RSDP(osbook_day11e)
12장. 키 입력
12.1 FADT를 찾자(osbook_day12a)
12.2 ACPI PM 타이머를 사용하자(osbook_day12b)
12.3 USB 키보드 드라이버(osbook_day12c)
12.4 modifier 키(osbook_day12d)
12.5 텍스트 포커스(osbook_day12e)
12.6 커서(osbook_day12f)
13장. 멀티태스크(1)
13.1 멀티태스크와 콘텍스트
13.2 콘텍스트 전환에 도전(osbook_day13a)
칼럼 13.1 x86-64 아키텍처와 스택 얼라인먼트 제약
13.3 콘텍스트 스위치의 자동화(osbook_day13b)
13.4 멀티태스크의 검증(osbook_day13c)
13.5 태스크를 늘리자(osbook_day13d)
14장. 멀티태스크(2)
14.1 슬립해 보자(osbook_day14a)
14.2 이벤트가 도착하면 깨어난다(osbook_day14b)
14.3 성능측정
14.4 태스크에 우선순위를 부여한다(osbook_day14c)
14.5 유휴 태스크(osbook_day14d)
15장. 터미널
15.1 윈도우 그리기는 메인 스레드에서(osbook_day15a)
15.2 액티브 윈도우(osbook_day15b)
칼럼 15.1 타이틀에 std::string을 사용하는 이유
15.3 터미널 윈도우(osbook_day15c)
15.4 렌더링의 고속화(osbook_day15d)
16장. 커맨드
16.1 터미널에서 키 입력(osbook_day16a)
16.2 echo 커맨드(osbook_day16b)
16.3 clear 커맨드(osbook_day16c)
16.4 lspci 커맨드(osbook_day16d)
16.5 커맨드 히스토리(osbook_day16e)
16.6 절전(osbook_day16f)
17장. 파일 시스템
17.1 파일과 파일 시스템
17.2 BIOS 파라미터 블록
17.3 디렉터리 엔트리
17.4 볼륨을 읽어내자(osbook_day17a)
칼럼 17.1 볼륨 읽기는 16MiB로 충분할까?
17.5 ls 커맨드(osbook_day17b)
18장. 애플리케이션
18.1 파일 할당 테이블(osbook_day18a)
18.2 최초의 애플리케이션(osbook_day18b)
18.3 C++로 계산기를 만들자(osbook_day18c)
18.4 표준 라이브러리(osbook_day18d)
19장. 페이징
19.1 실행 파일과 메모리 어드레스
19.2 어드레스 변환
칼럼 19.1 사실상의 어드레스
19.3 애플리케이션의 로드와 실행(osbook_day19a)
19.4 가상 어드레스와 계층 페이징
19.5 애플리케이션을 후반부로 이동시키자
19.6 애플리케이션 로드
19.7 계층 페이징 구조의 설정
19.8 계층 페이징 구조의 정돈
칼럼 19.2 구조화된 바인딩
20장. 시스템 콜
20.1 애플리케이션이 OS의 기능을 사용하는 방법(osbook_day20a)
20.2 OS를 지키자(1)(osbook_day20b)
20.3 TSS를 설정하자(osbook_day20c)
20.4 버그 발견을 도와주자(osbook_day20d)
20.5 시스템 콜(osbook_day20e)
20.6 시스템 콜의 등록처리
20.7 시스템 콜의 본체
21장. 애플리케이션에 윈도우를
21.1 IST를 설정하자(osbook_day21a)
21.2 문자열 표시 시스템 콜(osbook_day21b)
21.3 시스템 콜 작성
21.4 write()의 작성
21.5 종료 시스템 콜(osbook_day21c)
21.6 스택 포인터의 복원
21.7 코드 정리(osbook_day21d)
21.8 윈도우를 연다(osbook_day21e)
21.9 윈도우에 문자를 쓴다(osbook_day21f)
22장. 그래픽과 이벤트(1)
22.1 exit()를 사용한다(osbook_day22a)
22.2 점을 그린다(osbook_day22b)
22.3 타이머 값의 취득(osbook_day22c)
22.4 윈도우 렌더링의 최적화(osbook_day22d)
22.5 선을 긋는다(osbook_day22e)
22.6 윈도우 닫기(osbook_day22f)
22.7 키 입력을 기다린다(osbook_day22g)
23장. 그래픽과 이벤트(2)
23.1 마우스 입력(osbook_day23a)
23.2 그림 그리기 소프트웨어(osbook_day23b)
23.3 타이머 커맨드(osbook_day23c)
23.4 애니메이션(osbook_day23d)
23.5 블록 격파 게임(osbook_day23e)
24장. 여러 개의 터미널
24.1 터미널을 늘린다(osbook_day24a)
24.2 커서 깜박임을 스스로(osbook_day24b)
24.3 여러 애플리케이션 동시 실행(osbook_day24c)
24.4 윈도우의 겹침 버그 수정(osbook_day24d)
24.5 터미널 없이 애플리케이션 실행(osbook_day24e)
24.6 OS를 멈추게 하는 애플리케이션(osbook_day24f)
24.7 OS를 지키자(2)(osbook_day24g)
25장. 애플리케이션에서 파일 읽기
25.1 디렉터리 대응(osbook_day25a)
25.2 파일 읽기(osbook_day25b)
25.3 정규표현 검색(osbook_day25c)
26장. 애플리케이션에서 파일 쓰기
26.1 표준입력(osbook_day26a)
26.2 파일 디스크립터의 추상화
26.3 키보드 입력을 받다
26.4 EOF와 EOT(osbook_day26b)
26.5 파일 쓰기(1)(osbook_day26c)
26.6 파일 쓰기(2)(osbook_day26d)
27장. 애플리케이션의 메모리 관리
27.1 디맨드 페이징(osbook_day27a)
27.2 메모리 맵 파일(osbook_day27b)
27.3 메모리 사용량을 측정하자(osbook_day27c)
27.4 카피 온 라이트(osbook_day27d)
28장. 일본어 표시와 리다이렉트
28.1 일본어와 문자코드(osbook_day28a)
28.2 일본어 폰트(osbook_day28b)
28.3 리다이렉트(osbook_day28c)
29장. 애플리케이션 간 통신
29.1 종료코드(osbook_day29a)
29.2 파이프(osbook_day29b)
29.3 커맨드라인의 해석과 태스크의 시작
29.4 파이프 처리의 본체 PipeDescriptor
29.5 터미널의 시작과 종료
29.6 태스크 종료
29.7 sort 커맨드(osbook_day29c)
29.8 터미널의 버그 수정(osbook_day29d)
29.9 공유 메모리
30장. 애플리케이션 더 살펴보기
30.1 애플리케이션에 경로를 만든다
30.2 more 커맨드
30.3 cat을 입력에 대응시킨다
30.4 닫기 버튼
30.5 텍스트 뷰어
30.6 이미지 뷰어
31장. 앞으로의 길
부록
A. 개발환경의 인스톨
B. MikanOS의 입수
C. DK II의 파일 설명
D. C++ 템플릿
E. iPXE
F. ASCII 코드표
도서명 : 0부터 시작하는 OS 자작 입문
저자/출판사 : 우치다,코타, 에이콘출판
쪽수 : 968쪽
출판일 : 2022-06-30
ISBN : 9791161756592
정가 : 60000
0장. OS를 개인이 만들 수 있다고?
0.1 OS 만드는 방법
0.2 도대체 OS란 뭘까?
칼럼 0.1 OS 사양 및 POSIX
03 OS 자작 절차
0.4 OS 자작의 즐거움
0.5 OS 자작의 구성
1장. PC의 구조와 HelloWorld
1.1 HelloWorld
1.2 USB 메모리의 디바이스명을 찾는 방법
1.3 WSL 활용하기
1.4 에뮬레이터 활용하기
1.5 결국 무엇을 한 건가?
1.6 어쨌든 손을 움직여보자
1.7 UEFI BIOS를 통한 기동
1.8 OS를 만드는 도구
1.9 C 언어로 HelloWorld
칼럼 1.1 PE와 COFF와 ELF
2장. EDK II 입문과 메모리 맵
2.1 EDK II 입문
2.2 EDK II로 HelloWorld(osbook_day02a)
칼럼 2.1 인클루드
2.3 메인 메모리
2.4 메모리 맵
2.5 메모리 맵의 취득(osbook_day02b)
2.6 메모리 맵의 파일 보존
2.7 메모리 맵 확인
2.8 포인터 입문(1): 어드레스와 포인터
2.9 포인터와 화살표 연산자
칼럼 2.2 포인터의 포인터
3장. 화면표시 연습과 부트로더
3.1 QEMU 모니터
3.2 레지스터
3.3 최초의 커널(osbook_day03a)
칼럼 3.1 레드존
3.4 부트로더에서 픽셀 그리기(osbook_day03b)
3.5 커널에서 픽셀 그리기(osbook_day03c)
3.6 에러 처리를 해 보자(osbook_day03d)
칼럼 3.2 포인터 캐스트
3.7 포인터 입문(2): 포인터와 어셈블리 언어
4장. 픽셀 그리기와 make 입문
4.1 make 입문(osbook_day04a)
4.2 픽셀을 자유자재로 그리기(osbook_day04b)
칼럼 4.1 ABI
4.3 C++의 기능을 사용해 다시 작성하자(osbook_day04c)
칼럼 4.2 컴파일 오류는 친구
4.4 vtable
4.5 로더를 개량하자(osbook_day04d)
5장. 문자 표시와 콘솔 클래스
5.1 문자를 써보자(osbook_day05a)
칼럼 5.1 참조와 포인터
5.2 분할 컴파일(osbook_day05b)
5.3 폰트를 늘려보자(osbook_day05c)
5.4 문자열 그리기와 sprintf() (osbook_day05d)
5.5 콘솔 클래스(osbook_day05e)
5.6 printk() (osbook_day05f)
6장. 마우스 입력과 PCI
6.1 마우스 커서(osbook_day06a)
6.2 USB 호스트 드라이버
6.3 PCI 디바이스 탐색(osbook_day06b)
6.4 폴링으로 마우스 입력(osbook_day06c)
칼럼 6.1 로그함수
칼럼 6.2 static_cast〈uint64_t〉(0xf)의 수수께끼
7장. 인터럽트와 FIFO
7.1 인터럽트(osbook_day07a)
7.2 인터럽트 핸들러
7.3 인터럽트 벡터
7.4 인터럽트 디스크립터 설정
7.5 MSI 인터럽트
7.6 인터럽트 정리
7.7 인터럽트 핸들러의 고속화(osbook_day07b)
7.8 FIFO와 FILO
7.9 큐의 구현
7.10 큐를 사용해서 인터럽트 고속화
8장. 메모리 관리
8.1 메모리 관리
8.2 UEFI 메모리 맵(osbook_day08a)
8.3 데이터 구조의 이동(osbook_day08b)
8.4 스택 영역의 이동
8.5 세그멘테이션 설정
8.6 페이징 설정
8.7 메모리 관리에 도전(osbook_day08c)
9장. 중첩처리
9.1 중첩처리(osbook_day09a)
9.2 new 연산자
9.3 중첩처리의 원리
칼럼 9.1 스마트 포인터
9.4 중첩처리의 시간 측정(osbook_day09b)
9.5 중첩처리의 고속화(osbook_day09c)
9.6 스크롤 처리의 시간측정(osbook_day09d)
9.7 스크롤 처리의 고속화(osbook_day09e)
10장. 윈도우
10.1 마우스 개량(osbook_day10a)
10.2 최초의 윈도우(osbook_day10b)
10.3 고속 카운터(osbook_day10c)
10.4 깜박거림 해소(osbook_day10d)
10.5 백버퍼
10.6 윈도우의 드래그 이동(osbook_day10f)
10.7 윈도우만 드래그 이동(osbook_day10g)
11장. 타이머와 ACPI
11.1 소스코드 정리(osbook_day11a)
11.2 타이머 인터럽트(osbook_day11b)
11.3 세밀하게 시간을 측정하자(osbook_day11c)
칼럼 11.1 volatile의 필요성
11.4 여러 개의 타이머와 타임아웃 통지(osbook_day11d)
11.5 ACPI PM 타이머와 RSDP(osbook_day11e)
12장. 키 입력
12.1 FADT를 찾자(osbook_day12a)
12.2 ACPI PM 타이머를 사용하자(osbook_day12b)
12.3 USB 키보드 드라이버(osbook_day12c)
12.4 modifier 키(osbook_day12d)
12.5 텍스트 포커스(osbook_day12e)
12.6 커서(osbook_day12f)
13장. 멀티태스크(1)
13.1 멀티태스크와 콘텍스트
13.2 콘텍스트 전환에 도전(osbook_day13a)
칼럼 13.1 x86-64 아키텍처와 스택 얼라인먼트 제약
13.3 콘텍스트 스위치의 자동화(osbook_day13b)
13.4 멀티태스크의 검증(osbook_day13c)
13.5 태스크를 늘리자(osbook_day13d)
14장. 멀티태스크(2)
14.1 슬립해 보자(osbook_day14a)
14.2 이벤트가 도착하면 깨어난다(osbook_day14b)
14.3 성능측정
14.4 태스크에 우선순위를 부여한다(osbook_day14c)
14.5 유휴 태스크(osbook_day14d)
15장. 터미널
15.1 윈도우 그리기는 메인 스레드에서(osbook_day15a)
15.2 액티브 윈도우(osbook_day15b)
칼럼 15.1 타이틀에 std::string을 사용하는 이유
15.3 터미널 윈도우(osbook_day15c)
15.4 렌더링의 고속화(osbook_day15d)
16장. 커맨드
16.1 터미널에서 키 입력(osbook_day16a)
16.2 echo 커맨드(osbook_day16b)
16.3 clear 커맨드(osbook_day16c)
16.4 lspci 커맨드(osbook_day16d)
16.5 커맨드 히스토리(osbook_day16e)
16.6 절전(osbook_day16f)
17장. 파일 시스템
17.1 파일과 파일 시스템
17.2 BIOS 파라미터 블록
17.3 디렉터리 엔트리
17.4 볼륨을 읽어내자(osbook_day17a)
칼럼 17.1 볼륨 읽기는 16MiB로 충분할까?
17.5 ls 커맨드(osbook_day17b)
18장. 애플리케이션
18.1 파일 할당 테이블(osbook_day18a)
18.2 최초의 애플리케이션(osbook_day18b)
18.3 C++로 계산기를 만들자(osbook_day18c)
18.4 표준 라이브러리(osbook_day18d)
19장. 페이징
19.1 실행 파일과 메모리 어드레스
19.2 어드레스 변환
칼럼 19.1 사실상의 어드레스
19.3 애플리케이션의 로드와 실행(osbook_day19a)
19.4 가상 어드레스와 계층 페이징
19.5 애플리케이션을 후반부로 이동시키자
19.6 애플리케이션 로드
19.7 계층 페이징 구조의 설정
19.8 계층 페이징 구조의 정돈
칼럼 19.2 구조화된 바인딩
20장. 시스템 콜
20.1 애플리케이션이 OS의 기능을 사용하는 방법(osbook_day20a)
20.2 OS를 지키자(1)(osbook_day20b)
20.3 TSS를 설정하자(osbook_day20c)
20.4 버그 발견을 도와주자(osbook_day20d)
20.5 시스템 콜(osbook_day20e)
20.6 시스템 콜의 등록처리
20.7 시스템 콜의 본체
21장. 애플리케이션에 윈도우를
21.1 IST를 설정하자(osbook_day21a)
21.2 문자열 표시 시스템 콜(osbook_day21b)
21.3 시스템 콜 작성
21.4 write()의 작성
21.5 종료 시스템 콜(osbook_day21c)
21.6 스택 포인터의 복원
21.7 코드 정리(osbook_day21d)
21.8 윈도우를 연다(osbook_day21e)
21.9 윈도우에 문자를 쓴다(osbook_day21f)
22장. 그래픽과 이벤트(1)
22.1 exit()를 사용한다(osbook_day22a)
22.2 점을 그린다(osbook_day22b)
22.3 타이머 값의 취득(osbook_day22c)
22.4 윈도우 렌더링의 최적화(osbook_day22d)
22.5 선을 긋는다(osbook_day22e)
22.6 윈도우 닫기(osbook_day22f)
22.7 키 입력을 기다린다(osbook_day22g)
23장. 그래픽과 이벤트(2)
23.1 마우스 입력(osbook_day23a)
23.2 그림 그리기 소프트웨어(osbook_day23b)
23.3 타이머 커맨드(osbook_day23c)
23.4 애니메이션(osbook_day23d)
23.5 블록 격파 게임(osbook_day23e)
24장. 여러 개의 터미널
24.1 터미널을 늘린다(osbook_day24a)
24.2 커서 깜박임을 스스로(osbook_day24b)
24.3 여러 애플리케이션 동시 실행(osbook_day24c)
24.4 윈도우의 겹침 버그 수정(osbook_day24d)
24.5 터미널 없이 애플리케이션 실행(osbook_day24e)
24.6 OS를 멈추게 하는 애플리케이션(osbook_day24f)
24.7 OS를 지키자(2)(osbook_day24g)
25장. 애플리케이션에서 파일 읽기
25.1 디렉터리 대응(osbook_day25a)
25.2 파일 읽기(osbook_day25b)
25.3 정규표현 검색(osbook_day25c)
26장. 애플리케이션에서 파일 쓰기
26.1 표준입력(osbook_day26a)
26.2 파일 디스크립터의 추상화
26.3 키보드 입력을 받다
26.4 EOF와 EOT(osbook_day26b)
26.5 파일 쓰기(1)(osbook_day26c)
26.6 파일 쓰기(2)(osbook_day26d)
27장. 애플리케이션의 메모리 관리
27.1 디맨드 페이징(osbook_day27a)
27.2 메모리 맵 파일(osbook_day27b)
27.3 메모리 사용량을 측정하자(osbook_day27c)
27.4 카피 온 라이트(osbook_day27d)
28장. 일본어 표시와 리다이렉트
28.1 일본어와 문자코드(osbook_day28a)
28.2 일본어 폰트(osbook_day28b)
28.3 리다이렉트(osbook_day28c)
29장. 애플리케이션 간 통신
29.1 종료코드(osbook_day29a)
29.2 파이프(osbook_day29b)
29.3 커맨드라인의 해석과 태스크의 시작
29.4 파이프 처리의 본체 PipeDescriptor
29.5 터미널의 시작과 종료
29.6 태스크 종료
29.7 sort 커맨드(osbook_day29c)
29.8 터미널의 버그 수정(osbook_day29d)
29.9 공유 메모리
30장. 애플리케이션 더 살펴보기
30.1 애플리케이션에 경로를 만든다
30.2 more 커맨드
30.3 cat을 입력에 대응시킨다
30.4 닫기 버튼
30.5 텍스트 뷰어
30.6 이미지 뷰어
31장. 앞으로의 길
부록
A. 개발환경의 인스톨
B. MikanOS의 입수
C. DK II의 파일 설명
D. C++ 템플릿
E. iPXE
F. ASCII 코드표
댓글목록0