CS

[OS] ํ”„๋กœ์„ธ์Šค

hyeyeonismm 2025. 2. 17. 11:08

 

ํ”„๋กœ์„ธ์Šค๋ž€?

ํ•˜๋“œ๋””์Šคํฌ(SSD/HHD)์— ์ €์žฅ๋œ ์ •์  ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋”ฉ๋˜๊ณ  CPU์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ. ์ฆ‰, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋œปํ•œ๋‹ค.
ํ•˜๋“œ๋””์Šคํฌ์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด OS๊ฐ€ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ , ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.
CPU๊ฐ€ ๊ทธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์ด ์ˆœ๊ฐ„๋ถ€ํ„ฐ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์ด ๋‹จ์ˆœํ•œ ํŒŒ์ผ์ด๋ผ๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ + OS๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ •๋ณด์˜ ๊ฒฐํ•ฉ์ด๋‹ค.
ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์‹คํ–‰์‹œํ‚จ ์ˆ˜๋งŒํผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ์ฝ”๋“œ ์˜์—ญ: ์‹คํ–‰ ํŒŒ์ผ์˜ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๋ถ€๋ถ„
  • ๋ฐ์ดํ„ฐ ์˜์—ญ: ์ „์—ญ๋ณ€์ˆ˜, static ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์–ด์žˆ๋Š” ๋ถ€๋ถ„
  • ํž™ ์˜์—ญ: ๋™์ ํ• ๋‹น์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ (malloc, new ๊ฐ™์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ)
  • ์Šคํƒ ์˜์—ญ: ์ง€์—ญ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

ํ”„๋กœ์„ธ์Šค์—๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปค๋„์ด ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์€ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ/๋ฐ์ดํ„ฐ/ํž™/์Šคํƒ ์˜์—ญ์ด ์ด์— ์†ํ•œ๋‹ค.
์ปค๋„ ๊ณต๊ฐ„์€ ์ปค๋„ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์˜์—ญ์œผ๋กœ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์ง์ ‘ ์ ‘๊ทผ์„ ๋ชปํ•˜๊ณ , ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
PCB, ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง ์ •๋ณด, ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๊ฑด ๋ชจ๋‘ ์ปค๋„ ๊ณต๊ฐ„์— ์กด์žฌํ•œ๋‹ค.

 

PCB (Process Control Block)

์šด์˜์ฒด์ œ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ… ์ด ์šด์˜์ฒด์ œ๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๊ทธ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•จ. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ญ”์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด๋“ค๋„ ์ €์žฅ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ. ์ด๋ ‡๊ฒŒ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋†“์€ ๊ตฌ์กฐ์ฒด๊ฐ€ PCB์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฌธ๋งฅ ๊ตํ™˜์„ ์œ„ํ•ด ํ•„์š”ํ•˜๋ฉฐ, ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์œ ์ง€๋œ๋‹ค.
๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๊ณ ์œ ํ•œ PCB๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด PCB๋Š” ์ œ๊ฑฐ๋œ๋‹ค.

PCB์— ํฌํ•จ๋˜๋Š” ์ •๋ณด

  • PID (ํ”„๋กœ์„ธ์Šค ID)
  • PPID (Parent PID)
  • Process State
  • UID/GID (์‚ฌ์šฉ์ž/๊ทธ๋ฃน ID)
  • Program Counter: ๋‹ค์Œ Instruction์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์นด์šดํ„ฐ. CPU๋Š” ์ด ๊ฐ’์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค์˜ Instruction์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • Register
  • CPU Scheduling Information: ์šฐ์„ ์ˆœ์œ„, ์ตœ์ข… ์‹คํ–‰์‹œ๊ฐ„, CPU ์ ์œ ์‹œ๊ฐ„ ๋“ฑ
  • Memory Information: ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ์ €์žฅ
  • Process Information: ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”, ์Šค์ผ€์ค„๋ง ํ ํฌ์ธํ„ฐ ๋“ฑ
  • Device I/O Status: ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋ชฉ๋ก
  • Pointer: ๋ถ€๋ชจ/์ž์‹ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ์ž์›์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ
  • Open File List: ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ์—ด๋ ค์žˆ๋Š” ํŒŒ์ผ์˜ ๋ฆฌ์ŠคํŠธ

