책 소개
2022년 대한민국학술원 우수학술도서 선정도서
요약
『C++로 나만의 운영체제 만들기』의 후속편인 이 책은 저자가 직접 제작한 YUZA OS라는 OS를 파헤쳐 보면서 운영체제의 구조와 원리를 설명한다.
리눅스 같은 기존의 운영체제 개발환경에서 벗어나 윈도우 운영체제에서 OS를 개발하며 비주얼 스튜디오 2019와 C++로 운영체제 개발 방법을 설명하는 것이 특징이다. 아울러 저자가 게임 개발자 출신답게 다양한 게임을 자신만의 OS에서 쉽게 제작할 수 있는 방법을 설명하는 것에 심혈을 기울였다. 컴퓨터를 제어하는 모든 소스코드를 장악하고 싶은 개발자에게 큰 도움이 될 책이다.
이 책에서 다루는 내용
■ 리눅스 기반이 아닌 비주얼 스튜디오 2019 및 상위 버전으로 커널 개발
■ YUZA OS라는 구체적인 결과물로 운영체제 개념 설명
■ 듀얼 시스템을 통한 최강의 디버깅 시스템 지원
■ 표준 프로그래밍 인터페이스를 통한 다양한 앱 및 라이브러리의 포팅 방법
■ 추상화 언어의 마지노선인 C++ 11로 운영체제 개발
■ 자신만의 응용 앱을 손쉽게 구현
■ 윈도우 시스템 프로그래밍 노하우를 운영체제 개발에 활용
■ 스크립트 언어를 활용한 운영체제 개발 방법론
■ SDL 라이브러리를 활용한 게임 제작 방법
이 책의 대상 독자
■ OS를 직접 개발해 보고 싶은 일반 개발자
■ 운영체체론을 공부하는 학생
■ 이론보다 구체적인 결과물로 학습을 원하는 개발자
■ 심화된 윈도우 시스템 프로그래밍을 공부하려는 프로그래머
■ C++ 언어의 내부 구현을 이해하고 싶은 분
■ 직접 만든 OS에 자신만의 응용 앱을 손쉽게 개발하고 싶은 분
목차
목차
- 0장. 들어가며
- 1 YUZA OS
- 2 개발 전략
- 2.1 개발 규모
- 2.2 듀얼 플랫폼
- 2.3 차별화
- 2.4 행사비용 최소화
- 2.5 조건 최소화
- 3 정리
- 4 대상독자
- 5 책의 구성
- 1장. 개발 환경 갖추기
- 1 비주얼 스튜디오 2019
- 2 VirtualBox
- 3 ImDisk
- 4 DLL Export Viewer
- 5 CMAKE-GUI
- 6 QEMU
- 7 기타
- 7.1 PE Explorer
- 7.2 StarUML
- 7.3 HxD
- 7.4 PEView
- 7.5 WSL / WSL2
- 7.6 MSYS2
- 7.7 DJGPP
- 7.8 TortoiseSVN
- 7.9 GIT 클라이언트
- 8 정리
- 2장. 비주얼 스튜디오
- 1 단축키
- 2 디버깅
- 3 프로젝트 환경설정
- 3.1 일반
- 3.2 디버깅
- 3.3 C/C++
- 3.4 링커
- 3.5 빌드 이벤트
- 3.6 사용자 지정 빌드 단계.
- 4 기타
- 4.1 프로젝트 구성 관리자
- 4.2 빌드 종속성
- 5 정리
- 3장. 운영체제 이론
- 1 운영체제 유형
- 1.1 모놀리식 커널
- 1.2 마이크로 커널
- 1.3 하이브리드 커널
- 1.4 엑소 커널
- 1.5 YUZA OS
- 1.6 정리
- 2 운영체제 개발 요소
- 2.1 아키텍처
- 2.2 디바이스
- 2.3 파일 시스템
- 2.4 GUI 시스템
- 2.5 커널 서비스
- 2.6 동기화 인터페이스
- 2.7 가상 주소 시스템
- 2.8 프로그래밍 인터페이스
- 2.9 정리
- 3 결론
- 4장. YUZA OS 시작하기
- 1 환경 구축
- 2 Hello World!!
- 실습 1 – DLL 디버깅 모드
- 실습 2 – DLL 디버깅 미지원 모드
- 실습 3 – 실기(가상 에뮬레이터)
- 3 응용앱 개발 프로젝트 설정
- 4 실습
- 4.1 sample 프로젝트
- 4.2 sum 프로젝트
- 5 결론
- 5장. 콘솔 앱 살펴보기
- 1 테스트 앱
- 1.1 파일 읽기
- 1.2 압축
- 1.3 로그
- 1.4 시간 함수
- 1.5 수학 함수
- 1.6 정규표현식
- 2 응용앱
- 2.1 grep
- 2.2 sqlite3
- 2.3 루아 콘솔
- 2.4 fonttosvg
- 3 정리
- 쉬어가기 1 – 플로피 버드
- 6장. 듀얼 시스템
- 1 커널 핵심 컴포넌트
- 2 부팅 시퀀스
- 2.1 실기
- 3 프로젝트 구성
- 3.1 링커 – 고급 항목
- 3.2 C/C++ - 전처리기
- 3.3 링커 – 라이브러리
- 4 파일 시스템
- 5 디버깅
- 6 기타
- 6.1 메모리 할당
- 6.2 키보드/마우스 입력
- 6.3 디스플레이
- 6.4 스레드 제어 및 스케줄링
- 6.5 특권 어셈블리 명령어
- 6.6 가상 주소 시스템.
- 7 정리
- 7장. 커널 초기화
- 1 커널 엔트리
- 2 커널 코어
- 2.1 커널 초기화
- 2.2 인터럽트 벡터 초기화
- 2.3 PIT 시작
- 2.4 커널 필수 모듈 로드
- 2.5 커널 가상 주소 재배치
- 2.6 시스템 콜 등록
- 2.7 저장장치 초기화
- 2.8 디버깅 시스템 초기화
- 2.9 커널 메인 코드 시작
- 3 win32stub.dll
- 3.1 타이머 이벤트
- 3.2 키보드/마우스 이벤트
- 4 정리
- 8장. DLL 로더 시스템
- 1 기본 로더 이론
- 2 DLL 로딩 방식
- 3 DLL 매핑
- 4 커스텀 DLL 로더
- 5 과제
- 5.1 심벌 로드
- 6 정리
- 9장. 시스템 콜
- 1 시스템 콜 설계
- 2 시스템 콜의 구조
- 3 시스템 콜의 추가
- 4 결론
- 10장. 독립형 OS 제작하기
- 1 GUI 콘솔
- 2 루아 운영체제
- 2.1 루아 스크립트
- 2.2 루아 콘솔
- 2.3 루아팅커
- 2.4 루아 커널
- 초기화
- 메인 엔트리 - lua_main
- 루아 커널 스크립트
- 2.5 루아 확장 모듈
- 루아 스크립트를 통한 모듈 등록
- DLL 모듈을 통한 모듈 등록
- 몇 가지 확장 모듈
- 3 정리
- 쉬어가기 2 – YUZA OS 콘셉트
- 11장. 표준 프로그래밍 인터페이스
- 1 프로그래밍 인터페이스 구축 전략
- 2 표준 C 라이브러리(ANSI)
- 2.1 입출력 함수
- 2.2 문자열 함수
- 2.3 수학 함수
- 2.4 시간 및 날짜 함수
- 2.5 결론
- 3 POSIX API
- 3.1 파일 조작
- 3.2 디렉터리 조작
- 3.3 pthreads
- 3.4 결론
- 4 WIN32 API
- 5 내장 함수
- 6 골치 아픈 항목
- 7 정리
- 8 고급
- 8.1 musl
- 12장. C++ & STL
- 1 STL
- 2 개인 제작 STL
- 3 SGI STL
- 4 EASTL
- 5 테스트
- 6 정리
- 13장. 데스크톱 시스템
- 1 기본 데스크톱
- 1.1 구동하기
- 1.2 샘플 앱
- 1.3 GUI 콘솔 앱
- 1.4 데스크톱 구조
- 2 GUI 위젯
- 3 Advanced
- 4 정리
- 14장. SDL 살펴보기
- 1 SDL
- 1.1 게임
- 1.2 에뮬레이터
- 1.3 GUI
- 1.4 동영상
- 1.5 정리
- 2 SDL 시스템
- 2.1 SDL_mixer
- 2.2 SDL_image
- 2.3 SDL_gfx
- 2.4 SDL_ttf
- 2.5 정리
- 3 SDL 프로그래밍
- 3.1 튜토리얼
- flip
- bmp
- loadpng
- TTF
- 타이머
- 3.2 게임
- 소코반
- 테트리스
- 팩맨
- SDLBird
- 로드파이터
- 오픈 타이리언
- 3.3 GUI
- TinyGUI
- GuiChan
- Cairo
- SDL_GUI
- GWork
- 3.4 LUA SDL
- 3.5 포팅해 보기
- 4 SDL 통합 시스템
- 5 확장 모듈
- 6 정리
- 레퍼런스
- 레퍼런스
- 15장. SDL 코어편
- 1 안드로이드
- 1.1 자바와 C++
- 1.2 액티비티 & SDL 연동
- 2 WIN32
- 3 YUZA OS 포트
- 3.1 프로젝트 구성
- 3.2 구현
- 4 정리
- 쉬어가기 3 – 알레그로 엔진
- 16장. 3D 프로그래밍 인터페이스
- 1 3D API
- 2 OpenGL
- 3 OpenGL 과제
- 4 소프트웨어 렌더러
- 5 정리
- 17장. 오픈소스 라이브러리
- 1 리스트
- 1.1 압축
- 1.2 이미지
- 1.3 폰트
- 1.4 직렬화
- 1.5 파싱
- 1.6 멀티미디어
- 1.7 마크업 언어
- 1.8 로컬라이제이션
- 1.9 기타
- 2 정리
- 18장. 포팅하기
- 1 라이브러리 고르기
- 2 포팅 실전
- 2.1 성공 사례 - ScummVM
- 2.2 실패 사례 - wxWidgets
- 3 정리
- 19장. 실전 응용앱편
- 1 게임
- 1.1 SDL 봄버맨
- 1.2 페르시아 왕자
- 1.3 울펜스타인 3D
- 1.4 둠
- 1.5 지뢰 게임
- 2 에뮬레이터
- 2.1 VBA
- 2.2 fmsx
- 2.3 GNUBoy
- 2.4 DosBox
- 3 GUI
- 3.1 pdcurses
- 3.2 kiss
- 3.3 ImGui
- 3.4 zgv
- 4 기타
- 4.1 Box2D.
- 4.2 편집기
- 4.3 Load81 프로젝트
- 4.4 장기
- 5 정리
- 후기
- YUZA OS Vol.1 – 소프트웨어편의 의의
- 독자분들의 다음 스텝
- YUZA OS Vol.2 – 하드웨어 편