20.04.25 (ํ† )

Updated:

์˜ค๋Š˜ ํ•  ์ผ (๊ณ„ํš)

  • ์šด์˜์ฒด์ œ 6์ฃผ์ฐจ ๋“ฃ๊ธฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘๊ฐ„ ๋Œ€์ฒด ๊ณผ์ œ

์˜ค๋Š˜ ํ•œ ์ผ

  • ์šด์˜์ฒด์ œ

    ์˜ค๋Š˜์€ Producer / Consumer Problem , Readers / Writers Problem์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

    ์šฐ์„  Producer / Consumer Problem ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

    ์ƒ์‚ฐ์ž - ์†Œ๋น„์ž ๋ฌธ์ œ๋Š” ๋ฒ„ํผ๋ฅผ ๋‘๊ณ  Data๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ฌธ์ œ์ด๋‹ค.

    ๋ฒ„ํผ์— Data๊ฐ€ ์—†๋Š”๋ฐ I/O ์žฅ์น˜๊ฐ€ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๊ฑฐ๋‚˜, ๋ฒ„ํผ๊ฐ€ Data๋กœ ๊ฝ‰ ์ฐผ๋Š”๋ฐ ์“ฐ๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

    ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ฐ”๋กœ ์„ธ๋งˆํฌ์–ด์™€ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์‚ฌ์šฉ ํ•ด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    // Producer
      
    semaphore s = 1, n = 0, e = sizeofbuffer;
    void producer(){
      while(1){
        produce();
        semWait(e); // ๋ฒ„ํผ์— ๋นˆ ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ๋นˆ ์ž๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด Block
        semWait(s);
        append();
        semSignal(s);
        semSignal(n); // ๋ฒ„ํผ์— Data๋ฅผ ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” Consumer๊ฐ€ ์žˆ๋‹ค๋ฉด ๊นจ์šด๋‹ค
      }
    }
      
    void consumer(){
      while(1){
        semWait(n); // ๋ฒ„ํผ์— Data๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์—†๋‹ค๋ฉด Block
        semWait(s);
        take();
        semSignal(s);
        semSignal(e); // ๋ฒ„ํผ์—์„œ Data๋ฅผ ๊ฐ€์ ธ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋‹ค๋ฆฌ๋Š” Producer๊ฐ€ ์žˆ๋‹ค๋ฉด ๊นจ์šด๋‹ค
      }
    }
    

    ์—ฌ๊ธฐ์„œ ๊ต์ˆ˜๋‹˜์ด ๋‚ด์ค€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฐ”๋กœ 7,8๋ฒˆ 17,18๋ฒˆ ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด ์–ด๋–ค์ผ์ด ์ผ์–ด๋‚  ๊ฒƒ์ธ๊ฐ€?

    7,8๋ฒˆ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พผ๋‹ค๋ฉด ๋ฒ„ํผ์— ๋นˆ ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ๋นˆ์ž๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด Block ๋˜๋Š” ๊ณผ์ •์„ Critical Section ์•ˆ์—์„œ ํ•˜๊ฒŒ ๋œ๋‹ค.

    ์ด๋•Œ Deadlock์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์— ๊ทธ๋Ÿฌ๋Š”์ง€๋Š” ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

    ๋‹ค์Œ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์„ธ๋งˆํฌ์–ด๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ•œ ๊ตฌ์กฐ์ฒด ์ด๋‹ค.

    ๋ชจ๋‹ˆํ„ฐ๋Š” ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด ๋ชจ๋‹ˆํ„ฐ ์†์œผ๋กœ๋Š” Critical Section๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค ๋ฐ–์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.

    ๊ฒฐ๊ตญ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์œ„ ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋๋˜ Critical Section ์— ๋“ค์–ด ๊ฐ„ ํ›„ ๋ฒ„ํผ๋ฅผ ํ™•์ธํ•˜๋Š” ์…ˆ์ด๋‹ค.

    ๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค ์™œ ๊ทธ๋Ÿด๊นŒ? ์ด๊ฒŒ ๊ต์ˆ˜๋‹˜์ด ๋ฌผ์–ด๋ณธ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ์ด๋‹ค.

    ์šฐ์„  ๋ฐ๋“œ๋ฝ์ด ์ผ์–ด๋‚˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด๊ณ  ํ•ด๊ฒฐํ•ด์•ผ๊ฒ ๋‹ค.


    ๋‹ค์Œ์œผ๋กœ๋Š” Readers / Writers Problem์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

    Writer ์ž‘์—…์€ Data๋ฅผ ์“ฐ๋Š” ์ž‘์—…์ด๋‹ค. ๊ฒฐ๊ตญ Data๋ฅผ ์ฝ์–ด์™€์„œ ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ๋‹ค.

    Read ์ž‘์—…์€ ๋ง ๊ทธ๋Œ€๋กœ Data๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

    Write ์™€ Write, Write ์™€ Read ์ž‘์—…์€ ๋™์‹œ์— ์ด๋ฃจ์–ด ์งˆ ์ˆ˜ ์—†์ง€๋งŒ Read ์ž‘์—…์€ ์„œ๋กœ ๋™์‹œ์— ์ด๋ฃจ์–ด ์ ธ๋„ ๋œ๋‹ค.

    ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด Read์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ๋Š” ๋ฐฉ์•ˆ์ด๋‹ค. ๊ตฌํ˜„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Critical Section์ด ๋‘ ๊ฐœ ํ•„์š”ํ•˜๋‹ค.

    ๊ฐœ๋…๋งŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•œ C.S ์—๋Š” ์ฒซ ๋ฒˆ์งธ Read๋งŒ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค๊ฐ€ ์ด ์ฒซ ๋ฒˆ์งธ Read๊ฐ€ C.S๋กœ ๋“ค์–ด ๊ฐ”์„ ๋•Œ

    readcount์˜ C.S ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” Read ๋“ค์ด ๋‹ค ๊ฐ™์ด ๋“ค์–ด๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ์ด๋Ÿฐ ๋Š๋‚Œ์œผ๋กœ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋˜๊ฒ ๋‹ค.

