(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
by 민트앤라떼 2011. 9. 23. 14:49