4. 프로세스 및 스레드 관리(1) - 프로세스 관리
운영체제는 컴퓨터 자원을 관리하는 중요한 소프트웨어다. 그 중에서도 프로세스와 스레드는 효율적인 자원 관리를 위해 핵심적인 역할을 한다.
먼저 프로세스란 실행 중인 프로그램을 의미한다. 프로그램이 실행되면 운영체제는 이를 프로세스로 관리하게 된다. 각 프로세스는 독립적인 자원(메모리, CPU 시간 등)을 할당받으며 이를 통해 컴퓨터 자원이 효율적으로 분배된다. 프로세스 관리를 통해 운영체제는 각 프로세스가 공정하게 자원을 사용할 수 있도록 조정한다.
스레드는 프로세스 내에서 실제로 작업을 수행하는 최소 실행 단위다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며 각 스레드는 프로세스의 자원을 공유하면서 독립적으로 실행된다. 프로세스와 스레드는 함께 관리되어야 하며 스레드를 잘 활용하면 여러 작업을 동시에 처리하는 멀티태스킹이 가능해진다.
이번 포스터에서는 이 중 프로세스가 어떤 것이며 운영체제가 어떻게 프로세스를 관리하는지에 대해서 알아보도록 하겠다.
1. 프로세스 관리 (Process Management)
1.1. 프로세스의 정의

프로세스는 위와 같은 것이다. 이는 작업 관리자에서 볼 수 있는데 현재 실행되고 있는 프로그램을 보여주고 있다.
프로세스 관리는 이러한 것들을 관리하는 것을 말한다.

구조적으로는 프로그램과 프로세스는 이러한 차이가 있다. 프로그램이나 데이터는 관리가 되있지 않았다고 이가 실행되면 운영체제가 관리하는 식이다.

프로세스는 이렇게 관리가 된다. cpu에 의해서 순차적으로 관리되는 것이다.
* cpu는 왜 하나의 일밖에 못하는데 여러번 일하는 것 같을까?
1) 멀티코어로 일하기 때문이다.
2) 빠른 속도로 일을 하기 때문이다.
또 다른 방식으로는 이렇게도 표현할 수 있다.

즉, 프로그램이 메모리로 적재되면 프로세스가 되는 형식을 또 다시 이렇게 설명하는 것이다.
더 자세하게 관리되는 방법은 이렇게 된다.

컴퓨터에서 프로그램이 실행될 때, 메모리는 스택(Stack), 힙(Heap), 데이터(Data), 코드(Code) 네 가지 영역으로 나뉘어 저장된다. 각각의 영역은 역할이 다르며, 변수와 코드가 어디에 저장되는지는 그 성격에 따라 결정된다.
스택(Stack)은 함수 실행을 위해 일시적으로 저장되는 공간으로, 지역 변수와 함수 매개변수가 여기에 저장된다. 함수가 호출될 때 할당되고, 함수가 종료되면 자동으로 해제된다.
힙(Heap)은 동적으로 메모리를 할당하는 공간으로, malloc 또는 new를 통해 필요한 만큼 할당할 수 있다. 그러나 자동으로 해제되지 않으므로, free 또는 delete를 사용하여 직접 해제해야 한다.
데이터(Data) 영역은 전역 변수와 정적 변수가 저장되는 공간이다. 이 영역은 프로그램이 실행될 때 할당되며, 프로그램이 종료될 때까지 유지된다.
코드(Code) 영역은 실행할 프로그램의 명령어가 저장되는 공간이다. 실행 파일의 기계어 코드가 여기에 저장되며, 일반적으로 읽기 전용(변경 불가)으로 설정된다.
이처럼 메모리는 각 영역이 분리되어 있으며, 프로그램의 효율적인 실행과 안정성을 보장하기 위해 각각의 역할을 수행한다.
이걸 다른 것을 이용해서 표현하면 이렇다.

이렇게 저장된다. a의 경우는 정적인 변수이므로 데이터 영역에 저장되며
스택(Stack) 영역에는 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되며, 함수가 종료되면 자동으로 해제된다.
코드(Code) 영역에는 프로그램의 명령어(기계어 코드)가 저장되며, 일반적으로 읽기 전용으로 설정된다.
힙(Heap) 영역은 동적으로 메모리를 할당하는 공간으로, malloc 또는 new를 통해 메모리를 할당하고, free 또는 delete를 통해 직접 해제해야 한다. 여기서 100바이트는 malloc에 있는 것이다.
즉 다시 정리하면 이와 같이 이야기할 수 있다.
프로세스 = 실행중인 프로그램
= 커널에 등록되고 커널의 관리하에 있는 작업
= 각종 자원들을 요청하고 할당 받을 수 있는 개체
= 프로세스 관리 블록(PCB)을 할당 받은 개체
= 능동적인 개체(active entity): 실행 중에 각종 지원을 요구, 할당, 반납하며 진행
1.2. 프로세스 종류
프로세스의 종류는 역활에 따라 병행 수행 방법에 따라 종류를 다르게 할 수 있다.
역할에 따르면,
시스템(커널) 프로세스: 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스이다. 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널(운영체제) 영역을 침범하지 못하게 감시하고, 사용자 프로세스를 생성하는 기능을 한다.
사용자 프로세스: 사용자 코드를 수행하는 프로세스이다.
로 나눌 수 있고
병행 수행 방법에 따르면,
독립 프로세스: 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스이다.
협력 프로세스: 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스이다.
이런 방법을도 나눌 수 있다.
1.3. 프로세스 테이블과 프로세스 제어 블록

