3. 1장. ‘가벼운’ 책 소개
1. OS 개발 과정에서 얻을 수 있는 세 가지
- 하드웨어와 소프트웨어를 모두 다뤄 볼 수 있다.
- 문제 해결 능력을 기를 수 있다.
- 큰 성취감을 느낄 수 있다.
2. OS를 개발하는 데 필요한 지식
- 하드웨어 지식
- 어셈블리어, C언어
- OS 이론, 각종 도구 사용법 (컴파일러, 링커, 도구)
4. 2장. 개발 환경 구축
1. Cygwin (GCC, 크로스 컴파일러)
2. NASM (어셈블러)
3. Eclipse
4. QEMU (오픈 소스 프로세서 에뮬레이터)
- 개발 관련 도구들의 버전 업 또는 변경으로 인한 직접 개발 환경 구축 실패
>> 책의 저자가 제공하는 가상OS를 통하여 해결
5. 3장. 64비트 프로세서에 대하여
1. x86-64 프로세서의 운영모드
- 리얼 모드 : 프로세서의 초기 상태
16비트 모드
2^20의 주소공간 지원 (1GB)
- 보호 모드 : 32비트 모드 (32비트 윈도우나 리눅스가 동작하는 기본모드)
세그먼트, 페이징, 멀티태스킹 기능 제공
2^32의 주소공간 지원 (4GB)
- IA-32e 모드 : 두 가지 서브 모드가 존재 (32비트 호환 모드, 64비트 모드)
보호 모드보다 더 많은 레지스터와 기능들을 제공
2^64의 주소공간 지원 (16EB)
6. 3장. 64비트 프로세서에 대하여
IA-32e 모드
보호 모드
리얼 모드
특정 레지스터의 필드를 조작하여 모드를 변경
전원
CR0-PE = 1
CR0-PE = 0
Reset
CR0-PG = 1
CR4-PAE = 1
MSR-LME = 1
MSR-LME = 0
Reset
7. 3장. 64비트 프로세서에 대하여
2. 레지스터 (Register)
- 프로세서 내부에 있는 작은 공간
- 연산, 제어, 상태 표시, 디버깅 등의 목적으로 사용
1) 범용 레지스터
- 계산, 메모리 주소지정, 임시저장공간 등의 목적으로 사용
- 수가 많으면 수행 속도가 빨라짐
- 접두사, 접미사를 이용하여 다양한 크기의 레지스터에 접근 가능
8. 3장. 64비트 프로세서에 대하여
2. 레지스터 (Register)
- 프로세서 내부에 있는 작은 공간
- 연산, 제어, 상태 표시, 디버깅 등의 목적으로 사용
2) 세그먼트 레지스터
- 16비트 레지스터
- 주소영역을 다양한 크기로 구분하는 역할
>> 주소영역을 목적에 따라 구분하는 것
9. 3장. 64비트 프로세서에 대하여
2. 레지스터 (Register)
- 프로세서 내부에 있는 작은 공간
- 연산, 제어, 상태 표시, 디버깅 등의 목적으로 사용
3) 컨트롤 레지스터
- 운영 모드를 변경하고, 현재 운영 중인 모드의 특정 기능을 제어
- 레지스터의 각 필드는 저마다 특정 기능을 활성화 또는 비활성화 함
ex) CR0 레지스터의 비트 0의 값을 변경 리얼모드와 보호모드를 전환
10. 3장. 64비트 프로세서에 대하여
3. 메모리 관리 기법
- 세그멘테이션 : 전체 영역을 원하는 크기로 나누어 관리 (케이크)
- 페이징 : 일정한 단위로 잘라진 조각을 모아 원하는 크기로 관리 (식빵)
1) 리얼 모드에서는
- 최대 2^20의 주소공간을 사용
- 세그멘테이션만을 지원 (세그먼트 크기는 64K로 고정)
- 바로 물리 주소 공간을 접근
11. 3장. 64비트 프로세서에 대하여
3. 메모리 관리 기법
- 세그멘테이션 : 전체 영역을 원하는 크기로 나누어 관리 (케이크)
- 페이징 : 일정한 단위로 잘라진 조각을 모아 원하는 크기로 관리 (식빵)
2) 보호 모드에서는
- 최대 2^32의 주소공간을 사용
- 세그멘테이션과 페이징 모두 지원
- 세그먼트 디스크립터를 이용하여 선형 주소 영역을 관리
- 세그멘테이션으로 생성된 선형주소를 페이징을 통해 물리주소로 변경
12. 3장. 64비트 프로세서에 대하여
10 bit 10 bit 12 bit
CR3
Page Directory
Page Table
Physical Memory
Logical address
13. 3장. 64비트 프로세서에 대하여
3. 메모리 관리 기법
- 세그멘테이션 : 전체 영역을 원하는 크기로 나누어 관리 (케이크)
- 페이징 : 일정한 단위로 잘라진 조각을 모아 원하는 크기로 관리 (식빵)
3) IA-32e 모드에서는
- 최대 2^40의 주소공간을 사용
- 디스크립터와 관계없이 64비트 전체 주소 공간으로 설정
- 페이징 단계가 총 5단계