๋ณธ ๊ฒ์๊ธ์ 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 |
๋ณธ ๊ฒ์๊ธ์ 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 |