안녕하딤니카?
이번에는 운영체제에서 프로세스 파트에 대해서 정리해보고자 합니다.
프로세스를 몽땅 정리하는 건 아니고, 프로세스의 개요와 PCB를 중심으로 정리하겠습니다.
그럼 시~~~작

1. 프로세스의 개요
먼저, 프로세스란 실행 중인 프로그램을 의미합니다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당받을 수 있는 단위입니다. 운영체제는 프로세스들에게 적절히 자원들을 분배하여 여러 가지 작업을 수행할 수 있게 합니다.
프로세스는 사용자가 볼 수 있는 공간에서 실행되는 포그라운드 프로세스(foreground process)와 사용자가 볼 수 없는 공간에서 실행되는 백그라운드 프로세스(background process)로 나눌 수 있습니다. 포그라운드 프로세스는 사용자 앞에서 실행되는 메모장, 인터넷 브라우저, 게임 등이 있습니다.
사용자가 볼 수 없는 공간에서 실행되는 백그라운드 프로세스는 사용자와 직접 상효작용이 가능한 프로세스가 있고, 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스가 있습니다. 사용자와 상호작용하지 않는 백그라운드 프로세스를 데몬(daemon) 혹은 서비스(service)라고 합니다.
2. 프로세스 제어 블록 (PCB)
모든 프로세스는 실행을 위해 CPU가 필요합니다. 하지만 CPU 자원은 한정되어 있습니다. 프로세스들은 돌아가며 한정된 시간만큼만 CPU를 이용합니다. 자신의 차례에 정해진 시간만큼 CPU를 이용하는데요, 타이머 인터럽트가 발생하면 차례를 양보합니다.

