실행 중인 프로그램의 메모리 이미지를 닫는 대신 디스크에 직렬화하는 것이 가능합니까?

실행 중인 프로그램의 메모리 이미지를 닫는 대신 디스크에 직렬화하는 것이 가능합니까?

무리한 일이라는 것을 알지만 이를 구현하는 방법에 대해 어느 정도 기억하고 있으며 여기 있는 누군가가 내가 말하는 내용을 이해하고 추진하는 데 도움을 줄 수 있기를 바랍니다.

터미널을 통해서든 GUI를 통해서든 기존 프로그램에는 실행하는 데 시간이 좀 걸릴 수 있는 시작 순서 및 종료 명령 순서가 있습니다. 또한 데이터베이스에서 데이터를 검색하는 것이 항상 가능하지 않을 수 있는 등 다른 제한 사항이 있을 수 있습니다.

프로그램이 실행되는 동안 RAM에서 차지하는 공간으로 정의되는 프로그램의 "메모리 이미지"입니다. 즉, 프로그램에 할당된 모든 메모리를 일대일로 매핑하는 것입니다.

실제 디스크를 이미지화하거나 해당 이미지를 마운트하고, 전체 종속성 구조에 대한 AppImage를 생성하고, 가상 OS 상태(실제로는 이미지)의 가상 머신 상태를 보존하는 것이 가능합니다. 프로그램 메모리 상태(결함, 비효율성 등)를 바이너리 파일로 변환하는 것이 가능합니까?

(내가 걱정하는 것 중 하나는 이미지에 보관된 일부 참조가 부팅할 때마다 변경될 수 있다는 것입니다. 그러나 이는 기술적으로 해결 가능한 문제이며 아마도 아이디어를 죽이지는 않을 것입니다.)

그렇다면 *nix 시스템에서 이 작업을 어떻게 수행합니까?

분명히 이것이 항상(또는 일반적으로) 장점은 아니지만 살펴볼 가치가 있다고 생각합니다. 내가하려는 일을 설명하려면 다음을 수행하십시오.

  1. 열려 있는Vim
  2. 많은 양의 텍스트를 작성Vim
  3. 공식적으로 Vim을 닫지 않고 디스크에 직렬화
  4. 며칠 기다려 보세요
  5. Vim디스크에서 인스턴스 역직렬화
  6. 계속 같은 글을 쓰세요

따라서 파일뿐만 아니라 전체 프로그램의 상태가 저장됩니다.

제가 생각한 한 가지 해결 방법은 가상 인스턴스에서 프로그램을 실행하는 것이었지만, 이는 종종 과잉이라고 느껴질 수 있습니다.

답변1

예. CRIU는 이를 가능하게 하는 Linux 기술의 약어입니다.

그러나 프로그램에서 연 파일이 변경되지 않고 "동결"되고, 소켓이 여전히 존재하고, 모든 외부 상태가 동일하거나, 상태 손실이 최소한 복구 가능해야 한다는 논리적 필요성으로 인해 발생하는 심각한 제한 사항이 있습니다. 이는 X11 프로그램을 효과적으로 제외하며 Curses/그래픽 tty를 사용하는 프로그램이 CRIU를 통과하는 것을 더 쉽게 만들지는 않습니다.

이런 일이 자주 일어나는 곳은컨테이너화서버 작업 부하 - 어쨌든 전체 파일 시스템은 비공개이며 네트워크 연결이 쉽게 끊어지므로 복구 기능이 서버 소프트웨어에 내장되어 있는 경우가 많습니다.

관련 정보