R&D/OS 163

부트로드 만들기 예제

부트로드 예제 만들기 가상화가 보편화 되면서 부트로더, 커널 등을 개발하고 테스트하는 것이 쉬워 졌다. 부트로더는 16bit 로 동작하며, 0x7c00 주소의 instruction을 실행한다. 왜 0x7c00 일까요?컴퓨터가 켜지고 BIOS가 실행되면, BIOS는 디스크가 "bootable" 한지를 체크하게 된다.이 때 boot sector(디스크의 첫번째 sector?)의 511 bytes, 512 bytes를 읽게 된다해당 위치에 0x55, 0xAA (Magic code)가 있으면 부트로드로 간주하고, 해당 sector를 메모리 공간 0x0000:0x7c00(segment 0, address 0x7c00)로 로드한다. 다음 코드는 아무런 동작도 하지 않은 부트로드이다. 예제코드(bootloader.a..

R&D/OS 2013.05.06

리눅스 부팅 프로세스

1.1 리눅스 x86 부팅 과정 시스템에 전원이 들어와서 새롭게 시작되는 것을 부팅(booting)이라고 하며, 이 과정을 부트스트랩(bootstrap)이라고 한다. 이는 운영체제의 최소부분을 주 메모리 공간에 로드하여 프로세서(CPU)가 이를 실행할 수 있도록 하는 것을 의미한다. 이러한 부트스트랩 코드는 어셈블러로 작성되어 있으며, (1)커널 자료구조 초기화, (2)스택/레지스터 초기화를 하고 C코드(start_kernel)함수가 실행할 수 있도록 만들어 준다. 커널 부팅 과정은 크게 3가지로 1단계: BIOS 동작, 2단계:부트로드 실행, 3단계:리눅스커널 부팅 로 이루어져 있다. o 1단계: BIOS 동작 1. 컴퓨터 하드웨어에 대한 테스트를 수행한다(POST) 2. 하드웨어 장치를 초기화한다. ..

R&D/OS 2013.05.06