해당 글은 x86 CPU를 기준으로 작성한 글이다.
이 과정은 CPU 종류별로 다 달리 동작하게 된다.
전원이 들어오면 그다음은 어떠한 일이 벌어져서 컴퓨터가 켜지는 것일까?
전원이 들어오면 CPU는 CS 세그먼트와 IP 레지스터의 값을 각각 0xFFFF와 0x0000으로 초기화를 수행한다.
따라서 초기에 전원이 들어오고 CPU가 최초에 실행하는 위치는 CS:IP 인 0xFFFF0위치가 되며 이 위치가 BIOS 의 초기 실행 주소가 되게 된다.
이렇게 초기 실행 위치로 구동된 BIOS 에서 각종 하드웨어 초기화를 통해 최초 접근 가능한 부팅우선순위 기준의 저장장치로 부터 0번째 위치에 존재하는 첫번째 섹터의 데이터를 가져와서 메모리에 올려주게 되는데 이때의 주소가 0x7C00 번지이다.
따라서 BIOS 로 부터 부트코드 로드 작업이 끝난뒤 부트코드가 0x7C00번지에 로드되게 되며, 16bit 모드로 구동하게 된다.
이때 인터럽트 벡터 테이블의 위치는 0번지가 되며 0x0000 ~ 0x03FF 까지가 인터럽트 테이블의 위치가 되게 된다.
BIOS 는 실제 물리메모리의 0xFE000 ~ 0xFFFFF 에 위치하게 된다.
이렇게 로드되어 실행된 부팅 코드가 실행되게 되며, 이 부트코드에서 커널을 구동하기 위한 사전 초기화 작업들을 수행한뒤 부팅이 되게 된다.
지금 마지막줄의 경우 실제 검색을 통해 자료 습득이 쉬운부분이므로 상세 설명은 생략하겠다.
이렇게 까지 알아야하나? 싶은 생각을 가지신 분들도 있겠지만.
아는형이 N모사 면접문제로 나왔다길래 잠시 작성해본다...
첫댓글 이런거 좋음 부팅할때 메모리 체크하기전에 비디오 먼저 초기화 한다는 이야기도 들은거같음..
16비트 모드를 real mode 라고 부릅니다 해당 모드에서 인터럽트로 비디오 모드 전환과 그래픽 카드의 정보를 얻는 명령어가 존재하지만 x86 아키텍쳐의 경우 in, out 어셈블리 명령어를 이용하여 32비트 모드이상에서 곧바로 비디오 모드 전환작업등도 이루어 질수 있으므로 비디오를 나중에 초기화 작업을 수행하기도 합니다.
물론 이렇게 수행하기 위해서는 User 영역이 아닌 Kernel 영역에서 이루어 져야만 하지만 말이지요.
메모리 체크는 상당히 중요한 작업이기에 페이징 처리라던지 GDT 같이 메모리를 영역별로 권한을 두어 관리하기 위한 선처리를 우선적으로 수행하게 됩니다.
@세상에서 제일 빨리 까먹는 욱이 제가 그때 한번듣고 전부를 이해하진 못했지만
메모리 체크전에 비디오를 초기화 해줘야 dos 화면에서 메모리 (숫자올라가는거) 를 보여준다.
그래서 비디오를 먼저 초기화 하는게 맞다 라고 들었는데
저도 듣고보니 부팅 화면에서 메모리 체크를 시작하는데 화면을 보여주니까 비디오가 먼저 처리되었구나 생각했거든요.
화면에 띄워 주는부분을 처리 하기위해 비디오를 먼저 처리 한다 들었는데 비디오 초기화 작업을 나중에 해도 된다고 하시는거 보니까 이부분은 선택 적 부분인가보네요 메모리 체크하고 부팅화면 띄워줄수도있으니까.
으 부팅과정하나가 이렇게 헷갈리다니...
@질문 http://cafe.daum.net/codeinside/b7Do/21
링크 참조 바랍니다. 제한 글자수 때문에 별도의 글로 작성했네요
POST 과정하고 어떤 차이점이 있는건가요?
해당과정이 포함된 글입니다
위의 글을 기준으로 6번째 줄의 "초기 실행 위치로 구동된 BIOS 에서 각종 하드웨어 초기화" 이 부분이 POST(Power On Self Test)라 하여 하드웨어가 장치 접근을 위해 기초적인 초기화 과정을 체크/검사 하는 과정을 의미합니다.
최근의 BIOS의 firmware는 CPU와 독립적으로 돌아가는 걸로 알고 있어요. 펌웨어 코딩도 어셈으로 하지 않고 C++로 하죠. 그러니까, 0xFFFF0 (FFFF:0000) 에 BIOS POST Firmware code가 위치해서 CPU에 의해 실행된다는 것도 이젠 옛말.
C++로 코딩된다는 이야기는 저도 드보님이 말하셔서 들었던것 같습니다.
intel 2015년도 cpu 개발자 reference 메뉴얼을 찾아보았습니다.
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf
9.1.4 First Instruction Executed
The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0H. This address is 16 bytes below the processor’s uppermost physical address. The EPROM containing the software-
initialization code must be located at this address.
The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor while in real-address mode. The processor is initialized to this starting address as follows.