3. Process

๋ฐ•์ˆ˜๋นˆยท2022๋…„ 1์›” 16์ผ
0

  • ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค์ˆ˜ ํ”„๋กœ๊ทธ๋žจ ์ ์žฌ๋˜์–ด ๋ณ‘ํ–‰ ์‹คํ–‰
  • process: ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
    • program์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ ๋˜๋ฉด
  • sys = ์‚ฌ์šฉ์ž ์ฝ”๋“œ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค + os ์ฝ”๋“œ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค

3.1 Process Concept

  • job ์‹คํ–‰ โ†’ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ/task ์‹คํ–‰ โ†’ ํ˜„๋Œ€
  • ์ด๋Ÿฐ ๋ชจ๋“  ํ™œ๋™์ด ํ”„๋กœ์„ธ์Šค(job ์‹คํ–‰ํ•˜๋˜ ์ผ๊ด„์ฒ˜๋ฆฌ์—์„œ๋„ ์‚ฌ์šฉ์ž+์‹œ์Šคํ…œ์ด๋‹ˆ)

3.1.1 The Process

  • ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ โ†’ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ + ํ”„๋กœ์„ธ์Šค ๋ ˆ์ง€์Šคํ„ฐ

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

  • text: ์‹คํ–‰ ์ฝ”๋“œ
  • data: ์ „์—ญ ๋ณ€์ˆ˜
  • heap: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋™์  ํ• ๋‹น ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ
  • stack: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ (๋งค๊ฐœ๋ณ€์ˆ˜, ๋ณต๊ท€ ์ฃผ์†Œ, ์ง€์—ญ๋ณ€์ˆ˜...)
  • activation record ํ™œ์„ฑํ™” ๋ ˆ์ฝ”๋“œ
    • ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ๋ณต๊ท€์ฃผ์†Œ ํฌํ•จ
    • ์Šคํƒ์— push

3.1.2 Process State

  • new: ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์ค‘
  • running: ๋ช…๋ น์–ด ์‹คํ–‰ ์ค‘
  • waiting: ์ด๋ฒคํŠธ(์ž…์ถœ๋ ฅ ์™„๋ฃŒ, ์‹ ํ˜ธ ์ˆ˜์‹  ๋“ฑ) ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
  • ready: cpu์— ํ• ๋‹น ๊ธฐ๋‹ค๋ฆผ
  • terminated: ์‹คํ–‰ ์ข…๋ฃŒ

โ—cpu์—์„œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ running ๊ฐ€๋Šฅ

3.1.3 Process Control Block

  • PCB Process Control Block ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก = ํ…Œ์Šคํฌ ์ œ์–ด๋ธ”๋ก

    • OS์—์„œ PCB์— ์˜ํ•ด ํ”„๋กœ์„ธ์Šค ํ‘œํ˜„
    • process state: ์•ž์—์„œ ๋งํ•œ ์ƒํƒœ
    • process numbers: PID
    • program counter: ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ ๊ฐ€๋ฆฌํ‚ด
    • cpu registers: ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ ์ €์žฅ๋˜์–ด์•ผ ํ•  ์ •๋ณด ๊ธฐ๋ก โ†’ ๋‹ค์‹œ ๋˜‘๊ฐ™์€ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก
      • accumulator, index register, stack register, general-purpose register, condition code...
    • cpu ์Šค์ผ€์ค„๋ง ์ •๋ณด: ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„, ์Šค์ผ€์ค„ ํ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ณด: base register์™€ limit register์˜ ๊ฐ’, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”, ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ” ๋“ฑ
    • accounting ์ •๋ณด: ์‚ฌ์šฉ์‹œ๊ฐ„, ๊ณ„์ • ๋ฒˆํ˜ธ, ์žก ๋ฒˆํ˜ธ, ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธ...
    • ์ž…์ถœ๋ ฅ ์ƒํƒœ ์ •๋ณด: ์ž…์ถœ๋ ฅ ์žฅ์น˜, ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก ๋“ฑ

