Skip to content

Latest commit

ย 

History

History
654 lines (336 loc) ยท 23.6 KB

Operating System .md

File metadata and controls

654 lines (336 loc) ยท 23.6 KB

Ch2. ์ปดํ“จํ„ฐ์˜ ๊ตฌ์กฐ์™€ ์„ฑ๋Šฅ ํ–ฅ์ƒ

CPU์˜ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ๊ณผ์ •

LOAD mem(100), register 2; //๋ฉ”๋ชจ๋ฆฌ์˜ 100๋ฒˆ์ง€์— ์žˆ๋Š” ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ 2๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
LOAD mem(120), register 3; //๋ฉ”๋ชจ๋ฆฌ์˜ 120๋ฒˆ์ง€์— ์žˆ๋Š” ๊ฐ’์„ ์ œ๋ฆฌ์Šคํ„ฐ 3์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
ADD register 5, register 2, register 3; //๋ ˆ์ง€์Šคํ„ฐ 2์™€ ๋ ˆ์ง€์Šคํ„ฐ 3์— ์ €์žฅ๋œ ๊ฐ’์˜ ํ•ฉ์„ ๋ ˆ์ง€์Šคํ„ฐ 5์— ์ €์žฅ
MOVE register 5, mem(160); //๋ ˆ์ง€์Šคํ„ฐ 5์˜ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์˜ 160๋ฒˆ์ง€๋กœ ์˜ฎ๊ธด๋‹ค.

CPU๊ฐ€ ์—ฐ์‚ฐ์„ ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๊ฐ€์ ธ์™€ ์ž„์‹œ๋กœ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์žฅ์†Œ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ.

์ œ์–ด์žฅ์น˜๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ณ  CPU ๋‚ด์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์กฐ์ ˆํ•˜๋Š” ์—ญํ• 

๋ฒ„์Šค์˜ ์ข…๋ฅ˜

