λ³Έ κ²μκΈμ 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 memory μμ΅μ 곡μ μμμ΄ ν λΉλμλ€κ³ κ°μ νμ.
Producerλ counterλ₯Ό μ¦κ°νλ μͺ½μΌλ‘, Consumerλ counterλ₯Ό κ°μνλ μͺ½μΌλ‘ μ½λκ° κ΅¬νλμμ λ
νΉμ λμμ μ§ννλ€κ° time sliceκ° λ°μν΄ λ€λ₯Έ νλ‘μΈμ€λ‘ λμ΄κ°κ² λλ©΄
곡μ μμμμ 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
Entry Section : Critical SectionμΌλ‘ λ€μ΄κ°κΈ° μν 쑰건
1) Turn μ΄μ©
Turn λ³μλ₯Ό μ μΈνμ¬ μ΄λ₯Ό ν΅ν΄ ν΄κ²°. Mutual Exclusionμ ν΄κ²°, νμ§λ§ Progressλ λ§μ‘±νμ§ λͺ»νλ€.
μλ₯Ό λ€μ΄ turnμ μ΄κΈ°μνκ° 0μ΄λΌκ³ κ°μ ν΄λ³΄μ.
νλ‘μΈμ€ μ€μΌμ₯΄λ§μ μν΄ P1μ΄ μ€νλ κ²½μ° whileλ¬Έμ 쑰건μ λ§μ‘±νλ©΄μ 무νμ κΈ°λ€λ¦¬λ Busy Waiting μνκ° λλ²λ¦°λ€. Critical Sectionμ λ€λ₯Έ νλ‘μΈμ€κ° μ‘΄μ¬νμ§ μλλ° λ€μ΄κ° μ μμΌλ―λ‘ Progressμ λ§μ‘±νμ§ λͺ»νλ κ²μ΄λ€.
2) Peterson's μκ³ λ¦¬μ¦
Turn λ³μλ₯Ό μ΄μ©νλ©΄ Progressλ₯Ό λ§μ‘±νμ§ λͺ»νμ¬ Critical Sectionμ ν΄κ²°ν μ μλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ±μ₯ν μκ³ λ¦¬μ¦μΌλ‘ λ κ°μ νλ‘μΈμ€μΈ κ²½μ°μλ§ ν΄κ²° κ°λ₯νλ€.
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. Hardware Solution
νΉμν Atomic Instructionμ μ μν΄μ μ¬μ©.
1) Test And Set
μΈμκ° 0μΈ κ²½μ° 1λ‘ λ°κΏμ£Όκ³ Trueλ₯Ό 리ν΄, 1μΈ κ²½μ° Falseλ₯Ό 리ν΄.
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 μνλ‘ λ§λ λ€.
1. semWait
μΈμ κ°μ -1 ν΄μ£Όκ³ μ΄ κ°μ΄ 0λ³΄λ€ μμ κ²½μ°, μ¦ κΈ°μ‘΄μ μΈμκ° 0 μ΄μμΈ κ²½μ°μμΌλ―λ‘
λκ΅°κ°κ° 곡μ μμμ μ΄λ―Έ μ΄μ© μ€μ΄λΌλ κ²μ μ μ μλ€.
ν΄λΉ νλ‘μΈμ€λ₯Ό Block Queueμ λ£μ΄μ€λ€.
2. semSignal
μΈμ κ°μ +1 ν΄μ£Όκ³ μ΄ κ°μ΄ 0 μ΄νμΈ κ²½μ°, μ¦ κΈ°μ‘΄μ μΈμκ° -1 μ΄νμΈ κ²½μ°μμΌλ―λ‘
λκ΅°κ°κ° Block Queueμ μ‘΄μ¬νλ€λ κ²μ μ μ μλ€.
맨 μμ μλ νλ‘μΈμ€λ₯Ό Ready Queueμ λ£μ΄μ€λ€.
곡μ μμμ μ κ·Όν κ²½μ°μ κ·Έλ μ§ μμ κ²½μ°λ₯Ό νννκΈ° μν μΈλ§ν¬μ΄ λ³μ sλ₯Ό 1λ‘ μ΄κΈ°νν΄μ€λ€.
sκ° 1μΈ κ²½μ°λ μμ§ μ΄λ ν νλ‘μΈμ€λ μ κ·Όνμ§ μμ κ²½μ°μ΄λ―λ‘ νλ‘μΈμ€λ₯Ό μ μμ μΌλ‘ μ€ννλ€.
3κ°μ νλ‘μΈμ€κ° μ€νλμ λ Block Queueμ μΈλ§ν¬μ΄ λ³μ sμ κ°μ 보μ¬μ€λ€.
3) Producer / Consumer Problem using Semaphores
μΈλ§ν¬μ΄λ₯Ό νμ©νμ¬ ν΄κ²°ν μ μλ€.
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μ ν΄μ€μΌλ‘μ¨ λ€λ₯Έ νλ‘μΈμ€κ° μλ²½νκ² μ κ·Όν μ μκ² ν΄μ€λ€.
μΈλ§ν¬μ΄λ λμΉμ±μ λκ³ μλλ° μλ κ·Έλ¦Όκ³Ό κ°λ€.
κΌ, κΌ μΈνΈλ₯Ό μ΄λ€μΌνλ€.
4. Readers / Writers Problem
Critical Section Problemμ νμ₯ λ²μ Ό
Writersλ§ ν λͺ μ΄λ©΄ λλκ±° μλμΌ? λΌλ λλ
Writersμ μ½λλ μΈλ§ν¬μ΄ μ½λμ λΉμ·νλ€λ κ²μ λλ μ μλ€.
κ·ΈλΌ Readersλ?
readcountκ° 1μ΄λ©΄ μ½κ³ μλ νλ‘μΈμ€κ° μλ€λ μλ―Έ, λ°λΌμ semWait(wsem)μ ν΅ν΄ μ°λ κ²μ Block.
Readerκ° μ 리ν μν©.
μ΄ λ¬Έμ μμ μΈλ§ν¬μ΄λΌλ¦¬ μΈνΈλ₯Ό μ΄λ€μΌνλ€.
5. 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 |