3.1.4 Threads

  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ โ†’ ์›Œ๋“œ๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด, ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ ํ•œ๊ฐ€์ง€ ์ผ๋งŒ ํ•  ์ˆ˜ ์žˆ์Œ โ†’ ๋ฌธ์ž ์ž…๋ ฅ๊ณผ ๋™์‹œ์— ์ฒ ์ž ๊ฒ€์‚ฌ ๋ถˆ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ‘๋ ฌ ์‹คํ–‰
  • PCB์— ์Šค๋ ˆ๋“œ ์ •๋ณด ํฌํ•จ

3.2 Process Scheduling

  • ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •๋„ degree of multiprogramming
    • ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ˆ˜
  • I/O bound process
    • ๊ณ„์‚ฐ < I/O ์‹œ๊ฐ„
  • CPU bound process
    • ๊ณ„์‚ฐ > I/O ์‹œ๊ฐ„

3.2.1 Scheduling Queue

  • ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ โ†’ ์ค€๋น„ํ ready Q์—์„œ ready state

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

    • Q์˜ ํ—ค๋”์— ์ฒซ๋ฒˆ์งธ PCB ํฌ์ธํ„ฐ โ†’ ๊ฐ PCB์˜ pc์— ๋‹ค์Œ PCB ์ฃผ์†Œ
  • ๋Œ€๊ธฐ ํ Wait Q

    • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๊ธฐ๋‹ค๋ฆฌ๋Š” proc
  • ํ์ž‰ ๋‹ค์ด์–ด๊ทธ๋žจ

    • ์›: ์„œ๋น„์Šค ์ œ๊ณต ์ž์›
    • ready Q์— ์žˆ๋‹ค๊ฐ€, CPU์— ์˜ํ•ด ์‹คํ–‰๋˜๊ณ , ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ โ†’ wait Q โ†’ ๋‹ค์‹œ ready Q๋กœ

3.2.2 CPU Scheduling

  • CPU ์Šค์ผ€์ค„๋Ÿฌ: wait Q์˜ proc์ค‘ ํ•˜๋‚˜ ์„ ํƒํ•ด cpu ์ฝ”์–ด์— ํ• ๋‹น
    • ์ ์–ด๋„ 100ms ์— ํ•œ๋ฒˆ ์‹คํ–‰
  • ์Šค์™€ํ•‘ swaping
    • swap out: ์‹คํ–‰ ์ค‘ proc ์ƒํƒœ ์ €์žฅ. mem โ†’ disk
    • swap in: disk โ†’ mem. ์ƒํƒœ ๋ณต์›
    • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ดˆ๊ณผ ์‚ฌ์šฉ๋˜์–ด ๊ฐ€์šฉ๊ณต๊ฐ„ ํ™•๋ณด ํ•„์š”ํ•  ๋•Œ

3.2.3 Context Switch

  • ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚œ ํ›„์— ๋ฌธ๋งฅ ๋ณต๊ตฌ โ†’ ์ €์žฅ ํ•„์š”
  • context โ†’ pcb์— ํ‘œํ˜„
    • process state
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ณด
  • context switch ๋ฌธ๋งฅ ๊ตํ™˜
    • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๋ณด๊ด€ํ•˜๊ณ , ์ƒˆ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๋ณต๊ตฌ
    • state save ์ƒํƒœ ์ €์žฅ: cpu์˜ ํ˜„์žฌ ์ƒํƒœ ์ €์žฅ
    • state restore ๋ณต๊ตฌ ์ž‘์—…: ์—ฐ์‚ฐ ์žฌ๊ฐœ ์œ„ํ•ด ์ƒํƒœ ๋ณต๊ตฌ
    • context switch ์‹œ๊ฐ„์€ ์˜ค๋ฒ„ํ—ค๋“œ