๋ฒ„์Šค๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ, ์ฃผ๋ณ€ ์žฅ์น˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ.

  • ์ œ์–ด๋ฒ„์Šค(control bus)

    ์ œ์–ด์žฅ์น˜์™€ ์—ฐ๊ฒฐ๋œ ๋ฒ„์Šค๋กœ, CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๋ณ€ ์žฅ์น˜์— ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๋ณ€ ์žฅ์น˜์—์„œ๋„ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ œ์–ด์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ธฐ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

  • ์ฃผ์†Œ๋ฒ„์Šค(address bus)

    ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ๋ฒ„์Šค๋กœ, ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์ฃผ๋ณ€์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ๋•Œ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ๋‹จ๋ฐฉํ–ฅ

  • ๋ฐ์ดํ„ฐ๋ฒ„์Šค(data bus)

    ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ๋ฒ„์Šค๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ด๋™์ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ

  • polling : CPU๊ฐ€ ์ง์ ‘ ์ž…์ถœ๋ ฅ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ.

  • CPU์ž‘์—…๊ณผ ์ €์žฅ์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ ์ด๋™์„ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ํšจ์œจ์„ ๋†’์ธ๋‹ค.

  • Interrupt handler : ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌ ๊ณผ์ •์ด ์ •์˜๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜

  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ

    • CPU๋Š” ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ๋™์‹œ์— ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํšจ์œจ์ ์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ.
    • ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ์— ๋„˜๋ฒ„๋กœ ๊ฐ๊ฐ์˜ ์ธํ„ฐ๋ŸฝํŠธ ๊ตฌ๋ถ„, ์™„๋ฃŒ/๋น„์™„๋ฃŒ ์ƒํƒœ๋ฅผ ๋ฐฑํ„ฐ ํ†ต์งธ๋กœ CPU์—๊ฒŒ ์ „์†ก.
  • DMA(Direct Memory Access, ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ)

    ๋ฉ”๋ชจ๋ฆฌ๋Š” CPU๋งŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์ž‘์—…๊ณต๊ฐ„์ด๋ผ ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ์ž๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

    ๋”ฐ๋ผ์„œ CPU์˜ ํ—ˆ๋ฝ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ DMA๋ผ๊ณ  ํ•œ๋‹ค.

  • ๋™์ž‘ ๊ณผ์ •<์ž…์ถœ๋ ฅ>

    1. CPU๊ฐ€ ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ž…์ถœ๋ ฅ ๋ช…๋ น์„ ๋ณด๋‚ธ๋‹ค.

    2. ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ์ž๋Š” ๋ช…๋ น๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ ธ๋‹ค๋†“๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ์žฅ์น˜์— ์˜ฎ๊ธด๋‹ค.

    3. ๋ฐ์ดํ„ฐ ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ์ž๋Š” ์™„๋ฃŒ ์‹ ํ˜ธ(์ธํ„ฐ๋ŸฝํŠธ)๋ฅผ CPU์— ๋ณด๋‚ธ๋‹ค.

    4. CPU๋Š” ํ•˜๋˜ ์ผ์„ ์ค‘๋‹จํ•˜๊ณ  ์˜ฎ๊ฒจ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    ์„ธ๋ถ€๊ณผ์ •

    1. ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์ผ์‹œ ์ •์ง€ ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ, ์žฌ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž„์‹œ๋กœ์ €์žฅํ•œ๋‹ค.

    2. ์ธํ„ฐ๋ŸฝํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜์–ด ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋•Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋™์‹œ์— ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ทธ์— ๋”ฐ๋ผ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

    3. ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ์— ๋“ฑ๋ก๋œ ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

    4. ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๋งž์น˜๋ฉด ์ผ์‹œ ์ •์ง€๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋œ๋‹ค.

      ์ž…์ถœ๋ ฅ ์™„๋ฃŒ -> ๋‹ค์‹œ ์‹คํ–‰ / ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์นจ๋ฒ”์ด๋‚˜ ์˜ค๋ฅ˜ -> ์ข…๋ฃŒ

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ(Parallel processing)

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ CPU multi-thread๋ผ๊ณ  ํ•œ๋‹ค.

  • CPU์—์„œ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •

    1. ๋ช…๋ น์–ด ํŒจ์น˜(Instruction Fetch, IF) : ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
    2. ๋ช…๋ น์–ด ํ•ด์„(Instruction Decode, ID) : ๋ช…๋ น์–ด๋ฅผ ํ•ด์„
    3. ์‹คํ–‰(EXecution, EX) : ํ•ด์„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ๋ช…๋ น์–ด ์‹คํ–‰
    4. ์“ฐ๊ธฐ(Write Back,WB) : ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•

    • ํŒŒ์ดํ”„๋ผ์ธ ๊ธฐ๋ฒ•(pipeline) = ํ•˜์ดํผ์Šค๋ ˆ๋“œ(Hyper-Thread)

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

- ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ(data hazard)

  ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ. ๋ฐ์ดํ„ฐ A๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ช…๋ น์–ด๋Š” ์•ž์˜ ๋ช…๋ น์–ด(A)๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. 

  ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ช…๋ น์–ด ๋‹จ๊ณ„๋ฅผ ์ง€์—ฐํ•˜์—ฌ ํ•ด๊ฒฐ.

- ์ œ์–ด ํ•ด์ €๋“œ(control hazard)

  if๋ฌธ ํ˜น์€ goto๋ฌธ ์ฒ˜๋Ÿผ ๋ถ„๊ธฐ๋ฅผ ํ•˜๋Š” ๋ช…๋ น์—์„œ ๋ฐœ์ƒ. ๋ช…๋ น์–ด๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฌธ์žฅ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด ํ˜„์žฌ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค์ด ์“ธ๋ชจ ์—†์–ด์ง„๋‹ค. 

  ๋ถ„๊ธฐ ์˜ˆ์ธก์ด๋‚˜ ๋ถ„๊ธฐ ์ง€์—ฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ

- ๊ตฌ์กฐ ํ•ด์ €๋“œ(structural hazard)

  ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๊ฐ€ ๊ฐ™์€ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
  • ์Šˆํผ์Šค์นผ๋ผ(super-scalar)๊ธฐ๋ฒ•

    ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”์–ด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌ์„ฑํ•˜์—ฌ ๋ณต์ˆ˜์˜ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹.

    ์ฝ”์–ด๋ฅผ 2๊ฐœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๊ฐ€ 2๊ฐœ.

Ch3. ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ

