나에게 필요한 지식과 기술을 검색해 보세요.

OS 구조와 원리: OS 개발 30일 프로젝트

지은이

카와이 히데미

옮긴이

이영희

출간일

2007.04.14

레벨

초중급

평점

4.3(3명)

정가

32,000

판매가

28,800

총 결제 금액

10%

28,800

적립 예정

1,440P

쪽수

892P

ISBN

9788979144826

브랜드

한빛미디어

수년 동안 터득한 OS 개발 비법을 공개합니다!

OS를 만드는 것은 더 이상 전문가 영역이 아닙니다.
컴퓨터 구조, 어셈블리어, 프로그램 동작원리까지 내공을 높여드립니다!

정말 쉽고 아주 친절합니다. 그러다보니 OS를 하나 만들고 나면 자연스럽게 어셈블리어, C 언어 포인터까지도 익숙해집니다. 컴퓨터 구조는 말할 것도 없습니다. 아무 생각없이 소스 제시하고 타이핑하고 실행해보는 식이 아닙니다. 필요한 원리와 지식을 자세하게 알려주어 독자 스스로 이해하고 솔루션을 찾게 만들어줍니다.

저자는 여러분과 함께 이 책에서 만들어볼 운영체제를 만들기 위해 수년수개월이 걸렸고 책을 집필하는 데만 1년이 넘게 걸렸습니다. 이 노하우를 독자 여러분은 30일만에 터득할 수 있습니다. 저자는 모놀리딕이니 하는 어려운 말을 풀어놓는 것보다 아주 초보적인 입장에서 모든 것을 설명합니다. 플로피디스크에 이미지를 쓰고 OS를 만들 수도 있지만, 플로피디스크가 없어도 에뮬레이터로 플로피디스크가 없는 최신 컴퓨터에서도 실습해볼 수 있습니다. 프로그램을 만든다고 하는 사람들이 보면 피가 되고 살이 되는 지식을 갖게 될 것입니다.

[만들어볼 OS 미리보기]

이 책에서 만든 OS를 기반으로 여러 가지 프로그램을 실행한 화면입니다. 물론, 이러한 프로그램도 만들어서 직접 올려봅니다.

콘솔 창을 띄워서 OS에 있는 파일을 볼 수도 있고, gview라는 애플리케이션을 이용해서 bmp, jpg과 같은 이미지를 볼 수도 있습니다.

tview라는 프로그램을 이용하게 되면 텍스트 파일을 열어서 내용을 볼 수 있고, 간단하게 calc 계산기 프로그램을 이용해서 산술 연산까지도 가능합니다. 그리고 더욱 더 흥미진진한건 invader라는 옛날 향수가 묻어나는 게임까지 만들어서 올려볼 수 있다는 것입니다.

이 정도의 프로그램들을 관리해내는 OS를 만들 수 있는 여러분이라면, 어떤 분야에서건 전문가로서 활약할 수 있는 좋은 밑거름이 되어줄 것입니다.

이제 도전해보십시오!

여러분 중에는 예전에 한 번쯤 OS 개발에 도전했다가 너무 어려워서 포기해버린 분이 계실지도 모르겠습니다. 그런 분에게 있어 OS 제작이 어렵지 않다고 얘기하는 필자의 말을 이해하기 힘들겁니다. 그러나, 단연코 이렇게 말하고 싶습니다. 어려워서 실패한 것이 아니고, 간단한 것이라고 설명해준 사람이 없었기 때문에 실패한 것입니다.
- 저자 서문에서

저자

목차

Chapter 0  개발을 시작하기 전에
1. 시작하기에 앞서
2. OS란 무엇일까?
3. OS 제작법 요모조모
4. 모르면 모르는 대로
5. OS를 만들려면 어떻게 해야 되나요?
6. OS를 만들 때의 난점
7. 1장 이후를 읽기 전에(중요!)
8. 이후의 내용 흐름

Chapter 1  PC 구조부터 어셈블리 입문까지
1. 어쨌든 해 보는 거야!
2. 결국 무엇을 한 것인가?
3. 어셈블러 첫 체험
4. 첫 체험의 어셈블러 다시 써 보기

