글
(1) 전원스위치 ON
(2) 시스템 전원공급
(3) 메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행
○ BIOS프로그램은 전원공급과 함께 메모리의 특정번지에 자동 로드
○ CPU는 전원공급과 함께 특정번지의 BIOS프로그램을 자동실행
○ BIOS프로그램들의 실행내용
- 자체진단기능(POST)
: 하드웨어(CMOS검사, CPU, MEMORY, 그래픽카드 등)의 이상유무를 검사하고 초기화
- 부팅매체검색과 부트로더 실행
: POST과정이 이상없이 진행완료되면 검색된 부팅매체에서 부트로더를 불러옴
CMOS셋업이 결정한 부팅 순서대로 부팅이 가능한 장치를 찾는다.
: 부팅매체로 선택되었다면 부팅파티션에 있는 0번섹터(MBR)에 있는 부트로더을 읽음
MBR에는 주부트로더(부트로더중에 초기에 기본적으로 필요한 부분)가 담겨진다.
MBR의 첫 446바이트는 로더 프로그램이고, 그 뒤 64바이트는 파티션 정보를 담고있다.
마지막 2바이트는 매직넘버로 진짜 부트섹터인지 판별할때 사용된다.
추후 MBR에 담긴 주 부트로더가 나머지 많은 내용을 담고있는 2차 부트로더를 불러온다.
- 부트로더가 메모리에 적재되면 BIOS는 종료, 시스템제어권은 부트로더(GRUB)에게 넘어간다.
(4) 부트로더의 실행
○ 부트로더 실행과 함께 /boot/grub/grub.conf파일을 읽어서 부팅 커널를 결정
○ 부트로더은 커널(kernel)이미지를 불러옴, 시스템 제어권을 커널로
(5) 커널의 로딩
○ 커널은 swapper프로세스(PID 0번)를 호출함
○ swapper는 커널이 사용할 각 장치드라이브들을 초기화, init프로세스(PID 1번)를 실행
○ init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행
(6) init프로세스의 실행
○ 이후의 과정들은 모두 init프로세스의 실행내용 (/etc/inittab파일의 실행내용들)
○ 로그인프롬프트가 나오기 까지의 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들임
[참고]
(1) 커널 부팅시 필요한 코드들 --------> 5번 커널의 로딩의 세부 작동
○ arch/i386/boot/bootsect.S
- 플로피 부트섹터 코드 (HDD로 부팅시 사용 안함)
○ arch/i386/boot/setup.S
- start() 함수 수행 : 기복적인 하드웨어 설정
○ arch/i386/boot/compressed/lead.S
- setup()함수 수행 : 스택을 설정, BSS초기화
○ arch/i386/boot/compressed/misc.c
- decompress_kernel()함수 호출 : 압축된 커널을 풀어준다.
○ arch/i386/kernel/head.S
- srartup32()함수호출 --> 하드웨어 종속적인 초기화, start_kernel을 호출
세그먼트값 설정
페이지 테이블 초기화 및 페이지 활성화
BSS섹션 초기화
IDT설정
부트 파라미터와 커널 커맨드라인 복사
CPU유형 및 FPU검사
GDT와 IDT로딩
start_kernel 함수 호출 -->리눅스 커널의 엔트리포인트 (진짜 시작이라고!!!)
○ init/main.c
- 요기 안에 start_kernel이 들어있다!!!
※ 출처 : http://idkkangjs.blog.me/30091117058
'L inux > Kernel' 카테고리의 다른 글
시스템 콜(System Call) - 1 (0) | 2011.09.26 |
---|---|
리눅스 커널 컴파일 (0) | 2011.09.26 |
리눅스와 리눅스 커널 (0) | 2011.09.21 |
리눅스 커널의 내부구조 (0) | 2011.04.01 |
리눅스 커널 (3) | 2011.04.01 |
RECENT COMMENT