Curieux.JY
  • Post
  • Note
  • Jung Yeon Lee

On this page

  • ์šด์˜์ฒด์ œ๋ž€
    • ์šด์˜์ฒด์ œ์˜ ์—ญํ• 
      • ๊ฐ ์—ญํ• ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…
  • ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ
    • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค
    • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ
  • ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„
  • ์ธํ„ฐ๋ŸฝํŠธ(Interrupt)
    • ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ
    • ๋‚ด๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ
    • ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ
    • ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ฒ˜๋ฆฌ ๊ณผ์ •
  • ์‹œ์Šคํ…œ ์ฝœ(System Call)
    • Fork
    • wait
    • exec
  • PCB์™€ Context Switching
    • Process Management
    • PCB(Process Control Block)
    • PCB๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?
    • PCB๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋‚˜์š”?
    • Context Switching
    • Context Switching์˜ OverHead๋ž€?
  • IPC(Inter Process Communication)
    • IPC ์ข…๋ฅ˜

๐Ÿ“Operating System 001

cs
study
2024
CS Study Series
Published

January 15, 2024

Originial Repository: https://github.com/gyoogle/tech-interview-for-developer๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ 2์ฐจ ํŽธ์ง‘ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

Operating System 001
- ์šด์˜์ฒด์ œ๋ž€
- ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ
- ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„
- ์ธํ„ฐ๋ŸฝํŠธ(Interrupt)
- ์‹œ์Šคํ…œ ์ฝœ(System Call)
- PCB์™€ Context Switching
- IPC(Inter Process Communication)

์šด์˜์ฒด์ œ๋ž€

์šด์˜ ์ฒด์ œ(OS, Operating System)

ํ•˜๋“œ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ์ž์›๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•˜๋“œ์›จ์–ด ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์จ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์œ ์šฉํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

์ฆ‰, ์šด์˜ ์ฒด์ œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ปดํ“จํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ ์†Œํ”„ํŠธ์›จ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

(์ข…๋ฅ˜๋กœ๋Š” Windows, Linux, UNIX, MS-DOS ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์˜ ์—ญํ•  ๊ตฌ๋ถ„์— ๋”ฐ๋ผ ๊ฐ๊ฐ ์šฉ์ด์ ์ด ์žˆ๋‹ค.)


์šด์˜์ฒด์ œ์˜ ์—ญํ• 

1. ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ 2. ์ €์žฅ์žฅ์น˜ ๊ด€๋ฆฌ 3. ๋„คํŠธ์›Œํ‚น 4. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ 5. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„
ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ
์Šค์ผ€์ค„๋ง
๋™๊ธฐํ™”
IPC ํ†ต์‹ 
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ
ํŒŒ์ผ ์‹œ์Šคํ…œ
TCP/IP
๊ธฐํƒ€ ํ”„๋กœํ† ์ฝœ
๊ณ„์ • ๊ด€๋ฆฌ
์ ‘๊ทผ๊ถŒํ•œ ๊ด€๋ฆฌ
์ˆœ์ฐจ์ ‘๊ทผ ์žฅ์น˜
์ž„์˜์ ‘๊ทผ ์žฅ์น˜
๋„คํŠธ์›Œํฌ ์žฅ์น˜

๊ฐ ์—ญํ• ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…

1. ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

์šด์˜์ฒด์ œ์—์„œ ์ž‘๋™ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์–ด๋–ค ์˜๋ฏธ์—์„œ๋Š” ํ”„๋กœ์„ธ์„œ(CPU) ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ํ˜„์žฌ CPU๋ฅผ ์ ์œ ํ•ด์•ผ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ์‹ค์ œ๋กœ CPU๋ฅผ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•˜๋ฉฐ, ์ด ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๊ณต์œ  ์ž์› ์ ‘๊ทผ๊ณผ ํ†ต์‹  ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

2. ์ €์žฅ์žฅ์น˜ ๊ด€๋ฆฌ

