0부터 시작하는 OS 자작 입문 (내가 만드는 OS 세계의 모든 것)

0부터 시작하는 OS 자작 입문 (내가 만드는 OS 세계의 모든 것)

$62.21
Description
OS 세계의 모든 것을 만들어보자!
‘MikanOS’를 직접 제작하며 OS의 구조를 배운다.
OS 구동부터 애플리케이션 실행까지 C++로 OS를 제작하는 전반적인 방법을 다룬다. 단계별로 안내하고 있어 OS 개발 초보자도 따라 하며 진행할 수 있다. 용어의 의미도 함께 설명돼 있다.
이 책은 UEFI BIOS로 시작해서 Intel 64 모드로 동작하는 오리지널 OS인 MikanOS를 구현하는 것을 목표로 한다. MikanOS는 페이징을 사용해 메모리 관리를 수행하고 USB 3.0 드라이버를 탑재한 윈도우 시스템, 선점형 멀티태스크, 파일 시스템을 가진 OS다. 이 책을 통해 OS 제작을 경험해볼 수 있을 것이다.
저자

우치다코타

内田公太
초등학생시절에PIC마이크로컴퓨터의어셈블리언어와만나프로그래머의길로들어섰다.고등학교시절에는『OS구조와원리』(한빛미디어,2007)의교정에참여했다.도쿄공업대학교의계산공학전공을수료한후㈜사이보우즈(CybozuInc.)에서인프라계열의프로그래밍에종사했으며,도쿄공업대학교에서소프트웨어계열의수업을담당했다.2017년부터2020년에걸쳐보안캠프전국대회에서OS개발계열의세미나를맡아진행했으며,2020년에는사이보우즈랩주식회사로전직해OS나언어처리계열의연구개발을하고있다.저서로『自作エミュレータで学ぶx86アーキテクチャ(자작에뮬레이터로배우는x86아키텍처)』(マイナビ出版,2015)가있다.

목차

0장.OS를개인이만들수있다고?

0.1OS만드는방법
0.2도대체OS란뭘까?
칼럼0.1OS사양및POSIX
03OS자작절차
0.4OS자작의즐거움
0.5OS자작의구성

1장.PC의구조와HelloWorld

1.1HelloWorld
1.2USB메모리의디바이스명을찾는방법
1.3WSL활용하기
1.4에뮬레이터활용하기
1.5결국무엇을한건가?
1.6어쨌든손을움직여보자
1.7UEFIBIOS를통한기동
1.8OS를만드는도구
1.9C언어로HelloWorld
칼럼1.1PE와COFF와ELF

2장.EDKII입문과메모리맵

2.1EDKII입문
2.2EDKII로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.1QEMU모니터
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.1make입문(osbook_day04a)
4.2픽셀을자유자재로그리기(osbook_day04b)
칼럼4.1ABI
4.3C++의기능을사용해다시작성하자(osbook_day04c)
칼럼4.2컴파일오류는친구
4.4vtable
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.6printk()(osbook_day05f)

6장.마우스입력과PCI

6.1마우스커서(osbook_day06a)
6.2USB호스트드라이버
6.3PCI디바이스탐색(osbook_day06b)
6.4폴링으로마우스입력(osbook_day06c)
칼럼6.1로그함수
칼럼6.2static_cast〈uint64_t〉(0xf)의수수께끼

7장.인터럽트와FIFO

7.1인터럽트(osbook_day07a)
7.2인터럽트핸들러
7.3인터럽트벡터
7.4인터럽트디스크립터설정
7.5MSI인터럽트
7.6인터럽트정리
7.7인터럽트핸들러의고속화(osbook_day07b)
7.8FIFO와FILO
7.9큐의구현
7.10큐를사용해서인터럽트고속화

8장.메모리관리

8.1메모리관리
8.2UEFI메모리맵(osbook_day08a)
8.3데이터구조의이동(osbook_day08b)
8.4스택영역의이동
8.5세그멘테이션설정
8.6페이징설정
8.7메모리관리에도전(osbook_day08c)

9장.중첩처리

9.1중첩처리(osbook_day09a)
9.2new연산자
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.1volatile의필요성
11.4여러개의타이머와타임아웃통지(osbook_day11d)
11.5ACPIPM타이머와RSDP(osbook_day11e)

12장.키입력

12.1FADT를찾자(osbook_day12a)
12.2ACPIPM타이머를사용하자(osbook_day12b)
12.3USB키보드드라이버(osbook_day12c)
12.4modifier키(osbook_day12d)
12.5텍스트포커스(osbook_day12e)
12.6커서(osbook_day12f)

13장.멀티태스크(1)

13.1멀티태스크와콘텍스트
13.2콘텍스트전환에도전(osbook_day13a)
칼럼13.1x86-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.2echo커맨드(osbook_day16b)
16.3clear커맨드(osbook_day16c)
16.4lspci커맨드(osbook_day16d)
16.5커맨드히스토리(osbook_day16e)
16.6절전(osbook_day16f)

17장.파일시스템

17.1파일과파일시스템
17.2BIOS파라미터블록
17.3디렉터리엔트리
17.4볼륨을읽어내자(osbook_day17a)
칼럼17.1볼륨읽기는16MiB로충분할까?
17.5ls커맨드(osbook_day17b)

18장.애플리케이션

18.1파일할당테이블(osbook_day18a)
18.2최초의애플리케이션(osbook_day18b)
18.3C++로계산기를만들자(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.2OS를지키자(1)(osbook_day20b)
20.3TSS를설정하자(osbook_day20c)
20.4버그발견을도와주자(osbook_day20d)
20.5시스템콜(osbook_day20e)
20.6시스템콜의등록처리
20.7시스템콜의본체

21장.애플리케이션에윈도우를

21.1IST를설정하자(osbook_day21a)
21.2문자열표시시스템콜(osbook_day21b)
21.3시스템콜작성
21.4write()의작성
21.5종료시스템콜(osbook_day21c)
21.6스택포인터의복원
21.7코드정리(osbook_day21d)
21.8윈도우를연다(osbook_day21e)
21.9윈도우에문자를쓴다(osbook_day21f)

22장.그래픽과이벤트(1)

22.1exit()를사용한다(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.6OS를멈추게하는애플리케이션(osbook_day24f)
24.7OS를지키자(2)(osbook_day24g)

25장.애플리케이션

출판사 서평

◈이책에서다루는내용◈

◆C++로설명
◆UEFIBIOS시작
◆Intel64모드
◆USB3.0드라이버
◆페이징을이용한메모리관리
◆선점형멀티태스크
◆윈도우시스템
◆파일시스템

◈이책의대상독자◈

간단한프로그램을작성해본경험이있는사람을대상으로작성된책이다.수백줄정도의프로그래밍을한적이있다면걱정없이읽어나갈수있지만,프로그램을조금이라도작성한적이없다면수월하게진행하기에는어려울수있다.