운영체제같은 경우에는 프로세스를 관리하기 위해 프로세스 테이블이라는 전역적인 자료구조를 사용한다. 내용은 위와 같다.
이 테이블은 시스템에서 실행 중인 모든 프로세스를 관리하며 하나의 전역적인 인스턴스만 존재한다.
프로세스 테이블은 각 프로세스에 대한 중요한 정보를 포함하고 있으며 이를 통해 프로세스 관리가 효율적으로 이루어진다. 중요한 점은 이 테이블의 구현 방식이 운영체제마다 상이하다는 것이다.
그 커널에 보이는 PCB라는 것은 "프로세스 제어 블록"이라고 부르는 블록으로 OS가 프로세스 관리에 필요한 정보를 저장하거나 프로세스에 대한 정보를 저장하는 구조체를 가지고 있다. 프로세스가 생성될 때 만들어지고 종료되면 삭제되는데 커널에 의해 생성, 저장, 읽혀지는 등 관리를 한다.
이 또한 프로세스 당 하나씩만 존재하고 있다.

시각화를 한다면 위와 같이 표현할 수 있다. PCB에는 여러가지 장보들이 들어가 있다.
1.4. PCB가 관리하는 정보
이러한 PCB의 경우에는 프로세스 번호, 부모 프로세스 번호, 프로세스 상태 번호, 프로세스 컨텍스트 정보, 스케줄링 정보 등이 있다. 또한 프로세스 종료 코드, 열어놓은 파일 디스크립터들이 저장되는 배열, 메모리 관리 정보, 프로세스 사이의 통신 정보들, 회계 정보, 프로세스 소유자 이름 등 프로세스에 대한 정보들을 모두 관리하고 있다.
참고로 PCB 정보는 OS 별로 서로 다르며 PCB 참조 및 갱신 속도는 OS의 성능을 결정짓는 중요한 요소 중 하나이다.
1.5. 프로세스의 상태
운영체제는 프로세스의 상태도 관리하는데 상황에 따라 나누어서 이를 관리한다. 그 내용은 다음같이 표로 정리할 수 있다.
상태 | 자원 할당 상태 | ||
Active (swapped-in) |
Running | 프로세서 O, 기타 자원 O | 메모리 O |
Ready | 프로세서 X, 기타 자원 O | ||
Blocked, asleep | 프로세서 X, 기타 자원 X | ||
Suspended (Swapped-out) |
Suspended ready | 프로세서 X, 기타 자원 O | 메모리 X |
Suspended block | 프로세서 X, 기타 자원 X |
이를 토대로 실제로 동작하는 방법은 이렇다.

자 그렇다면 이를 하나하나 나누어서 설명해보도록 하겠다.
1) 프로세스 상태: Created State

프로그램을 실행하면 이렇게 된다는 뜻이다. 실행을 하면 해당 작업이 커널에 등록되고 이가 준비된 상태(Ready)인지 일시 정지된 상태인지 (Suspended ready)를 확인하고 프로세스 상태를 적절하게 전이한다.
2) 프로세스 상태: Ready State

Ready 상태인 경우에 계획대로 Running의 상태로 바꾼다.
3) 프로세스의 상태 : Running State

이제 이상태에서는 CPU가 프로세스에 할당되었지만, 프로세스가 다시 준비 상태(Ready state)로 돌아갈 수도 있고
프로세스가 I/O 자원 요청을 할 경우 실행 상태에서 대기 상태(Asleep state)로 전이될 수 있다.
전자의 경우에는 시간 초과나 우선순위 변경 같은 프로세서 스케줄링에 의해 이렇게 변화가 가능하다.
4) 프로세스의 상태 : Blocked/Asleep State

그러나 asleep같은 경우에는 항상 Ready를 거쳐 Running을 할 수 있게 되어져있다.
5) 프로세스의 상태 : Suspended State

아까전의 ready나 asleep같은 경우에는 suspended로 바꿀 수 있다. 이는 정지 상태를 의미하는 것이다.
6) 프로세스의 상태 : Terminated/Zombie State

이건 좀비모드라고 해서 프로세스가 종료된 되에도 계속해서 터미널에서 돌아가는 경우를 이야기한다. 예로 들어 프로그램을 자주 실행하게 되면 이러한 좀비 모드가 된다. 갑자기 컴퓨터가 느려지거나 하는 경우가 많은데 이것 때문인 경우가 있기도 하다. 이건 어떤 운영체제는 없는 것도 있다.
1.6. 프로세스의 관리를 위한 자료구조

프로세스 관리에서 각 상태를 효율적으로 관리하기 위해 운영체제는 다양한 자료구조를 사용한다.
시스템 내 자원들은 주로 큐(queue)와 같은 자료구조를 통해 관리되며 이는 프로세스와 입출력 자원들이 순차적으로 처리될 수 있도록 돕는다.
예를 들어 모니터, 마우스, 키보드와 같은 하드웨어 자원들도 이러한 방식으로 관리되며 각 자원이 적절히 할당되고 처리될 수 있도록 지원한다.
운영체제는 프로세스를 관리하는 방식에 대해 다루었다. 다음 포스터에서는 프로세스의 예외 처리 방법인 인터럽트 처리와 스레드에 대해 설명하겠다.
'Computer Science(컴퓨터 과학) > 운영체제' 카테고리의 다른 글
5. 프로세스 및 스레드 관리(2) - 인터럽트 처리, 스레드 (0) | 2025.04.02 |
---|---|
3. 운영체제 개요(2) - 구조와 기능 (0) | 2025.03.27 |
2. 운영체제 개요(1) - 역할과 구분 (0) | 2025.03.24 |
1. 운영체제와 컴퓨터 시스템 (0) | 2025.03.13 |