πŸ“š CS/Operating System

[OS] 4. Concurrency : Mutual Exlusion and Synchronization

2021. 4. 19. 21:42
λͺ©μ°¨
  1. 1. Principles of Concurrency
  2. 2. Software Solution
  3. 3. Hardware Solution
  4. 4. Readers / Writers Problem
  5. 5. Monitor

λ³Έ κ²Œμ‹œκΈ€μ€ PC버전에 μ΅œμ ν™” λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

Operating Systems, Internals and Design Principles (9th Ed.), William Stallings, Pearson, 2017

1. Principles of Concurrency

컴퓨터 λ‚΄λΆ€μ—μ„œ λ‹€μ–‘ν•œ ν”„λ‘œμ„ΈμŠ€ μ“°λ ˆλ“œκ°€ μ‹€ν–‰λ˜λŠ”λ° ν•œμ •λœ μžμ›μ„ κ°–κ³  λ™μ‹œλ‹€λ°œμ μœΌλ‘œ μž‘λ™ν•˜λ―€λ‘œ μΆ©λŒν•  κ°€λŠ₯성이 있음.

1) μš©μ–΄ 정리

1. Race Condition : 경쟁 μƒνƒœ

두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€ ν˜Ήμ€ μ“°λ ˆλ“œκ°€ 곡유된 μžμ›μ„ 읽고 μ“°λŠ” κ³Όμ •μ—μ„œ μ–΄λ–€ κ²°κ³Όκ°€ λ‚˜μ˜¬μ§€ λͺ¨λ₯΄λŠ” 상황

 

2. Mutual Exclusion : μƒν˜Έ 배제

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 곡유된 μžμ›μ— μ ‘κ·Όν•˜λ©΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λŠ” μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜λŠ” 것 -> Race Condition의 해결법

 

3. Critical Section : μž„κ³„ ꡬ역

Race Condition이 λ°œμƒν•˜λŠ” λΆ€λΆ„μœΌλ‘œ Mutually Exclusive ν•΄μ•Όν•˜λŠ” λΆ€λΆ„, 곡유된 μžμ›μ΄ μ‘΄μž¬ν•˜λŠ” λΆ€λΆ„

 

-> Critical Section이 Mutually Exclusive ν•˜μ§€ μ•ŠμœΌλ©΄, Race Condition이 λ°œμƒν•œλ‹€.

 

4. Starvation : 빈곀 μƒνƒœ

μžμ›μ΄ μ˜€λžœμ‹œκ°„ ν• λ‹Ήλ˜μ§€ μ•Šκ³  계속 κΈ°λ‹€λ¦¬λŠ” 상황

 

5. DeadLock : ꡐ착 μƒνƒœ

λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€μŒ μƒνƒœλ‘œ μ§„ν–‰ν•  수 μ—†λŠ” 상황 -> λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ Starvation μƒνƒœ

2) Multiprocessor의 Race Condition

 

ν•˜λ‚˜μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €κ³  ν•  λ•Œ
두 개의 ν”„λ‘œμ„ΈμŠ€

μœ„μ˜ μ½”λ“œμ²˜λŸΌ 두 개의 ν”„λ‘œμ„ΈμŠ€κ°€ getchar()λ₯Ό 톡해 μž…λ ₯을 λ°›κ³  이λ₯Ό 좜λ ₯ν•˜λ €κ³  ν•œλ‹€.

P1이 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μž…λ ₯을 λ°›κ³  chout에 μ €μž₯을 ν–ˆλŠ”λ° time sliceκ°€ λλ‚˜μ„œ

P2κ°€ μ‹€ν–‰λ˜κ³  μž…λ ₯을 μ§„ν–‰ν•˜κ³  chout에 μ €μž₯을 ν–ˆλŠ”λ° 또 time sliceκ°€ λλ‚˜μ„œ P1으둜 λ‹€μ‹œ μ™”λ‹€.

이 κ²½μš°μ—λŠ” μ–΄λ–€ 값이 좜λ ₯될까?

 

이처럼 곡유 μžμ›μ— λ™μ‹œμ— μ ‘κ·Όν•˜λŠ” 경우 Race Condition이 λ°œμƒν•  수 μžˆλ‹€.