3.3 Operation on Processes

  • proc ๋ณ‘ํ–‰ ์‹คํ–‰
  • ๋™์  ์ƒ์„ฑ, ์ œ๊ฑฐ
  • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋ฐ ์ข…๋ฃŒ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ฒ• ํ•„์š”

3.3.1 Process Creation

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ์šด proc ์ƒ์„ฑ
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค

    • ์ž์‹ ํ”„๋กœ์„ธ์Šค: cpuํ•œํ…Œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ›๊ฑฐ๋‚˜, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊บผ ์ผ๋ถ€ ์‚ฌ์šฉ

      โ†’ ํŠธ๋ฆฌ ํ˜•์„ฑ

  • pid ๋ถ€์—ฌ โ†’ index๋กœ ๊ด€๋ฆฌ

3.3.2 Process Teramination

  • ์ข…๋ฃŒ๋˜๋ฉด ์ž์› ๋ฐ˜๋‚ฉ
  • ๋ถ€๋ชจ๋Š” ์ž์‹์„ ๊ฐ•์ œ์ข…๋ฃŒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
    • ์ž์‹ ์ƒ์„ฑ์‹œ pid ๋ถ€๋ชจ์—๊ฒŒ ๋„˜์–ด๊ฐ
  • ์—ฐ์‡„์‹ ์ข…๋ฃŒ cascading termination
    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž์‹๋„ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•จ
    • os๊ฐ€ ๊ฐ•์š”
  • ์ข€๋น„ ํ”„๋กœ์„ธ์Šค
    • ์ข…๋ฃŒ โ†’ ์ž์› ๋ฐ˜๋‚ฉ but ๋ถ€๋ชจ๊ฐ€ wait() ํ˜ธ์ถœ ์•ˆํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์—๋Š” ๊ทธ๋Œ€๋กœ ๊ธฐ๋ก๋˜์–ด์žˆ์Œ
  • ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค
    • ์ข€๋น„์˜€๋Š”๋ฐ ๋ถ€๋ชจ๊ฐ€ wait() ์—†์ด exit() ํ•ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ

โ‡’ init ํ”„๋กœ์„ธ์Šค์˜ ์ž์‹์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ wait()์‹œํ–‰ํ•ด ์ฒญ์†Œ

์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต

  • ํ•œ์ •๋œ ์ž์› โ†’ ์‹œ์Šคํ…œ ์ž์› ํšŒ์ˆ˜ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
  • ์ค‘์š”๋„ ๊ณ„์ธต ์‹๋ณ„ํ•ด ์ค‘์š”๋„ ๋‚ฎ์€ ๊ฒƒ ๋ถ€ํ„ฐ ํšŒ์ˆ˜
  1. forground process ์ „๊ฒฝ ํ”„๋กœ์„ธ์Šค: ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋ณด์ด๋Š” ํ”„๋กœ์„ธ์Šค
  2. visible process ๊ฐ€์‹œ์  ํ”„๋กœ์„ธ์Šค: ์ „๊ฒฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ํ™œ๋™
  3. service process ์„œ๋น„์Šค ํ”„๋กœ์„ธ์Šค: ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ง€ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ (์Œ์•… ์žฌ์ƒ....)
  4. background process ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค: ํ™œ๋™ ์ˆ˜ํ–‰ but ์‚ฌ์šฉ์ž ์ธ์ง€ X
  5. empty process ๋นˆ ํ”„๋กœ์„ธ์Šค: ํ™œ์„ฑ ๊ตฌ์„ฑ์š”์†Œ X
  • 5โ†’1 ์ˆœ์„œ๋กœ ์ข…๋ฃŒ ์‹œํ‚ด

