전체상품목록 바로가기

본문 바로가기


닫기

0부터 시작하는 OS 자작 입문

해외배송 가능상품
기본 정보
상품명 0부터 시작하는 OS 자작 입문
정가 ₩60,000
판매가 ₩54,000
배송비 무료
출판사 에이콘출판
ISBN 9791161756592
출간일 20220630
구매방법

배송주기

개인결제창을 통한 결제 시 네이버 마일리지 적립 및 사용이 가능합니다.

상품 옵션
옵션선택

(최소주문수량 1개 이상 / 최대주문수량 0개 이하)

사이즈 가이드

수량을 선택해주세요.

위 옵션선택 박스를 선택하시면 아래에 상품이 추가됩니다.

상품 목록
상품명 상품수 가격
0부터 시작하는 OS 자작 입문 수량증가 수량감소 54000 (  0)
총 상품금액0

할인가가 적용된 최종 결제예정금액은 주문 시 확인할 수 있습니다.

최근 본 상품

최근본 상품 내역이 없습니다.

  • 이전
  • 다음

판매사정보

이벤트

구매하기
 

책소개

OS 세계의 모든 것을 만들어보자!
‘MikanOS’를 직접 제작하며 OS의 구조를 배운다.


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

목차

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 코드표

저자소개

우치다 코타 , 박주항

출판사리뷰

이 책에서 다루는 내용

◆ C++로 설명
◆ UEFI BIOS 시작
◆ Intel 64 모드
◆ USB 3.0 드라이버
◆ 페이징을 이용한 메모리 관리
◆ 선점형 멀티태스크
◆ 윈도우 시스템
◆ 파일 시스템

이 책의 대상 독자

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

지은이의 말

이 책은 OS를 직접 만드는 책이다. 30장에 걸친 학습을 통해 간단한 기능을 가진 OS인 ‘MikanOS’를 제작한다. OS란 오퍼레이팅 시스템(Operating System)의 줄임말로 컴퓨터에서 기본이 되는 소프트웨어를 말하며, 윈도우(Windows), macOS, 리눅스(Linux) 등이 유명하다. OS는 인간이 컴퓨터를 사용할 때 중요한 역할을 한다. 웹 브라우저나 워드프로세서 등의 애플리케이션이 공통으로 이용하는 기능을 제공해 애플리케이션 개발을 지원하고, 계산을 위한 자원을 분배해 복수의 애플리케이션을 동시에 사용할 수 있게 한다. 또한 전체적으로 통일된 조작방법을 제공해 컴퓨터를 정교하면서도 동시에 사용하기 쉽게 해준다.

타인이 만든 OS상에서 움직이는 애플리케이션이 아닌, 기존 OS의 힘을 빌리지 않고 ‘직접 만드는 OS’를 제작하는 것이 이 책의 목적이다. 다른 OS의 힘을 빌리지 않는다는 것은, 마우스 조작 시 화면의 마우스 포인터를 이동시키는 처리를 직접 하고, 키보드의 Enter 키를 눌렀을 때 커맨드를 실행하는 처리도 직접 작성하는 것이다. PC에 탑재된 메모리의 양을 파악하고 관리하는 기능도 직접 만들어볼 수 있다. 일반적인 모든 처리를 스스로 구현하는 것이 OS를 직접 제작한다는 것이다. 직접 만들다니 가슴이 두근거리지 않는가?

OS 제작이라는 것은 언뜻 보면 매우 쓸데없는 일처럼 보인다. 이미 존재하는 고기능 OS를 모방하려고 만드는 것이니 말이다. 하지만 OS 제작은 우리에게 귀중한 경험을 제공한다. 컴퓨터 시스템이 어떻게 동작하는지 탐구하는 것은 지적 호기심을 자극한다. 실용적인 면에서도 PC 하드웨어나 OS 처리 내용과 관련된 지식은 소프트웨어 엔지니어의 업무 폭을 넓혀준다. OS 동작에 눈길이 향하면 효율적으로 동작하는 앱의 제작 방법을 탐구할 수 있게 된다. 또는 시스템의 장애 원인 조사에 있어서도 OS를 디버깅한 경험을 바탕으로 깊은 곳까지 원인분석이 가능할 수 있다. 만일 리눅스 커널의 코드를 읽을 필요가 생겼을 때, OS를 만든 경험의 유무에 따라 리눅스 커널 코드를 파악하는 능력은 현격히 차이가 날 것이다.

전문용어로 MikanOS의 특징을 소개하면 MikanOS는 UEFI BIOS로부터 부팅을 시작해 64비트 모드로 동작하고, 선점형 멀티태스킹(preemptive multitasking), 윈도우 시스템, 페이징을 통한 메모리 관리, 시스템 콜 등의 기능을 갖춘 OS이다. 이런 전문용어의 의미를 지금 몰라도 문제는 없다. 실제 OS를 만들어가면서 의미를 설명하는 것이 이 책의 역할이기 때문이다.

옮긴이의 말