3) Producer / Consumer Problem

counter++와 counter--λŠ” ν¬λ¦¬ν‹°μ»¬ν•˜κ²Œ λ™μž‘ν•΄μ•Όν•œλ‹€.

 

Shared Data

shared memory μ˜μ–΅μ— 곡유 μžμ›μ΄ ν• λ‹Ήλ˜μ—ˆλ‹€κ³  κ°€μ •ν•˜μž.

ProducerλŠ” counterλ₯Ό μ¦κ°€ν•˜λŠ” μͺ½μœΌλ‘œ, ConsumerλŠ” counterλ₯Ό κ°μ†Œν•˜λŠ” μͺ½μœΌλ‘œ μ½”λ“œκ°€ κ΅¬ν˜„λ˜μ—ˆμ„ λ•Œ

νŠΉμ • λ™μž‘μ„ μ§„ν–‰ν•˜λ‹€κ°€ time sliceκ°€ λ°œμƒν•΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ λ„˜μ–΄κ°€κ²Œ 되면

곡유 μžμ›μ—μ„œ Race Condition이 λ°œμƒν•  수 μžˆλ‹€.

 

Race Condition

4와 6쀑 μ–΄λŠκ°’μ΄ 좜λ ₯될지 λͺ¨λ₯΄κ²Œ λœλ‹€. (Producer와 Consumer 쀑 λ¨Όμ € μ‹€ν–‰λ˜λŠ” μͺ½)

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” Critical Section, 즉 곡유 μžμ›μ΄ μ‘΄μž¬ν•˜λŠ” ꡬ역을 Atomicν•˜κ²Œ μ‹€ν–‰ν•  ν•„μš”κ°€ μžˆλ‹€.

μ—¬κΈ°μ„œ λ§ν•˜λŠ” Atomicμ΄λž€, Interrupt(time slice)에 μ˜ν•΄ ν”„λ‘œμ„ΈμŠ€κ°€ μ „ν™˜λ˜μ§€ μ•Šλ„λ‘ Interruptλ₯Ό λΉ„ν™œμ„±ν™” μ‹œν‚€λŠ” 것이닀.

쒋은 λ°©λ²•μ²˜λŸΌ 보인닀.

But, νŠΉμˆ˜ν•œ 상황을 κ³ λ €ν•΄λ³΄μž.

짧은 κ²½μš°μ—λŠ” 상관이 μ—†μ§€λ§Œ Critical Section을 μ‚¬μš©μžκ°€, λ˜λŠ” 해컀가 μ—„μ²­ 길게 κ΅¬ν˜„ν•œ 경우 κ³„μ†μ μœΌλ‘œ

Interruptκ°€ λΉ„ν™œμ„±ν™”λ˜μ–΄μ„œ ν”„λ‘œμ„ΈμŠ€λŠ” ν˜„μž¬μƒνƒœλ₯Ό 계속 λ°˜λ³΅ν•˜λ©° 영영 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•  수 없을 μˆ˜λ„ μžˆλ‹€.

 

κ·Έλž˜μ„œ ν•„μš”ν•œ 것이 λ‹΄μž₯, Fence이닀.

Critical Section 주변에 λ‹΄μž₯을 μ³μ„œ λ‹΄μž₯ μ•ˆμœΌλ‘œλŠ” ν•˜λ‚˜λ§Œ λ“€μ–΄κ°ˆ 수 있게 ν•˜μžλŠ” 것이 두 번째 방법.

4) Critical Section 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 3κ°€μ§€ 쑰건

1. Mutual Exclusion : μƒν˜Έ 배제

μ–΄λŠ μˆœκ°„μ— Critical Sectionμ—λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ λ“€μ–΄κ°€μ•Ό ν•œλ‹€.

 

2. Progress : μ§„ν–‰

Critical Section에 아무도 μ—†λŠ” 경우 λ“€μ–΄κ°ˆ 수 μžˆμ–΄μ•Ό ν•œλ‹€.

 