ํ”„๋กœ๊ทธ๋žจ์€ ์ €์žฅ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ •์ ์ธ ์ƒํƒœ์ด๊ณ , ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋™์ ์ธ ์ƒํƒœ์ด๋‹ค.

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

  • ์ƒ์„ฑ : ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ ธ์™€ ์‹คํ–‰ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ ์ƒํƒœ
  • ์ค€๋น„ : ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๊ธฐ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ. ์‹คํ–‰๋  ํ”„๋กœ์„ธ์Šค๋ฅผ CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์„ ํƒํ•œ๋‹ค.
  • ์‹คํ–‰ : ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ์–ป์–ด CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ. ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์˜ context switching ๋ฐœ์ƒ
  • ๋Œ€๊ธฐ : ์‹คํ–‰ ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…์ถœ๋ ฅ์„ ์š”์ฒญํ•˜๋ฉด ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ. ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด ์ค€๋น„ ์ƒํƒœ๋กœ ๊ฐ„๋‹ค.
  • ์™„๋ฃŒ : ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ. ์ •์ƒ์ข…๋ฃŒ exit, ๋น„์ •์ƒ ์ข…๋ฃŒ abort

PCB(Process Control Block)

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ ์œ ํ•œ PCB๋ฅผ ๊ฐ€์ง„๋‹ค. ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ ๋งŒ๋“ค์–ด์ ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๋ฉด ํ๊ธฐ

ํฌ์ธํ„ฐ, ํ”„๋กœ์„ธ์Šค ์ƒํƒœ, ํ”„๋กœ์„ธ์Šค ๊ตฌ๋ถ„์ž, ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ, ์šฐ์„ ์ˆœ์œ„, ๊ฐ์ข… ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด ...

๋ฌธ๋งฅ๊ตํ™˜(Context Switching)

CPU๋ฅผ ์ฐจ์ง€ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‚˜๊ฐ€๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์ž‘์—….

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

  • ์ฝ”๋“œ์˜์—ญ

    ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ. ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ฒ˜๋ฆฌ. ์ž๊ธฐ ์ž์‹ ์„ ์ˆ˜์ •ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์กด์žฌX..

  • ๋ฐ์ดํ„ฐ์˜์—ญ

    ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์ •์˜ํ•œ ๋ณ€์ˆ˜(์ „์—ญ๋ณ€์ˆ˜), ํŒŒ์ผ ๋“ฑ ๊ฐ์ข… ๋ฐ์ดํ„ฐ. ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ

==> ์ฝ”๋“œ์˜์—ญ๊ณผ ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ง์ „์— ์œ„์น˜์™€ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ •์ ํ• ๋‹น ์—ญ์—ญ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ํž™ ์˜์—ญ

    • ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ณ€์ˆ˜ ์˜์—ญ ex)malloc

      main(){
          int sarr[50];
          int *darr;
          
          darr=(int*)malloc(sizeof(int)*50);
          
          free(darr); //๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜
      }
  • ์Šคํƒ์˜์—ญ

    ๋ถ€์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ. ๋ณต๊ตฌ ์œ„์น˜ ๋“ฑ. ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

    • ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ณต๊ท€ ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค.
    • ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์˜์—ญ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ. ์ง€์—ญ๋ณ€์ˆ˜ ์ €์žฅ

==> ์Šคํƒ์˜์—ญ๊ณผ ํž™์˜์—ญ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋งŒ๋“ค์–ด์ง€๋Š” ์˜์—ญ์œผ๋กœ, ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚ฌ๋‹ค ์ค„์–ด๋“ค๊ธฐ๋„ ํ•˜๋Š” ๋™์ ํ• ๋‹น ์˜์—ญ์ด๋‹ค.

fork()

์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ํ•จ์ˆ˜. ์ปค๋„์—์„œ ์ œ๊ณต. ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ์ผ์ข…

์‹คํ–‰ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค, ์ƒˆ๋กœ ์ƒ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ์„œ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„

  • ์žฅ์ 

    • ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ์ž์›์„ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‹œ์Šคํ…œ ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

exec()

๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜.

ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด PCB๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋•Œ exec() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ PCB, ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ, ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ•˜๋‹ค.

