λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
πŸ’» Computer Science/- Operating System

[운영체제] 11. μƒν˜Έλ°°μ œμ™€ 동기화

by Wonit 2019. 12. 9.

μƒν˜Έλ°°μ œμ™€ 동기화

μƒν˜Έλ°°μ œμ˜ κ°œλ…

 

μƒν˜Έλ°°μ œλŠ” 병행 ν”„λ‘œμ„ΈμŠ€μ—μ„œ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜κ°€ κ³΅μœ μžμ›μ„ μ‚¬μš©ν•  λ•Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ™μΌν•œ 일을 μˆ˜ν–‰ν•  수 μ—†λ„λ‘ν•˜λŠ” 방법이닀.

 

동기화

곡유 μžμ›μ— μžˆλŠ” 데이터에 μ ‘κ·Όν•˜λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜κ°€ μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ 싀행을 μ œμ–΄ν•˜λŠ” 방법

 

ꡐ착 μƒνƒœ, κΈ°μ•„ μƒνƒœ

λ™κΈ°ν™”λ‘œ μƒν˜Έλ°°μ œλŠ” 보μž₯ν•  수 μžˆμœΌλ‚˜ 두 개 μ΄μƒμ˜ μž‘μ—…μ΄ μ„œλ‘œ μƒλŒ€λ°©μ˜ μž‘μ—…μ΄ λλ‚˜κΈ° λ§Œμ„ 기닀리고 있기 λ•Œλ¬Έμ— 결과적으둜 아무것도 μ™„λ£Œλ˜μ§€ λͺ»ν•˜λŠ” μƒνƒœμΈ ꡐ착 μƒνƒœλ₯Ό 보μž₯ν•  μˆ˜λŠ” μ—†λ‹€.

 

μƒν˜Έ 배제의 ꡬ체적 μ˜ˆμ‹œ

 

ν”„λ‘œμ„ΈμŠ€ p1 : ν”„λ‘œμ„ΈμŠ€ 1
ν”„λ‘œμ„ΈμŠ€ p2 : ν”„λ‘œμ„ΈμŠ€ 2
μž„κ³„ μžμ› : 두 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ‚¬μš©ν•  수 μ—†λŠ” μžμ›
μž„κ²Œ μ˜μ—­ : μž„κ³„ μžμ›μ— μ ‘κ·Όν•˜κ³  μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œ λΆ€λΆ„

  1. p1이 μž„κ³„ μ˜μ—­(곡유 λ©”λͺ¨λ¦¬)에 λ“€μ–΄κ°„λ‹€

  2. μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜μ—¬ p1 μž‘μ—…μ„ 끝내기 전에 p2 싀행을 μ—μ •ν•œλ‹€.

  3. p2κ°€ 곡유 λ©”λͺ¨λ¦¬μ— μ§„μž…ν•˜λ € ν•˜μ§€λ§Œ p1을 곡유 λ©”λͺ¨λ¦¬μ—μ„œ μˆ˜ν–‰ν•˜λ―€λ‘œ p1을 μ’…λ£Œν•  λ•Œ κΉŒμ§€ p2λ₯Ό μ°¨λ‹¨ν•œλ‹€.

 

곡유 μžμ›μ€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ μΆ©λŒν•˜μ§€ μ•ŠλŠ” μ—°μ‚°(즉, 데이터λ₯Ό μ½λŠ” μž‘μ—…)은 λ™μ‹œμ— μˆ˜ν–‰ν•˜λ„λ‘ ν•˜λ˜, ν”„λ‘œμ„ΈμŠ€κ°€ μˆ˜μ •ν•  수 μžˆλŠ” 곡유 데이터에 μ ‘κ·Όν•  λ•Œμ—λ§Œ μƒν˜Έ 배제의 κ°œλ…μ„ μ μš©ν•œλ‹€.

 

μƒν˜Έλ°°μ œμ˜ λ„€ 가지 쑰건

  • 두 ν”„λ‘œμ„ΈμŠ€λŠ” λ™μ‹œμ— 곡유 μžμ›μ— μ§„μž…ν•  수 μ—†λ‹€.
  • ν”„λ‘œμ„ΈμŠ€μ˜ μ†λ„λ‚˜ ν”„λ‘œμ„Έμ„œ μˆ˜μ— 영ν–₯을 받지 μ•ŠλŠ”λ‹€.
  • 곡유 μžμ›μ„ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ§Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό 차단할 수 μžˆλ‹€.
  • ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 μžμ›μ„ μ‚¬μš©ν•˜λ €κ³  λ„ˆλ¬΄ 였래 κΈ°λ‹€λ €μ„œλŠ” μ•ˆλœλ‹€.

 

μž„κ³„ μ˜μ—­

μž„κ³„ μ˜μ—­μ΄λž€? μž„κ³„ μžμ›μ— μ ‘κ·Όν•˜κ³  μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œ 뢀뢄을 λœ»ν•œλ‹€. μ–΄λŠ ν•œ μˆœκ°„μ—λŠ” ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ§Œ μ‚¬μš©ν•  수 μžˆμ–΄μ„œ μž„κ³„ μ˜μ—­μ— λ“€μ–΄κ°€λ©΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λŠ” μž„κ³„μ˜μ—­μœΌλ‘œ μ§„μž…ν•  수 μ—†μ–΄μ•Ό ν•œλ‹€.

 