1์ฐจ ์ €์žฅ์žฅ์น˜์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์™€ 2์ฐจ ์ €์žฅ์žฅ์น˜์— ํ•ด๋‹นํ•˜๋Š” ํ•˜๋“œ๋””์Šคํฌ, NAND ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

  • 1์ฐจ ์ €์žฅ์žฅ์น˜(Main Memory)
    • ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ
    • ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๊ฐ„์˜ ์นจ๋ฒ” ๋ฐฉ์ง€
    • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์  ํ™œ์šฉ์„ ์œ„ํ•œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋Šฅ
  • 2์ฐจ ์ €์žฅ์žฅ์น˜(HDD, NAND Flash Memory ๋“ฑ)
    • ํŒŒ์ผ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ์ด๋Ÿฐ ํŒŒ์ผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ OS์—์„œ ๊ด€๋ฆฌ
    • FAT, NTFS, EXT2, JFS, XFS ๋“ฑ ๋งŽ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ๋“ค์ด ๊ฐœ๋ฐœ๋˜์–ด ์‚ฌ์šฉ ์ค‘
3. ๋„คํŠธ์›Œํ‚น

๋„คํŠธ์›Œํ‚น์€ ์ปดํ“จํ„ฐ ํ™œ์šฉ์˜ ํ•ต์‹ฌ๊ณผ๋„ ๊ฐ™์•„์กŒ๋‹ค.

TCP/IP ๊ธฐ๋ฐ˜์˜ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์šด์˜์ฒด์ œ์—์„œ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. ํ˜„์žฌ ์ƒ์šฉ OS๋“ค์€ ๋‹ค์–‘ํ•˜๊ณ  ๋งŽ์€ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์šด์˜์ฒด์ œ๋Š” ์‚ฌ์šฉ์ž์™€ ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์— ์œ„์น˜ํ•ด์„œ, ํ•˜๋“œ์›จ์–ด๋ฅผ ์šด์˜ ๋ฐ ๊ด€๋ฆฌํ•˜๊ณ  ๋ช…๋ น์–ด๋ฅผ ์ œ์–ดํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฐ ํ•˜๋“œ์›จ์–ด๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ์ œ์–ด ๋ฐ ๊ด€๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

4. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” PC๋Š” ์˜ค์ง ํ•œ ์‚ฌ๋žŒ๋งŒ์˜ ๊ฒƒ์ผ๊นŒ? ์•„๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ PC๋กœ๋„ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ์šด์˜์ฒด์ œ๋Š” ํ•œ ์ปดํ“จํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ๋„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ€์กฑ๋“ค์ด ๊ฐ์ž์˜ ๊ณ„์ •์„ ๋งŒ๋“ค์–ด PC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ช…์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์šด์˜์ฒด์ œ๋Š” ๊ฐ ๊ณ„์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค. ์‚ฌ์šฉ์ž ๋ณ„๋กœ ํ”„๋ผ์ด๋ฒ„์‹œ์™€ ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ฐœ์ธ ํŒŒ์ผ์— ๋Œ€ํ•ด์„  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฐ–์—๋„ ํŒŒ์ผ์ด๋‚˜ ์‹œ์Šคํ…œ ์ž์›์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด๋‹ค.

5. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„

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

๋”ฐ๋ผ์„œ, ์šด์˜์ฒด์ œ ์•ˆ์— ํ•˜๋“œ์›จ์–ด๋ฅผ ์ถ”์ƒํ™” ํ•ด์ฃผ๋Š” ๊ณ„์ธต์ด ํ•„์š”ํ•˜๋‹ค. ์ด ๊ณ„์ธต์ด ๋ฐ”๋กœ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ํ•˜๋“œ์›จ์–ด์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์€ ๋งŒํผ, ์šด์˜์ฒด์ œ ๋‚ด๋ถ€์˜ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋„ ๋งŽ์ด ์กด์žฌํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์ˆ˜๋งŽ์€ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋˜ํ•œ ์šด์˜์ฒด์ œ๊ฐ€ ๋งก๊ณ  ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ

ํ”„๋กœ์„ธ์Šค : ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‹คํ–‰์ค‘์ธ ์ž‘์—…

์Šค๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํ๋ฆ„ ๋‹จ์œ„

๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ ์†Œ์œ  (๋ฉ”์ธ ์Šค๋ ˆ๋“œ ํฌํ•จ)