์Šค๋ ˆ๋“œ

ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ์— ์ •์˜๋œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ CPU์— ์ž‘์—… ์š”์ฒญ์„ ํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„

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

    ํ”„๋กœ์„ธ์Šค๋Š” ์•ฝํ•˜๊ฒŒ ์—ฐ๊ฒฐ(๋…๋ฆฝ์ )๋˜์–ด ์žˆ๋Š” ๋ฐ˜๋ฉด ์Šค๋ ˆ๋“œ๊ธฐ๋ฆฌ๋Š” ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค.

    ํ”„๋กœ์„ธ์Šค : ์ฃฝ / ์•ˆ์‹ฌ / ์ผ€์ดํฌ ์Šค๋ ˆ๋“œ : ๊ณ ๊ธฐ ๊ตฝ๊ธฐ / ์ฑ„์†Œ ๊ตฝ๊ธฐ / ์†Œ์Šค ๋ฟŒ๋ฆฌ๊ธฐ

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

      ํ”„๋กœ์„ธ์Šค ๋‚ด ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„ํ• ํ•จ์œผ๋กœ์จ ์ž‘์—…์˜ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ํ”„๋กœ์„ธ์Šค ์šด์˜ ๊ธฐ๋ฒ•.

    • ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น

      ์šด์˜์ฒด์ œ๊ฐ€ CPU์— ์ž‘์—…์„ ์ค„ ๋•Œ ์‹œ๊ฐ„์„ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ๋ฐฐ๋ถ„ํ•˜๋Š” ๊ธฐ๋ฒ•.

    • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ

      CPU๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—… ํ™˜๊ฒฝ. = ์Šˆํผ์Šค์นผ๋ผ ๊ธฐ๋ฒ•

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

      ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๋„์ž‡์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•.

    โ€‹ *์ •์ ์˜์—ญ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์˜์—ญ

    • fork() ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ํ•„์š” ์—†๋Š” ์ •์  ์˜์—ญ์ด ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋Š” ์ฝ”๋“œ, ํŒŒ์ผ๋“ฑ์˜ ์ž์›์„ ๊ณต์œ ํ•จ์œผ๋กœ์จ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ณ  ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒํ•œ๋‹ค.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • ์‘๋‹ต์„ฑ ํ–ฅ์ƒ : ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž…์ถœ๋ ฅ์œผ๋กœ ์ธํ•ด ์ž‘์—…์ด ์ง„ํ–‰๋˜์ง€ ์•Š๋”๋ผ๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๊ณ„์†ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ž‘์—… ์š”๊ตฌ์— ๋นจ๋ฆฌ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ž์› ๊ณต์œ  : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ์ž‘์—…์„ ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํšจ์œจ์„ฑ ํ–ฅ์ƒ : ์ž์›์˜ ์ค‘๋ณต์„ ๋ง‰์Œ์œผ๋กœ์จ ํšจ์œจ ํ–ฅ์ƒ
    • ๋‹ค์ค‘ CPU ์ง€์› : 2๊ฐœ ์ด์ƒ์˜ CPU๋ฅผ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋œ๋‹ค.
  • ๋‹จ์ 
    • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ชจ๋ธ

  • ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ(user-level thread)

    • ์‚ฌ์šฉ์ž ๋ ˆ๋ฒจ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„.

    • ์ปค๋„ ์ž…์žฅ์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์ปค๋„์˜ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜์™€ ์—ฐ๊ฒฐ๋œ๋‹ค.

    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง์ ‘ ์Šค์ผ€์ค„๋งํ•˜๊ณ  ์ž‘์—…์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— context switching X

    • ์žฅ์  ๋ฌธ๋งฅ๊ตํ™˜๊ณผ ๊ฐ™์€ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์ด ์ค„์–ด๋“ค์–ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

    • ๋‹จ์ 

      ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ์™€ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์œ„ํ•ด ๋Œ€๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๊ฐ€๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

      ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ CPU๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

      ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.

  • ์ปค๋„ ์Šค๋ ˆ๋“œ(kernel-level thread)

    รชยด๏ฟฝรซ ยจ รฌ๏ฟฝยดรซยฏยธรฌยง๏ฟฝ

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

    • ์‚ฌ์šฉ์ž ๋ ˆ๋ฒจ ์Šค๋ ˆ๋“œ์™€ ์ปค๋„ ๋ ˆ๋ฒจ ์Šค๋ ˆ๋“œ๋ฅผ ํ˜ผํ•ฉํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์Šค๋ ˆ๋“œ๋ผ๊ณ ๋„ ํ•œ๋‹ค.