Chapter 2  어셈블러 학습과 Makefile 입문
1. 텍스트 에디터 소개
2. 개발 재개
3. 부트섹터만 만들도록 정리
4. 이후를 위한 Makefile 도입

Chapter 3  32비트 모드 돌입과 C언어 도입
1. IPL 만들기
2. 에러가 나면 다시 하자
3. 18섹터까지 읽어보기
4. 10실린더만큼 읽어보기
5. OS 본체 작성하기
6. 부트섹터에서 OS 본체 실행시키기
7. OS 본체의 동작 확인하기
8. 32비트 모드 준비
9. C언어 도입
10. HLT 해 보기 (hrib00j)

Chapter 4  C언어와 화면 표시의 연습
1. C언어로 메모리에 쓰기 (harib01a)
2. 줄무늬 (harib01b)
3. 포인터에 도전 (harib01c)
4. 포인터의 응용(1) (harib01d)
5. 포인터의 응용(2) (harib01e)
6. 색 번호 설정 (harib01f)
7. 사각형 그리기 (harib01g)
8. 완성 (harib01h)

Chapter 5  구조체와 문자 표시와 GDT/IDT 초기화
1. 부팅 정보 받기 (harib02a)
2. 구조체 사용하기 (harib02b)
3. 화살표 표기 사용하기 (harib02c)
4. 문자 출력하기 (harib02d)
5. 여러 문자 출력하기 (harib02e)
6. 문자열 출력하기 (harib02f)
7. 변수 값 표시하기 (harib02g)
8. 마우스 커서 그리기 (harib02h)
9. GDT와 IDT의 초기화 (harib02i)

Chapter 6  분할 컴파일과 인터럽트 처리
1. 소스 파일 분할 (harib03a)
2. Makefile 정리 (harib03b)
3. 헤더 파일 정리 (harib03c)
4. 어제 남은 설명
5. PIC 초기화 (harib03d)
6. 인터럽트 핸들러 작성 (harib03e)

Chapter 7  FIFO와 마우스 제어
1. 키 코드 취득 (harib04a)
2. 인터럽트 처리는 재빠르게 (harib04b)
3. FIFO 버퍼 만들기 (harib04c)
4. FIFO 버퍼 수정하기 (harib04d)
5. FIFO 버퍼 정리하기 (harib04e)
6. 마우스 (harib04f)
7. 마우스로부터의 데이터 수신 (harib04g)

Chapter 8  마우스 제어와 32비트 모드 전환
1. 마우스 데이터 분석(1) (harib05a)
2. 조금 정리 (harib05b)
3. 마우스 데이터 분석(2) (harib05c)
4. 움직여라 마우스 (harib05d)
5. 32비트 모드의 길

Chapter 9  메모리 관리
1. 소스 정리 (harib06a)
2. 메모리 용량 체크(1) (harib06b)
3. 메모리 용량 체크(2) (harib06c)
4. 메모리 관리에 도전 (harib06d)

Chapter 10  겹치기 처리
1. 메모리 관리 계속 (harib07a)
2. 겹치기 처리 (harib07b)
3. 겹치기 처리의 고속화(1) (harib07c)
4. 겹치기 처리의 고속화(2) (harib07d)
	