22
Process vs. Thread

ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ๊ฐ ๋ณ„๋„์˜ ์ฃผ์†Œ๊ณต๊ฐ„ ํ• ๋‹น (๋…๋ฆฝ์ )

  • Code : ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น)
  • Data : ์ „์—ญ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜, ๋ฐฐ์—ด ๋“ฑ
    • ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” data ์˜์—ญ์— ์ €์žฅ
    • ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” bss ์˜์—ญ์— ์ €์žฅ
  • Heap : ๋™์  ํ• ๋‹น ์‹œ ์‚ฌ์šฉ (new(), malloc() ๋“ฑ)
  • Stack : ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’ (์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)

์Šค๋ ˆ๋“œ๋Š” Stack๋งŒ ๋”ฐ๋กœ ํ• ๋‹น ๋ฐ›๊ณ  ๋‚˜๋จธ์ง€ ์˜์—ญ์€ ์„œ๋กœ ๊ณต์œ 

  • Stack ์˜์—ญ๋งŒ ๋”ฐ๋กœ ํ• ๋‹น ๋ฐ›๋Š” ์ด์œ 
    • ์“ฐ๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌ ํ•œ๋‹ค
    • ์ฆ‰ ๋…๋ฆฝ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
    • ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜๋“ฑ์„ ์ €์žฅํ•˜๋Š” ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น ๋ฐ›์•„์•ผ ํ•œ๋‹ค

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ ๊ฐ™์ด ์ƒ์„ฑ

ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ  ๊ณต๊ฐ„๊ณผ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด, ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต๊ฐ„, ์ž์›์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฐจ์ด๊ฐ€ ์กด์žฌํ•จ

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

์žฅ์  : ์•ˆ์ „์„ฑ (๋ฉ”๋ชจ๋ฆฌ ์นจ๋ฒ” ๋ฌธ์ œ๋ฅผ OS ์ฐจ์›์—์„œ ํ•ด๊ฒฐ)

๋‹จ์  : ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ–๊ณ  ์žˆ์–ด, ์ž‘์—…๋Ÿ‰ ๋งŽ์„ ์ˆ˜๋ก ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ. Context Switching์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜

Context Switching์ด๋ž€?

ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •

์ฆ‰, ๋™์ž‘ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐํ•˜๋ฉด์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋˜ ๋‹ค์Œ ์ˆœ๋ฒˆ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ์ด์ „์— ๋ณด๊ด€ํ–ˆ๋˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•จ

โ†’ ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™”์™€ ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด ์ง„ํ–‰๋˜์—ˆ์„ ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•จ

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

์Šค๋ ˆ๋“œ๋“ค์ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์คŒ

์žฅ์  : ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋งŒํผ์˜ ์‹œ๊ฐ„, ์ž์› ์†์‹ค์ด ๊ฐ์†Œ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ž๋ฃŒ ๊ณต์œ  ๊ฐ€๋Šฅ

๋‹จ์  : ์•ˆ์ „์„ฑ ๋ฌธ์ œ. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„ ๋ง๊ฐ€๋œจ๋ฆฌ๋ฉด, ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘๋™ ๋ถˆ๋Šฅ ์ƒํƒœ (๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ)

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ์•ˆ์ „์„ฑ์— ๋Œ€ํ•œ ๋‹จ์ ์€ Critical Section ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ๋Œ€๋น„ํ•จ

    ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์‹œ์ ์— ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ทธ ๊ฐ’์„ ์ฝ์œผ๋ คํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๊ณผ์ •

    ์ƒํ˜ธ ๋ฐฐ์ œ, ์ง„ํ–‰, ํ•œ์ •๋œ ๋Œ€๊ธฐ๋ฅผ ์ถฉ์กฑํ•ด์•ผํ•จ

ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„

ํ”„๋กœ๊ทธ๋žจ์ด CPU์— ์˜ํ•ด ์‹คํ–‰๋จ โ†’ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— โ€™ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„โ€™์ด ํ• ๋‹น๋จ

ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์—๋Š” ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • ์ฝ”๋“œ Segment : ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ Segment : ์ „์—ญ ๋ณ€์ˆ˜ ์ €์žฅ
  • ์Šคํƒ Segment : ํ•จ์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜ ์ €์žฅ
์™œ ์ด๋ ‡๊ฒŒ ๊ตฌ์—ญ์„ ๋‚˜๋ˆˆ๊ฑด๊ฐ€์š”?

