답은 파일 시스템없이 문자 그대로 의미하는지 또는 질문이 실제로 언급 된 방식과 약간 다르게 해석되는지 여부에 따라 달라집니다. 질문 해석 방식의 약간의 변형에 대한 답변은 다음과 같습니다.
- 블록 장치 없이 Linux를 실행하는 것은 전적으로 실행 가능하며 일부 특수 사용 사례에 유용합니다.
- 파일 시스템 없이 Linux를 실행 하려면 커널 코드의 일부를 다시 작성해야하며 유용한 노력이 아닐 수 있습니다.
- 파일 디스크립터 를 사용하지 않고 Linux를 실행 하려면 많은 노력이 필요합니다. 나는 그 노력의 가치가 없을 것이라고 확신합니다.
파일 시스템없이 작동하는 시스템을 만들기 위해 커널 코드의 일부를 다시 작성해야하는 이유는 다음과 같습니다.
- 모든 스레드에는 루트 디렉토리와 일부 파일 시스템을 가리켜 야하는 현재 작업 디렉토리가 있습니다.
- 프로그램은
execve파일 시스템에서 실행 파일이 필요한 시스템 호출 로 시작됩니다 .
- 커널은 부팅 과정에서 메모리 기반 파일 시스템을 만듭니다.
프로그램을 사용하여 시작한 후에는 프로그램이 시작된 execve실행 파일을 매핑 해제 할 수 있지만, 즉시 충돌하지 않고 실행하려면 먼저 파일에 의해 지원되지 않는 실행 가능 메모리 매핑을 만들어야합니다. 점프하고 실행 파일을 매핑 해제하기 전에 유용한 코드로 초기화해야합니다.
따라서 실행중인 사용자 모드 프로그램은 파일이 지원하는 메모리 맵핑이없는 상태에 존재할 수 있으며 파일이 지원하는 모든 파일 디스크립터를 닫을 수 있습니다. 루트 디렉토리와 현재 작업 디렉토리를 가질 수는 없지만 그 디렉토리를 자제 할 수 있습니다.
따라서이 상태에서 커널 코드를 구현하여 파일 시스템을 프로그램에서 멀리 가져 와서 계속 실행할 수는 있지만 유용한 것처럼 들리지 않습니다. 그리고 파일 시스템을 사용하는 중간 상태를 거치지 않고 해당 최종 상태로 들어가는 것은 아무런 이점이없는 더 많은 작업이 될 것입니다.
일부 특수 사용 사례에 유용한 설정
블록 장치 사용을 피하는 것이 유용 할 수 있습니다. 부팅하는 동안 커널은 메모리 파일 시스템을 만들고, cpio실행하기 전에 해당 파일 시스템을 아카이브의 내용으로 채울 수도 있습니다 init. 이렇게하면 블록 장치없이 메모리 기반 파일 시스템에서 시스템을 완전히 실행할 수 있습니다.
이는 상태를 유지하지 않으려는 경우 및 재부팅시 시스템이 클린 슬레이트에서 시작하는 것과 같은 시스템에 유용 할 수 있습니다.
물론 커널과 cpio 아카이브는 커널에 제어권이 부여되기 전에 어떻게 든 메모리에 존재해야합니다. 그들이 어떻게 부트 로더를위한 일을했는지. 최종 실행 시스템이 블록 장치를 사용하지 않더라도 부트 로더는 블록 장치에서 해당 장치를로드 할 수 있습니다. 그러나 부트 로더가 네트워크를 통해 부팅하는 등의 블록 장치를 사용하지 않고 커널 및 cpio 아카이브를 얻을 수도 있습니다.
useful exposure to the outside world