Top

YUZA OS Vol.1 - 소프트웨어편 [WIN32 플랫폼에서 C++로 운영체제 제작하기]

  • 지은이박주항
  • ISBN : 9791161755366
  • 45,000원
  • 2021년 07월 16일 펴냄
  • 페이퍼백 | 720쪽 | 188*235mm
  • 시리즈 : 윈도우 시스템 프로그래밍

책 소개

2022년 대한민국학술원 우수학술도서 선정도서
요약

『C++로 나만의 운영체제 만들기』의 후속편인 이 책은 저자가 직접 제작한 YUZA OS라는 OS를 파헤쳐 보면서 운영체제의 구조와 원리를 설명한다.
리눅스 같은 기존의 운영체제 개발환경에서 벗어나 윈도우 운영체제에서 OS를 개발하며 비주얼 스튜디오 2019와 C++로 운영체제 개발 방법을 설명하는 것이 특징이다. 아울러 저자가 게임 개발자 출신답게 다양한 게임을 자신만의 OS에서 쉽게 제작할 수 있는 방법을 설명하는 것에 심혈을 기울였다. 컴퓨터를 제어하는 모든 소스코드를 장악하고 싶은 개발자에게 큰 도움이 될 책이다.

이 책에서 다루는 내용

■ 리눅스 기반이 아닌 비주얼 스튜디오 2019 및 상위 버전으로 커널 개발
■ YUZA OS라는 구체적인 결과물로 운영체제 개념 설명
■ 듀얼 시스템을 통한 최강의 디버깅 시스템 지원
■ 표준 프로그래밍 인터페이스를 통한 다양한 앱 및 라이브러리의 포팅 방법
■ 추상화 언어의 마지노선인 C++ 11로 운영체제 개발
■ 자신만의 응용 앱을 손쉽게 구현
■ 윈도우 시스템 프로그래밍 노하우를 운영체제 개발에 활용
■ 스크립트 언어를 활용한 운영체제 개발 방법론
■ SDL 라이브러리를 활용한 게임 제작 방법

이 책의 대상 독자

■ OS를 직접 개발해 보고 싶은 일반 개발자
■ 운영체체론을 공부하는 학생
■ 이론보다 구체적인 결과물로 학습을 원하는 개발자
■ 심화된 윈도우 시스템 프로그래밍을 공부하려는 프로그래머
■ C++ 언어의 내부 구현을 이해하고 싶은 분
■ 직접 만든 OS에 자신만의 응용 앱을 손쉽게 개발하고 싶은 분

저자/역자 소개

지은이의 말

『C++로 나만의 운영체제 만들기』 서적을 집필한 후 자신만의 운영체제 제작이라는 목표를 달성했다고 생각했다. 하지만 그건 큰 착각이었고 그전에는 보이지 않았던 수많은 운영체제 개발 영역이 존재함을 인식하게 됐다. 결국 지의 늪에 빠져버린 필자는 운영체제 개발이라는 영역에 계속 시간을 투자하게 됐다. 앞으로 이 즐거운 시간 낭비가 언제까지 지속될지는 모르겠지만 스스로 만족할 때까지 계속 작업을 진행하려고 한다.
여러 운영체제를 리서치해 보면 각각의 나라에는 대표적으로 내세울 수 있는 운영체제가 존재하지만 한국에는 딱히 내세울 만한 운영체제가 없다. 필자가 개발 중인 YUZA OS가 그 자리를 차지할 수 있기를 바라며 이 책을 출시하는 시점에서도 OS 개발은 계속 진행하고 있다.
운영체제 개발은 어려운 작업이다. 내용이 방대할 뿐만 아니라 운영체제의 동작 원리를 정확하게 이해하지 못한다면 개발 자체가 어렵기 때문이다. 그만큼 운영체제 개발은 많은 지식과 경험을 요구한다. 또한 운영체제 개발이 어려운 이유는 하드웨어 관련 개발 자료를 찾기가 어렵기 때문이다. 소스코드 레벨의 버그라면 어떻게 해서든지 수정할 수 있지만 하드웨어와 연관된 버그가 발생하면 개발자는 패닉에 빠지기 쉽다. 그리고 운영체제 개발이라는 주제는 생활을 영위하는 것에 큰 도움이 되지 않기 때문에 더더욱 관심을 갖지 않는 분야다. 필자도 왜 계속 이 운영체제 개발을 진행하고 있는지 이해가 불가하지만 두 가지만은 확실히 답할 수 있다. “운영체제 개발은 정말 재밌다”와 “아무도 하지 않기 때문에 희소성이 있는 작업이다”라는 것이다. 이 두 가지만으로도 운영체제를 직접 제작해 보는 것은 충분한 가치가 있다고 본다.
운영체제 커널 개발회사에 몸을 담은 적이 없고 개발 관련 노하우도 일천한 상황에서 운영체제를 개발하려면 기존 운영체제를 자세히 관찰하고 분석하는 방법밖에는 없다. 그래서 『C++로 나만의 운영체제 만들기』에서는 기존의 이론서 등을 참조하고 어떻게든 운영체제가 실기에서 동작하는 작업에 주력했다. 반면 이 책에서는 상용 운영체제의 시스템 동작을 살펴보면서 프로그래밍 인터페이스를 다듬는 데 주력했다. 즉 운영체제 상에서 동작하는 응용앱을 개발하는 관점에서 작업을 진행했다.
자화자찬하는 것은 그렇지만 YUZA OS는 혁신적인 운영체제라고 평가한다. 가능성이 무궁무진한 만큼 YUZA OS 소스코드를 완벽하게 장악할 수 있다면 독자분들에게 큰 도움이 될 것이라고 확신한다. 이 책을 통해 독자분들의 프로그래밍 능력이 한층 더 업그레이드되길 기대해 본다.

지은이 소개

박주항

서강대학교에서 컴퓨터공학과 물리학을 전공했으며, JCE(현 조이시티) 온라인 게임 서버 프로그래머, 라인의 백엔드 플랫폼 프로그래머 그리고 모바일 게임 개발 회사 대표를 거쳐 현재 프리랜서로 활동 중이다.
안 되는 걸 되게 하는 것에 관심이 많으며, 고전 어드벤처 게임을 좋아해 번역되지 않은 다수의 명작 어드벤처 게임의 한국어화 패치를 제작했다.
주요 저서로는 한빛미디어에서 출간한 『CGSF를 활용한 게임 서버 제작』(2014), 『CGSF 파헤쳐 보기』(2014), 『C++ 개발자를 위한 WIN32 오픈소스 라이브러리 100』(2015), 『SDL과 C++를 이용한 크로스 플랫폼 프로그래밍』(2015), 에이콘에서 출간한 『C++로 나만의 운영체제 만들기』(2018) 등이 있다. 번역서로는 『데이터베이스 첫걸음』(한빛미디어, 2016)과 『Game Programming in C++』(에이콘, 2019)가 있다.

목차

목차
  • 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 – 하드웨어 편

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안