์ตœ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Code๋Š” ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—์„œ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ณต์œ ํ•จ

Stack๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆˆ ์ด์œ ๋Š”, ์Šคํƒ ๊ตฌ์กฐ์˜ ํŠน์„ฑ๊ณผ ์ „์—ญ ๋ณ€์ˆ˜์˜ ํ™œ์šฉ์„ฑ์„ ์œ„ํ•œ ๊ฒƒ!

22
Process Memory
ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜์™€ ์ง€์—ญ ๋ณ€์ˆ˜๋Š”, LIFO(๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„๊ฒŒ ๋จผ์ € ๋‚˜์˜ด)ํŠน์„ฑ์„ ๊ฐ€์ง„ ์Šคํƒ์—์„œ ์‹คํ–‰๋œ๋‹ค. 
๋”ฐ๋ผ์„œ ์ด ํ•จ์ˆ˜๋“ค ์•ˆ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” '์ „์—ญ ๋ณ€์ˆ˜'๋Š” ๋”ฐ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ(Interrupt)

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ฆ‰์‹œ ์ค‘๋‹จํ•˜๊ณ , ๋ฐœ์ƒ๋œ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์šฐ์„  ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ์„ CPU์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๊ฒƒ

์ง€๊ธˆ ์ˆ˜ํ–‰ ์ค‘์ธ ์ผ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ์ผ(ex. ์ž…์ถœ๋ ฅ, ์šฐ์„  ์ˆœ์œ„ ์—ฐ์‚ฐ ๋“ฑ)์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์ผ์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚˜์„œ ํ•˜๋˜ ์ผ์„ ๊ณ„์†ํ•ด์•ผํ•œ๋‹ค.

  1. ์™ธ๋ถ€/๋‚ด๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋Š” CPU์˜ ํ•˜๋“œ์›จ์–ด ์‹ ํ˜ธ์— ์˜ํ•ด ๋ฐœ์ƒ
  2. ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋ช…๋ น์–ด์˜ ์ˆ˜ํ–‰์— ์˜ํ•ด ๋ฐœ์ƒ

์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ

์ž…์ถœ๋ ฅ ์žฅ์น˜, ํƒ€์ด๋ฐ ์žฅ์น˜, ์ „์› ๋“ฑ ์™ธ๋ถ€์ ์ธ ์š”์ธ์œผ๋กœ ๋ฐœ์ƒ

์ „์› ์ด์ƒ, ๊ธฐ๊ณ„ ์ฐฉ์˜ค, ์™ธ๋ถ€ ์‹ ํ˜ธ, ์ž…์ถœ๋ ฅ

๋‚ด๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ

Trap์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ž˜๋ชป๋œ ๋ช…๋ น์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ

0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๊ฐ€ ๋ฐœ์ƒ, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ, ๋ช…๋ น์–ด๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ (Exception)

์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

ํ”„๋กœ๊ทธ๋žจ ์ฒ˜๋ฆฌ ์ค‘ ๋ช…๋ น์˜ ์š”์ฒญ์— ์˜ํ•ด ๋ฐœ์ƒํ•œ ๊ฒƒ (SVC ์ธํ„ฐ๋ŸฝํŠธ)

์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๋ฐœ์ƒ

์†Œํ”„ํŠธ์›จ์–ด ์ด์šฉ ์ค‘์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์‹œ๋ถ„ํ•  ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž์› ํ• ๋‹น ๋™์ž‘์ด ์ˆ˜ํ–‰๋œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ฒ˜๋ฆฌ ๊ณผ์ •

์ฃผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

22
Handling Interrupts

ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉˆ์ถ”๊ณ , ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์™€ PC ๋“ฑ์„ ์Šคํƒ์— ์ž ์‹œ ์ €์žฅํ•œ ๋’ค์— ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์œผ๋กœ ๊ฐ„๋‹ค.

(์ž ์‹œ ์ €์žฅํ•˜๋Š” ์ด์œ ๋Š”, ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์ด ๋๋‚œ ๋’ค ๋‹ค์‹œ ์›๋ž˜ ์ž‘์—…์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)