2000년대 초중반에는 많은 개발자가 자작 OS 개발에 관심을 갖고 있었고, 한국에서도 몇 권의 운영체제 개발 서적이 출간된 적이 있었다. 하지만 리눅스가 OS 세계를 평정하면서 그 열기는 사그라들었으며 한국의 경우에는 자작 OS를 개발하는 시도 자체가 사라졌다. 마치 언리얼 엔진이나 유니티가 3D 엔진 시장을 석권해 대부분의 자작 3D 엔진을 사장시킨 것처럼 프로그래밍 분야에서 자작 OS 개발이라는 주제는 사라지고 만 것이다.

더 이상 자작 OS를 개발하지 않는 이유는 너무나도 단순 명료하다. 개인이 아무리 잘 만든다 하더라도 상용 OS를 뛰어넘기가 불가능하기 때문이다. 다르게 말하자면 돈이 되지 않는다는 뜻이다. 학습해야 하는 정보가 너무나 넘쳐나는 작금의 시대에 있어 불필요한 부분에 시간을 낭비하는 것은 자제할 필요가 있다.

그러나 프로그래밍에 있어 하드웨어 분야를 제외한 모든 소프트웨어를 자신의 손으로 제어할 수 있다는 점은 아주 매력적으로 다가온다. 단순히 리눅스 커널 기반의 코드를 조금 수정하고 GUI로 포장해 독자적인 OS를 개발했다고 하면 그것 자체로도 큰 의미를 가질 수는 있겠지만, 비록 완벽하지 않고 기능이 부족하더라도 모든 코드를 직접 작성해 보는 작업은 그 나름대로의 가치가 있다. 애초에 기존의 OS를 개량하는 것과 자작 OS를 개발하는 것은 프로그래밍 분야가 다르다.

비록 자작 OS 개발이 당장의 실무에 직접적인 도움을 주지는 않겠지만 스스로 자신만의 OS를 개발할 수 있다면 그것은 적어도 어떤 프로그래밍 분야에서도 자신이 살아남을 수 있는 역량을 갖고 있다는 증표가 될 것이다. 그런 의미에서 이 책에서 소개하는 MikanOS는 자작 OS를 개발하는데 필요한 기초를 제공하므로 독자들에게 큰 도움이 될 것이다.
 

상품결제정보

고액결제의 경우 안전을 위해 카드사에서 확인전화를 드릴 수도 있습니다. 확인과정에서 도난 카드의 사용이나 타인 명의의 주문등 정상적인 주문이 아니라고 판단될 경우 임의로 주문을 보류 또는 취소할 수 있습니다.  

무통장 입금은 상품 구매 대금은 PC뱅킹, 인터넷뱅킹, 텔레뱅킹 혹은 가까운 은행에서 직접 입금하시면 됩니다.  
주문시 입력한 입금자명과 실제입금자의 성명이 반드시 일치하여야 하며, 7일 이내로 입금을 하셔야 하며 입금되지 않은 주문은 자동취소 됩니다.

배송정보

배송 방법 : 택배
배송 지역 : 전국지역
배송 비용 : 무료
배송 기간 : 3일 ~ 7일
배송 안내 : - 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.
고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.

교환 및 반품정보

교환 및 반품 주소
 - [07271] 서울특별시 영등포구 양산로 57-5 (양평동3가) 양평동 이노플렉스 B101~103
 
교환 및 반품이 가능한 경우
 - 계약내용에 관한 서면을 받은 날부터 7일. 단, 그 서면을 받은 때보다 재화등의 공급이 늦게 이루어진 경우에는 재화등을 공급받거나 재화등의 공급이 시작된 날부터 7일 이내
  - 공급받으신 상품 및 용역의 내용이 표시.광고 내용과 다르거나 계약내용과 다르게 이행된 때에는 당해 재화 등을 공급받은 날 부터 3월이내, 그사실을 알게 된 날 또는 알 수 있었던 날부터 30일이내
 
교환 및 반품이 불가능한 경우
 - 이용자에게 책임 있는 사유로 재화 등이 멸실 또는 훼손된 경우(다만, 재화 등의 내용을 확인하기 위하여 포장 등을 훼손한 경우에는 청약철회를 할 수 있습니다)
  - 이용자의 사용 또는 일부 소비에 의하여 재화 등의 가치가 현저히 감소한 경우
  - 시간의 경과에 의하여 재판매가 곤란할 정도로 재화등의 가치가 현저히 감소한 경우
  - 복제가 가능한 재화등의 포장을 훼손한 경우
  - 개별 주문 생산되는 재화 등 청약철회시 판매자에게 회복할 수 없는 피해가 예상되어 소비자의 사전 동의를 얻은 경우
  - 디지털 콘텐츠의 제공이 개시된 경우, (다만, 가분적 용역 또는 가분적 디지털콘텐츠로 구성된 계약의 경우 제공이 개시되지 아니한 부분은 청약철회를 할 수 있습니다.)
 
※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
 (색상 교환, 사이즈 교환 등 포함)

서비스문의



WORLD SHIPPING

PLEASE SELECT THE DESTINATION COUNTRY AND LANGUAGE :

GO
close
     

    고객만족센터

    은행계좌안내

    • 국민은행 493601-01-371416
    • 예금주 주식회사 가람로직스


    앗! 화면폭이 너무 좁아요.
    브라우져의 사이즈를 더 늘여주세요~

    좁은 화면으로 보실 때는 모바일 기기에서
    최적화된 화면으로 쇼핑을 즐기실 수 있어요~