๋‚ด์ผ ํ•  ์ผ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘๊ฐ„ ๋Œ€์ฒด ๊ณผ์ œ ์™„๋ฃŒํ•˜๊ธฐ

์ด๋ฒˆ์ฃผ ํ•  ์ผ

  • ์ทจ์—…์—ญ๋Ÿ‰๊ฐœ๋ฐœ๋ก  6์ฃผ์ฐจ ๋“ฃ๊ธฐ (์›”)
  • ์„œ์–‘๊ณ ์ „๊ฐ•๋… 7์ฃผ์ฐจ ๋“ฃ๊ธฐ (์›”)
  • ์•Œ๊ธฐ์‰ฌ์šด์ฝ”๋”ฉ 8์ฃผ์ฐจ ๋“ฃ๊ธฐ (์›”)
  • ์šด์˜์ฒด์ œ 5์ฃผ์ฐจ ๋“ฃ๊ธฐ (์›”)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค 6์ฃผ์ฐจ ๋“ฃ๊ธฐ (ํ™”)
  • ์„œ์–‘๊ณ ์ „๊ฐ•๋… ๊ณผ์ œ ์ œ์ถœ (ํ™”)
  • ๋Œ€ํ•™์ƒ์„์œ„ํ•œ์‹ค์šฉ๊ธˆ์œต 5์ฃผ์ฐจ, 6์ฃผ์ฐจ ๋“ฃ๊ธฐ (์ˆ˜)
  • ๋Œ€ํ•™์ƒ์„์œ„ํ•œ์‹ค์šฉ๊ธˆ์œต ๊ณผ์ œ ์ œ์ถœ (์ˆ˜)
  • ํ™•๋ฅ ๊ณผ ํ†ต๊ณ„ 6์ฃผ์ฐจ ๋“ฃ๊ธฐ (๋ชฉ)
  • ์šด์˜์ฒด์ œ 3, 4๊ฐ• ํ€ด์ฆˆ ์ค€๋น„ (๋ชฉ)
  • ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ 6์ฃผ์ฐจ ๋“ฃ๊ธฐ (๊ธˆ)
  • ์šด์˜์ฒด์ œ 6์ฃผ์ฐจ ๋“ฃ๊ธฐ (ํ† )

Leave a comment