๋งŒ์•ฝ ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋Šฅ์ด ์—†์—ˆ๋‹ค๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํŠน์ •ํ•œ ์–ด๋–ค ์ผ์„ ํ•  ์‹œ๊ธฐ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ๊ณ„์† ์ฒดํฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

(์ด๋ฅผ ํด๋ง(Polling)์ด๋ผ๊ณ  ํ•œ๋‹ค)

ํด๋ง์„ ํ•˜๋Š” ์‹œ๊ฐ„์—๋Š” ์›๋ž˜ ํ•˜๋˜ ์ผ์— ์ง‘์ค‘ํ•  ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜์–ด ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค.

์ฆ‰, ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž…๋ ฅ์„ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฐฉ๋ฒ•(์šฐ์„ ์ˆœ์œ„ ํŒ๋ณ„๋ฐฉ๋ฒ•)์—๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ํด๋ง ๋ฐฉ์‹
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ ํ•€์˜ ๊ฐ’์„ ๊ณ„์† ์ฝ์–ด ๋ณ€ํ™”๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ์‹
    • ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐจ๋ก€๋กœ ๋น„๊ตํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ธํ„ฐ๋ŸฝํŠธ ์ž์›์„ ์ฐพ์•„ ์ด์— ๋งž๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (ํ•˜๋“œ์›จ์–ด์— ๋น„ํ•ด ์†๋„ ๋А๋ฆผ)
  2. ์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹
    • MCU ์ž์ฒด๊ฐ€ ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋ณ€ํ™”๋ฅผ ์ฒดํฌํ•˜์—ฌ ๋ณ€ํ™” ์‹œ์—๋งŒ ์ผ์ •ํ•œ ๋™์ž‘์„ ํ•˜๋Š” ๋ฐฉ์‹
    • Daisy Chain
    • ๋ณ‘๋ ฌ ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ

์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹์€ ํ•˜๋“œ์›จ์–ด๋กœ ์ง€์›์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ œ์•ฝ์ด ์žˆ์ง€๋งŒ, ํด๋ง์— ๋น„ํ•ด ์‹ ์†ํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ โ€˜์‹ค์‹œ๊ฐ„ ๋Œ€์‘โ€™์ด ํ•„์š”ํ•  ๋•Œ๋Š” ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์ด๋‹ค.

์ฆ‰, ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋ฐœ์ƒ์‹œ๊ธฐ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ํž˜๋“  ๊ฒฝ์šฐ์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์‹œ์Šคํ…œ ์ฝœ(System Call)

fork( ), exec( ), wait( )์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์€ Process ์ƒ์„ฑ๊ณผ ์ œ์–ด๋ฅผ ์œ„ํ•œ System call์ž„.

  • fork, exec๋Š” ์ƒˆ๋กœ์šด Process ์ƒ์„ฑ๊ณผ ๊ด€๋ จ์ด ๋˜์–ด ์žˆ๋‹ค.
  • wait๋Š” Process (Parent)๊ฐ€ ๋งŒ๋“  ๋‹ค๋ฅธ Process(child) ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ช…๋ น์–ด์ž„.

Fork

์ƒˆ๋กœ์šด Process๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ.

๊ทธ๋Ÿฌ๋‚˜, ์ด์ƒํ•œ ๋ฐฉ์‹์ž„.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    printf("pid : %d", (int) getpid()); // pid : 29146
    
    int rc = fork();                    // ์ฃผ๋ชฉ
    
    if (rc < 0) {
        exit(1);
    }                                   // (1) fork ์‹คํŒจ
    else if (rc == 0) {                 // (2) child ์ธ ๊ฒฝ์šฐ (fork ๊ฐ’์ด 0)
        printf("child (pid : %d)", (int) getpid());
    }
    else {                              // (3) parent case
        printf("parent of %d (pid : %d)", rc, (int)getpid());
    }
}

pid : 29146

parent of 29147 (pid : 29146)

child (pid : 29147)

์„ ์ถœ๋ ฅํ•จ (parent์™€ child์˜ ์ˆœ์„œ๋Š” non-deterministicํ•จ. ์ฆ‰, ํ™•์‹ ํ•  ์ˆ˜ ์—†์Œ. scheduler๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ์ผ์ž„.)