3.4 Interprocess Communication

  • ๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค independent process
    • ๋ฐ์ดํ„ฐ ๊ณต์œ  X
  • ํ˜‘๋ ฅ์  ํ”„๋กœ์„ธ์Šค cooperative process
    • ์˜ํ–ฅ ์ฃผ๊ณ  ๋ฐ›์Œ
    • information sharing: ๋™์ผํ•œ ์ •๋ณด ํ•„์š”๋กœ ํ•  ์ˆ˜ ์žˆ์Œ (๋ณต๋ถ™)
    • computation speedup ๊ณ„์‚ฐ ๊ฐ€์†ํ™”: ์„œ๋ธŒํƒœ์Šคํฌ๋กœ ๋‚˜๋ˆ  ๋ณ‘๋ ฌ ์‹คํ–‰ (๋ฉ€ํ‹ฐ์ฝ”์–ด)
    • moularity ๋ชจ๋“ˆ์„ฑ: ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๋กœ ๋ชจ๋“ˆ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ

IPC, InterProcess Communication ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ 

  1. Shared memory ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ
    • ํ†ต์ƒ ์‹œ์Šคํ…œ ์ฝœ ์ด์šฉ โ†’ ์˜ค๋ฒ„ํ—ค๋“œ ์ ์–ด ๋น ๋ฆ„
    • ๊ตฌ์ถ• ์‹œ์—๋งŒ ์‹œ์Šคํ…œ์ฝœ ํ•„์š”
  2. message passing ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ
    • ์ถฉ๋Œ X
    • ์ ์€ ์–‘ ๋ฐ์ดํ„ฐ ๊ตํ™˜
    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์œ ๋ฆฌ
  • ๋‘˜ ๋‹ค ๊ตฌํ˜„๋œ os๊ฐ€ ์ผ๋ฐ˜์ 

3.5 IPC in Shared-Memory Sys.

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๊ตฌ์ถ•
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์— ์œ„์น˜ โ†’ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ฃผ์†Œ ๊ณต๊ฐ„์— ์ถ”๊ฐ€
  • ๋™์ผํ•œ ์œ„์น˜์— write ํ•˜์ง€ ์•Š๋„๋ก ์ฑ…์ž„ ์ ธ์•ผ ํ•จ
  • ํ˜‘๋ ฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
    • ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๋ฌธ์ œ
    • ex) ์ปดํŒŒ์ผ๋Ÿฌ: ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ ์ƒ์‚ฐ / ์–ด์…ˆ๋ธ”๋Ÿฌ: ์†Œ๋น„
      • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ โ†’ ์ƒ์‚ฐํ•œ ๊ฒƒ ๋ฐ”๋กœ ์†Œ๋น„ (๋™๊ธฐํ™” ์ค‘์š”)
    • ๋ฒ„ํผ
      • ๋ฌดํ•œ ๋ฒ„ํผ unbounded buffer
        • ๋ฌดํ•œํžˆ ์ƒ์‚ฐํ•˜๊ณ  ์†Œ๋น„ ๊ฐ€๋Šฅ
      • ์œ ํ•œ ๋ฒ„ํผ bounded buffer
        • ๊ณต๊ฐ„ ๋ถ€์กฑํ•˜๋ฉด ์ƒ์‚ฐ ์ •์ง€, ๊ณต๊ฐ„ ๋น„๋ฉด ์†Œ๋น„ ์ •์ง€
  • ๋™๊ธฐํ™”, ํšจ์œจ์  ๊ตฌํ˜„ โ†’ ๋ชจ๋‹ˆํ„ฐ, ๋กœํ‚น ๋“ฑ๋“ฑ ๋‚˜์ค‘์— ๋‚˜์˜ด

3.6 IPC in Message-Passing Sys

  • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ ํŠนํžˆ๋‚˜ ์œ ์šฉํ•จ
  • msg: ๊ณ ์ •๊ธธ์ด / ๊ฐ€๋ณ€๊ธธ์ด
  • Communication link ํ†ต์‹  ์—ฐ๊ฒฐ ์„ค์ • โ†’ ํ†ต์‹ ๊ฐ€๋Šฅ
    • ์ง์ ‘ or ๊ฐ„์ ‘ ํ†ต์‹ 
    • sync or async ํ†ต์‹ 
    • ์ž๋™ or ๋ช…์‹œ์  ๋ฒ„ํผ๋ง