μž„κ³„ μ˜μ—­μ€ μ‹€ν–‰ ꡬ간에 ν•΄λ‹Ήν•˜λ―€λ‘œ μž„κ³„ μ˜μ—­μ—μ„œλŠ” μž‘μ—…μ„ λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•˜κ³ , νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„ μ˜μ—­μ— 였래 λ¨Έλ¬Όκ±°λ‚˜ λ¬΄ν•œ 루프등에 λΉ μ§€λŠ” 것을 ν”Όν•΄μ•Ό ν•œλ‹€.

 

μž„κ³„ μ˜μ—­κ³Ό μƒν˜Έλ°°μ œ

μž„κ³„ μ˜μ—­μ„ ν†΅ν•΄μ„œ μƒν˜Έ 배제λ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ”λ°, μ΄λŠ” μžλ¬Όμ‡ μ™€ μ—΄μ‡ κ΄€κ²Œλ‘œ μ„€λͺ…ν•  수 μžˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€κ°€ μ§„μž…ν•˜μ§€ λͺ»ν•˜λŠ” μž„κ³„ μ˜μ—­μ€ μžλ―ˆμ‡ λ‘œ 잠근 μƒνƒœμ™€ κ°™κ³  ν”„λ‘œμ„Έμ„œκ°€ μž„κ³„ μ˜μ—­μ—μ„œ μž‘μ—…μ„ 마치면 μ—΄μ‡ λ‘œ μžλ¬Όμ‡ λ₯Ό ν‘Ό 것과 κ°™λ‹€.

 

ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œ ν˜‘λ ₯ν•˜μ—¬ μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ 섀계 ν•˜λ©΄ μž„κ³„ μ˜μ—­μ„ μ„±κ³΅μ μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

    do{
        while(turn != i); // μ§„μž… μ˜μ—­
            /* μž„κ³„ μ˜μ—­ */
        turn = j;
        /* λ‚˜λ¨Έμ§€ μ˜μ—­ */
    } while(true)

 

 

μž„κ³„ μ˜μ—­μ˜ μ„Έ 가지

  • μƒν˜Έλ°°μ œ

    μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„ μ˜μ—­μ—μ„œ μž‘μ—… 쀑이면 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λŠ” μž„κ³„ μ˜μ—­μœΌλ‘œ λ“€μ–΄κ°ˆ 수 μ—†λ‹€.

  • 진행

    μž„κ³„ μ˜μ—­μ— ν”„λ‘œμ„ΈμŠ€κ°€ μ—†λŠ” μƒνƒœμ—μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ“€μ–΄κ°€λ €κ³  ν•  λ•ŒλŠ” μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ λ“€μ–΄κ°ˆμ§€ 적절히 κ²°μ •ν•΄μ•Όν•œλ‹€.

  • ν•œμ • λŒ€κΈ°

    λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„ μ˜μ—­μ„ λ¬΄ν•œμ • κΈ°λ‹€λ¦¬λŠ”μƒν™©μ„ λ°©μ§€ν•˜λ €λ©΄ μž„κ³„ μ˜μ—­μ— ν•œ 번 λ“€μ–΄κ°”λ˜ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒμ— μž„κ³„ μ˜μ—­μ— λ‹€μ‹œ λ“€μ–΄κ°ˆ λ•Œ μ œν•œλ“€ μš΄λ‹€.

 

μƒμ‚°μž, μ†ŒλΉ„μž λ¬Έμ œμ™€ μƒν˜Έλ°°μ œλ₯Ό ν•΄κ²°ν•˜λŠ” 초기의 μ‹œλ„

 

μƒμ‚°μž μ†ŒλΉ„μž λ¬Έμ œλŠ” μš΄μ˜μ²΄μ œμ—μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” λͺ¨λΈλ‘œ μƒμ‚°μž ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ‚°ν•œ 정보λ₯Ό μ†ŒλΉ„μž ν”„λ‘œμ„ΈμŠ€κ°€ μ†ŒλΉ„ν•˜λŠ” ν˜•νƒœμ΄λ‹€.

 

                    생산                μ†ŒλΉ„
라인 ν”„λ¦°ν„° λ“œλΌμ΄λ²„ ----->    문자    ----->        라인 ν”„λ¦°ν„°

         생산                            μ†ŒλΉ„
컴파일러 ----->     μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œ     ----->        μ–΄μ…ˆλΈ”λŸ¬

 

λ²„νΌμ˜ 이용

 

μƒμ‚°μžλŠ” μ†ŒλΉ„μžμ—κ²Œ 데이터λ₯Ό 전솑할 λ•Œ, 데이터λ₯Ό μ†ŒλΉ„μžκ°€ 받을 μ€€λΉ„κ°€ 되면 데이터λ₯Ό μ „μ†‘ν•˜κ³  μ†ŒλΉ„μžκ°€ 계속 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜κ²Œ λŒ€κΈ°ν•΄μ•Ό ν•œλ‹€.

 

이 λ•Œ, μƒμ‚°μžμ™€ μ†ŒλΉ„μžκ°€ λΆˆν•„μš”ν•˜κ²Œ κ³΅νšŒμ „ν•˜μ§€ μ•Šλ„λ‘ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” 방법이 버퍼λ₯Ό μ΄μš©ν•œ 방법이닀.

 

 

λŒ“κΈ€