부팅시에...?

kkojiband의 이미지

매일 쓸데없는(?) 질문만 드립니다...

왠지 자세히 모르면 아무것도 모르는 것같은 느낌이 들어서요...--;

ibm pc 는 부팅시에 bios 가 컴퓨터 실행을 위한 초기화를 실행하는걸로 알고 있습니다...

메모리 최하단부에 인터럽트 벡터 테이블을 만들고, 사용할 변수들을 설정하고, f000:0000h~ffffh에 bios 자신을 올리고 등등...

근데 이런 실행을 하는건 대체 뭐죠?? cpu 의 실행은 메모리에 올라있는 명령어들에 대한 cs:ip 구조로 되어있는걸로 알고 있는데, 초기화되기전에는 이런 구조가 불가능하지 않나요?

bios 에 있는 명령어들을 cpu 가 바로 실행을 할수있는건지, 아님 따로 이런 초기화를 해주는 무언가(?)가 있는건지...요?

하드웨어쪽 괜찮다하는 책들을 몇권 보고 있는데 이렇게 자세한 내용들은 없네요...혹시 아시는 분 좀 도와주세요~

아...그리고 한 가지만 더 물어볼께요...T.T

요즘 하드 디스크들은 chs, lba mode 모두 지원하나요? 아니면 lba mode 만 지원하는데, bios 나 이런것들이 chs 를 받아들여서 lba 로 변환해서 하드 디스크를 읽는건가요??

Necromancer의 이미지

x86 cpu에 전원이 인가되면 가장 먼저 실행되는 명령어 주소가
ffff:0입니다. 대부분 여기 bios 초기화 부분에 대한 점프코드가 들어 있죠.
(cs=0xffff, ip=0으로 세팅된 뒤에 명령어의 실행이 시작되죠)

한번 도스에서 jmp 0ffffh:0000 명령 하나만들어 있는 com 파일 만들어서
해보세요. 진짜 재부팅됩니다.

그리고 lba chs 변환은 bios가 다 해줍니다. 하드디스크 컨트롤러에서도
자동으로 해주고요. 다만 리눅스 커널같이 direct 접근을 하는 경우에는
lba chs 접근에 대한 구현을 다 할 필요가 있습니다.

Written By the Black Knight of Destruction