3.6.1 Naming

  • ์ง์ ‘ ํ†ต์‹ 
    • ์„œ๋กœ์˜ ์ด๋ฆ„ ๋ช…์‹œ
    • ๋‘ ํ”„๋กœ์„ธ์Šค ์Œ ์‚ฌ์ด ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ โ†’ ๋Œ€์นญ์„ฑ
    • ๋‹จ์ 
      • ๋ชจ๋“ˆ์„ฑ ์ œํ•œ
      • ํ•˜๋“œ ์ฝ”๋”ฉ ๊ธฐ๋ฒ•
  • ๊ฐ„์ ‘ ํ†ต์‹ 
    • mailbox, port๋กœ ์†ก์‹ 
    • ๊ณต์œ  ๋ฉ”์ผ๋ฐ•์Šค โ†’ ๊ณต์œ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ํ†ต์‹  (๋‘ ๊ฐœ ์ด์ƒ)
    • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ ๊ฐ–์„ ์ˆ˜ ์žˆ์Œ
    • receive()์€ ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•จ (FIFO, RR...)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์†Œ์œ ํ•œ ๋ฉ”์ผ ๋ฐ•์Šค
      • ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์‹œ ์‚ฌ๋ผ์ง
      • ์‚ฌ๋ผ์ง„ ๋ฉ”์ผ ๋ฐ•์Šค์— send() โ†’ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค ์•Œ๋ ค์ค˜์•ผํ•จ
    • OS๊ฐ€ ์†Œ์œ ํ•œ ๋ฉ”์ผ ๋ฐ•์Šค
      • ์‹œ์Šคํ…œ์ฝœ๋กœ ์†Œ์œ ๊ถŒ, ์ˆ˜์‹ ํŠน๊ถŒ ์ •ํ•ด์ง
      • ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ

3.6.2 Synchronization

  • send(), receive() ๊ตฌํ˜„ํ•˜๋Š” ์„ค๊ณ„ ์˜ต์…˜
    1. blocking ๋ด‰์‡„ํ˜• โ†’ Sync
      • ๋ณด๋‚ด๊ธฐ: ์ˆ˜์‹ ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”์ผํ•จ ๋ด‰์‡„
      • ๋ฐ›๊ธฐ: ๋ฉ”์„ธ์ง€ ์ด์šฉ ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ์ˆ˜์‹  ํ”„๋กœ์„ธ์Šค ๋ด‰์‡„
    2. nonblocking ๋น„๋ด‰์‡„ํ˜• โ†’ async
      • ๋ณด๋‚ด๊ธฐ: ๋ฉ”์„ธ์ง€ ๋ณด๋‚ด๊ณ , ์ž‘์—… ์žฌ์‹œ์ž‘
      • ๋ฐ›๊ธฐ: ์œ ํšจํ•œ msg ๋˜๋Š” null ๋ฐ›์Œ
  • ๋ž‘๋ฐ๋ถ€ rendezvous
    • send(), recieve() ๋ชจ๋‘ blcoking ์ผ ๋•Œ
    • ๋‘˜๋‹ค blocking์ด๋ผ์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋๋‚˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ธฐ๋‹ค๋ ค์•ผ๋งŒ ํ•จ ์„œ๋กœ.

3.6.3 Buffering

  • ๋ฉ”์„ธ์ง€ ํ ๊ตฌํ˜„ ๋ฐฉ์‹
  1. zero capcity ๋ฌด์šฉ๋Ÿ‰
    • ํ์˜ ๊ธธ์ด๊ฐ€ 0
    • ๋Œ€๊ธฐํ•˜๋Š” ๋ฉ”์„ธ์ง€ ์—†์Œ.
    • ๋ฐ”๋กœ๋ฐ”๋กœ
  2. bounded capacity ์œ ํ•œ ์šฉ๋Ÿ‰
    • ๊ธธ์ด n
    • ํ๊ฐ€ ๋งŒ์›์ด๋ฉด, ๊ณต๊ฐ„ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•  ๋•Œ ๊นŒ์ง€ block
  3. unbounded capacity ๋ฌดํ•œ ์šฉ๋Ÿ‰
    • ์ž ์žฌ์  ๋ฌดํ•œํ•œ ๊ธธ์ด
    • never blocked