[ํ•ด์„]

PID : ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž. UNIX ์‹œ์Šคํ…œ์—์„œ๋Š” PID๋Š” ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ช…๋ น์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•จ.

Fork()๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜ ๋” ์ƒ๊ธฐ๋Š”๋ฐ, ์ด ๋•Œ ์ƒ๊ธด ํ”„๋กœ์„ธ์Šค(Child)๋Š” fork๋ฅผ ๋งŒ๋“  ํ”„๋กœ์„ธ์Šค(Parent)์™€ (almost) ๋™์ผํ•œ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ OS๋Š” ์œ„์™€ ๋˜‘๊ฐ™์€ 2๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ , fork()๊ฐ€ return๋  ์ฐจ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Process (child)๋Š” main์—์„œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ , if ๋ฌธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ฐจ์ด์ ์ด ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ child์™€ parent์˜ fork() ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์™„์ „ํžˆ ๋™์ผํ•œ ๋ณต์‚ฌ๋ณธ์ด๋ผ ํ•  ์ˆ˜ ์—†๋‹ค.

Parent์˜ fork()๊ฐ’ => child์˜ pid ๊ฐ’

Child์˜ fork()๊ฐ’ => 0

Parent์™€ child์˜ fork ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ์€ ๋งค์šฐ ์œ ์šฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜! Scheduler๊ฐ€ ๋ถ€๋ชจ๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ• ์ง€ ์•„๋‹์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค.

pid : 29146

child (pid : 29147)

parent of 29147 (pid : 29146)


wait

child ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…

์œ„์˜ ์˜ˆ์‹œ์— int wc = wait(NULL)๋งŒ ์ถ”๊ฐ€ํ•จ.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char *argv[]) {
    printf("pid : %d", (int) getpid()); // pid : 29146
    
    int rc = fork();                    // ์ฃผ๋ชฉ
    
    if (rc < 0) {
        exit(1);
    }                                   // (1) fork ์‹คํŒจ
    else if (rc == 0) {                 // (2) child ์ธ ๊ฒฝ์šฐ (fork ๊ฐ’์ด 0)
        printf("child (pid : %d)", (int) getpid());
    }
    else {                              // (3) parent case
        int wc = wait(NULL)             // ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„
        printf("parent of %d (wc : %d / pid : %d)", wc, rc, (int)getpid());
    }
}

pid : 29146

child (pid : 29147)

parent of 29147 (wc : 29147 / pid : 29146)

wait๋ฅผ ํ†ตํ•ด์„œ, child์˜ ์‹คํ–‰์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์คŒ. parent๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋”๋ผ๋„, wait ()๋Š” child๊ฐ€ ๋๋‚˜๊ธฐ ์ „์—๋Š” returnํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ child๊ฐ€ ๋จผ์ € ์‹คํ–‰๋จ.


exec

๋‹จ์ˆœ fork๋Š” ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋‚ด์šฉ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋™์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•จ.

child์—์„œ๋Š” parent์™€ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” exec๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char *argv[]) {
    printf("pid : %d", (int) getpid()); // pid : 29146
    
    int rc = fork();                    // ์ฃผ๋ชฉ
    
    if (rc < 0) {
        exit(1);
    }                                   // (1) fork ์‹คํŒจ
    else if (rc == 0) {                 // (2) child ์ธ ๊ฒฝ์šฐ (fork ๊ฐ’์ด 0)
        printf("child (pid : %d)", (int) getpid());
        char *myargs[3];
        myargs[0] = strdup("wc");       // ๋‚ด๊ฐ€ ์‹คํ–‰ํ•  ํŒŒ์ผ ์ด๋ฆ„
        myargs[1] = strdup("p3.c");     // ์‹คํ–‰ํ•  ํŒŒ์ผ์— ๋„˜๊ฒจ์ค„ argument
        myargs[2] = NULL;               // end of array
        execvp(myarges[0], myargs);     // wc ํŒŒ์ผ ์‹คํ–‰.
        printf("this shouldn't print out") // ์‹คํ–‰๋˜์ง€ ์•Š์Œ.
    }
    else {                              // (3) parent case
        int wc = wait(NULL)             // ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„
        printf("parent of %d (wc : %d / pid : %d)", wc, rc, (int)getpid());
    }
}

