초기 컴퓨터 시스템의 프로그램 실행 방식이다. 이것은 CPU가 메모리에 저장된 프로그램의 명령어를 하나씩 가져와서 실행하는 것이다. 하지만 이 당시 OS는 라이브러리에 불과하여 프로세스를 멈추거나 재개할 권한이 없었다. 이로 인해 두 가지의 문제가 있었다.
제한된 명령을 어떤 방식으로 수행해야 하는지 알 수 없었다는 첫 번째 문제의 해결을 위해 Limited Direct Execution(LDE)가 도입 되었다. 이것을 통해 유저 프로세스가 CPU나 메모리와 같은 시스템 리소스에 접근하는 것을 막고, System Call을 통해 그것의 수행을 가능하게 만들었다.
제한된 명령에는 디스크로의 입출력 명령이나 CPU나 메모리와 같은 시스템 리소스에 접근하는 것, 특수한 명령어 사용이 있다.
이런 제한된 명령을 사용하기 위해서 User Mode와 Kernel Mode로 나눠 명령을 수행한다.
프로세스 간의 전환이 불가능하다는 두 번째 문제를 해결하기 위해 나온 방법이다. 이 문제를 해결하기 위해 두 가지 해결책이 등장했다.
이 방식에서는 프로세스가 수행될 때, OS가 CPU에 대한 권한을 가져갈 수 있도록 Yield라고 하는 System Call을, 또는 OS가 권한을 가질 수 있는 기회들(System Call, 입출력 요청, Interrupt 발생)을 주기적으로 제공할 것이다. 따라서 OS가 CPU에 대한 권한을 강제로 가지게 하지 않아도 된다.
하지만 사용자가 System Call이나 Interrupt를 발생시키지 않거나 무한 루프가 발생했을 때, OS는 CPU 권한을 강제로 가질 수 없어서 프로세스는 물론 컴퓨터 시스템 자체가 멈추게 된다.
그래서 OS는 강제로 CPU에 대한 권한을 가져오는 것이 필요했다. 이를 위해 OS는 Timer를 두고 일정 시간마다 권한을 가져오도록 했다. 그리고 이 방식은 현재까지도 모든 OS에 적용된 접근 방식이다.
Scheduler가 어떤 프로세스를 실행해야 할지 결정을 내리면 OS는 Context Switch를 시작한다. 이것은 Context Saving(현재 실행 중인 프로세스의 모든 정보를 PCB에 저장), Context Switching(Scheduler가 결정한 프로세스로의 전환), Context Restoring(이전에 실행되었던 프로세스의 정보를 PCB에서 불러오기)의 세 단계로 진행된다.