3.7 Examples of IP Sys.

3.7.1 POSIX Shared Memory

  • ๋ฉ”๋ชจ๋ฆฌ-์‚ฌ์ƒ ํŒŒ์ผ

3.7.2 Mach Msg. Passing

3.7.3 Windows

3.7.4 Pipes

  • ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋‹ฌ์ž
  • ๋ฌธ์ œ
    1. ๋‹จ๋ฐฉํ–ฅ or ์–‘๋ฐฉํ–ฅ
    2. ์–‘๋ฐฉํ–ฅ ์ด๋ผ๋ฉด, half duplex ๋˜๋Š” full duplex
      • full์˜ ๊ฒฝ์šฐ, ๋™์‹œ์— ์–‘๋ฐฉํ–ฅ
    3. ๋ถ€๋ชจ-์ž์‹ ๊ฐ™์€ ํŠน์ • ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€
    4. ๋„คํŠธ์›Œํฌ or ๊ฐ™์€ ๊ธฐ๊ณ„ ์•ˆ
    ls | less
    
    // ls ๋ช…๋ น์–ด๋กœ๋Š” ๋ชจ๋“  ํŒŒ์ผ ๋ชฉ๋ก์ด ๋‹ค ๋ณด์ž„
    // less ๋ช…๋ น์–ด ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ๋ณด๋ฉฐ ๋ฐฉํ–ฅํ‚ค๋กœ ์ด๋™ ๊ฐ€๋Šฅ
    // ls๊ฐ€ ์ƒ์‚ฐ์ž๋กœ์จ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , less๊ฐ€ ์†Œ๋น„ํ•˜๋Š” **ํŒŒ์ดํ”„** ํ˜•

1. Ordinary Pipes

  • ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ํ˜•ํƒœ
  • ์ƒ์‚ฐ์ž: ์“ฐ๊ธฐ ์ข…๋‹จ, ์†Œ๋น„์ž: ์ฝ๊ธฐ ์ข…๋‹จ โ†’ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  only โ†’ ์–‘๋ฐฉํ–ฅ ํ•˜๊ณ ์‹ถ์œผ๋ฉด ํŒŒ์ดํ”„ ๋‘๊ฐœ
  • ํŒŒ์ดํ”„ ์ƒ์„ฑํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ๋ถ€๋ชจ-์ž์‹
    • fd[0]์— ๋ถ€๋ชจ๊ฐ€ ์“ฐ๋ฉด, fd[1]๋กœ ์ž์‹์ด ์ฝ๊ณ , ์ž์‹์ด fd[0]์— ์“ฐ๋ฉด ๋ถ€๋ชจ๊ฐ€ fd[1]๋กœ ์ฝ์Œ

2. Named Pipes ์ง€๋ช… ํŒŒ์ดํ”„

  • ์–‘๋ฐฉํ–ฅ, half duplex
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง€๋ช… ํŒŒ์ดํ”„ ์ด์šฉ ๊ฐ€๋Šฅ
  • ํ•œ ๊ธฐ๊ณ„ ๋‚ด์—์„œ ํ†ต์‹ 
  • ๋„คํŠธ์›Œํฌ๋Š” ์†Œ์ผ“ ํ•„์š”

3.8 Communication in Client-Server Sys