여기서 타이머 인터럽트(타임아웃 인터럽트)란, 프로세스의 CPU 이용 시간이 끝났음을 알려주는 특별한 인터럽트입니다. 좀 더 정확하게는, 클럭 신호를 발생시키는 장치에 의해서 주기적으로 발생하는 하드웨어 인터럽트의 한 종류가 타이머 인터럽트입니다.
이런 식으로 프로세스는 빠르게 번갈아가면서 수행되는데, 이를 관리해야 합니다. 프로세스를 관리하기 위해 사용하는 자료 구조가 바로 프로세스 제어 블록(PCB)입니다. PCB는 프로세스 관련 정보를 저장하는 자료 구조입니다. 마치 프로세스를 상품이라고 예를 들면, PCB는 프로세스란 상품에 달린 태그와 같은 정보입니다. PCB는 프로세스 생성 시 커널 영역에서 생성되고, 프로세스 종료 시 폐기됩니다.
2-1. PCB에 담기는 대표적인 정보
PCB에 담기는 대표적인 정보는 다음과 같습니다. (운영체제마다 차이가 있습니다.) 운영체제는 커널 영역에 적재된 PCB를 보고 프로세스를 관리합니다.
- 프로세스 ID (PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 (ex. 학교의 학번, 회사의 사번)
- 레지스터 값 : 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값(프로그램 카운터, 스택 포인터 등)을 모두 복원하여 실행을 재게 하기 때문에 레지스터 값을 저장해야 합니다.
- 프로세스 상태 : 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU 이용 중인 상태 등의 다양한 프로세스 상태 정보를 저장해야 합니다.
- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보입니다.
- 메모리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보입니다. 그리고 메모리의 현재 주소를 알 수 있는 페이지 테이블 정보도 이 메모리 정보에 포함됩니다.
- 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용 중인(열린) 파일 정보 등이 여기에 포함됩니다.
2-2. 문맥 교환 (context switching)
만약, 한 프로세스를 실행 중에, 타이머 인터럽트가 발생하여 다음 프로세스로 실행 순서가 넘어간다면기존에 실행되던 프로세스는 지금까지의 중간 정보를 백업합니다. 백업 정보에는 위에서 설명했던 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등이 이 정보에 포함됩니다. 이러한 중간 정보를 여기서 문맥(context)라고 부릅니다. 문맥은 다음 차례가 왔을 때 실행을 재개하기 위한 정보입니다. 실행 문맥을 백업해 두면 언제든 해당 프로세스의 실행을 재개할 수 있습니다.
그리고 뒤이어 실행할 다른 프로세스의 문맥을 복구하여 프로세스를 실행합니다. 여기서 자연스럽게 실행 중인 프로세스가 바뀌게 되는데, 이러한 과정을 문맥 교환(context switching)라고 합니다. 문맥 교환을 정리하자면, 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리입니다.


위에서 문맥에는 사용했던 레지스터 정보도 포함된다고 했는데, 이러한 레지스터 값을 프로세스 A의 PCB에 저장하고, 다시 프로세스 B의 문맥을 복구하면 자연스럽게 프로세스의 실행이 재개될 수 있습니다.
3. 프로세스의 메모리 영역
저번에 작성했던 메모리의 물리 주소와 논리 주소를 정리했던 글에서, 메모리를 설명할 때 짧게 메모리는 운영체제 영역과 사용자 영역으로 나뉜다고 설명했습니다. 운영체제 영역이 바로 커널 영역이고, 이제 사용자 영역에 대해서 설명해보려고 합니다. 사용자 영역에 프로세스는 특정 영역을 나누어서 정보를 저장합니다.
이 사용자 영역은 크게 4가지 영역으로 나뉘는데(사실 더 나뉘지만 크게 나뉘는 영역을 중심으로 설명하려 합니다.), 정적 할당 영역의 코드 영역(텍스트 영역)과 데이터 영역, 그리고 동적 할당 영역의 힙 영역과 스택 영역으로 나눠집니다.
- 정적 할당 영역 - 코드 영역 (텍스트 영역) : 실행할 수 있는 코드, 기계어로 이루어진 명령어가 저장됩니다. 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역입니다. (read-only)
- 정적 할당 영역 - 데이터 영역 : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장됩니다. 예를 들어, 전역변수 같은 데이터가 저장됩니다.
- 동적 할당 영역 - 힙 영역 : 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간입니다. 프로그래머가 직접 힙 영역을 할당했다면, 힙 영역을 반환해줘야 하는데, 프로그래밍 언어별로 가비지 컬렉션을 통해 자동으로 힙 영역을 반환해 줍니다. 다만, 프로그래밍 언어에 따라서 가비지 컬렉션 기능이 없는 언어(ex. C언어)가 있는데, 그러면 메모리를 수동으로 반환해줘야 합니다. 메모리 반환이 이루어지지 않는다면 메모리 누수가 발생합니다.
- 동적 할당 영역 - 스택 영역 : 데이터가 일시적으로 저장되는 공간입니다. 데이터 영역에 담기는 값과는 달리, 스택 영역에서는 잠깐 쓰다가 말 값들이 저장되는 공간입니다. 예를 들어, 매개변수, 지역변수 같은 데이터가 저장됩니다.

힙 영역과 스택 영역의 크기는 가변적입니다. 일반적으로 힙 영역은 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당됩니다. 그 이유는 메모리 충돌을 방지하기 위해서입니다. 힙 영역과 스택 영역이 딱 붙어있게 될 경우, 가변적으로 변할 수 있는 공간에 한계가 생기게 되는데, 이렇게 힙 영역과 스택 영역이 다른 방식으로 변한다면 메모리 충돌을 방지할 수 있습니다.
4. 정리
이번 글에서는 운영체제의 프로세스 개요, 프로세스 제어 블록(PCB), 문맥 교환, 프로세스의 메모리 영역에 대해서 정리했습니다. 다음 글에서는 프로세스 상태와 계층 구조에 대해 정리해 보겠습니다. 그럼 20000 ~
[자료 출처]
강민철, 《혼자 공부하는 컴퓨터 구조+운영체제》, 한빛미디어, 2022
인프런 - 개발자를 위한 컴퓨터공학 1 : 혼자 공부하는 컴퓨터구조 + 운영체제
🍀
좋아하는 것을 계속 좋아하세요!
반드시 행복해집니다
백엔드 개발자가 되고 싶어서 열심히 헤딩 중인 재영입니다 :-)
[Github] https://github.com/chujaeyeong
[E-mail] chujy1224@gmail.com
'Study > 컴퓨터구조, 운영체제' 카테고리의 다른 글
| 스레드를 정리해보자 (스레드의 구성 요소, 멀티 스레드, 멀티 프로세스) (1) | 2025.01.07 |
|---|---|
| 프로세스 상태와 계층 구조에 대해 정리해보자 (0) | 2025.01.07 |
| RAID의 정의와 종류를 정리해보자 (0) | 2025.01.05 |
| 메모리의 물리 주소와 논리 주소 정리 (2) | 2025.01.03 |
| CPU의 작동 원리 - 명령어 사이클과 하드웨어 인터럽트 처리순서 (0) | 2024.12.28 |