저는 시스템 프로그래밍이나 운영 체제에 대해 잘 알지 못하기 때문에 어리석은 질문일 수도 있습니다. 하지만 최근에는 치트 방지 시스템을 구현한 게임을 Wine에서 실행하려고 했습니다. 많은 좌절 끝에 나는 치트 방지 시스템이 커널 모드("링 0"?)에서 실행되어야 하고 Wine은 사용자 모드("링 3"?)에서 실행되어야 하기 때문에 이것이 불가능하다는 것을 알게 되었습니다.
링 0과 링 3의 차이점이나 왜 와인이 링 0과 링 3에서는 실행되지만 링 3에서는 실행되지 않는지에 대한 많은 게시물이 있습니다. 예를 들어:와인이 커널 모드 드라이버를 지원하지 않는 이유는 무엇입니까?
그런데 생각해보면 이 문제는 Docker와 같은 컨테이너 솔루션이 해결하는 문제와 묘하게 친숙하다는 느낌이 듭니다. Docker 내에서 실행되는 Wine이 Ring 0 액세스를 안전하게 제공하는 것이 불가능합니까? 아니면 Docker는 사용자 모드 프로그램만 실행할 수 있나요? 악성 프로그램이 컴퓨터에서 실행되는 것을 방지하기 위해 컨테이너를 활용할 수 있는데 왜 전체 CPU를 에뮬레이트해야 합니까?
답변1
- x86 링 0 = 관리 모드 = 커널 모드
- x86 링 3 = 사용자 모드
Docker 컨테이너와 Docker 데몬은 사용자 모드에서 실행됩니다. 컨테이너는 호스트 시스템과 커널을 공유합니다. Docker는 다른 프로그램이 커널의 이전 기능을 사용하는 것처럼 커널의 새로운 기능을 사용합니다.
감독자 모드에서 코드를 실행하면 커널에서 실행되며 모든 프로세스와 데이터에 대해 강력한 성능을 발휘합니다.
그러나 하이퍼바이저 모드(Virtual Box 또는 기타 시각화 도구 사용)에서 코드를 실행할 수 있습니다. 이렇게 하려면 사용자 모드 부분뿐만 아니라 전체 시스템을 가상 머신에 배치해야 합니다. 따라서 커널 모드 코드를 추가할 수 있습니다.
참고: 커널 모드 코드를 설치하면 시스템을 완전히 제어할 수 있습니다. 이는 사용자가 수행하는 모든 작업을 확인하고 원하는 작업을 수행하도록 기계를 제어할 수 있습니다.