- 프로세스 제어 블록이란 무엇인지 이해한다.
- 문맥 교환의 정의와 과정을 학습한다.
- 프로세스는 메모리에 어떻게 배치되는지 학습한다.
- 프로세스 상태와 프로세스 계층 구조를 학습한다.
- 스레드의 개념을 이해하고, 멀티 프로세스와 멀티 스레드의 차이를 이해한다.
실행중인 프로그램. 보조기억장치에 있는 프로그램이 메모리에 적재되어 실행되는 순간 그 프로그램은 프로세스가 됨
| 프로세스 종류 | |
|---|---|
| 포그라운드 프로세스 (foreground process) | 사용자가 보는 앞에서 실행되는 프로세스 |
| 백그라운드 프로세스 (background process) | 사용자가 보지 못하는 뒤에서 실행되는 프로세스 |
데몬(deamon)이라고 하고, 윈도우에서는 서비스(service)라고 함프로세스와 관련된 정보를 저장하는 자료구조
운영체제가 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분하기 위해 이용
PCB는 메모리의 커널 영역에 생성됨
운영체제는 수많은 프로세스들 사이에서 PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는 데 필요한 정보를 판단함
PCB는 프로세스 생성 시에 만들어지고 프로세스 종료 시에 폐기됨
PID는 프로세스를 식별하기 위해 부여하는 고유한 번호 기록
프로세스는 자신의 실행차례가 돌아오면 이전까지 사용했던 레지스터들의 중간값을 복원하여 그대로 이어 실행하므로 프로그램 카운터를 비롯한 레지스터 값들 기록
현재 프로세스가 어떤 상태인지 기록
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록
베이스 레지스터, 한계 레지스터 값과 같은 정보와 프로세스의 주소를 알기 위한 페이지 테이블 정보도 기록
어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들 기록
기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
문맥 (context) : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보문맥은 해당 프로세스의 PCB에 저장메모리의 사용자 영역은
코드 영역,데이터 영역,힙 영역,스택 영역으로 구분됨
CPU가 실행할 명령어(기계어)가 저장.
읽기 전용(read-only) 공간
메모리 누수 (memory leak)문제를 초래➡ 코드 영역과 데이터 영역은 그 크기가 변하지 않기 때문에 정적 할당 영역이라고 하고, 힙 영역과 스택 영역은 그 크기가 변하기 때문에 동적 할당 영역이라고 함
프로세스를 생성 중인 상태
CPU를 할당받기를 기다리는 상태
디스패치 : 준비상태인 프로세스가 실행 상태로 전환되는 것CPU를 할당받아 실행 중인 상태
프로세스가 할당된 시간을 모두 사용하여 타이머 인터럽트가 발생하면 다시 준비상태가 됨
실행 도중 입출력장치를 사용했다면 입출력장치의 작업이 끝날 때까지 기다리는 대기 상태가 됨
입출력장치의 작업 완료를 기다리는 상태
준비 상태가 됨프로세스가 종료된 상태


최초의 프로세스 PID는 항상 1이고, 모든 프로세스 최상단에 있는 부모 프로세스이다.
유닉스에서는 init, 리눅스에서는 systemd, macOS에서는 launchd이다.
부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
정보가 상속됨자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 새로운 프로그램 내용으로 덮어씀
exec을 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화됨➡ 부모가 자식 프로세스를 실행하며 프로세스 계층 구조를 이루는 과정은 fork 와 exec가 반복되는 과정
스레드는 프로세스를 구성하는 실행의 흐름 단위이다.
한 번에 하나의 부분만 실행되는 프로세스
한 번에 여러 부분이 동시에 실행되는 프로세스
스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택으로 구성됨 ➡ 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행됨
⚪ 멀티프로세스 : 여러 프로세스를 동시에 실행하는 것
⚪ 멀티스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것
➡ 같은 작업을 하는 동일한 프로그램을 반복하게 하려면
프로세스의 경우는 fork를 통해 세 번 실행하도록 함
코드 영역, 데이터 영역, 힙 영역, 스택 영역등을 비롯한 모든 자원이 복제되어 메모리에 적재되는 것으로 낭비가 될 수 있음스레드의 경우에는 스레드를 세 개 만들어 세 번 실행하도록 함
스레드 ID, 프로그램 카운터를 포함한 레지스터, 스택을 제외한 프로세스의 자원은 공유하므로 메모리를 효율적으로 사용 가능
더하여 스레드는 자원을 공유하기 때문에 협력과 통신에 유리함
다만 멀티스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음