커널은 프로세스 중 어떤 것도 파괴하지 않고 런타임 시 어떻게 자체적으로 업데이트됩니까?
답변1
커널을 업데이트하면 실제로 커널도 업데이트됩니다.팩. 대부분의 Linux 배포판에서 이는 실제로 패키지 관리자에 패키지를 등록하고, 아래에 새 모듈을 추가하고 /lib/modules
, 아래에 initramfs 및 커널을 추가하고 /boot
, 부트로더 항목 및 기타 기타 활동을 업데이트하는 것뿐입니다. 일반적으로 메모리에 로드된 커널을 실제로 대체하지는 않습니다.
시작 시 커널 자체가 메모리에 로드됩니다. 즉, 로드한 파일(예: /boot/vmlinuz
)이 사라지더라도 커널을 처음 로드한 후에는 더 이상 필요하지 않습니다.
설령 그럴지라도예전에는일부 항목(예: 디버깅 정보)이 필요하여 교체되었습니다. 연결된 inode의 참조 카운트가 0이 될 때까지 지원 데이터가 삭제되지 않기 때문에 이미 열린 파일 핸들이 있는 사람은 누구나 파일을 계속 사용할 수 있습니다(커널 자체는 사용자 공간 실행 파일에서 프로세스를 실행하는 것과 달리 이미 메모리에 로드되어 있으므로 이러한 참조가 필요하지 않습니다. 파일에서 일부 사용자 공간 프로그램을 실행하지 않는 한 이러한 블록은 일반적으로 디스크에서 완전히 해제될 수 있습니다. Linux 커널은 자체 메모리를 페이징하지 않으며 부팅 시 동적으로 압축을 풀기도 합니다. 부팅된 /boot/vmlinuz에 액세스할 수 있는 방법이 없거나 /proc/.../exe
전혀 /proc/.../fd
없습니다. 커널은 네트워크 부팅이나 USB 부팅의 경우 부팅되는 장치를 마운트하지 못할 수도 있습니다.
따라서 일반적으로 커널은 자체적으로 업데이트되지 않습니다. 이는 일반적으로 재부팅 또는 kexec
재부팅 시 수행됩니다. 당신이 묘사하는 종류의 것하다제한된 사용 사례에 존재반점,부정 이득, 그리고케스 스티칭, 그러나 일반적으로 이는 새로운 업스트림 커널 버전이 아닌 소규모 및 대상 패치에만 사용할 수 있습니다.