CH4. CPU Scheduling

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ‰ํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ

์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง๊ณผ ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง

  • ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง "๋นผ์•—์„ ์ˆ˜ ์žˆ์Œ"

    ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ด๋”๋ผ๋„ ์šด์˜์ฒด์ œ๊ฐ€ CPU๋ฅผ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์žˆ๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹

  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง "๋นผ์•—์„ ์ˆ˜ ์—†์Œ"

    ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋นผ์•—์„ ์ˆ˜ ์—†๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹

    ๊ตฌ๋ถ„ ์„ ์ ํ˜• ๋น„์„ ์ ํ˜•
    ์ž‘์—… ๋ฐฉ์‹ ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๊ณ  ์ƒˆ๋กœ์šด ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰ ์ƒํƒœ์— ์žˆ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—… ๋ถˆ๊ฐ€๋Šฅ
    ์žฅ์  ๋Œ€ํ™”ํ˜•์ด๋‚˜ ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์— ์ ํ•ฉ CPU ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ž‘์—…๋Ÿ‰์ด ์ ๊ณ  ๋ฌธ๋งฅ ๊ตํ™˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๋‹ค
    ๋‹จ์  ์˜ค๋ฒ„ํ—ค๋“œ ๋งŽ๋‹ค ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŽ์•„ ์ฒ˜๋ฆฌ์œจ์ด ๋–จ์–ด์ง„๋‹ค.
    ์‚ฌ์šฉ ์‹œ๋ถ„ํ•  ๋ฐฉ์‹ ์Šค์ผ€์ค„๋Ÿฌ ์ผ๊ด„ ์ž‘์—… ๋ฐฉ์‹ ์Šค์ผ€์ค„๋Ÿฌ
    ์ค‘์š”๋„ ๋†’๋‹ค ๋‚ฎ๋‹ค

๋‹ค์ค‘ ํ

  • ์ค€๋น„ ์ƒํƒœ์˜ ๋‹ค์ค‘ ํ

    • ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„ ๋ฐฉ์‹

      ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ฐฉ์‹

    • ๋ณ€๋™ ์šฐ์„ ์ˆœ์œ„ ๋ฐฉ์‹

      ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ ๋ถ€์—ฌ๋ฐ›์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ž‘์—… ์ค‘๊ฐ„์— ๋ณ€ํ•˜๋Š” ๋ฐฉ์‹

  • ๋Œ€๊ธฐ ์ƒํƒœ์˜ ๋‹ค์ค‘ ํ

์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

