0. 핵심질문
CPU가 여러 개 존재한다는 환상을 어떻게 제공하는가?
운영체제는 하나의 프로세스를 실행하다 멈추고 다른 프로세스를 실행시키며 이러한 환상을 만들어낸다.
그리고 이러한 방법을 시분할(time sharing)이라고 한다.
1. 프로세스의 개념
프로세스의 개념을 이야기하기 전에 프로그램은 무엇일까?
OSTEP에서는 프로그램은 명령어와 정적 데이터의 묶음 이라고 정의한다.
그리고 이 프로그램을 실행하게 되면 프로세스가 된다. 즉, 프로세스는 실행 중인 프로그램이다.
2. 프로세스 API
OS가 반드시 API로 제공하여야 하는 기본 기능에 대해서만 간단히 이야기한다.
- 생성 - 새로운 프로세스를 생성할 방법을 제공해야한다.
- 제거 - 프로세스를 강제로 제거할 방법을 제공해야한다.
- 대기 - 프로세스를 잠시 대기 시킬 방법을 제공해야한다.
- 각종 제어 - 프로세스를 다시 시작시키는 등의 방법을 제공해야한다.
- 상태 - 프로세스의 상태 정보를 알 수 있는 방법을 제공해야한다.
3. 프로세스 생성
프로세스는 어떤 절차를 거쳐 생성되는 것일까? 운영체제는 어떻게 프로그램을 준비하고 실행시키는지 알아보자.

우선 운영체제는 먼저 디스크 상에 존재하는 프로그램(코드와 정적 데이터의 묶음)을 메모리에 적재한다.
초기 운영체제는 프로그램을 실행하기 위해 코드와 정적 데이터를 모두 메모리에 적재하였다.
그러나 현대의 운영체제는 실행에 필요한 부분만 그때그때 메모리에 적재하는 지연로딩(Lazy Loading)이라는 방법을 사용함으로써 메모리의 사용을 최적화하고 초기 로딩 시간을 감소시키는 장점을 얻을 수 있었다.
메모리에 프로그램을 적재하였다면 운영체제는 메모리를 아래 그림과 같이 code, data, heap, stack의 용도로 구분짓고 메모리를 할당한다.

운영체제는 프로그램을 실행하기 위해 위 두 가지 절차를 거치게 된다.
4. 프로세스 상태
프로세스의 상태는 크게 3가지로 분류할 수 있다.
- 실행(Running)
- 준비(Ready)
- 대기(Blocked)
그리고 이 상태는 운영체제의 스케줄링 정책에 따라 전이된다.
4.1. 준비상태와 대기상태
프로세스의 상태를 살펴보면 실행 상태는 어떤 상태를 의미하는지 바로 와닿지만 준비상태와 대기상태에 대해서는 좀 설명이 필요할 것 같다. 그리고 비슷해보이는 두 상태에는 어떤 차이가 있는 것일까?
OSTEP 에서는 두 상태에 대하여 아래와 같이 정의한다.
준비(Ready): 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중이다.
대기(Blocked): 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시키는 연산이다.
좀 더 자세히 이야기하자면 준비상태는 프로세스가 CPU만 할당받으면 바로 실행상태로 전환될 수 있는 상태를 이야기한다.
대기상태는 CPU를 할당받는다고 바로 실행될 수 있는 것이 아니라 특정 사건(다른 자원에 대한 요청 등)이 발생하기를 기다리고 있는 상태라고 할 수 있다.
The difference between the WAITING and BLOCKED transition is that in WAITING the thread waits for the signal from another thread or waits for another process to be completed, meaning the burst time is specific. While, in BLOCKED state, there is no specified time (it depends on the user when to give an input).
GeeksForGeeks 에서는 위와 같이 이야기한다.
준비상태는 다른 프로세스의 완료를 기다리고 있고, 이는 구체적인 burst time이 존재한다는 것이다.(예를 들면 10ms와 같은 구체적인 시간)
하지만 대기상태는 사용자의 입력을 기다리는 상황과 같이 구체적인 시간을 정의할 수 없다는 것이다.
참고
ostep-translations/korean at master · remzi-arpacidusseau/ostep-translations
Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations
github.com
Thread States in Operating Systems - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org