Process & Thread
๐ Process: ์ปดํจํฐ์์ ์คํ์ค์ธ ํ๋์ ํ๋ก๊ทธ๋จ. ํ๋ก๊ทธ๋จ์ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํ ๋ช ๋ น์ด์ ์งํฉ. ๊ฐ ํ๋ก์ธ์ค๋ง๋ค RAM์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(์ฝ๋, ๋ฐ์ดํฐ, ํ, ์คํ)์ ํ ๋น ๋ฐ๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์กด์ฌํ ์ ์๋ค(์ ํ๋ก์ธ์ค A ์ฐ๋์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค B ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋ค)
๐ ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค PCB(ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)์ด ๋ง๋ค์ด์ง๋ค. PCB๋ RAM ๋ด์์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ณ๋ ๊ด๋ฆฌ๋๋ฉฐ, kernel mode์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค(์์ ํฌ์คํ ์์ kernel mode์ user mode์ ๋ํด์ ๋ฐฐ์ ๋ค. user mode์ผ ๋๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๊น์ง ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, ์ค์ ์ค์ํ PCB๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. kernel mode๋ง ๊ฐ๋ฅ)
๐ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์์ธํ
(1) stack: ์ง์ญ๋ณ์, ํจ์์ ๋งค๊ฐ๋ณ์, ๋ฐํ๋๋ ์ฃผ์ ๊ฐ ๋ฑ์ด ์ ์ฅ๋๋ ์์ญ. ๋์ ์ฃผ์ ๊ฐ์์ ๋ฎ์ ์ฃผ์ ๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น. ์์ญ ํฌ๊ธฐ๋ ์ปดํ์ผ ๋ ๊ฒฐ์ . LIFO ๋ฐฉ์.
(2) heap: ์ฌ์ฉ์์ ์ํด ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ผ์ด๋จ. ๋ฎ์ ์ฃผ์ ๊ฐ์์ ๋์ ์ฃผ์ ๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น. ์์ญ ํฌ๊ธฐ๋ ๋ฐํ์ ๋ ๊ฒฐ์ (C์ธ์ด์ malloc()). FIFO ๋ฐฉ์
โป stack๊ณผ heap์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก์ ์์ญ์ ์นจ๋ฒํ ์ ์๋ค. stack์ด heap์ ์นจ๋ฒํ๋ ๊ฒฝ์ฐ๋ stack overflow / ๊ทธ ๋ฐ๋๋ heap overflow.
(3) data: ์ ์ญ ๋ณ์, ์ ์ ๋ณ์, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด ๋ฑ์ด ์ ์ฅ. BSS(Block Stated Symbol)์ธ ์ด๊ธฐํํ์ง ์์ ๋ณ์ ์ ์ฅ / Data ์์ญ์ธ ์ด๊ธฐํํ ๋ณ์ ์ ์ฅ์ผ๋ก ๋๋จ.
(4) code: ์คํํ ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ๋์ด ์ ์ฅ๋๋ ์์ญ. text ์์ญ
๐ ํ๋ก์ธ์ค๋ 1๊ฐ ์ด์์ thread๋ฅผ ๊ฐ์ง ์ ์๋ค. thread๋ ์ค์ ๋ก ์คํ๋๋ ํ๋ฆ์ ๋จ์. thread๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ์ง์ญ๋ณ์๋ฅผ ์ ์ฅํ๋ stack ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ ๋น ๋ฐ์. ๊ทธ ์ธ ์ ์ญ๋ณ์๋ฅผ ์ ์ฅํ๋ heap, data, code๋ ๊ณต์ .
๐ ์ค๋ ๋๋ฅผ ๋๊ฐ ๊ด๋ฆฌํ๋ ์ง์ ๋ฐ๋ผ ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ / ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ 2๊ฐ๋ก ๋๋ ์ ์๋ค. 3๊ฐ์ง ๊ด๊ณ๋ฅผ ์๋์ ๊ฐ์ด ๋งบ์ ์ ์๋ค.
(1) many-to-one model
: ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ n๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ 1๊ฐ๊ฐ ๋งคํ๋์ด ์ฌ์ฉ์ ๋ ๋ฒจ์์ ์ค๋ ๋ ๊ด๋ฆฌ. ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋๊ฐ ๋ง์ผ๋ฏ๋ก ์ด ์ค 1๊ฐ๊ฐ ์์คํ ์ฝ์ ํธ์ถํ๋ค๋ฉด ๋๋จธ์ง ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋๋ ์ปค๋ ๋ ๋ฒจ์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ๋ฉํฐ ์ฝ์ด์ ๋ณ๋ ฌ์ฑ ์ด์ฉ ๋ถ๊ฐ
(2) one-to-one model
: ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ 1๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ 1๊ฐ๊ฐ ๋ฑ ๋งคํ๋๋ค. many-to-one model์ ๋จ์ ํด๊ฒฐ. ํ์ง๋ง ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ ์๋งํผ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ ๊ฐ์๊ฐ ์ฆ๊ฐํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ ๋จ์
(3) many-to-many model
: ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ n๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ m๊ฐ๊ฐ ๋งคํ๋๋ค. m์ n์ดํ. many-to-one model๊ณผ one-to-one model์ ์ฅ์ ์ ํฌํจํ๋ ๊ตฌํ ์ด๋ ค์ด ๋จ์
PCB
๐ OS๋ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ๊ณ ์ ์ ๋ณด๋ฅผ PCB์ ์ ์ฅํ๋ค. ์ฆ, ํ๋ก์ธ์ค๋ง๋ค PCB๊ฐ ๊ณ ์ ํ๊ฒ ์์ฑ. PCB์๋ ์๋์ ๊ฐ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์๋ค.
๐
(1) ํ๋ก์ธ์ค์ ํ์ฌ ์ํ
(2) PID: ํ๋ก์ธ์ค ๊ณ ์ ID
(3) ๋ถ๋ชจ ํ๋ก์ธ์ค ID
(4) ์์ ํ๋ก์ธ์ค ID
(5) PC(Program Counter): ๋ค์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
(6) ํ๋ก์ธ์ค์ ์ฐ์ ์์
(7) ๋ฉ๋ชจ๋ฆฌ ์ ํ
ํ๋ก์ธ์ค ์์ฑ
๐ ํ๋ก์ธ์ค ์์ฑ์ ๊ธฐ์กด ํ๋ก์ธ์ค์์ fork() ํจ์๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์๋กญ๊ฒ ์์ฑ๋๋ค. ์ฆ, fork() ํจ์๋ ๊ธฐ์กด ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ ๊ธฐ๋ฅ์ด ์๋ค. ๊ธฐ์กด ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค / ๋ณต์ฌ๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค์์ fork()๋ฅผ ํธ์ถํ๋ค๋ ๋ป์ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๊ธฐ์กด ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์๋กญ๊ฒ ์์ ํ๋ก์ธ์ค๊ฐ ์์ฑ. fork() ์ดํ ์๋ ์ฝ๋๋ถํฐ ๋ ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ๋์์ ์คํ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ fork() ๊ฒฐ๊ณผ๋ก ์์ ํ๋ก์ธ์ค์ PID ๋ฐํ / ์์ ํ๋ก์ธ์ค๋ 0์ด ๋ฐํ๋๋ค. ์ฆ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ fork() ํจ์๋ฅผ ํธ์ถํ ์์ ์ ์์ ํ๋ก์ธ์ค ์์ฑ.
#include <stdio.h>
#include <unistd.h>
int main(){
printf("start!\n");
int forkRet = fork();
if (forkRet == 0){
printf("child process %d\n", getpid());
} else {
printf("forkRet: %d parent process: %d\n", forkRet, getpid());
}
return 0;
}
zombie & orphan process
๐ ๊ณ ์ ํ๋ก์ธ์ค: ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์คํ ์ค์ธ๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ณด๋ค ๋จผ์ ์ข ๋ฃ๋์ด์ ๋จ๊ฒจ์ง ์์ ํ๋ก์ธ์ค. ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ ํ๋ก์ธ์ค์ SIGCHLD๋ผ๋ ์๊ทธ๋์ ๋ณด๋ธ๋ค. ๊ทธ๋ฌ๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค์์ wait() ํจ์(์์คํ ์ฝ)๋ฅผ ํธ์ถํด ์์ ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ๋ฐ๊ณ ์์ ํ๋ก์ธ์ค ์์ ํ์ ์๋ฃ. ํ์ง๋ง, ํด๋น ์ญํ ์ ํ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฏ๋ก ๊ณ ์ ํ๋ก์ธ์ค๊ฐ ๋ ์์ ํ๋ก์ธ์ค๋ init ํ๋ก์ธ์ค(๋ถํ ์ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ํ๋ก์ธ์ค)์ PID๋ฅผ 1๋ก ๋ฐ๊พธ์ด ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก ์ค์ . ๊ณ ์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ init ํ๋ก์ธ์ค๊ฐ ๊ณ ์ ํ๋ก์ธ์ค์ ์์์ ํ์ํด ์์ ํ๋ก์ธ์ค๊ฐ ์ข๋น ํ๋ก์ธ์ค๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์ง ๊ฐ๋ฅ.
๐ ์ข๋น ํ๋ก์ธ์ค: ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์ผ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค์ ์์์ ์ ๋๋ก ํ์ํ์ง ๋ชปํด ๋จ๊ฒจ์ง ์์ ํ๋ก์ธ์ค. ์ข๋น ํ๋ก์ธ์ค๋ ์์์ ๋ญ๋นํ๋ ๋ฌธ์ ์ ๋ฐ์.
ํ๋ก์ธ์ค ์ํ๋
๐ ๋ชจ๋ ํ๋ก์ธ์ค๋ ๊ฒฐ๊ตญ CPU์ ์ํด ์์ฑ๋๊ณ ์๋ฉธํ๋ค.
(1) ์์ฑ) ํ๋ก์ธ์ค๊ฐ PCB๋ฅผ ๊ฐ์ง ์ํ๋ก ์์ฑ๋๋ค. ๋จ, RAM์ load๋ ํ, OS๋ก๋ถํฐ CPU์ ์ฌ๋ผ๊ฐ๋ ์น์ธ ๋ฐ๊ธฐ ์ ์ ์ํ
(2) ์ค๋น) OS๋ก๋ถํฐ ๋๋์ด ์น์ธ์ ๋ฐ๊ณ RAM๋ด์ ready queue์ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ผ๊ฐ๋ค. / ๋๋ ์คํ ์ํ์์ CPU์ ๋ ์ ๋ฐฉ์ง๋ฅผ ์ํด ์ ์ ํ๋ก์ธ์ค๊ฐ ready queue๋ก ๋ค์ ๋ค์ด๊ฐ๋ค. / ๋๋ ๋๊ธฐ ์ํ์์ ์ด์ ์ ์ถ๋ ฅ ๋๋ ์ด๋ฒคํธ๊ฐ ์๋ฃ๋์ด wait queue์์ ready queue๋ก ๋ค์ ๋ค์ด๊ฐ๋ค.
(3) ์คํ) ๋ณธ๊ฒฉ์ ์ผ๋ก OS์ ์ํด ํ๋ก์ธ์ค๊ฐ CPU์ ๋ค์ด๊ฐ ์คํ๋๋ค. ์ด ๋, wait queue๊ฐ ์๋๋ผ ready queue์ ์๋ ํ๋ก์ธ์ค ์ค ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ dispatch๋์ด ์คํ๋๋ค.
(4) ๋๊ธฐ) CPU์ ์ํด ํ๋ก์ธ์ค๊ฐ ์คํ ์ค, ์ ์ถ๋ ฅ์ด๋ ์ด๋ฒคํธ ๋ฐ์์ผ๋ก ์ธํด CPU ์ฌ์ฉ์ ๋ฉ์ถ๊ณ wait queue๋ก ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๋ค.
(5) ์ข ๋ฃ) ํ๋ก์ธ์ค ์ข ๋ฃ. CPU์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ๋๋์ ์ข ๋ฃ ์ํ๋ก ๋ณ๊ฒฝ๋๋ค.
'Computer Science > Basics and Concepts' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐API / RESTful API (0) | 2025.03.02 |
---|---|
๐ Operating Systems Fundamentals 1 (0) | 2024.10.30 |
jupyter notebook markdown *์์ ์ ๋ฐ์ดํธ (0) | 2023.02.07 |
Data Handling (0) | 2022.07.15 |
feature scaling (0) | 2022.06.22 |
๋๊ธ