본문 바로가기

O/S/Linux-CentOS

부트시퀀스

이전 게시물(http://hermet.pe.kr/tb/102451404)을 보강하여 boot sequence를 좀 더 구체화 해보았습니다.

 

 

1. PC에 전원이 들어오면 컴퓨터를 부팅하기 위한 특별한 하드웨어 회로가 CPU의 리셋 핀으로 어떤 논리 값을 전달함.  BIOS 루틴이 시작. 

 

2. 레지스터 영역과 파워 관리 영역을 초기화. 프로세서의 cs 및 eip 를 포함한 몇몇 레지스터에 미리 정해진 값을 설정 후 0xfffffff0 물리 주소의 코드르 실행. 이게 ROM에 들어있는 BIOS임. BIOS는 리얼모드 주소를 사용하며 따라서, GDT, LDT가 필요없음. 오직 세그먼트 x 16 +  OFFSET으로 주소 접근.

 

3. 인터럽트 핸들러와 장치 드라이버를 로드. 이때 인터럽트 벡터 역시 초기화. 이 인터럽트 벡터를 기반으로 커널에서 확장된 인터럽트 벡터를 자체적으로 생성하여 소지. 후에 이를 이용해서 응용 프로그램 내외적으로 통신을 가능케 함.

 

4. POST(Power-On Self-Test)를 수행.  컴퓨터 하드웨어에 대한 일련의 테스트. 어떤 장치가 존재하고 각 장치가 제대로 작동하는지 확인. 이 때 잘못된 하드웨어가 있으면 비프음이 발생! BIOS는 INT 19을 발생시켜 다음 과정으로 진행.

 

5. 시스템 내의 비디오 카드를 검색하고 다른  BIOS가 있는지 확인. 기타 장치들을 검색하고 해당 장치 내의 BIOS가 있다면 호출.  BIOS의 시작 화면이 출력되며 기타 정보들을 화면에 디스플레이.  PC 켜면 우리가 지겹게 봤던 그 처음 화면을 볼 수 있음.(Setup키, F1, Del, 시스템 로고, 시리얼 넘버 등...)

 

6. 기타 장치들의 추가 테스트 진행.

 

7. BIOS 에서 검사한 시스템 정보들을 화면에 출력. POST 과정의 완료 시점.

 

8. 부팅할 운영체제를 검색. BIOS 설정에 따라 디스크 드라이브 검색 순위가 다름. 디스크 드라이브의 첫 번째 섹터(Boot Sector)에 접근하려고 시도.

 

9. 운영체제가 있는 유효한 드라이브를 찾으면, 첫 번째 섹터 내용을 물리주소(0x00007c00)부터 시작하여 램으로 복사. 그 후 그 주소로 이동하여 복사한 코드를 실행.

 

  

- 참고 : 임베디드 개발자를 위한 파일 시스템 원리와 실습 ( 한빛 ) -

- 참고 : 리눅스 커널의 이해 3rd edition, 한빛미디어, 825p~826p -



출처 : http://hermet.pe.kr