운영체제가 프로그램의 집합이라는 점과 처리기에 의존한다는 점 때문에 하나의 프로세스로 인식하고 이러한 문제에 대해 다양한 접근 방법이 제안되었다.
전통적인 방법으로 모든 프로세스의 외부에서 운영체제 커널을 수행시키는 것이다.
운영체제는 자신이 사용할 메모리 영역도 갖고, 프로시저 호출과 복귀를 위한 자신의 시스템 스택도 가지며, 분리된 개체로서 수행되고 특권 모드에서 동작한다.
작은 컴퓨터(PC, 워크스테이션) 상에서 구동되는 운영체제는 보통 사용자 프로세스 문맥에서 모든 운영체제 소프트웨어를 수행시킨다.
이런 식으로 운영체제는 n개의 프로세스 이미지를 관리한다. 이러한 프로세스 이미지의 구조를 자세히 살펴보면
이런 식으로 프로세스가 커널 모드에 있는 동안에 수행한 호출과 복귀를 관리하기 위해 다른 영역과 분리된 커널 스택이 사용된다.
공유주소 공간에는 운영체제 코드와 데이터가 들어가 있어 모든 사용자 프로세스에 의해 공유된다.
인터럽트/트랩/수퍼바이저 호출 등이 발생되면 처리기는 커널 모드로 전이하여 운영체제가 제어를 가지게 되고, 사용자 프로그램으로부터 OS로 제어를 넘겨주기 위해 모드 문맥이 저장되고, 운영체제 루틴으로 모드 전환이 이루어진다. 하지만 수행은 현재 사용자 프로세스 내에서 프로세스 교환 없이 같은 프로세스 내에서 모드 전환만이 발생한다.
현재 프로세스 내에 있는 인터럽트된 프로그램의 수행을 재개할 수 있다는 점에서 이점을 가진다.
하지만 이전에 수행되던 프로그램으로 제어가 복귀되지 않고 프로세스를 교환하기로 했다면 제어가 프로세스 교환 루틴으로 넘어간다. 이 과정에서 현재 프로세스는 비수행 상태로, 다른 프로세스는 수행 프로세스로 선택된다. 이 때 수행되는 작업은 모든 프로세스의 외부에서 일어나고 있다고 생각하면 된다.
이러한 운영체제에 대한 관점이 주목받는 이유는 사용자 코드가 아닌 공유 가능한 운영체제 코드에서 프로세스가 자신의 상태 정보를 저장하고 제어를 넘겨주는 과정이 이루어지기 때문이다.
사용자 프로세스 환경에서 운영체제 루틴들이 수행되고 있어도 사용자/커널 모드로 나누어져 있기 때문에 사용자는 운영체제 루틴에 관여할 수 없다는 사실이 곧 프로세스와 프로그램이 일대일 관계가 아니라는 것을 상기시켜 준다.
운영체제를 시스템 프로세스들의 집합으로 구현한 형태이다. 커널의 소프트웨어 부분은 커널 모드에서 수행되지만 커널의 주요 기능들은 위에 보이는 것처럼 여러 개의 분리된 프로세스로 구성되며, 여기서도 각 프로세스 밖에서 수행되는 작은 크기의 프로세스 교환 코드가 있을 수 있다.
이점