현재 저는 리눅스 부팅 프로세스를 배우고 있습니다. 여기서는 initrd가 커널(LVM, NFS 등)에 필요한 드라이버를 포함하는 임시 루트 파일 시스템을 생성한다는 것을 확인했습니다. 그런 다음 커널은 드라이버를 사용하고 실제 루트 파일 시스템을 마운트합니다.
여기서 내 질문은 커널 자체에 필요한 드라이버가 포함되어서는 안되는 이유와 커널이 initrd에 의존하는 이유는 무엇입니까?
답변1
다음 질문에 대한 답변도 참조하세요.
1. 커널 자체에 필요한 드라이버가 포함되어서는 안 되는 이유
먼저, 커널 메모리는 요청 시 페이징되지 않습니다. 이는 순환 종속성이 됩니다. 메모리가 부족할 때 디스크 드라이버가 디스크로 페이지 아웃되면 나중에 다시 로드할 수 없습니다.
(그리고 Linux 커널 내부에서는 저장 경로를 포함하지 않고 안전하게 호출할 수 있는 일부 상위 계층을 정의하려고 시도하지 않습니다. 아마도 가능하다고 합니다. Windows에서는 그렇게 합니다. 이 상위 계층이 무엇인지는 모르겠습니다. 아마도 동적으로 정의되었거나 Windows가 NFS 교체와 같은 이상한 아이디어를 지원하지 않을 수도 있습니다.
대신 모듈 로딩을 지원합니다. 이 특정 머신에 NFS가 필요하지 않다면 이를 마운트할 필요가 없습니다.
최신 배포판에서는 총 약 100MB의 RAM이 절약됩니다. (점유된 공간을 살펴보십시오 /lib/modules/$VERSION/
. 최신 배포판에서는 모듈이 .xz
파일처럼 압축되어 있습니다.)
2. 그리고 왜 initrd에 의존하는지
initrd를 사용하는 가장 확실한 이유는 커널 모듈이지만 두 번째 측면도 있습니다.
이를 통해 사용자 공간은 루트 파일 시스템에 액세스하기 위해 임의로 복잡한 스토리지 스택을 구축할 수 있습니다. 예를 들어 DHCP를 사용하여 NFS를 지원하는 IP 주소를 얻거나 디스크 암호화 암호를 묻는 메시지를 표시합니다.
마찬가지로 커널은 사용자 인터페이스 코드와 같은 과도한 팽창을 방지하려고 합니다.
메모리 사용량은 단 하나의 이유일 뿐입니다. 커널/사용자 공간 파티션은 여러 가지 용도로 사용됩니다. 예를 들어, 커널은 커널 문제만 다루는 프로젝트일 수 있습니다. 사용자 공간은 무엇이든 될 수 있습니다. "일반적인" Linux 배포판일 수도 있고 Android 운영 체제와 같이 완전히 별개의 프로젝트일 수도 있습니다.
이는 커널 + 코어 사용자 공간을 함께 유지하는 BSD 등의 다른 운영체제와는 다릅니다. BSD는 이것을 설명할 수 있습니다커널 및 사용자 공간에서 단일 플래그 데이 변환을 통해 2038 문제 처리.
답변2
드라이버를 커널에 포함하려는 경우에는 필요하지 않습니다. 훌륭한 소스 기반 Linux 배포판은 사용자 정의 커널 구성에 도움이 될 수 있습니다. Gentoo
또는 간단히 현재 배포판의 패키지 관리자를 사용하여 Linux 커널 소스 코드(일반적으로 개발 및 헤더 패키지)를 얻고 이를 사용하여 make config
필요한 값을 단계별로 진행할 수 있습니다. 필요한 하드웨어 대상 시스템을 선택하고 각 값을 에서 로 변경 M
합니다 *
.
자세한 지침은 다음에서 확인할 수 있습니다.문서