๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸง Operating System

[OS / ์šด์˜์ฒด์ œ] The Readers-Writers Problem, The Dining Philosopher's Problems, Synchronization within the Kernel, POSIX Synchronization

by UKHYUN22 2022. 5. 23.
728x90

 

The Readers-Writers Problem

Writer๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๊ธฐ๋„ ํ•˜๊ณ  ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค. Mutual Exclusion ๋ณด์žฅํ•˜์ง€ ์•Š๊ณ  Shared Data๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด race condition์ด ๋ฐœ์ƒํ•˜๊ณ  Debug ํ•˜๊ธฐ ๊ต‰์žฅํžˆ ์–ด๋ ต๋‹ค. Writer ๋“ค์ด ๋™์‹œ์— ๋“ค์–ด์˜ค๋ฉด ์•ˆ๋œ๋‹ค. Reader ๋“ค์ด ์žˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ˆ˜์ •์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋™์‹œ์— Shard Data์— ์ ‘๊ทผ์„ ํ•˜๋ฉด ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” Reader๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์–ด๋„ ์ƒ๊ด€์ด ์—†๋‹ค

 

 ์“ฐ๊ณ  ์žˆ๋Š” ์ค‘๊ฐ„์— ์ฝ์–ด๊ฐ€๋ฉด ์ด๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์ƒํ™ฉ์€ ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์ด๋‹ค. ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ Reader๊ฐ€ ์ฝ์–ด๊ฐ€๊ณ  ์žˆ๋Š”๋ฐ Writer๊ฐ€ ๋“ค์–ด์™€์„œ ๋‚ด์šฉ์„ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฌ๋ฉด ์ด๊ฒƒ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ์ด 4๊ฐ€์ง€์˜ ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. Writer๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด Writer๋Š” ๋ชป๋“ค์–ด์˜ค๊ณ  Reader๋„ ๋ชป๋“ค์–ด์˜จ๋‹ค. Reader๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด Writer๋Š” ๋ชป๋“ค์–ด์˜ค๊ณ  Reader๋Š” ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 Synchronizer์˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€?

A) Critical Section Problem์ด ๊ฐ€์ ธ์•ผํ•  3๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. Entry Section๊ณผ Exit section์˜ ์ ์ ˆํ•œ ์กฐํ•ฉ์œผ๋กœ ํ•ด๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

The Readers-Writers Problem

 Writer์˜ ํ–‰๋™

Writer๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด writer๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค. Writer๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์„œ๋Š” ์•„๋ฌด๋„ ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์•„์•ผ ํ•œ๋‹ค. 

 Reader์˜ ํ–‰๋™

Writer๊ฐ€ ์—†์œผ๋ฉด Reader๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์–ด๋„ ๋‹ค๋ฅธ Reader๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. Reader๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด Writer๊ฐ€ ๋ชป๋“ค์–ด์˜ค๊ฒŒ ๋ง‰์•„์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ Reader์˜ ์—ญํ• ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.(*******) ๋‚ด ์•ž์— Reader๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ Writer๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋‚ด ์•ž์— Reader๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค์Œ Reader๋„ ๋“ค์–ด์™€๋„ ๋œ๋‹ค๋Š” ์ถฉ๋ถ„์กฐ๊ฑด์ด ๋œ๋‹ค. ๋‚ด๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์„œ๋Š” Writer๋ฅผ ๋ง‰์•„์•ผ ํ•œ๋‹ค. ๋‚˜๊ฐˆ ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๋‚ด๊ฐ€ ๋‚˜๊ฐ€๋ฉด์„œ Critical section์„ ๋“ค์–ด๊ฐˆ ๋•Œ lock์„ ๊ฑธ๊ณ  ๋‚˜๊ฐˆ ๋•Œ lock์„ ํ‘ผ๋‹ค. Reader๊ฐ€ ๋‚˜์˜ฌ ๋•Œ lock์„ ํ‘ธ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€? ๋‹ค๋ฅธ Reader ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ฌด Reader๋‚˜ ํ•  ์ˆ˜ ์—†๋‹ค. ๋“ค์–ด์˜ค๋Š” ๊ด€์ ์—์„œ ์ฒซ ๋ฒˆ์งธ Reader๋Š” Writer๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ Reader๋Š” ํ™•์ธํ•  ํ•„์š” ์—†๋‹ค. ๋‚˜๊ฐˆ ๋•Œ๋„ ๋งˆ์ง€๋ง‰์— ๋‚˜๊ฐ€๋Š” Reader๋งŒ์ด Writer๋ฅผ ํ’€์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. counter๋ฅผ ์ด์šฉํ•ด์„œ Reader์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ฃผ๋ฉด ํŽธํ•˜๋‹ค. 

 

 