exec๊ฐ€ ์‹คํ–‰๋˜๋ฉด,

execvp( ์‹คํ–‰ ํŒŒ์ผ, ์ „๋‹ฌ ์ธ์ž ) ํ•จ์ˆ˜๋Š”, code segment ์˜์—ญ์— ์‹คํ–‰ ํŒŒ์ผ์˜ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์™€์„œ ๋ฎ์–ด ์”Œ์šด๋‹ค.

์”Œ์šด ์ดํ›„์—๋Š”, heap, stack, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์ดˆ๊ธฐํ™”๋˜๊ณ , OS๋Š” ๊ทธ๋ƒฅ ์‹คํ–‰ํ•œ๋‹ค. ์ฆ‰, ์ƒˆ๋กœ์šด Process๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์— wc๋ผ๋Š” ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋กœ์ธํ•ด์„œ, execvp() ์ดํ›„์˜ ๋ถ€๋ถ„์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

PCB์™€ Context Switching

Process Management

CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ, CPU ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ

์ด๋•Œ, CPU๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ˆ„๊ตฐ์ง€ ์•Œ์•„์•ผ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ

ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŠน์ง•์„ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Process Metadata

  • Process Metadata
    • Process ID
    • Process State
    • Process Priority
    • CPU Registers
    • Owner
    • CPU Usage
    • Memeory Usage

์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด PCB(Process Control Block)์ด๋ผ๋Š” ๊ณณ์— ์ €์žฅ๋จ

PCB(Process Control Block)

ํ”„๋กœ์„ธ์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•ด ๋†“๋Š” ๊ณณ, ํ•œ PCB ์•ˆ์—๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊น€

22
PCB

๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ฉด?

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ โ†’ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ โ†’ ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ) ์ƒ์„ฑ 
โ†’ ์ด ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์ด PCB์— ์ €์žฅ

PCB๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

CPU์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ต์ฒด์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค. (interrupt๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ waiting ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ running์œผ๋กœ ๋ฐ”๊ฟ” ์˜ฌ๋ฆด ๋•Œ)

์ด๋•Œ, ์•ž์œผ๋กœ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•  ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ์ €์žฅ ๊ฐ’์„ PCB์— ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ์ด๋‹ค.

PCB๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋‚˜์š”?

Linked List ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•จ

PCB List Head์— PCB๋“ค์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๋ถ™๊ฒŒ ๋œ๋‹ค. ์ฃผ์†Œ๊ฐ’์œผ๋กœ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•จ.

์ฆ‰, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น PCB๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ์‹œ ์ œ๊ฑฐ๋จ

์ด๋ ‡๊ฒŒ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ Context Switching์ด๋ผ๊ณ  ํ•œ๋‹ค.

Context Switching

CPU๊ฐ€ ์ด์ „์˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ PCB์— ๋ณด๊ด€ํ•˜๊ณ , ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ PCB์— ์ฝ์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ ์žฌํ•˜๋Š” ๊ณผ์ •

๋ณดํ†ต ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์‹คํ–‰ ์ค‘์ธ CPU ์‚ฌ์šฉ ํ—ˆ๊ฐ€์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ๋ชจํ•˜๊ฑฐ๋‚˜, ์ž…์ถœ๋ ฅ์„ ์œ„ํ•ด ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— Context Switching์ด ๋ฐœ์ƒ

์ฆ‰, ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready โ†’ Running, Running โ†’ Ready, Running โ†’ Waiting์ฒ˜๋Ÿผ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒ!

Context Switching์˜ OverHead๋ž€?

overhead๋Š” ๊ณผ๋ถ€ํ•˜๋ผ๋Š” ๋œป์œผ๋กœ ๋ณดํ†ต ์•ˆ์ข‹์€ ๋ง๋กœ ๋งŽ์ด ์“ฐ์ธ๋‹ค.

ํ•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค ์ž‘์—… ์ค‘์—๋Š” OverHead๋ฅผ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ž…์ถœ๋ ฅ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜์‹œํ‚ด
์ด๋•Œ, CPU๋ฅผ ๊ทธ๋ƒฅ ๋†€๊ฒŒ ๋†”๋‘๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์ด ํšจ์œจ์ 

