Linux 커널 이미지를 RAM에 로드한 후 어떤 일이 발생합니까?

Linux 커널 이미지를 RAM에 로드한 후 어떤 일이 발생합니까?

부팅 프로세스 후 Linux 커널 이미지가 RAM에 로드된 후 발생하는 활동 흐름을 알고 싶습니다.

답변1

Linux 2.6부터:

핵심

RAM에 로드된 후 커널은 다음 기능을 수행합니다.

setup():

  1. 물리적 메모리의 레이아웃을 설명하기 위해 RAM에 테이블을 만듭니다.
  2. 키보드 반복 지연 및 속도를 설정합니다.
  3. 비디오 어댑터 카드를 초기화합니다.
  4. 하드 디스크 매개변수를 사용하여 디스크 컨트롤러를 초기화합니다.
  5. IBM 마이크로 채널 버스를 확인하십시오.
  6. PS/2 포인팅 장치(버스 마우스)를 확인하십시오.
  7. 고급 전원 관리(APM) 지원을 확인하세요.
  8. 지원되는 경우 사용 가능한 하드 디스크를 설명하는 테이블을 RAM에 작성하십시오.
  9. 커널 이미지가 RAM에서 더 낮은 위치에 로드되면 더 높은 위치로 이동하세요.
  10. A20 핀을 설정합니다(고대 8088 마이크로프로세서에 대한 호환성 수정).
  11. 임시 인터럽트 설명자 테이블(IDT)과 임시 전역 설명자 테이블(GDT)을 설정합니다.
  12. 부동 소수점 단위(FPU)를 재설정합니다.
  13. 프로그래밍 가능한 인터럽트 컨트롤러(PIC)를 다시 프로그래밍하십시오.
  14. 리얼 모드에서 보호 모드로 전환합니다.

startup_32():

  1. 분할 레지스터와 임시 스택을 초기화합니다.
  2. eflags레지스터의 모든 비트를 지웁니다 .
  3. 초기화되지 않은 데이터 영역을 0으로 채웁니다.
  4. decompress_kernel()커널 이미지의 압축을 풀기 위해 호출됩니다 .

startup_32()(같은 이름, 다른 기능):

  1. 최종 분할 레지스터를 초기화합니다.
  2. bss세그먼트를 0으로 채웁니다 .
  3. 임시 커널 페이지 테이블을 초기화합니다.
  4. 페이징을 활성화합니다.
  5. 프로세스 0에 대한 커널 모드 스택을 설정합니다.
  6. eflags레지스터의 모든 비트를 다시 지웁니다.
  7. IDT를 빈 인터럽트 핸들러로 채웁니다.
  8. 시스템 매개변수를 사용하여 첫 번째 페이지 프레임을 초기화합니다.
  9. 프로세서 모델을 결정합니다.
  10. GDT와 IDT의 주소를 사용하여 레지스터를 초기화합니다.

start_kernel(): 거의 모든 커널 구성 요소가 이 함수에 의해 초기화되며 이는 단지 몇 가지에 불과합니다.

  • 스케줄러
  • 메모리 영역
  • 친구 시스템 할당자
  • 이온 교환 기술
  • 소프트 IRQ
  • 날짜와 시간
  • 슬래브 분배기
  • 프로세스 1 생성( /sbin/init)

전체 "목록"은 다음에서 확인할 수 있습니다.리눅스/init/main.c

내부에

Init는 시스템을 원하는 상태로 만드는 데 필요한 모든 사용자 프로세스를 시작합니다. 이 루틴은 호출되는 실행 레벨과 할당에 크게 의존합니다.

runlevel콘솔에 뭔가를 입력하면 시스템의 현재 런레벨이 표시됩니다.

보기 /etc/rcX.d/(또는 /etc/rc.d/rcX.d/)에서 X를 런레벨로 바꾸세요.
실행 우선순위에 따라 정렬된 기호 링크입니다. S01....즉, 스크립트는 시작 프로세스 초기에 시작되어 S99....시작 프로세스가 끝날 때 실행됩니다. 심볼릭 KXX....링크는 동일한 작업을 수행하지만 종료 시퀀스에 대한 것입니다.

일반적으로 이러한 스크립트는 디스크, 네트워크, 로깅, 장치 제어, 특수 드라이버, 환경 및 기타 여러 필수 시퀀스를 처리합니다.

답변2

  • "Uncompressing Linux.."가 표시되면 커널이 시스템 하드웨어 제어권을 인수한 것입니다.
  • 커널은 그래픽 카드의 BIOS 레지스터와 화면 출력 형식을 확인하고 설정합니다.
  • 그런 다음 커널은 BIOS 설정을 읽고 기본 하드웨어 인터페이스를 초기화합니다.
  • 다음으로 커널의 드라이버가 하드웨어를 초기화합니다.
  • 그런 다음 커널은 파티션을 확인합니다.
  • 그런 다음 루트 파일 시스템을 마운트합니다.
  • 그런 다음 커널은 init를 시작하여 기본 시스템과 모든 프로그램 및 구성을 시작합니다.

답변3

부트로더는 커널 명령줄(사용 가능한 경우)을 통해 이미지 진입점으로 점프하고 커널이 나머지를 처리합니다.

관련 정보