Machineboy空
프로세스와 스레드 ① 프로세스 개요 - 프로세스 제어블록(PCB), 문맥 교환, 정적할당/ 동적할당 본문
프로세스란?

프로그램은 실행되기 전까지 데이터 덩어리로서 보조기억장치에 저장되어 있다가
실행해서 메모리에 적재되는 순간 프로세스(process)가 된다.
이 과정을 프로세스를 생성한다고 말하기도 한다.


프로세스(process)의 종류
포그라운드 프로세스 (foreground process) | 백그라운드 프로세스(background process) |
|
사용자가 볼 수 있는 공간에서 실행되는 프로세스 | 사용자가 볼 수 없는 공간에서 실행되는 프로세스 | |
메모장, 게임 등 |
사용자와 직접 상호작용이 가능한 백그라운드 프로세스 | 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 데몬(daemon), 서비스(service) |
![]() |
CPU가 프로세스를 어떻게 관리하는지
프로세스 제어 블록
모든 프로세스는 실행을 위해 CPU가 필요하다.
하지만 CPU 자원은 한정되어 있다.

*타이머 인터럽트(timeout interrupt): 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트의 한 종류
CPU는 빠르게 번갈아 수행되는 프로세스들을 관리해야한다.
- 이를 위해 사용하는 자료 구조가 프로세스 제어 블록 (Process Control Block)
- 프로세스 관련 정보를 저장하는 자료 구조 * 자료구조: 자료를 저장하는 하나의 형태
- 마치 상품에 달린 태그와 같은 정보
- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기


운영체제는 커널 영역에 적재된 PCB를 보고 프로세스를 일목요연하게 관리한다.
프로세스 제어 블록(PCB)에 담기는 정보
- 프로세스 ID(PID)
- 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 ex. 학교의 학번, 회사의 사번
- 레지스터값
- 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간값을 모두 복원 -> 실행 재개
- 프로그램 카운터, 스택 포인터 등의 여러가지 레지스터가 이용될 것
- * 프로그램 카운터 : 다음에 실행할 메모리의 주소 저장
- 지금까지 실행한 레지스터의 값들을 알고 있어야 다시 자신의 차례가 왔을 때, 거기서부터 실행이 가능
- 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간값을 모두 복원 -> 실행 재개
- 프로세스 상태
- 입출력 장치를 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU 이용 중인 상태 등
- CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보
- 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
- 페이지 테이블 정보 * '메모리 주소를 알 수 있는 정보가 담기는구나'
- 사용한 파일과 입출력장치 정보
- 할당된 입출력장치, 사용 중인(열린) 파일 정보

문맥 교환 (context switch)
한 프로세스(A)에서 다른 프로세스(B)로 실행 순서가 넘어가면?


- 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
- 프로그램 카운터 등 각종 레지스터값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등
- 이러한 중간 정보 == 문맥(context)
- 즉, 다음 차례가 왔을 때 실행을 재개하기 위한 정보
- "실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다"
- 뒤이어 실행할 프로세스 B의 문맥을 복구
- 자연스럽게 실행 중인 프로세스가 바뀐다.
지금까지는 CPU가 데이터(커널영역)를 어떻게 관리하는지의 이야기.
그렇다면 사용자 영역의 메모리는 어떻게 관리?
사용자 영역의 메모리


크기가 고정된 영역 :정적 할당 영역 |
코드영역 (= 텍스트 영역) |
실행할 수 있는 코드, 기계어로 이루어진 명령어 저장 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (read-only) |
데이터 영역 | 잠간 썼다 없앨 데이터가 아닌 프로그램이 실행되는 동안 내내 유지할 데이터 저장 ex. 전역 변수 (전체 영역에 걸쳐 쓸 변수) |
|
크기가 가변적 영역 :동적 할당 영역 |
힙 영역 | 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간 *메모리를 할당했다면 해제를 해줘야하는데 이것을 자동으로 해주는 언어에서 사용되는 것이 가비지 컬렉션(garbage collection) *안하면 메모리 누수(memory leak)가 발생할 수 있음 |
스택 영역 | 데이터가 일시적으로 저장되는 공간 (데이터 영역에 담기는값과는 달리) 잠깐 쓰다가 말 값들이 저장되는 공간 ex. 매개 변수, 지역 변수 |
'Computer > CS' 카테고리의 다른 글
프로세스와 스레드 ③ 스레드 (0) | 2024.01.12 |
---|---|
프로세스와 스레드 ② 프로세스 상태와 계층 구조 (fork, exec) (0) | 2024.01.12 |
(참고) VM(virtual machine)와 IDE(Intergrated Development Environment) (1) | 2024.01.11 |
운영체제 ② - 커널(kernel) - 이중 모드, 시스템 호출 / 운영체제의 핵심 서비스 (0) | 2024.01.11 |
운영체제 ① 운영체제 알아야 하는 이유 (0) | 2024.01.11 |