์ฆ‰, CPU์— ๊ณ„์† ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ค๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  Context Switching ํ•˜๋Š” ๊ฒƒ

CPU๊ฐ€ ๋†€์ง€ ์•Š๋„๋ก ๋งŒ๋“ค๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ผ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

IPC(Inter Process Communication)

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

์ฆ‰, ๋…๋ฆฝ ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. (์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์ž์›์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค)

์ด๋Ÿฐ ๋…๋ฆฝ์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ IPC ํ†ต์‹ ์ด๋‹ค.

22
IPC

ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ์„ค๋น„๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ปค๋„์ด๋ž€?

์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์œผ๋กœ, ๋‹ค๋ฅธ ๋ชจ๋“  ๋ถ€๋ถ„์— ์—ฌ๋Ÿฌ ๊ธฐ๋ณธ์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์คŒ

IPC ์„ค๋น„ ์ข…๋ฅ˜๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ IPC ์„ค๋น„๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

IPC ์ข…๋ฅ˜

  1. ์ต๋ช… PIPE

    ํŒŒ์ดํ”„๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ˜์ด์ค‘ ํ†ต์‹ ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

    ๋”ฐ๋ผ์„œ ์–‘์ชฝ์œผ๋กœ ๋ชจ๋‘ ์†ก/์ˆ˜์‹ ์„ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด 2๊ฐœ์˜ ํŒŒ์ดํ”„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

    ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์งˆ ๋• ํŒŒ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ์ „์ด์ค‘ ํ†ต์‹ ์„ ์œ„ํ•ด 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ๋Š” ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

  2. Named PIPE(FIFO)

    ์ต๋ช… ํŒŒ์ดํ”„๋Š” ํ†ต์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. (๋ถ€๋ชจ-์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์ฒ˜๋Ÿผ)

    Named ํŒŒ์ดํ”„๋Š” ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด ํ†ต์‹ ์— ์‚ฌ์šฉํ•œ๋‹ค.

    ์ฆ‰, ์ต๋ช… ํŒŒ์ดํ”„์˜ ํ™•์žฅ๋œ ์ƒํƒœ๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ (ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์žˆ๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉ)

    ํ•˜์ง€๋งŒ, Named ํŒŒ์ดํ”„ ์—ญ์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋™์‹œ์— ๋ถˆ๊ฐ€๋Šฅํ•จ. ๋”ฐ๋ผ์„œ ์ „์ด์ค‘ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ์ต๋ช… ํŒŒ์ดํ”„์ฒ˜๋Ÿผ 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅ

  3. Message Queue

    ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์€ Named ํŒŒ์ดํ”„์™€ ๋™์ผํ•จ

    ๋‹ค๋ฅธ์ ์€ ๋ฉ”์‹œ์ง€ ํ๋Š” ํŒŒ์ดํ”„์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

    ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

  4. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ

    ํŒŒ์ดํ”„, ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ํ†ต์‹ ์„ ์ด์šฉํ•œ ์„ค๋น„๋ผ๋ฉด, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ์„ค๋น„๋‹ค.

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

    ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ด์ค€๋‹ค.

    ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด, ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์ดํ›„ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    • ์ค‘๊ฐœ์ž ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์„œ IPC ์ค‘์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•จ


  5. ๋ฉ”๋ชจ๋ฆฌ ๋งต

    ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด์ค€๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋งต์€ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (์ฆ‰ ๊ณต์œ  ๋งค๊ฐœ์ฒด๊ฐ€ ํŒŒ์ผ+๋ฉ”๋ชจ๋ฆฌ)

    ์ฃผ๋กœ ํŒŒ์ผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  6. ์†Œ์ผ“

    ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์†Œ์ผ“์„ ํ†ตํ•ด์„œ ํ†ต์‹ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ์›๊ฒฉ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    ์„œ๋ฒ„(bind, listen, accept), ํด๋ผ์ด์–ธํŠธ(connect)

์ด๋Ÿฌํ•œ IPC ํ†ต์‹ ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๊ณต์œ ๋œ ์ž์›์— ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ์‹œํ‚ฌ ๋•Œ)

Copyright 2024, Jung Yeon Lee