The Readers-Writers Problem

mutex ๋ณ€์ˆ˜๋Š” mutual exclusion์„ ์œ„ํ•œ ๋ณ€์ˆ˜. wrt๋Š” writer๊ฐ€ ๊ณต์œ ๋˜์ง€ ๋ชปํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค. Writer๋Š” ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•˜๋‹ค. 

Reader์˜ ๊ฒฝ์šฐ, ๋“ค์–ด๊ฐ€๋Š” ์ฒซ ๋ฒˆ์งธ Reader์˜ ํ–‰๋™๊ณผ ๋‚˜๊ฐˆ ๋•Œ ๋งˆ์ง€๋ง‰ Reader์˜ ํ–‰๋™์„ ์ž˜ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค. if(readcount==1) ์ธ ๊ฒฝ์šฐ wrt๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. knocking๊ณผ locking์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์€ Semaphore์˜ wait function์ด๋‹ค. (๊ธฐ์–ตํ•  ๊ฒƒ!) 

wait()๊ณผ signal() ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒƒ์ด Critical section์ด๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์€ readCount๋ผ๋Š” Shared Variable์„ ๊ฑด๋“œ๋ฆฌ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ์ฒ˜๋Ÿผ wait๊ณผ signal๋กœ ๋ง‰์•„์ค˜์•ผ ํ•œ๋‹ค. wait(wrt)๋Š” ํ˜„์žฌ Writer๊ฐ€ ๋“ค์–ด์™€์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์—ฌ๊ธฐ์—์„œ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ Reader๋Š” wait(mutex)์—์„œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ Reader๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์Œ Reader๋“ค์ด ํ•ด๋‹น Critical section์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

The Dining Philosopher's Problems

chopstick์˜ ํƒ€์ž…์€ Semaphore์ด๋‹ค. boolean์ด ์•„๋‹˜. deadlock์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์™ผ์ชฝ ์ “๊ฐ€๋ฝ์„ ๋“ค๊ณ  ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ “๊ฐ€๋ฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ.

 

Deadlock

Hold and Wait์ด ์•„๊นŒ์™€ ๊ฐ™์€ ์ “๊ฐ€๋ฝ์˜ ์ƒํ™ฉ. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘˜ ๋‹ค ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ง‘๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

No preemption, 

 

 

Dining Philosopher's Solution Using Monitor

 

Thinking์€ Remainder section์ด๋‹ค. Eating์€ Critical Section์ด๋‹ค. dp.pickup(i)์€ entry section์„ ๊ตฌํ˜„ํ•œ procedure์ด๊ณ  putdown์€ exit section์„ ๊ตฌํ˜„ํ•œ๋‹ค. conditioin variable์˜ ๋Œ€์ƒ์€ ์ “๊ฐ€๋ฝ์ด ์•„๋‹ˆ๋ผ self์ด๋‹ค. condition variable์€ signa๊ณผ wait ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  wait์„ ํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ ๋ฉˆ์ถ”๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ condition ๋ณ€์ˆ˜๋Š” ๋‚˜ ์ž์‹ ์— ๋Œ€ํ•œ wait์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค. 

 

 

Dining Philosopher's Solution Using Monitor

 

  ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•˜๊ณ  initialize ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค. ์ „๋ถ€๋‹ค Thinking ์ƒํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. pickup์€ Entry section์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ ์ƒํ™ฉ์„ Hungry state๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์ขŒ์šฐ์˜ ์นœ๊ตฌ๋“ค์ด ๋จน๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋จน๊ณ  ์žˆ์œผ๋ฉด ๋‚ด๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” condition variable์— ๋Œ€ํ•œ wait์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ test ํ•จ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด์ž. 3๊ฐœ์˜ If ์กฐ๊ฑด์„ ํ™•์ธํ•ด๋ด์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ if๋ฌธ์€ ์™ผ์ชฝ์— ์•‰์€ ์‚ฌ๋žŒ์ด ๋จน๊ณ  ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๊ธฐ ์ž์‹ ์ด Hungry์—ฌ์•ผ ํ•œ๋‹ค. (๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ pickup์—์„œ๋Š” ๋ฌด์˜๋ฏธํ•œ ์ฝ”๋“œ์ด๋‹ค) ์„ธ ๋ฒˆ์งธ ์กฐ๊ฑด์€ ์˜ค๋ฅธ์ชฝ์— ์•‰์€ ์‚ฌ๋žŒ์ด ๋จน๊ณ  ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. ์กฐ๊ฑด์„ ๋งŒ์กฑํ–ˆ์œผ๋ฉด ๋‚ด๊ฐ€ Eating condition์„ ๊ฐ€์ง„๋‹ค. ์ดํ›„ test ์•„๋ž˜์˜ if๋ฌธ์„ ํ†ต๊ณผํ•ด์„œ EAT ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ test condition์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด pickup ํ•จ์ˆ˜์˜ if๋ฌธ์„ TRUE๋กœ ํ•˜์—ฌ self[i].wait()์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ณธ์ธ์ด ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค.

  putDown ํ•จ์ˆ˜๋Š” ๋‚ด๊ฐ€ ์ด์ œ THINKING์„ ํ•˜์ž๋ผ๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ๋‹ค. ๋‚ด๋ ค๋†“์œผ๋ฉด์„œ ๋‚ด ์˜†์— Hungry์ธ ์นœ๊ตฌ๋“ค์ด ์žˆ๋Š”์ง€ test๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ๋‚ด๊ฐ€ putDown์„ ํ˜ธ์ถœํ–ˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ๋จน๊ณ  ์žˆ์—ˆ์œผ๋ฏ€๋กœ ๋‚ด ์˜†์˜ ์‚ฌ๋žŒ๋“ค์€ ๋จน๊ณ  ์žˆ์„ ์ˆ˜๊ฐ€ ์—†๋‹ค. 

 

 