3. Bounded Waiting : ν•œμ •μ μΈ κΈ°λ‹€λ¦Ό

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ Critical Section에 λ“€μ–΄κ°€ μžˆλŠ” 경우 이λ₯Ό κΈ°λ‹€λ¦¬λ˜, μœ ν•œν•œ μ‹œκ°„λ§ŒνΌ κΈ°λ‹€λ €μ•Ό ν•œλ‹€. -> λ¬΄ν•œμ • 기닀리면 μ•ˆλ¨.

2. Software Solution

 

Critical Section

Entry Section : Critical Section으둜 λ“€μ–΄κ°€κΈ° μœ„ν•œ 쑰건

1) Turn 이용

 

1. Turn λ³€μˆ˜ 이용

Turn λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ—¬ 이λ₯Ό 톡해 ν•΄κ²°. Mutual Exclusion은 ν•΄κ²°, ν•˜μ§€λ§Œ ProgressλŠ” λ§Œμ‘±ν•˜μ§€ λͺ»ν•œλ‹€.

예λ₯Ό λ“€μ–΄ turn의 μ΄ˆκΈ°μƒνƒœκ°€ 0이라고 κ°€μ •ν•΄λ³΄μž.

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ₯΄λ§μ— μ˜ν•΄ P1이 μ‹€ν–‰λœ 경우 while문의 쑰건에 λ§Œμ‘±ν•˜λ©΄μ„œ λ¬΄ν•œμ • κΈ°λ‹€λ¦¬λŠ” Busy Waiting μƒνƒœκ°€ λ˜λ²„λ¦°λ‹€. Critical Section에 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ° λ“€μ–΄κ°ˆ 수 μ—†μœΌλ―€λ‘œ Progress을 λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜λŠ” 것이닀.

2) Peterson's μ•Œκ³ λ¦¬μ¦˜

Turn λ³€μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ Progressλ₯Ό λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜μ—¬ Critical Section을 ν•΄κ²°ν•  수 μ—†λ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ‘ 개의 ν”„λ‘œμ„ΈμŠ€μΈ κ²½μš°μ—λ§Œ ν•΄κ²° κ°€λŠ₯ν•˜λ‹€.

 

2. Peterson's μ•Œκ³ λ¦¬μ¦˜

Turn λ³€μˆ˜μ™€ 또 λ‹€λ₯Έ λ³€μˆ˜ Flagλ₯Ό μ„ μ–Έν•˜μ—¬ Critical Section 문제λ₯Ό ν•΄κ²°.

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ₯΄λ§μ— μ˜ν•΄ P0κ°€ μ‹€ν–‰λœ 경우 flag[0] = true, turn = 1κ°€ λœλ‹€.

그러던 쀑 time slice에 μ˜ν•΄ P1으둜 μ „ν™˜λœ 경우 이 λ³€μˆ˜λ₯Ό λ‹€μ‹œ μ„€μ •ν•¨μœΌλ‘œμ¨

Entry Section을 μ§€λ‚˜μΉ˜κ³  Critical Section으둜 μ§„ν–‰ν•  수 있게 λœλ‹€.

μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € μ‹€ν–‰λ˜λ˜ ν˜Ήμ€ μ‹€ν–‰ 도쀑  Context Switch에 μ˜ν•΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ μ „ν™˜μ΄ 되던

무쑰건적으둜 Critical Section에 λ“€μ–΄κ°ˆ 수 있게 λœλ‹€.

3) Bakery μ•Œκ³ λ¦¬μ¦˜

Peterson's μ•Œκ³ λ¦¬μ¦˜μ΄ 두 개의 ν”„λ‘œμ„ΈμŠ€μΌ κ²½μš°μ—λ§Œ ν•΄κ²° κ°€λŠ₯ν•΄μ„œ 이λ₯Ό ν™•μž₯ν•œ 버전.

3개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€μ—λ„ 적용이 κ°€λŠ₯ν•˜λ‹€.

 

3. Bakery μ•Œκ³ λ¦¬μ¦˜

3. Hardware Solution

νŠΉμˆ˜ν•œ Atomic Instruction을 μ •μ˜ν•΄μ„œ μ‚¬μš©.

1) Test And Set

 

Testset ν•¨μˆ˜

 

μΈμžκ°€ 0인 경우 1둜 λ°”κΏ”μ£Όκ³  Trueλ₯Ό 리턴, 1인 경우 Falseλ₯Ό 리턴.

 