์„ ์ , ๋น„์„ ์  ์€ ํ”„๋กœ์„ธ์Šค ๊ธฐ์ค€์œผ๋กœ CPU๋ฅผ ๋บ๋Š”์ง€ ์•ˆ๋บ๋Š”์ง€,,

  • ๋น„์„ ์ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜ "์•ˆ๋บ๋Š”๋‹ค"

    FCFS, SJF, HRN

  • ์„ ์ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜ "๋บ๋Š”๋‹ค"

    ๋ผ์šด๋“œ๋กœ๋นˆ, SRT, ๋‹ค๋‹จ๊ณ„ ํ, ๋‹ค๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ ํ

  • ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ

    ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง

  1. FCFS ์Šค์ผ€์ค„๋ง (First Come First Served)

    ์ค€๋น„ํ์— ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋น„์„ ์ ํ˜•

    • ์žฅ์  : ๋‹จ์ˆœํ•˜๊ณ  ๊ณตํ‰

    • ๋‹จ์ 

      • convoy effect - ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ฐจ์ง€ํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ํ•˜์—ผ์—†์ด ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.
      • ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ CPU๊ฐ€ ์ž‘์—…ํ•˜์ง€ ์•Š๊ณ  ์‰ฌ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์•„์ ธ ์ž‘์—…ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค.
  2. SJF ์Šค์ผ€์ค„๋ง(Shortest Job First)

    ์ค€๋น„ ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ์ž‘์—…๋ถ€ํ„ฐ ํ• ๋‹นํ•˜๋Š” ๋น„์„ ์ ํ˜•.

    • ์žฅ์  : ์ž‘์€ ์ž‘์—…์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ํšจ์œจ์„ฑ up, FCFS๋ณด๋‹ค ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์งง์Œ.

    • ๋‹จ์ 

      • ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

      • ๊ณตํ‰ํ•˜์ง€ ๋ชปํ•˜๋‹ค

        ์ž‘์—…์‹œ๊ฐ„์ด ๊ธธ์–ด ๊ณ„์† ๋’ค๋กœ ๋ฐ€๋ฆฌ๋Š” starvation(์•„์‚ฌ) ํ˜„์ƒ ๋ฐœ์ƒ.

        ==> aging ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

  3. HRN ์Šค์ผ€์ค„๋ง(Highest Response Ratio Next)

    SJF์˜ starvation ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋น„์„ ์ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜. ์„œ๋น„์Šค๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„ + CPU ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•˜์—ฌ ์Šค์ผ€์ค„๋ง ํ•˜๋Š” ๋ฐฉ์‹

    ์šฐ์„ ์ˆœ์œ„ = (๋Œ€๊ธฐ์‹œ๊ฐ„ + CPU ์‚ฌ์šฉ์‹œ๊ฐ„) / CPU ์‚ฌ์šฉ์‹œ๊ฐ„

  4. ๋ผ์šด๋“œ ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง (Round Robin)

    ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ๋™์•ˆ ์ž‘์—… ํ•˜๋‹ค๊ฐ€ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ค€๋น„ ํ์˜ ๋งจ ๋’ค๋กœ ๊ฐ€์„œ ์ž๊ธฐ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹.

    ์„ ์ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๋Œ€ํ‘œ์ ์ด๋ฉฐ, ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž‘์—…์„ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ˆœํ™˜ํ•˜๋ฉด์„œ ์‹คํ–‰๋œ๋‹ค.

  5. SRT ์Šค์ผ€์ค„๋ง (Shortest Remaing Time)

    SJF + Round Robin. SJF์˜ ์„ ์ ํ˜• ๋ฒ„์ „. CPU๋ฅผ ํ• ๋‹น๋ฐ›์„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ ๋‚จ์•„ ์žˆ๋Š” ์ž‘์—… ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•œ๋‹ค.

    • ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์™€ ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ ์‹œ๊ฐ„์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•จ.
    • ์ข…๋ฃŒ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์•„์‚ฌํ˜„์ƒ ๋ฐœ์ƒ
  6. ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง

    ์„ ์ /๋น„์„ ์  ๋‘˜๋‹ค ๊ฐ€๋Šฅ

    • ๋ฌธ์ œ์ 
      • ํ”„๋กœ์„ธ์Šค์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ๊ณตํ‰์„ฑ ์œ„๋ฐฐ
      • ์•„์‚ฌํ˜„์ƒ
      • ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งค๋ฒˆ ๋ฐ”๊ฟ”์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
  7. ๋‹ค๋‹จ๊ณ„ ํ ์Šค์ผ€์ค„๋ง

    ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ค€๋น„ ํ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹. ์šฐ์„  ์ˆœ์œ„ ๋ณ„ ํ๋ฅผ ์ƒ์„ฑ.

    ๊ฐ ๋‹จ๊ณ„์˜ ํ์— ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์„ ์‚ฌ์šฉ, ์šฐ์„  ์ˆœ์œ„์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

    ์ƒ์œ„ ํ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์—๋Š” ํ•˜์œ„ ํ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋‹ค.

  8. ๋‹ค๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ ํ ์Šค์ผ€์ค„๋ง

    ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค์— ๋ถˆ๋ฆฌํ•œ ๋‹ค๋‹จ๊ณ„ ํ ์Šค์ผ€์ค„๋ง์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ๋ฐฉ์‹.

    CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‚œ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค. CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‚œ ํ”„๋กœ์„ธ์Šค๋Š” ์›๋ž˜์˜ ํ๋กœ ๋˜๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ•˜๋‚˜ ๋‚ฎ์€ ํ์˜ ๋์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

    ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์„ ์ˆ˜๋ก ํ•ด๋‹น ํ์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๊ฐ€ ํฌ๋‹ค.

    ๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰ ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌดํ•œ๋Œ€์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค == FCFS

Ch5. ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

๊ณต์œ ์ž์›

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

