ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” - ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ
    STUDY/OS 2022. 4. 7. 19:05

    ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์‹œ๋กœ ์‹œ์ž‘ํ•˜๊ฒ ๋‹ค.

    ๐Ÿ’ฒ์€ํ–‰ ๊ณ„์ขŒ ๋ฌธ์ œ (Bank Account Problem)

    ๋งŒ์›์ด ๋“ค์–ด์žˆ๋Š” ๊ณ„์ขŒ์— ๋‘ ๋ช…์ด ๋™์‹œ์— ๋งŒ ์›์”ฉ ์ธ์ถœํ•œ๋‹ค๋ฉด?

    ์ฒซ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๋งŒ์›์„ ์ธ์ถœํ•˜์—ฌ ๊ณ„์ขŒ ์ž”์•ก์ด 0์œผ๋กœ ์„ค์ •๋˜๊ธฐ ์ „

    ๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๋งŒ์›์„ ์ธ์ถœํ•˜์—ฌ ๊ณ„์ขŒ ์ž”์•ก์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ ค ํ•œ๋‹ค๋ฉด?

    ์ž”์•ก์€ 0์ด์ง€๋งŒ ์ด๋งŒ์›์ด ์ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ?

     

    ์ข€๋” ์ปด๊ณผ๊ฐ™์ด ๋งํ•ด๋ณด๊ธฐ

    ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์€ํ–‰ ๊ณ„์ขŒ ์ž”์•ก ๋ณ€์ˆ˜ balance๋Š” ํ˜„์žฌ ๊ฐ’์ด 10000์ด๋‹ค.

    ํ”„๋กœ์„ธ์Šค A์™€ B๋Š” balance๋ฅผ -10000 ์‹œํ‚ค๋Š” ์ผ์„ ํ•œ๋‹ค.

    A๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ balance ๊ฐ’์„ ์ฝ์–ด 10000์„ ๋บ€ ํ›„, ๊ฒฐ๊ณผ ๊ฐ’ 0์„ balance์— ์ €์žฅํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

    ์ €์žฅํ•˜๊ธฐ ์ „ ๊นŒ์ง€ balance๋Š” 10000์ด๋‹ค.

    B ์—ญ์‹œ balance๊ฐ’ 10000์„ ์ฝ์–ด 10000์„ ๋บ€ ๊ฒฐ๊ณผ ๊ฐ’ 0์„ balance์— ์ €์žฅํ•˜๊ณ ์ž ํ•œ๋‹ค.

    ๊ทธ ์‚ฌ์ด A๊ฐ€ balance๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค์—ˆ์ง€๋งŒ, B๋Š” balance๊ฐ’์„ ๋‹ค์‹œ 0์œผ๋กœ ๋ฎ์–ด์”Œ์šด๋‹ค.

    ์ด๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์€ํ–‰์€ ๊ฑฐ๋œ๋‚  ๊ฒƒ์ด๋‹ค.

     

    => ๊ณต์œ  ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•จ์œผ๋กœ์จ ์ƒ๊ธฐ๋Š” ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ

     

    (๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์˜ˆ์‹œ ๊ฐ™๊ธด ํ•˜์ง€๋งŒ) ๋น„์Šทํ•œ ๋ฌธ์ œ ์ฝ”๋“œ

    public class Main {
        public static void main(String[] args)  {
           SharedBoard board = new SharedBoard();
    
           Thread th1 = new StudentThread("bin", board);
           Thread th2 = new StudentThread("sanha", board);
    
           th1.start();
           th2.start();
        }
    }
    
    class SharedBoard {
        private int sum = 0;
    
        /*synchronized*/ public void add(){
            int n = sum;
            Thread.yield();
            n += 10;
            sum = n;
            System.out.println(Thread.currentThread().getName() + " : " + sum);
        }
        public int getSum(){return sum;}
    }
    
    class StudentThread extends Thread{
        private SharedBoard board;
    
        public StudentThread(String name, SharedBoard board){
            super(name);
            this.board = board;
        }
    
        public void run(){
            for(int i=0; i<10; i++){
                board.add();
            }
        }
    }
    1. synchronized ์žˆ์„ ๋•Œ

    bin : 10
    bin : 20
    bin : 30
    bin : 40
    bin : 50
    bin : 60
    bin : 70
    bin : 80
    bin : 90
    bin : 100
    sanha : 110
    sanha : 120
    sanha : 130
    sanha : 140
    sanha : 150
    sanha : 160
    sanha : 170
    sanha : 180
    sanha : 190
    sanha : 200

    Process finished with exit code 0
    2. synchronized ์—†์„ ๋•Œ

    bin : 10
    bin : 30
    sanha : 20
    sanha : 40
    sanha : 50
    sanha : 60
    sanha : 70
    sanha : 80
    sanha : 90
    sanha : 100
    sanha : 110
    sanha : 120
    bin : 40
    bin : 50
    bin : 60
    bin : 70
    bin : 80
    bin : 90
    bin : 100
    bin : 110

    Process finished with exit code 0

     

    ๐ŸŒ€๋ณ‘ํ–‰ ํ”„๋กœ์„ธ์Šค์™€ ๋™๊ธฐํ™”

     

    • ๊ฒŒ์ž„์„ ํ•  ๋•Œ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ด๋ฉด์„œ, ๋…ธ๋ž˜๋„ ๋‚˜์˜ค๊ฒŒ ํ•˜๋ ค๋ฉด ์—ฌ๋ ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ CPU๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฐ–์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฌธ๋งฅ๊ตํ™˜ํ•˜์—ฌ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•œ๋‹ค.
    • ๋ณ‘ํ–‰ ํ”„๋กœ์„ธ์Šค ๊ฐ„์€ ๋น„๋™๊ธฐ์ ์ด๋‹ค.
      - ๋™๊ธฐ์  : ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์„ ๋๋‚ด๋ฉด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (JAVA Sync)
      - ๋น„๋™๊ธฐ์ : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฒˆ๊ฐˆ์•„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
                     ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์–ด๋–ค ์ƒํƒœ์— ์žˆ๋Š”์ง€, ์–ด๋–ค ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€,
                     ์–ด๋””๊นŒ์ง€ ์‹คํ–‰๋๋Š”์ง€ ๋“ฑ์— ๋Œ€ํ•ด ๋ชจ๋ฅธ ์ฑ„ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค.
    • ๊ณต์œ  ์ž์›์ด ์—†์œผ๋ฉด ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
      ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition) : ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์„œ๋กœ ์ ‘๊ทผ์„ ์‹œ๋„ํ•˜๋Š” ์ƒํ™ฉ
                                           ์ด๋กœ ์ธํ•ด ์ƒํ˜ธ๋ฐฐ์ œ, ๊ต์ฐฉ์ƒํƒœ, ๊ธฐ์•„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ž„๊ณ„ ์ž์›(Critical Resource) : ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ž์›
      ์ž„๊ณ„ ์˜์—ญ(Critical Section) : ์ž„๊ณ„ ์ž์›์— ์ ‘๊ทผํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„
    • ์ž„๊ณ„ ์˜์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”
      1. ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์ž˜ ์ง€์ผœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋งŒ์ด ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.(Mutual exclusion)
      2. ์ž„๊ณ„ ์˜์—ญ์— ์žˆ์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž„๊ณ„์˜์—ญ ์ง„์ž…์„ ๋ง‰์•„์„œ๋Š” ์•ˆ๋œ๋‹ค.(Progress requirement)
      3. ๋น„์–ด์žˆ๋Š” ์ž„๊ณ„ ์˜์—ญ์— ๋Œ€ํ•œ ์ง„์ž…์€ ๋ฐ”๋กœ ํ—ˆ์šฉํ•œ๋‹ค. ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ง„์ž… ์‹œ๋„๋งŒ ๊ณ„์† ๋ฌด์‚ฐ๋˜์–ด ๊ธฐ์•„๋ฅผ ๊ฒฉ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.(Bounded-waiting requirement)
      4. ์ž„๊ณ„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚  ๋•Œ๋Š” ์ž์‹ ์ด ๋‚˜์˜ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ ค ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
      => ์ด๊ฒŒ ์ง€์ผœ์ง€๊ฒŒ ์ ์ ˆํžˆ ์ฝ”๋”ฉํ•ด์•ผ ํ•œ๋‹ค.

    ๐ŸฅŠ์ƒํ˜ธ ๋ฐฐ์ œ

    • ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋ฒ•๋“ค
    • Peterson ์•Œ๊ณ ๋ฆฌ์ฆ˜
      - ๊ฒ๋‚˜ ๋ฒ„ํ‹ฐ๋‹ค๊ฐ€ ์ƒ๋Œ€๊ฐ€ ๋๋‚˜๋ฉด ๋„˜์–ด๊ฐ„๋‹ค.
      - ํ˜„์žฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์ปดํ“จํ„ฐ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
        ์ข…์†์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. -> ๋ฉ”๋ชจ๋ฆฌ ์žฅ๋ฒฝ ์‚ฌ์šฉ

    • Lamport ๋ฒ ์ด์ปค๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      - ๋ฒˆํ˜ธํ‘œ ๋ฐ›๊ธฐ
      - ๋ฒˆํ˜ธํ‘œ๋ฅผ ๋ฐ›์•˜์œผ๋ฉด์„œ, ๋‚˜๋ณด๋‹ค ์•ž ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์€ ํ”„๋กœ์„ธ์Šค ์ค‘ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‚˜ ํ™•์ธ

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

     

    ๊น€์ฃผ๊ท , ใ€ŒOS? Oh Yes!ใ€, ํœด๋จผ์‹ธ์ด์–ธ์Šค

    ํ™ฉ๊ธฐํƒœ ๊น€ํšจ์ˆ˜, ๋ช…ํ’ˆ JAVA Programming ๊ฐœ์ • 4ํŒ, ์ƒ๋Šฅ์ถœํŒ

     

Designed by Tistory.