Code

 

bolt의 μ΄ˆκΈ°κ°’μ€ 0

예λ₯Ό λ“€μ–΄ ν”„λ‘œμ„ΈμŠ€ 2번이 λ¨Όμ € 싀행됐닀고 κ°€μ •ν•˜μž.

Entry Sectionμ—μ„œ testset(0)을 ν˜ΈμΆœν•˜μ—¬ boltλ₯Ό 1둜 λ°”κΏ”μ£Όκ³  Trueλ₯Ό λ¦¬ν„΄ν•œλ‹€.

whileλ¬Έ 쑰건에 ν•΄λ‹Ήν•˜μ§€ μ•ŠμœΌλ―€λ‘œ Critical Section에 μ ‘κ·Όν•  수 있게 λœλ‹€.

이후 time slice에 μ˜ν•΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ μ „ν™˜λ˜μ—ˆλ‹€κ³  κ°€μ •ν•˜μž.

boltλŠ” ν˜„μž¬ 1μ΄λ―€λ‘œ testset(1)은 Falseλ₯Ό λ¦¬ν„΄ν•œλ‹€.

whileλ¬Έ 쑰건에 ν•΄λ‹Ήν•˜λ―€λ‘œ while문을 계속 돌게 λœλ‹€.

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ₯΄λ§μ— μ˜ν•΄ 이전 ν”„λ‘œμ„ΈμŠ€λŠ” Busy Waiting μƒνƒœκ°€ 되고 μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ‘œ μ „ν™˜μ΄ λœλ‹€.

λ§Œμ•½ ν”„λ‘œμ„ΈμŠ€ 2번으둜 λ‹€μ‹œ λŒμ•„μ˜€κ²Œ 되면 Exit Sectionμ—μ„œ boltκ°€ λ‹€μ‹œ 0으둜 λ°”λ€Œκ²Œ λœλ‹€.

μ΄λ ‡κ²Œ 되면 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ μ—­μ‹œ Critical Section에 μ ‘κ·Όν•  수 있게 λœλ‹€.

 

μ–΄λŠ ν”„λ‘œμ„ΈμŠ€κ°€ 처음 μ‹€ν–‰λ˜λ“  λͺ¨λ‘ Critical Section에 μ ‘κ·Όν•  수 μžˆμœΌλ―€λ‘œ Progressλ₯Ό λ§Œμ‘±ν•œλ‹€.

Critical Secitonμ—λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ―€λ‘œ μ—­μ‹œ Matual Exclusiveλ₯Ό λ§Œμ‘±ν•œλ‹€.

ν•˜μ§€λ§Œ, Bounded WaitλŠ” λ§Œμ‘±ν•˜μ§€ λͺ»ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ₯΄λ§μ— μ˜ν•΄ μ„ νƒλœ ν”„λ‘œμ„ΈμŠ€κ°€ μ ‘κ·Όν•˜κ²Œ 되고

이미 μ ‘κ·Όν•œ ν”„λ‘œμ„ΈμŠ€κ°€ μ–Έμ œ 끝날지 λͺ¨λ₯΄λ―€λ‘œ λ§Œμ‘±ν•˜μ§€ λͺ»ν•œλ‹€.

뿐만 μ•„λ‹ˆλΌ Busy Waiting으둜 인해 λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€.

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 Semaphore

2) Semaphore

값을 κ°μ†Œμ‹œν‚€λŠ” semWait()κ³Ό 값을 μ¦κ°€μ‹œν‚€λŠ” semSignal()을 ν™œμš©.

Busy Waiting λŒ€μ‹  Sleep μƒνƒœ, Block μƒνƒœλ‘œ λ§Œλ“ λ‹€.

 

semWait와 semSignal

 

1. semWait

인자 값을 -1 ν•΄μ£Όκ³  이 값이 0보닀 μž‘μ€ 경우, 즉 기쑴의 μΈμžκ°€ 0 이상인 κ²½μš°μ˜€μœΌλ―€λ‘œ

λˆ„κ΅°κ°€κ°€ κ³΅μœ μžμ›μ„ 이미 이용 μ€‘μ΄λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€. 

ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ₯Ό Block Queue에 λ„£μ–΄μ€€λ‹€.

 