์ž„๊ณ„๊ตฌ์—ญ

  • ๊ณต์œ  ์ž์› ์ ‘๊ทผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜์—ญ

  • ์ž„๊ณ„๊ตฌ์—ญ ํ•ด๊ฒฐ ์กฐ๊ฑด

    1. ์ƒํ˜ธ๋ฐฐ์ œ(mutual exlusion)

    โ€‹ ์ž„๊ณ„๊ตฌ์—ญ ๋‚ด์—๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์กด์žฌ

    1. ํ•œ์ • ๋Œ€๊ธฐ(bounded waiting)

    โ€‹ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ๋ฌดํ•œ๋Œ€๊ธฐ ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

    โ€‹ ์ฆ‰ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

    1. ์ง„ํ–‰์˜ ์œตํ†ต์„ฑ(progress flexibility)

    โ€‹ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ง„ํ–‰์„ ๋ฐฉํ•ดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

์ž„๊ณ„๊ตฌ์—ญ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž„๊ณ„๊ตฌ์—ญ์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ

#include <stdio.h>

bool lock = false;
int balance;

int main(){
    while(lock==true);
        lock=true;
        balance = balance+10; /* ์ž„๊ณ„๊ตฌ์—ญ */
        lock = false;
    
}
  • ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    //๊ณต์œ  ๋ณ€์ˆ˜
    bool lock1=false;
    bool lock2=false;
    int turn=1; //๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— lock์„ ์„ค์ •ํ•˜์—ฌ ์ž„๊ณ„๊ตฌ์—ญ์— ๋ชป๋“ค์–ด๊ฐ€๋Š” ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜.
    
    
    //Process 1
    lock1=true;
    turn=2;
    while(lock2==true && turn==2);
    
    /*~~~์ž„๊ณ„๊ตฌ์—ญ~~~*/
    
    lock1=false;
    
    
    //Process 2
    lock2=true;
    turn=1;
    while(lock1==true && turn==1);
    
    /*~~~์ž„๊ณ„๊ตฌ์—ญ~~~*/
    
    lock2=false;
  • ๋ฐ์ปค ์•Œ๊ณ ๋ฆฌ์ฆ˜

    //๊ณต์œ ๋ณ€์ˆ˜
    bool lock1=false;
    bool lock2=false;
    int turn=1;
    
    //P1
    lock1 = true;
    while(lock2==true){
        if(turn ==2){
            lock1=false;
            while(turn==2);
            lock1=true;
        }
    }
    /*~~~~~์ž„๊ณ„๊ตฌ์—ญ~~~~~*/
    turn=2;
    lock1=false;
    }
    1. P1์€ ์šฐ์„  ์ž ๊ธˆ์„ ๊ฑด๋‹ค.

    2. P2์˜ ์ž ๊ธˆ์ด ๊ฑธ๋ ธ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    3. ๋งŒ์•ฝ P2๋„ ์ž ๊ธˆ์„ ๊ฑธ์—ˆ๋‹ค๋ฉด ๋ˆ„๊ฐ€ ๋จผ์ €์ธ์ง€ ํ™•์ธํ•œ๋‹ค.(turn)

      3-1. P1์˜ ์ฐจ๋ก€์ด๋ฉด(turn==1) ์ž„๊ณ„๊ตฌ์—ญ ์ง„์ž…

      3-2. P2์˜ ์ฐจ๋ก€์ด๋ฉด 4๋กœ ์ด๋™.

    4. P1์€ ์ž ๊ธˆ์„ ํ’€๊ณ , P2๊ฐ€ ๋งˆ์น ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.(while (turn==2);)

      P2๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ์ž ๊ธˆ์„ ๊ฑธ๊ณ  ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ์ง„์ž…ํ•œ๋‹ค.

  • ์„ธ๋งˆํฌ์–ด

    • ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์Šค์œ„์น˜๋ฅผ ์‚ฌ์šฉ์ค‘์œผ๋กœ ๋†“๊ณ  ๋“ค์–ด๊ฐ„๋‹ค.

    • ์ดํ›„์— ๋„์ฐฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์•ž์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ์„ธ๋งˆํฌ์–ด๋Š” ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค์— ์ž„๊ณ„๊ตฌ์—ญ์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๋™๊ธฐํ™” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค.

    • ์ž„๊ณ„๊ตฌ์—ญ์ด ์ž ๊ฒผ๋Š”์ง€ ์ง์ ‘ ์ ๊ฒ€ํ•˜๊ฑฐ๋‚˜, ๋ฐ”์œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋™๊ธฐํ™” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

    • ์„ธ๋งˆํฌ์–ด์—์„œ ์ž ๊ธˆ์ด ํ•ด์ œ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์„ธ๋งˆํฌ์–ด ํ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ wake_up์‹ ํ˜ธ๋ฅผ ๋ฐ›์œผ๋ฉด ํ์—์„œ ๋‚˜์™€ ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž….

    • 2๊ฐœ์˜ ๊ณต์œ  ์ž์›์„ ๊ฐ€์ง€๊ณ  3๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—… ํ•  ๋•Œ (Rs=2;)

      1. ํ”„๋กœ์„ธ์Šค P1์€ RS ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•œ๋‹ค.
      2. ํ”„๋กœ์„ธ์Šค P2๋„ RS ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•œ๋‹ค.
      3. P3์€ RS๊ฐ€ 0์ด๋ฏ€๋กœ ๋Œ€๊ธฐ.
      4. P1์ด ์ž‘์—…์„ ๋งˆ์น˜๊ณ  V()๋ฅผ ์‹คํ–‰ํ•˜๋ฉด RS๊ฐ’์€ 1์ด ๋˜๊ณ  wake_up์‹ ํ˜ธ๊ฐ€ ํ”„๋กœ์„ธ์Šค P3์—๊ฒŒ ์ „๋‹ฌ
      5. P3 ์ž„๊ณ„๊ตฌ์—ญ ์ง„์ž…
    • ๋ฌธ์ œ์ 

      ์„ธ๋งˆํฌ์–ด๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์ž„๊ณ„๊ตฌ์—ญ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์—†๋‹ค.

      (1) P() - P() : wake_up์‹ ํ˜ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๋ฌดํ•œ๋Œ€๊ธฐ์— ๋น ์ง„๋‹ค.

      (2) V() - P() : ์ƒํ˜ธ๋ฐฐ์ œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ๋ชจ๋‹ˆํ„ฐ

    • ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ๊ฐœ๋…. ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•œ๋‹ค.
    • ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ์ง€์ •๋œ ๋ณ€์ˆ˜๋‚˜ ์ž์›์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ง์ ‘ P()๋‚˜ V()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋‹ˆํ„ฐ์— ์ž‘์—… ์š”์ฒญ์„ ํ•œ๋‹ค.
    • ๋ชจ๋‹ˆํ„ฐ๋Š” ์š”์ฒญ๋ฐ›์€ ์ž‘์—…์œผ ๋ชจ๋‹ˆํ„ฐ ํ์— ์ €์žฅํ•œ ํ›„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋งŒ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ์•Œ๋ ค์ค€๋‹ค.
    • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„์„œ ์ข‹๊ณ , ์‹œ์Šคํ…œ ์ž…์žฅ์—์„œ๋Š” ์ž„๊ณ„๊ตฌ์—ญ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๋‹ค.
    monitor shared_balance {
        private:
        	int balance=10;  /*shared data*/
        	boolean busy=false;
        	condition mon; /*condition variable*/
        
        public:
            increase(int amount){
    			if(busy==true) mon.wait(); /*waiting in queue*/
                busy=true;
                balance=balance+amount;
                mon.signal(); /*wake up next waiting process*/
            }
    }

    ์ž„๊ณ„๊ตฌ์—ญ ๋ณดํ˜ธ์™€ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    ์ž„๊ณ„๊ตฌ์—ญ์˜ ๋ณดํ˜ธ๋‚˜ ํ”„๋กœ์„ธ์Šค์˜ ๋™๊ธฐํ™”๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” increase()๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

Ch6. ๊ต์ฐฉ์ƒํƒœ

2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋งŒ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ž‘์—…์„ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ.

cf) starvation - OS๊ฐ€ ์ž˜๋ชป๋œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์ง€์—ฐ๋˜๋Š” ๋ฌธ์ œ

โ€‹ ๊ต์ฐฉ์ƒํƒœ - ์ž์—ฐ์ ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ๋ฌธ์ œ

Ch7. ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