부팅 시 전체 커널이 메모리에 로드됩니까?

부팅 시 전체 커널이 메모리에 로드됩니까?

나는 끝까지 읽었다이 인기 있는 IBM 문서(온라인에서 많이 보던 내용입니다) 초기 램디스크의 기능을 설명합니다.

그러나 이것이 어떻게 작동하는지 개념화하는 데 문제가 있습니다.

문서에는 다음과 같이 나와 있습니다.

부트 로더(예: GRUB)는 로드할 커널을 식별하고 커널을 복사합니다.커널 이미지 및 관련 initrd를 메모리에 추가

나는 이미 혼란스럽습니다. 전체 커널을 메모리에 복사합니까, 아니면 일부만 복사합니까? 전체 커널이 메모리에 있다면 초기 RAM 디스크가 필요한 이유는 무엇입니까?

내 생각에 initrd의 목적은 작은 일반 커널 이미지를 가질 수 있도록 하는 것이며 initrd는 커널 이미지를 로드하기 전에 여기에 올바른 모듈을 설치합니다. 하지만 전체 커널이 이미 메모리에 있다면 왜 initrd가 필요한가요?

이것은 또한 나를 혼란스럽게 하는 또 다른 문제를 불러일으킵니다. 모듈이 커널에 로드되는 위치는 어디입니까? 모든 커널 모듈은 initrd에 저장되어 있습니까?

답변1

전체 커널은 부팅 시 일반적으로 initramfs현재와 함께 메모리에 로드됩니다. (부팅이 필요하지 않도록 시스템을 설정하는 것도 가능 initramfs하지만 데스크탑과 서버에서는 흔하지 않습니다.)

의 목적은 initramfs"실제" 파일 시스템을 마운트하고 시스템 부팅을 계속하는 데 필요한 기능을 제공하는 것입니다. 여기에는 커널 모듈과 다양한 바이너리가 포함됩니다. 적어도 udev일부 네트워킹 및 kmod로딩 모듈이 필요할 수도 있습니다.

모듈은 부팅 후 커널에 로드될 수 있으므로 실제 파일 시스템, 개발 트리(모듈을 개발하는 경우) 등 어디에나 저장할 수 있습니다. 마운트 루트 파일 시스템(나머지 포함)만 포함 initramfs하면 됩니다 . 필수 모듈.initramfs/lib/modulesinitramfs

답변2

전체 커널(모듈 제외)이 메모리에 로드됩니다. 파일 시스템을 사용하기 전에 커널에 특정 모듈이 필요한 경우(일반적으로 파일 시스템 및 해당 장치용 드라이버를 의미함) 이러한 모듈은 initramfs(메모리 내)에 있고 커널은 해당 모듈을 거기에서 로드합니다. 다른 모듈은 나중에 파일 시스템에서 로드할 수 있습니다.

답변3

대부분의 최신 Linux 설정에서 커널은 대체로 모듈 기반입니다. 즉, 커널 자체(부팅 시 RAM에 로드됨)에는 가장 기본적인 기능만 포함되어 있으며 나머지 모든 기능은 모듈(런타임 시 로드 가능)로 컴파일됩니다. ) . 이것이 작동하려면 부팅에 필요한 장치나 파일 시스템이 모듈 initramfs(이름에서 알 수 있듯이 부팅 시 설치되는 간단한 파일 시스템이 있는 RAM 영역)인 경우에도 커널이 로드됩니다. 이 임시 파일 시스템은 마운트되며 /시작 프로그램과 필수 모듈을 포함합니다. 부팅이 initramfs완료되면 Linux는 를 수행하고 pivot_root(8)실제 파일을 설치한 다음 내용을 /삭제합니다 .initramfs

이러한 복잡성의 핵심은 예를 들어 배포판이 다음을 컴파일할 수 있다는 것입니다.하나커널(최소 커널 및 전체 모듈 세트)이며, 커널을 설치할 때 initramfs대상 시스템의 하드웨어 및 설정에 적합한 커널을 생성합니다. 이 모든 것은 "개인용 컴퓨터"의 다양한 장치 및 구성으로 인해 필요합니다.

관련 정보