본문 바로가기
Computer Sience/Operating System

[OS] 운영체제 아주 쉬운 세 가지 이야기 4장 프로세스의 개념

by 제우제우 2025. 3. 31.

참고 자료 

[책] 운영체제 아주 쉬운 세 가지 이야기 

4장 프로세스의 개념 개요 

사용자는 하나 이상의 프로그램을 동시에 실행시키기를 원한다. 적은 개수의 CPU 밖에 없더라도, 운영체제가 어떻게 무한개에 가까운 CPU가 있는 듯한 환상을 만들 수 있을까?

 

운영체제는 CPU를 가상화하여 이러한 환상을 만든다. 하나의 프로세스를 실행하고, 얼마 후 중단시키고 다른 프로세스를 실행하는 작업을 반복하면서 실제 하나 또는 소수의 CPU로 여러 개의 가상 CPU가 존재하는 듯한 환상을 만들어 낸다. 시분할(time sharing)

 

운영체제의 지능은 정책의 형태로 표현된다. 정책은 운영체제 내에서 어떤 결정을 내리기 위한 알고리즘이다. 예를 들어, 실행 가능한 여러 프로그램들이 있을 때, 운영체제는 어느 프로그램을 실행시켜야 하는가? 바로 운영체제의 스케줄링 정책(scheduling policy)이 결정을 내린다. 

4.1 프로세스의 개념

운영체제는 실행 중인 프로그램의 개념을 제공하는데, 이를 프로세스(process)라 한다.

프로세스의 하드웨어 상태 중 가장 중요한 구성 요소는 메모리이다. 명령어, 데이터 모두 메모리에 저장된다. 프로세스가 접근할 수 있는 메모리(주소 공간(address space))는 프로세스를 구성하는 요소이다.

레지스터도 구성 요소 중 하나. 프로세스의 하드웨어 상태를 구성하는 레지스터 중에 특별한 레지스터(PC, SP 등...)들이 존재한다.

4.2 프로세스 API

생성(Create)

운영체제는 새로운 프로세스를 생성할 수 있는 방법을 제공해야 한다.

쉘에 명령어를 입력하거나, 응용 프로그램의 아이콘을 더블-클릭하여 프로그램을 실행시키면, 운영체제는 새로운 프로세스를 생성한다.

 

제거(Destroy)

프로세스 생성 인터페이스를 제공하는 것처럼 운영체제는 프로세스 를 박제로 제거할 수 있는 인터페이스를 제공해야 한다.

 

대기(Wait)

때론 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문에 여러 종류의 대기 인터페이스가 제공

 

각종 제어(Miscellaneous Control)

프로세스의 제거, 대기 이외에, 여러 가지 제어 기능들이 제공된다. 예를 들어, 대부분의 운영체제는 프로세스를 일시정지하거나 재발(일시정지되ᨩ던 프로세스의 실행을 다시 시작)하는 기능을 제공: 컨텍스트 스위칭에 사용되는 API?

 

상태(Status)

프로세스 상태 정보를 얻어내는 인터페이스도 제공된다. 상태 정보에는 얼마 동안 실행되는지 또는 프로세스가 어떤 상태에 있는지 등이 포함된다.

4.3 프로세스 생성: 좀 더 자세하게

어떻게 프로그램이 프로세스로 변형되는가?

프로그램 실행을 위하여 운영체제가 하는 첫 번째 작업은 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간에 load하는 것이다. 운영체제는 코드와 정적 데이터를 메모리에 탑재하기 위해서 보조기억장치(HDD/SSD)의 해당 바이트를 읽어서 메모리의 어딘가에 저장해야 한다. 

 

초기 운영체제는 프로그램 실행 전에 코드와 데이터를 모두 메모리에 탑재하였다. 하지만 현대의 운영체제들은 이 작업을 늦추었다. 즉, 필요할 때 필요한 부분만 메모리에 탑재한다. 정확하게 이해하기 위해서는 페이징(paging)스와핑(swapping)동작의 이해가 필요하다.

Lazy Loading

 

코드와 정적 데이터가 메모리에 탑재된 후, 프로세스를 실행시키기 전에 운영체제는 프로그램의 run-time stack 용도로 메모리를 할당시킨다. 운영체제는 스택을 주어진 인자로 초기화 main() 함수의 (args:java c:argc,argv)

 

운영체제는 프로그램의 힙을 위한 메모리 영역을 할당 

 

운영체제는 입출력과 관계된 초기화 작업을 수행한다. UNIX 시스템에서 각 프로세스는 기본적으로 표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR) 장치에 해당하는 세 개의 파일 디스크립터(file descripter)를 갖는다. (System.in / System.out / System.err) 이 디스크립터들을 사용하여 프로그램은 입출력 작업을 쉽게 할 수 있다. 

 

프로그램 실행을 위한 준비를 마치게 되면 프로그램의 시작 지점(entry point)에서 프로그램을 시작하는 마지막 작업만이 남는다. 

운영체제는 CPU를 새로 생성된 프로세스에게 넘기고 프로그램 실행이 시작된다.

4.4 프로세스 상태

실행(Running)

실행 상태에서 프로세스는 프로세서에서 실행 중 즉, 프로세스는 명령어를 실행

준비(Ready)

준비 상태에서 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중

대기(Blocked)

프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시키는 연산. (ex: I/O 작업)

 

 

실행 상태에서 준비 상태로의 전이는 프로세스가 다시 스케줄 될 수 있는 상태를 의미. 프로세스가 대기 상태가 되면 요청 완료 등의(인터럽트)가 발생할 때까지 대기 상태로 유지된다.

 

CPU만 사용하는 2개의 프로세스 그림 

 

CPU 스케줄링에 의해서 Process0이 계속 실행된다. 

이런 결정이 좋은 결정이었는지는 확실하지 않다. 운영체제는 스케줄러를 통해서 이러한 결정을 내린다. 

4.5 자료 구조

운영체제도 일종의 프로그램이다. 다른 프로그램들과 같이 다양한 정보를 유지하기 위한 자료 구조를 가지고 있다. 예를 들어 프로세스 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 프로세스 리스트(process list)와 같은 자료 구조를 유지한다. 

 

대기, 준비, 실행 이외의 프로세스 상태 

초기(initial) new?

프로세스가 생성되는 동안의 상태 

 

최종(final) zombie?

프로세스는 종료되었지만 메모리에 남아있는 상태 

4.6 요약

운영체제의 기본 개념인 프로세스를 공부. 프로세스는 간단히 말하면 실행 중인 프로그램. 핵심은 프로세스 구현에 필요한 기법, 구현한 프로세스를 스케줄링하는 정책. 이런 방법들을 조합하여 운영체제가 CPU를 가상화하는 방식을 추후에 이해하자