๋“ฑ..

 

/proc/<PID>/status๋ฅผ ์—ด์–ด๋ณด๋ฉด PCB์˜ ์ผ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ „์ด

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ์˜ค๊ฐ€๋ฉฐ ๋™์ž‘ํ•œ๋‹ค.

์ƒํƒœ ์ข…๋ฅ˜

  • New: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ง‰ ์ƒ์„ฑ๋œ ์ƒํƒœ. fork() ํ˜ธ์ถœ ์งํ›„, PCB๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„
  • Ready: ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์— ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ง€๋งŒ CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์•„์ง CPU๋ฅผ ๋ฐฐ์ •ํ•ด์ฃผ์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ค€๋น„ ํ์— ๋“ค์–ด๊ฐ€ ์žˆ์Œ
  • Running: CPU ์ฝ”์–ด๊ฐ€ ์‹ค์ œ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„. ํ•œ ์ฝ”์–ด ๋‹น ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•จ
  • Waiting (=Blocked): ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠน์ • ์ž์›์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ (ex. ๋””์Šคํฌ I/O ๊ธฐ๋‹ค๋ฆฌ๋Š”์ค‘, ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๊ธฐ๋‹ค๋ฆฌ๋Š”์ค‘, sleep() ํ˜ธ์ถœ ๋“ฑ..)
  • Terminated: ํ”„๋กœ์„ธ์Šค๊ฐ€ exit()๋ฅผ ํ˜ธ์ถœํ•ด ์ข…๋ฃŒ๋˜์—ˆ์ง€๋งŒ PCB๊ฐ€ ์•„์ง ๋ถ€๋ชจ์˜ wait() ํ˜ธ์ถœ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ. Zombie๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

 

์ƒํƒœ ์ „์ด ๋™์ž‘

  • Dispatch (Ready → Running): ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ์ •ํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•จ
  • Time runout (Runnig→ Ready): ํ• ๋‹น๋œ CPU time slice๋ฅผ ๋‹ค ์ผ์„ ๋•Œ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ํ”„๋กœ์„ธ์Šค ์ œ์–ด๊ถŒ์„ ๋นผ์•—์Œ
  • Block (Running → Waiting): I/O ์š”์ฒญ ๋“ฑ์œผ๋กœ CPU ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜๊ณ  ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ด๋™ํ•จ
  • Wake Up (Wait → Ready): ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „์ด๋˜๋Š” ๊ณผ์ •

 

fork()๋ž€?

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๊ธฐ ๋ณต์‚ฌ๋ณธ(์ž์‹ ํ”„๋กœ์„ธ์Šค)์„ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ
fork()๋ฅผ ํ†ตํ•ด PCB ๋ฐ PID๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ˆœํžˆ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ , OS๊ฐ€ PCB๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ , ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ CPU๋ฅผ ๋ฐฐ์ •ํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค๋Š” ์ƒํƒœ ์ „์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋™์ž‘ํ•œ๋‹ค.
์šด์˜์ฒด์ œ๋Š” ์ˆ˜๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ฉ”๋ชจ๋ฆฌ, CPU, ํŒŒ์ผ, I/O ๋“ฑ ๋ชจ๋“  ์ž์›์„ ๊ด€๋ฆฌํ•œ๋‹ค.

'CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Docker  (0) 2025.04.29
์ปจํ…Œ์ด๋„ˆ (Container)  (0) 2025.04.28
๊ฐ€์ƒํ™” (Virtualization)  (0) 2025.04.28