Synchronization within the Kernel

 

Windows๋Š” Multithreaded kernel์ด๋‹ค. real-time application๋„ ์ง€์›์„ ํ•œ๋‹ค. CPU๊ฐ€ ํ•˜๋‚˜ ์žˆ์„ ๋•Œ Mask Interrupt๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค. spinlock์€ ์งง์€ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ฌ์šฉ์„ ํ•ด์•ผ ํ•œ๋‹ค. ๊ธด ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์‚ฌ์šฉ์„ ํ•˜๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ Spinlock์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๊ทธ ์นœ๊ตฌ๋Š” preemted ๋‹นํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

 

Synchronization within the Kernel

 

Windows์—์„œ Synchronize๋ฅผ ํ•˜๋ ค๋ฉด dispatcher object๋ผ๋Š” ๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค. Signaled State์™€ Nonsignaled State ๋ผ๋Š” ๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋“ค์–ด๊ฐ€๋„ ๋˜๋Š” ์ƒํ™ฉ์ด Signaled State์ด๊ณ  Nonsignaled State๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค. 

 

 

Synchronization within the Windows

 

spin lock๊ณผ block์˜ Hybrid ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฒ˜์Œ์—๋Š” Spinlock์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด block์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์žฅ์ ์„ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

Synchronization in Linux Kernel

 

Atomic Set์— ์˜ํ•ด์„œ ๋”ํ•˜๊ณ  ๋นผ๊ณ  ์ง‘์–ด๋„ฃ๋Š”๋‹ค. Function์— ์˜ํ•ด์„œ๋งŒ ์ง„ํ–‰์ด ๋œ๋‹ค. race condition์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Synchronization in Linux Kernel

 

 

Synchronization in Linux Kernel

 

Spinlock๋„ ์ง€์›์„ ํ•œ๋‹ค. spin_lock(), spin_unlock() ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. Preempt_disable()์€ Interrupt๋ฅผ ์ค‘๊ฐ„์— ๋ง‰์•˜๋‹ค ํ’€์—ˆ๋‹ค ํ•˜๊ณ  Single Processor ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 


POSIX Synchronization

 

์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. init ํ•จ์ˆ˜๋„ ์žˆ๊ณ  ์ „์—ญ ๋ณ€์ˆ˜๋กœ pthread_mutex_t mutex ์„ ์–ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ ์ „์— ํ•ญ์ƒ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๊ณ  ์‹œ์ž‘์„ ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

POSIX Synchronization

 

semaphore์˜ ์ข…๋ฅ˜๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. named semaphore๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ Semaphore๊ฐ„์— ํ•ด๋‹น semaphore๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. sem_open์œผ๋กœ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ณ  sem_wait()๊ณผ sem_post()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Entry์™€ Exit section์„ ๊ตฌ์„ฑํ•œ๋‹ค. ๋‘ ๋ฒˆ ์งธ๋Š” Unnamed Semaphore ํ•จ์ˆ˜๋Š” sem_init()์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๊ณ  sem_wait() ๊ณผ sem_post() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. open์œผ๋กœ assign์„ ํ•˜๋Š” ๊ฒฝ์šฐ & ๊ฐ€ ๋ถ™์ง€ ์•Š์ง€๋งŒ unnamed Semaphore์˜ ๊ฒฝ์šฐ๋Š” & ๊ฐ€ ๋ถ™๋Š”๋‹ค.