
참고 서적: 혼자 공부하는 컴퓨터 구조 + 운영체제 (강민철, 한빛미디어)
I. 프로세스
1. 프로세스 종류
1) Foreground Process
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스
2) Background Process
- 사용자와 상호작용하며 사용자가 볼 수 없는 공간에서 실행되는 프로세스
Daemon (또는 Service): 사용자와 상호작용하지 않고 정해진 일만 수행하는 프로세스
2. PCB (Process Control Block)
1) CPU 스케줄링
- 모든 프로세스는 실행을 위해 CPU가 필요하지만, CPU 자원은 한정되어 있다.
- 프로세스들은 돌아가며 한정된 시간만큼만 CPU를 사용하며, 타이머 인터럽트가 발생하면 다른 프로세스에게 CPU를 양도한다.
2) PCB
- 빠르게 번갈아 가며 실행되는 프로세스를 관리하기 위해 사용하는 자료구조이다.
- 프로세스의 정보를 저장하는 자료구조이다.
- 프로세스 생성 시
커널 영역에 생성되며, 프로세스 종료 시 폐기된다.
3) PCB에 담기는 정보
- PCB에 담기는 대표적인 정보
| PID |
Register 값 |
Process 상태 |
CPU 스케줄링 정보 |
Memory 정보 |
사용한 파일과 입출력 장치의 정보 |
- PID: 특정 프로세스를 고유하게 식별하기 위한 번호
- Register 값: 프로세스는 번갈아 가며 실행되는데 자신의 실행 차례가 되돌아올 때 이전까지 사용한 레지스터의 중간 값을 알고 있어야 이를 모두 복원하여 실행을 재개하기 때문에 PC, SP 값 등을 PCB에 저장한다.
- Memory 정보: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보와 페이지 테이블 정보가 저장된다.
II. Context Switching
1. 문맥 교환
1) 문맥 교환
- 실행 중인 프로세스 A에서 다른 프로세스 B로
실행 순서가 넘어간다면,
기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
- 기존에 실행 중인 프로세스
문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정을 문맥 교환이라고 한다.
2) 문맥
- 프로세스 A가 백업하는 중간 정보를
문맥 (Context)라고 한다.
- 백업해 둔 문맥을 사용하여 문맥 교환 시 프로세스 실행을 재개할 수 있다.
3) Context에 저장되는 정보
- PC, SP 등의 Register 값
- Memory 정보
- 열었던 파일, 사용한 입출력장치 등
III. Memory Area
- Code 영역 (=Text 영역), Data 영역, Heap 영역, Stack 영역
1. Code 영역 (정적 할당 영역)
- 실행 가능한 코드와 기계어로 이루어진 명령어가 저장되는 영역이다.
- 데이터가 아닌 CPU가 실행할 명령어가 담기므로 쓰기가 금지된 영역이다. (Read-Only)
2. Data 영역 (정적 할당 영역)
- 잠깐 사용하고 없앨 데이터가 아닌,
프로그램이 실행되는 동안 유지할 데이터가 저장되는 영역이다.
- 예: 전역 변수
3. Heap 영역 (동적 할당 영역)
- 프로그래머가 직접 할당할 수 있는 메모리 영역이다.
- 일반적으로 낮은 주소에서 높은 주소 순으로 할당된다.
4. Stack 영역 (동적 할당 영역)
- 일시적으로 사용할 데이터가 저장되는 영역이다.
- 예: 매개 변수, 지역 변수
- 일반적으로 높은 주소에서 낮은 주소로 할당된다.
IV. 프로세스 상태
- 준비 상태, 실행 상태, 대기 상태, 종료 상태
1. 생성 상태 (New)
- 이제 막 메모리에 적재되어 PCB를 할당 받은 상태이다.
- 준비가 완료되었다면 준비 상태로 전환된다.
2. 준비 상태 (Ready State)
- 자신이 실행될 순서가 될 때까지 대기하는 상태이다.
3. 실행 상태 (Running State)
- CPU를 할당 받아 실행 중인 상태이다.
- 타이머 인터럽트 (HW 인터럽트) 발생 시 준비 상태로 되돌아간다.
- 프로세스 실행 도중 입출력장치 사용 시 입출력 작업이 완료될 때까지 대기 상태로 전환된다.
4. 대기 상태 (Waiting State)
- 프로세스 실행 중 입출력장치를 사용하는 상태이다.
- 입출력 작업은 CPU에 비해 느리기 때문에 대기 상태로 전환된다.
- 입출력 작업이 완료되면 준비 상태로 전환된다.
5. 종료 상태 (Terminated State)
- 프로세스가 종료된 상태이다.
- PCB를 폐기하고 프로세스의 메모리 영역을 정리해야 한다.
V. 프로세스 계층 구조
1. 프로세스 계층 구조
- 프로세스 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
pstree 명령어를 통해 현재 실행 중인 프로세스의 계층 구조를 확인할 수 있다.
- 자식 프로세스
- 부모 프로세스에 의해 생성된 프로세스
- 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가진다.
- 일부 OS에서는 자식 프로세스 PCB에 PPID를 명시하기도 한다.
2. 프로세스 생성 기법
- fork 시스템 호출
- 원본 (=부모) 프로세스가 자신의 자식 프로세스가 될 복사본을 생성한다.
- 복사본은 원본 프로세스의 자원을 상속 받는다.
- exec 시스템 호출
- 복사본 (=자식) 프로세스가 자신의 메모리 공간을 새로운 프로그램으로 덮어씌운다.
- 코드/데이터 영역은 실행할 프로그램 내용으로 바뀌고 나머지 영역은 초기화된다.
VI. 스레드
1. 스레드
- 스레드는 프로세스를 구성하는 실행 흐름의 단위이다.
- 모든 프로세스는 하나 이상의 스레드를 가진다.
2. 스레드 구성 요소
- 스레드는 스레드 ID (TID), PC 등의 레지스터 값, 스택 영역 등 실행에 필요한 최소한의 정보를 가지고 있다.
- 각각의 스레드들은 코드/데이터/힙 영역, 파일 등의 프로세스의 자원을 공유한다.
3. 멀티 프로세스와 멀티 스레드
- 멀티 프로세스
- 동일한 작업을 수행하는 단일 스레드 프로세스 여러 개를 실행하는 것