Process Termination
ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋ก์ธ์ค๊ฐ _exit()_ System Call์ ๋ถ๋ ์ ๋์ด๋ค.
- ๋ค๋ฃจ์ง ๋ชปํ๋ ์๊ทธ๋์ ๋ฐ์์ ๊ฒฝ์ฐ์ด๋ค.
- ํ๋ณตํ์ง ๋ชปํ๋ CPU ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ด๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ _kill_ํ๋ ๊ฒฝ์ฐ์ด๋ค.
exit()์ ํตํด ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๋ค๋ฉด ๋ชจ๋ ์์์ ํ์ํ์ง๋ง, PCB๋ ๋จ๊ฒจ๋๋ค. ์ฆ, main memory ์์ ์๋ ์์๋ค์ ์ ๋ถ ํ์ํ์ง๋ง, ์ปค๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ PCB๋ ๊ทธ๋๋ก ๋๋ค. ๊ทธ ์ด์ ๋ PCB ๋ด์ State๋ Zombie์ํ๋ก ์ ์งํด์ผ ํ ๋ฟ๋ง์ด ์๋๋ผ PCB ๋ด์ Accounting Information์ ๊ฐ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ๋ถ๋ชจ๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ _kill()_ํ๊ณ ์ถ๋ค๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ _death-of-child_ ์๊ทธ๋์ ๋ณด๋ธ๋ค. ์๊ทธ๋์ ๋ณด๋ธ OS๋ ์ด ์์ ํ๋ก์ธ์ค๋ฅผ terminated state๋ก ๋ณํ๊ฒ ํ๋ค. ๊ทธ ํ, zombie์ํ์ PCB ๋ง์ ํ์๋๋ ๊ฒ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ _wait()_ System Call์ ํธ์ถํ ๋์ด๋ค.
ํ์ง๋ง, ์ด๋ฌํ ํ๋ฆ์ผ ๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์๊ฐํด ๋ณผ ์ ์๋ค. ๋ง์ฝ, ์์ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ์ด์์๋ ์ํ์์ ์์ ํ๋ก์ธ์ค๊ฐ termination ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์์์ด termination ๋จ์ผ๋ก ์ธํด ๊ทธ ์์์ธ ์์ ํ๋ก์ธ์ค๋ ์์ ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋์ํ์ง ์์ผ๋ฏ๋ก ๊ณ ์ ์ํ๊ฐ ๋ผ๋ฒ๋ฆฐ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ ํ๋ก์ธ์ค๋ฅผ ํ ๋จ๊ณ ์น๊ฒฉ์์ผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
์์ ํ๋ก์ธ์ค๋ ์ปค๋์ ์ํด _init process PCB_๋ก ์ฐ๊ฒฐ๋๋ฉฐ, state๋ _zombie_์ํ๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก init process์ ์ํ์ฌ _zombie_์ํ์ ์๋ PCB๋ฅผ ์ ๊ฒํ์ฌ ํด๋น PCB ์์์ ํ์ํ ์ ์๋ค.
Inter-Process Communicatoin(IPC)
์ค์ ๋ก ํ๋์ ์ํํธ์จ์ด๊ฐ ํ๋์ ํ๋ก์ธ์ค๋ก ๋์๊ฐ๋ ๊ฒฝ์ฐ๋ณด๋จ, ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ ํ์ฌ ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฅผ ์ํด์ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ด ํ์ํ๋ฐ ์ด๊ฒ์ ๋์์ฃผ๋ ๊ธฐ์ ์ด Inter-Process Communication์ด๋ค.
IPC๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ํฌ๊ฒ ๋ ๊ฐ์ง์ด๋ค. ์ฒซ ๋ฒ์งธ๋ Message Passing์ด๊ณ , ๋ ๋ฒ์งธ๋ Shared Memory์ด๋ค.
์ฐ์ Message Passing ๋ฐฉ์์ ๋ฉ์์ง ํ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
int msqqid;
/* ๋ฉ์ธ์ง ํ ์์ฑ */
msgqid = msgget(key, IPC_CREAT);
pid_parent = getpid();
pid_child = fork();
/* ๋ถ๋ชจ ํ๋ก์ธ์ค์ธ ๊ฒฝ์ฐ */
if (pid_child != 0) {
struct message sndmsg;
/* ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋ฉ์ธ์ง ํ์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋*/
send(msgqid, &msg);
}
์ฆ, ์ปค๋์ ์๋ ๋ฉ์ธ์ง ํ์ ํ๋ก์ธ์ค ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์์๋๋ ํ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ _receive_ ์์คํ ์ฝ์ ํตํด ํด๋น ๋ฉ์์ง๋ฅผ ์์ ํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฐฉ์์ ๊ฐ๋ ์ ์ผ๋ก ๊ต์ฅํ ๊ฐ๋จํ๋, ํ๋ก๊ทธ๋จ์ด ๋์ํ ๋ Shared Memory๋ณด๋ค ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. Kernel Mode๋ก Mode Change๋ฅผ ํ๋ฉด ์ค์ ๋ก ๋ฉ์์ง ํ๋ง ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
Shared Memory๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ ๊ทธ๋ฆผ ์์์์๋ ๋์ค๋ฏ์ด ํ๋ก์ธ์ค A๊ฐ ํ๋ก์ธ์ค B๋ฅผ fork()ํ์ฌ๋ Shared Memory๋ ์ ์ ์์ญ์ ์๋ ๋ฐ์ดํฐ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ์ปค๋์ ๋ค์ด๊ฐ ํ์ ์์ด ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด๋, _Context Switch_๊ฐ ์ผ์ด๋์ง ์๋๊ณ ์๊ฐ์ด ๋ค ์ ์์ผ๋, ์ด๋ ํ๋ก์ธ์ค๊ฐ์ ๋ณ๊ฒฝ ๋ฟ์ด์ง ๋ณ์๋ฅผ ์ฝ๊ณ ์ฐ๋๋ฐ๋ ์ฌ์ ํ ์ปค๋์ด ๊ฐ์ ํ์ง ๋ชปํ๋ค.
ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ๋จ์ ์ A์ B ์ฌ์ด์์ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. A์์ Shared Memory๋ฅผ ์์ ํ๋ฉด B์์ ์ฝ์ด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์์์น ๋ชปํ ๊ฐ์ B๊ฐ ๋ฐ์ ์ ์๋ค. ๋ฐ๋ผ์ ๋ณ๋๋ก A๊ฐ ์์ ํ๋ ๋์ Shared Memory์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํด์ผ ํ๋ค. ๋ํ ์ด๋ฌํ ๊ณผ์ ์ ๊ตฌํํ๋ ์ฝ๋๋ ๋ณต์กํ๊ธฐ๋ ํ๋ค.
IPC์ ์ฅ์
- ์ ๋ณด์ ๊ณต์
- ์คํ ์๋ ํฅ์
- ์ ๋ขฐ์ฑ/๊ณ ๊ฐ์ฉ์ฑ ํ๋ณด
ํ์ง๋ง, ํ๋ก์ธ์ค ๊ฐ์ ํ๋ ฅ์ ์์ด ๋๊ธฐํ ๋ฉ์ปค๋์ฆ(Synchronization mechanism)์ด ํ์ํ๋ค.
Signal์ด๋ ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฌ๊ธฐ์๋ ์ฌ์ ์ ์ ์๋ SIGNAL๋ ์๊ณ , ์ฌ์ฉ์ ์ ์ SIGNAL๋ ์๋ค. ์ฌ๊ธฐ์ ํท๊ฐ๋ฆฌ๋ฉด ์ ๋๋ ๊ฒ์ ์ด์์ฒด์ ๋ฅผ ํตํด์ ๋ณด๋ด์ผ ํ๋ ๊ฒ์ด๋ค. ํ ํ๋ก์ธ์ค์๊ฒ ์ง์ ์ ์ผ๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก SIGNAL์ ๋ ๋ฆด ๋ฅ๋ ฅ์ ์๋ค.
์๊ทธ๋์ ๋ฐ์ผ๋ฉด ๋ค์ 4๊ฐ์ง ๋์ ์ค ํ๋๊ฐ ๋ฐ์ํ๋ค.
ํ๋ก์ธ์ค๊ฐ terminated ๋๋ค. ํ๋ก์ธ์ค๊ฐ stopped ๋๋ค. ์๊ทธ๋์ด ๋ฌด์๋๋ค. ์ ์ ๊ฐ ์ ์ํ SIGNAL์ ๋ํ ํจ์๋ฅผ ์คํํ๋ค.
์ฉ์ด ์ ๋ฆฌ
- Signal
- ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๋จ, ์ด์์ฒด์ ๋ฅผ ํตํ์ฌ ์๋ฆฐ๋ค.
- Interrupt
- ํ๋์จ์ด ์ฅ์น๋ค์ด ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ์ด์์ฒด์ ์๊ฒ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
- System Call
- ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์๊ฒ ์ด๋ ํ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
'๐ Knowledge > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ๋๊ธฐํ, Race Condition, Critical Section (0) | 2024.03.31 |
---|---|
[์ด์์ฒด์ ] ์ค๋ ๋(Thread)์ ๋ฉํฐ ์ค๋ ๋(MultiThread)๋ ๋ฌด์์ผ๊น (0) | 2024.03.24 |
[์ด์์ฒด์ ] ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ์์๋ณด๊ธฐ (2) (0) | 2024.03.18 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ค์์น(Process Swtich) (0) | 2024.03.17 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์์ฑํด๋ณด๊ธฐ (1) | 2024.03.16 |