부트로더 - 2
현대의 MBR은 다음 세가지로 이루어져야한다. 1. Bootstrap Code 파티션 테이블을 참조해서 관련 코드를 불러오는 코드다. 2. Partition Table Entry Boot Flag (1 Byte) 0x80 -> 부팅 가능 코드 0x00 -> 부팅 불가 코드 Starting CHS Address (3 Byte) 현재는 사용...
현대의 MBR은 다음 세가지로 이루어져야한다. 1. Bootstrap Code 파티션 테이블을 참조해서 관련 코드를 불러오는 코드다. 2. Partition Table Entry Boot Flag (1 Byte) 0x80 -> 부팅 가능 코드 0x00 -> 부팅 불가 코드 Starting CHS Address (3 Byte) 현재는 사용...
BIOS에서 구동가능한 부트로더를 한줄로 정의하면 아래와 같다. OS를 구동하기 위해서 필요한 512Bytes 코드 이 문장을 해석하면 BIOS를 통해서 구동되는 부트로더(이하 부트로더)가 무엇인지 어떻게 구동되는지 알 수 있다. 컴퓨터가 켜지면 POST라는 절차를 거친다. 펌웨어인 바이오스가 실행하는 일종의 검사 루틴으로 이 POST는 프로세서...
2. 세그멘테이션 세그멘테이션은 한마디로 세그먼트 레지스터를 이용하여 주소 공간을 관리하는 기법이다. 이 세그먼트 레지스터는 프로세스를 실행하는데 필요한 데이터의 뭉치 시작 주소들을 가리키고 있는데 이러한 데이터 뭉치는 코드, 데이터, 스택으로 나눌 수 있다. 앞서 설명한 페이징이 고정된 사이즈로 메모리를 나눠서 관리하는 기법이라면 세그멘테이션은 ...
페이징과 세그멘테이션 메모리를 효율적으로 운용하기 위해서 컴퓨터의 발생부터 사람들의 많은 노력이 있었다. 그냥 일괄처리 시스템이라면 메모리 0번지부터 차근차근 써버리고 해제하면 되겠지만 PC의 시대가 도래하면서 여러가지 프로그램을 한번에 처리해야할 필요성이 생겼다. 그리하여 메모리 운용의 가장 최신 기술이 세그멘테이션과 페이징인것이다. 이러한 세그멘...
IA-32e 모드 앞서 포스팅한 내용에 따르면 보호 모드의 특성은 아래와 같다. 최근 제공되는 OS들이 구동되는 모드이다. 멀티태스킹, 세그멘테이션, 페이징을 지원한다. 이론상 최대 16EB(2^64) 만큼의 메모리 제한이 있다. 민감한 메모리 영역에 대한 보호를 제공한다. 32bit 호환 모드가 있어 32bit용 코드를 구동가...
보호 모드 앞서 포스팅한 내용에 따르면 보호 모드의 특성은 아래와 같다. 윈도우나 Linux가 구동되는 기본 모드이다. 멀티태스킹, 세그멘테이션, 페이징을 지원한다. 디바이스 드라이버를 써야 장치 제어가 가능하다. 4GB의 메모리 제한이 있다. (2^32) 민감한 메모리 영역에 대한 보호를 제공한다. 이러한 특성을 하나하나 ...
리얼 모드(Real mode) 앞서 포스팅한 내용에 따르면 리얼 모드의 특성은 아래와 같다. 16bit 프로세서와 동일하게 사용되며 BIOS의 여러 기능을 사용가능하다. 페이징을 지원하지 않는다. 640KB 메모리 제한이 있다 (실 사용 가능한 메모리 기준) 디바이스 드라이버 없이 장치 제어가 가능하다. 이러한 특성을 하나하나 ...
부트 로더에 대한 설명 이전에 각 모드에 대해서 설명을 하고 들어가야 보는 과정에서 이해가 될 것 같아서 이후에 포스팅을 추가한다. 1. 리얼 모드 16bit 프로세서와 동일하게 사용되며 BIOS의 여러 기능을 사용가능하다. 디바이스 드라이버 없이 장치 제어가 가능하다. 페이징을 지원하지 않는다. 640KB 메모리 제한이 있다 (실 ...
앞으로 부트로더에 대한 설명을 이어갈 것인데, 사실 부트로더에 대한 설명을 쓰다가 빌드 툴에 대한 안내가 있어야할 것 같아서 먼저 작성해 둔다. 코드 빌드 법 참고 문헌에 명시된 “64Bit 멀티코어 OS의 구조”책에서는 nasm과 cygwin을 사용한다. 윈도우 개발자를 배려한 것인데 사실 cygwin 설정법이 무지막지하게 귀찮다. 그래서 나는 ...
레지스터 - 2 실수 계산용 레지스터 범용 레지스터는 일반적으로 정수 계산이나 주소계산을 위해 사용되기에 실수계산은 메모리의 스택을 이용하거나 아래의 레지스터를 사용한다. 1. FPU 레지스터 R0 ~ R7라는 이름의 부동 소수점 데이터 레지스터가 있다(각각 80bit) 컨트롤 레지스터, 상태 레지스터, 태그 레지스터가 있다(각각 16bi...