2. semSignal

인자 값을 +1 ν•΄μ£Όκ³  이 값이 0 μ΄ν•˜μΈ 경우, 즉 기쑴의 μΈμžκ°€ -1 μ΄ν•˜μΈ κ²½μš°μ˜€μœΌλ―€λ‘œ

λˆ„κ΅°κ°€κ°€ Block Queue에 μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

맨 μ•žμ— μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό Ready Queue에 λ„£μ–΄μ€€λ‹€.

 

semaphore

곡유 μžμ›μ— μ ‘κ·Όν•œ κ²½μš°μ™€ κ·Έλ ‡μ§€ μ•Šμ€ 경우λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ μ„Έλ§ˆν¬μ–΄ λ³€μˆ˜ sλ₯Ό 1둜 μ΄ˆκΈ°ν™”ν•΄μ€€λ‹€.

sκ°€ 1인 κ²½μš°λŠ” 아직 μ–΄λ– ν•œ ν”„λ‘œμ„ΈμŠ€λ„ μ ‘κ·Όν•˜μ§€ μ•Šμ€ κ²½μš°μ΄λ―€λ‘œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ •μƒμ μœΌλ‘œ μ‹€ν–‰ν•œλ‹€.

 

Three Processes

3개의 ν”„λ‘œμ„ΈμŠ€κ°€ 싀행됐을 λ•Œ Block Queue와 μ„Έλ§ˆν¬μ–΄ λ³€μˆ˜ s의 값을 보여쀀닀.

3) Producer / Consumer Problem using Semaphores

μ„Έλ§ˆν¬μ–΄λ₯Ό ν™œμš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆλ‹€.

 

Producer Code
Consumer Code

 

emptyλŠ” Queue의 빈 κ³΅κ°„μ˜ 개수라고 μƒκ°ν•˜λ©΄ λœλ‹€.

Producerκ°€ 물건을 μƒμ‚°ν–ˆμœΌλ―€λ‘œ empty의 곡간을 -1을 ν•΄μ€€λ‹€.

이후 Critical Section에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ mut_exλ₯Ό -1을 ν•΄μ€€λ‹€.

 

이 λ•Œ time sliceκ°€ λ°œμƒν•΄μ„œ consumer둜 λ„˜μ–΄κ°€κ²Œ 되면

counter, 즉 μƒμ‚°λœ 물건은 0μ΄λ―€λ‘œ -1을 ν•˜κ²Œ 되면 0보닀 μž‘μ•„μ§€κ²Œ λœλ‹€.

λ”°λΌμ„œ 이 ν”„λ‘œμ„Έμ„œλ₯Ό Block Queue에 λ„£μ–΄μ£Όκ³ , mut_ex ν˜„μž¬ 값이 0μ΄λ―€λ‘œ -1을 ν•˜κ²Œ 되면 0보닀 μž‘μ•„μ§€κ²Œ λœλ‹€.

이 μ—­μ‹œ Block Queue에 λ„£μ–΄μ€€λ‹€. λ”°λΌμ„œ Critical Section에 μ ‘κ·Όν•  수 μ—†κ²Œ λœλ‹€.

 

λ‹€μ‹œ Producer둜 λ„˜μ–΄μ˜€λ©΄ append()λ₯Ό μ‹€μ‹œν•˜κ³ 

λ‹€λ₯Έ ν”„λ‘œμ„Έμ„œκ°€ Critical Section에 μ ‘κ·Όν•  수 있게 mut_exλ₯Ό +1 ν•΄μ€€λ‹€.

counter μ—­μ‹œ +1을 ν•΄μ€ŒμœΌλ‘œμ¨ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ²½ν•˜κ²Œ μ ‘κ·Όν•  수 있게 ν•΄μ€€λ‹€.

 

μ„Έλ§ˆν¬μ–΄λŠ” λŒ€μΉ­μ„±μ„ 띄고 μžˆλŠ”λ° μ•„λž˜ κ·Έλ¦Όκ³Ό κ°™λ‹€.

 

Semaphore Set

κΌ­, κΌ­ μ„ΈνŠΈλ₯Ό μ΄λ€„μ•Όν•œλ‹€.