3.8.1 Socket

  • ํ†ต์‹ ์˜ endpoint
  • IP ์ฃผ์†Œ + port #
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ ์š”์ฒญ โ†’ ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํŠธ ๋ฒˆํ˜ธ ๋ถ€์—ฌ โ†’ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ๊ฐ€ listen ํ•˜๊ณ  ์žˆ๋Š” ํฌํŠธ๋กœ ํŒจํ‚ท ์ „์†ก
  • ๋ชจ๋“  ์—ฐ๊ฒฐ์ด ์œ ์ผ โ†’ ๋™์ผ ํด๋ผ์ด์–ธํŠธ์™€ ํ˜ธ์ŠคํŠธ, ๋‘ ์—ฐ๊ฒฐ โ†’ ๋‹ค๋ฅธ port#
  • ๋ฃจํ”„๋ฐฑ loopback
    • 127.0.0.1
    • ์ž์‹  ๊ธฐ๊ณ„ ์ง€์นญ

3.8.2 Remote Procedure Call, RPC

  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๋œ ๋‘ ์‹œ์Šคํ…œ ์‚ฌ์ด ํ†ต์‹ 
  • ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๊ธฐ๋ฒ•์„ ์ถ”์ƒํ™”
  • ๋ฉ”์„ธ์ง€ ๊ธฐ๋ฐ˜ IPC
  • ํฌํŠธ์— ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋””๋จผ์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋จ โ†’ ํ•ด๋‹น ํฌํŠธ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ๋ณด๋ƒ„ โ†’ ํ•จ์ˆ˜ ์‹คํ–‰(๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€์ง)๋˜๊ณ  ์‘๋‹ต ๋ฉ”์„ธ์ง€ return
  • ํฌํŠธ: ์„œ๋น„์Šค๋งˆ๋‹ค ํฌํŠธ๊ฐ€ ์ง€์ •๋˜์–ด์žˆ์Œ
  • Stub ์Šคํ…
    • ์œˆ๋„์šฐ MIDL Microsoft Interface Definition Language
    • ํ†ต์‹ ์— ํ•„์š”ํ•œ ์ž์„ธํ•œ ์‚ฌํ•ญ ์ˆจ๊ฒจ์คŒ
    • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ ๊ฐ€์ง โ†’ ์–‘์ธก์—์„œ ํ•„์š”ํ•œ ์ผ ์ฒ˜๋ฆฌํ•ด ์คŒ
    • marshall ์ •๋ˆ
      • big endian๊ณผ small endian์˜ ์ฐจ์ด ๊ทน๋ณตํ•˜๊ฒŒ ์ •๋ˆํ•ด์คŒ
      • XDR external dara representation ์ค‘๋ฆฝ์  ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹
      • ํด๋ผ์ด์–ธํŠธ ๋น…์ธ๋””์•ˆ โ†’ ์Šคํ… โ†’ XDR โ†’ ์Šคํ… โ†’ ์„œ๋ฒ„ ์Šค๋ชฐ์ธ๋””์•ˆ ๊ฐ€๋Šฅํ•ด์ง!
  • ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ โ†’ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ํ™•์ธ ์–ด๋ ค์›€ โ†’ Ack ์ด์šฉ
  • ๋ฐ”์ธ๋”ฉ
    1. ๊ณ ์ • ํฌํŠธ ์ฃผ์†Œ
    2. ๋ž‘๋ฐ๋ถ€ ๋™์  ๋ฐ”์ธ๋”ฉ
      1. ๋ž‘๋ฐ๋ถ€์šฉ ๋””๋จผ matchmaker
      2. RPC ์ด๋ฆ„์„ matchmaker์—๊ฒŒ ๋ณด๋ƒ„ โ†’ ํฌํŠธ ๋ฒˆํ˜ธ ์•Œ๋ ค์คŒ โ†’ RPC์—๊ฒŒ ์š”์ฒญ ๋ณด๋ƒ„
      3. ์ดˆ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์œผ๋‚˜ ๊ณ ์ •๋ณด๋‹ค ์œ ์—ฐํ•จ
profile
๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ํ•™๋ถ€์ƒ์˜ ๊ผผ์ง€๋ฝ ๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€