프로세스는 해당 프로그램에 표현된 내용대로 실제 실행을 하는 능동적인 개체이다. 이는 생성-실행-종료의 순서로 처리되며 생성할 때는 셸이나 GUI를 제공하는 프로세스에서 프로세스 생성을 요청하는 시스템 콜 함수를 통해 이루어진다. 종료 시에도 같다. 필요에 따라 프로세스가 여러 프로세스를 생성할 수 있는데 이때는 부모-자식 관계를 이루는 구조를 갖는다.
프로세스는 일정한 메모리 영역을 확보한 후에 프로세스가 실행되어야 할 내용이 기록되어야 한다. 메모리에서는 프로세스 영역으로, 기계어 코드가 적힌 코드 영역, 전역변수와 실행 중 메모리 할당 요청 등을 통해 할당받은 메모리들을 포함한 데이터 영역, 함수 호출 과정에서 매개변수나 지역변수를 저장하기 위한 스택 영역이 있다. 프로세스의 상위 개념이라 할 수 있는 프로그램은 디스크에 파일로서 저장되어 있는데 실행 프로그램의 헤더 부분을 통해 필요한 메모리 용량을 결정하여 메모리를 확보한다. 파일의 코드 섹션이 메모리의 코드 영역에, 데이터 섹션이 데이터 영역에 기록된다. 스택 영역은 우선 메모리만 확보한 후에 바닥부터 사용하게 된다.
여러 프로세스를 실행하는 상태에서 한 프로세스가 입력요청이나 파일 읽기 등 일정 시간이 소요될 때는 CPU가 다른 프로세스를 선택해 실행하도록 해야 한다. 프로세스는 특정 상태를 갖는데 다음과 같다. 현재 실행 중인 상태인 running, 실행 가능 상태인 ready, 입력처럼 특정 조건이 만족될 때까지 대기하는 waiting, 실행이 강제 중지된 suspended 중 하나의 상태를 갖는 것이다. 이때 스케줄링은 ready 상태의 프로세스들 중 하나를 선택해 running을 시키는 것으로 프로세스들의 상태가 바뀔 때나 실행 중인 프로세스에게 할당된 시간이 만료되었을 때 하게 된다. 이때 스케줄러에 의해 선택된 프로세스가 직전에 실행되던 프로세스와 다르면 문맥교환이 일어난다.
프로세스에는 프로세스 제어블록으로 각 프로세스마다 기록해야 하는 정보를 관리하는 게 있는데 문맥교환 시 저장해야 할 정보도 여기에 들어간다. 문맥교환 할 때는 이전 프로세스의 문맥을 저장하고 다음에 실행할 프로세스의 문맥을 복구하는 과정이 중요하다.
프로세스를 구성하는 단위인 스레드는 하나의 프로세스에 부여된 작업내용을 소속 스레드들이 나누어서 진행한다. 동일한 목적을 가지지만 스레드도 스택 영역은 스레드 간 독립적으로 구별하고 각각 스레드 제어블록도 가진다. userMain 함수로 시작하는 최초의 스레드에서 필요에 의해 스레드가 생성되고 이들이 문맥교환을 통해 차례로 실행되지만 실제로는 독자적으로 실행되는 것처럼 보인다.
'OS' 카테고리의 다른 글
| 운영체제의 이해 8장: 저장장치 입출력 및 스케줄링 (2023.05.16) (0) | 2026.03.13 |
|---|---|
| 운영체제의 이해 7장: 파일 관리 (2023.05.10) (0) | 2026.03.13 |
| 운영체제의 이해 4장: CPU 스케줄링 (2023.04.12) (0) | 2026.03.13 |
| 운영체제의 이해 2장: 컴퓨터 구조와 어셈블리 언어 (2023.03.23) (0) | 2026.03.13 |
| 운영체제의 이해 1장: 운영체제의 이해를 위한 기초 (2023.03.15) (0) | 2026.03.13 |