4. Readers / Writers Problem

Critical Section Problem의 ν™•μž₯ 버젼

Writers만 ν•œ λͺ…이면 λ˜λŠ”κ±° μ•„λ‹ˆμ•Ό? λΌλŠ” λŠλ‚Œ

 

Writer

Writers의 μ½”λ“œλŠ” μ„Έλ§ˆν¬μ–΄ μ½”λ“œμ™€ λΉ„μŠ·ν•˜λ‹€λŠ” 것을 λŠλ‚„ 수 μžˆλ‹€.

 

그럼 ReadersλŠ”?

 

Reader

readcountκ°€ 1이면 읽고 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μžˆλ‹€λŠ” 의미, λ”°λΌμ„œ semWait(wsem)을 톡해 μ“°λŠ” 것을 Block.

Readerκ°€ μœ λ¦¬ν•œ 상황.

 

이 문제 μ—­μ‹œ μ„Έλ§ˆν¬μ–΄λΌλ¦¬ μ„ΈνŠΈλ₯Ό μ΄λ€„μ•Όν•œλ‹€.

5. Monitor

κ³ μˆ˜μ€€μ˜ 동기화 방법

Monitor

Entrance : Entry Sectionκ³Ό 같은 μ—­ν• .

이전 ν”„λ‘œμ„ΈμŠ€κ°€ μ§„ν–‰ 쀑에 Context Switchκ°€ λ°œμƒν•˜λ©΄ μ™Όμͺ½ μ˜μ—­μ˜ Queue에 μ €μž₯ν•˜κ³  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°›λŠ”λ‹€.

 

슀크둀이 μƒλ‹Ήν•˜λ‹€...

개인적으둜 κ°€μž₯ μž¬λ―ΈμžˆλŠ” λΆ€λΆ„μ΄μ˜€λ‹€. 처음 κ°•μ˜ λ“€μ—ˆμ„ λ•ŒλŠ” 이해가 1도 μ•ˆλλŠ”λ° μ‹œν—˜ κ³΅λΆ€ν•˜λ €κ³  λ³΅μŠ΅ν•˜λ‹€λ³΄λ‹ˆ 쏙쏙 λ“€μ–΄μ˜¨λ‹€.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ“š CS > Operating System' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[OS] 6. I/O Management and Disk Scheduling  (0) 2021.04.20
[OS] 5. Concurrency : Deadlock and Starvation  (0) 2021.04.20
[OS] 3. Threads  (0) 2021.04.19
[OS] 2. Process Description and Control  (0) 2021.04.19
[OS] 1. Operating System Overview  (0) 2021.04.19
  1. 1. Principles of Concurrency
  2. 2. Software Solution
  3. 3. Hardware Solution
  4. 4. Readers / Writers Problem
  5. 5. Monitor
'πŸ“š CS/Operating System' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [OS] 6. I/O Management and Disk Scheduling
  • [OS] 5. Concurrency : Deadlock and Starvation
  • [OS] 3. Threads
  • [OS] 2. Process Description and Control
kodo_o
kodo_o
iOS κΏ€μžΌ!
kodo_o
🍎🍏
kodo_o
전체
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (149)
    • πŸ”¨ ν”„λ‘œμ νŠΈ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • πŸ’» 개발 (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • 였늘의 μ‚½μ§ˆ (7)
      • μ—λŸ¬μ™€μ˜ 동침 (1)
    • ✏️ μ•Œκ³ λ¦¬μ¦˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • ✍️ μ½”ν…Œ μ€€λΉ„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • πŸ“š CS (6)
      • Operating System (6)
    • ⛹️ 라이프 (30)
      • 2020 κ²¨μšΈλ°©ν•™ λͺ¨κ°μ½”(개인) (12)
      • 2021 여름방학 λͺ¨κ°μ½”(개인) (6)
      • μ½”λ”© ν…ŒμŠ€νŠΈ (1)
      • 회고 (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • κΉƒν—ˆλΈŒ

인기 κΈ€

졜근 κΈ€

졜근 λŒ“κΈ€

hELLO Β· Designed By μ •μƒμš°.
kodo_o
[OS] 4. Concurrency : Mutual Exlusion and Synchronization
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.