Chapter 11  마침내 윈도우
1. 마우스에 대해 좀 더 알아보기 (harib08a)
2. 화면 밖의 지원 (harib08b)
3. shtctl의 지정 생략 (harib08c)
4. 윈도우 만들기 (harib08d)
5. 조금 놀아보기 (harib08e)
6. 고속 카운터 (harib08f)
7. 깜박거림 해소(1) (harib08g)
8. 깜박거림 해소(2) (harib08h

Chapter 12  타이머 - 1
1. 타이머 사용 (harib09a)
2. 시간 재기 (harib09b)
3. 타임아웃 기능 (harib09c)
4. 복수 타이머 (harib09d)
5. 인터럽트 처리(1) (harib09e)
6. 인터럽트 처리(2) (harib09f)
7. 인터럽트 처리(3) (harib09g)

Chapter 13  타이머 - 2
1. 간단하게 문자열 표시 (harib10a)
2. FIFO 버퍼 수정(1) (harib10b)
3. 성능 측정 (harib10c~harib10f)
4. FIFO 버퍼 수정(2) (harib10g)
5. 인터럽트 처리(4) (harib10h)
6. Sentinel을 사용한 프로그램 작성 (harib10i)

Chapter 14  고해상도와 키 입력
1. 성능 측정 (harib11a~harib11c)
2. 고해상도(1) (harib11d)
3. 고해상도(2) (harib11e)
4. 키 입력(1) (harib11f)
5. 키 입력(2) (harib11g)
6. 덤(1) (harib11h)
7. 덤(2) (harib11i)

Chapter 15  멀티태스크 - 1
1. 태스크 스위치(1) (harib12a)
2. 태스크 스위치(2) (harib12b)
3. 간단한 멀티태스크 해 보기(1) (harib12c)
4. 간단한 멀티태스크 해 보기(2) (harib12d)
5. 스피드 업 (harib12e)
6. 스피드 측정 (harib12f)
7. 멀티태스크 좀 더 다루기 (harib12g)

Chapter 16  멀티태스크 - 2
1. 태스크 관리의 자동화 (harib13a)
2. Sleeve 해 보기 (harib13b)
3. 윈도우 늘리기 (harib13c)
4. 우선순위 매기기(1) (harib13d)
5. 우선순위 매기기(2) (harib13e)

Chapter 17  콘솔
1. IDLE 태스크 (harib14a)
2. 콘솔 만들기 (harib14b)
3. 입력 변환 만들기 (harib14c)
4. 문자 입력하기 (harib14d)
5. 기호 입력하기 (harib14e)
6. 대문자와 소문자 (harib14f)
7. Lock 키 대응 (harib14g)

Chapter 18  dir 커맨드
1. 커서 점멸 제어(1) (harib15a)
2. 커서 점멸 제어(2) (harib15b)
3. Enter키 대응 (harib15c)
4. 스크롤 대응 (harib15d)
5. mem 커맨드 (harib15e)
6. cls 커맨드 (harib15f)
7. dir 커맨드 (harib15g)

Chapter 19  애플리케이션
1. type 커맨드 (harib16a)
2. type 커맨드 수정 (harib16b)
3. FAT 대응 (harib16c)
4. 소스 정리 (harib16d)
5. 마침내 첫 애플리케이션 실행 (harib16e)

Chapter 20  API
1. 프로그램 정리 (harib17a)
2. 한 글자 표시 API(1) (harib17b)
3. 한 글자 표시 API(2) (harib17c)
4. 애플리케이션 종료 (harib17d)
5. OS의 버전이 바뀌어도 변함이 없는 API (harib17e)
6. 애플리케이션의 이름을 자유롭게 (harib17f)
7. 레지스터에 주의하기 (harib17g)
8. 문자열 표시 API (harib17h)

Chapter 21  OS 지키기
1. 문자열 표시 API의 재도전 (harib18a)
2. 애플리케이션을 C언어로 만들기 (harib18b)
3. OS 지키기(1) (harib18c)
4. OS 지키기(2) (harib18d)
5. 예외 처리 서포트하기 (harib18e)
6. OS 지키기(3) (harib18f)
7. OS 지키기(4) (harib18g)

Chapter 22  C언어로 애플리케이션을 만들자
1. OS 지키기(5) (harib19a)
2. 버그 발견 돕기 (harib19b)
3. 애플리케이션의 강제 종료 (harib19c)
4. C언어로 문자열 표시(1) (harib19d)
5. C언어로 문자열 표시(2) (harib19e)
6. 윈도우 표시하기 (harib19f)
7. 윈도우에 문자나 사각형 그리기 (harib19g)

Chapter 23  그래픽의 여러 가지
1. malloc 만들기 (harib20a)
2. 점 그리기 (harib20b)
3. 윈도우 리프레시하기 (harib20c)
4. 선 긋기 (harib20d)
5. 윈도우 닫기 (harib20e)
6. 키 입력 API (harib20f)
7. 키 입력으로 놀기 (harib20g)
8. 강제 종료로 윈도우 닫기 (harib20h)

Chapter 24  윈도우 조작하기
1. 윈도우 변환하기(1) (harib21a)
2. 윈도우 변환하기(2) (harib21b)
3. 윈도우 이동하기 (harib21c)
4. 마우스로 윈도우 닫기 (harib21d)
5. 애플리케이션 윈도우를 입력 모드로 변환하기 (harib21e)
6. 마우스로 원하는 윈도우 선택하기 (harib21f)
7. 타이머 API (harib21g)
8. 타이머 취소 (harib21h)

Chapter 25  콘솔 늘리기
1. BEEP 사운드 (harib22a)
2. 색 늘리기(1) (harib22b)
3. 색 늘리기(2) (harib22c)
4. 윈도우의 초기 위치 (harib22d)
5. 콘솔 늘리기(1) (harib22e)
6. 콘솔 늘리기(2) (harib22f)
7. 콘솔 늘리기(3) (harib22g)
8. 콘솔 늘리기(4) (harib22h)
9. OS답게 만들기(1) (harib22i)
10. OS답게 만들기(2) (harib22j)

Chapter 26  윈도우 이동의 고속화
1. 윈도우 이동을 빠르게(1) (harib23a)
2. 윈도우 이동을 빠르게(2) (harib23b)
3. 윈도우 이동을 빠르게(3) (harib23c)
4. 윈도우 이동을 빠르게(4) (harib23d)
5. OS 기동 시 콘솔을 하나만 표시하기 (harib23e)
6. 콘솔을 좀 더 많이 만들기 (harib23f)
7. 콘솔 닫기(1) (harib23g)
8. 콘솔 닫기(2) (harib23h)
9. start 커맨드 (harib23i)
10. ncst 커맨드 (harib23j)

Chapter 27  LDT와 라이브러리
1. 먼저 버그를 고치자 (harib24a)
2. 애플리케이션 실행 중에 콘솔 닫기 (harib24b)
3. 애플리케이션 지키기(1) (harib24c)
4. 애플리케이션 지키기(2) (harib24d)
5. 애플리케이션 사이즈 조정하기 (harib24e)
6. 라이브러리 (harib24f)
7. make 환경 정리 (harib24g)

Chapter 28  파일과 일본어 표시
1. alloca(1) (harib21a)
2. alloca(2) (harib21b)
3. 파일 API (harib21c)
4. 커맨드 라인 API (harib21d)
5. 한글 표시(1) (harib21e)
6. 한글 표시(2) (harib21f)
7. 한글 표시(3) (harib21g)

Chapter 29  압축과 간단한 애플리케이션
1. 버그 수정 (harib26a)
2. 파일 압축 (harib26b)
3. 표준 함수 (harib26c)
4. 비사각형 윈도우 (harib26d)
5. bball (harib26e)
6. 인베이더 게임 (harib26f)

Chapter 30  고도의 애플리케이션
1. 커맨드 라인 계산기 (harib27a)
2. 텍스트 뷰어 (harib27b)
3. MML 플레이어 (harib27c)
4. 화상 뷰어 (harib27d)
5. IPL 수정 (harib27e)
6. CD-ROM 기동 (harib27f)

Chapter 31  개발을 마친 후
1. 앞으로는 혼자서 만들어가기
2. OS의 크기에 대해
3. OS를 잘 만드는 요령
4. 다른 사람에게 사용하게 한다면
5. CD-ROM 내의 소프트웨어에 대해
6. 권장하는 오픈 소스
7. 후서
8. 작별(졸업식)
9. 부록

부록: 한글 입력

칼럼
1. 데이터도 '실행'할 수 있다? 기계어도 '표시'할 수 있다?
2. 캐스트를 사용하면 p라는 것은 사용하지 않아도 됩니까?
3. 역시 포인터는 잘 모르겠어~
4. p[i]라는 것은 뭡니까?
5. 구조체의 간단한 설명
6. 10진수에서의 버림은?
7. 기동 3초 후에 count를 0으로 하는 이유
8. 이런 작은 개선에 의미가 있는 거야?
9. return해선 안 돼?
10. 키보드의 사양?
11. FAT의 압축
12. 이것으로 OS 만들기 입문이라니!

리뷰

전체 평점

4.3

오탈자

등록된 오탈자가 없어요

오탈자를 발견하셨다면 작성해주세요.

32,000

10%

28,800