๋ฐ๋๋ฝ
๋ฐ๋๋ฝ¶
๊ฐ์¶
๋ฐ๋๋ฝ(Deadlock)์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์๋ก ์๋๋ฐฉ์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํํ ๋๊ธฐํ๋ ์ํ์ ๋๋ค. ์ด ๋ ์จ์์๋ ๋ฐ๋๋ฝ์ ๋ค ๊ฐ์ง ํ์์กฐ๊ฑด, ์์ ํ ๋น ๊ทธ๋ํ, ๊ทธ๋ฆฌ๊ณ ์๋ฐฉ, ํํผ, ํ์ง, ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
๋ชฉ์ฐจ¶
- ๋ฐ๋๋ฝ์ด๋?
- ๋ฐ๋๋ฝ ํ์์กฐ๊ฑด
- ์์ ํ ๋น ๊ทธ๋ํ
- ๋ฐ๋๋ฝ ์๋ฐฉ
- ๋ฐ๋๋ฝ ํํผ
- ๋ฐ๋๋ฝ ํ์ง์ ๋ณต๊ตฌ
- ์ฐ์ต ๋ฌธ์
1. ๋ฐ๋๋ฝ์ด๋?¶
์ ์¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ (Deadlock) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋ฐ๋๋ฝ = ๊ต์ฐฉ ์ํ โ
โ = ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์๋ก ์๋๋ฐฉ์ ์์์ โ
โ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํํ ๋๊ธฐํ๋ ์ํ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ํ๋ก์ธ์ค A ํ๋ก์ธ์ค B โ โ
โ โ โโโโโโโโโ โโโโโโโโโ โ โ
โ โ โ โ โโR2 ์์ฒญโโโโถ โ โ โ โ
โ โ โ R1 โ โ R2 โ โ โ
โ โ โ ๋ณด์ โ โโโR1 ์์ฒญโโโ โ ๋ณด์ โ โ โ
โ โ โ โ โ โ โ โ
โ โ โโโโโโโโโ โโโโโโโโโ โ โ
โ โ โ โ
โ โ A๋ R2๋ฅผ ๊ธฐ๋ค๋ฆผ, B๋ R1์ ๊ธฐ๋ค๋ฆผ โ โ
โ โ โ ๋ ๋ค ์์ํ ๋๊ธฐ (๋ฐ๋๋ฝ) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ค์ํ ์์¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ ์ค์ํ ์์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. ๊ต์ฐจ๋ก ๋ฐ๋๋ฝ: โ
โ โ
โ โ โ โ
โ โ โฒ โ โ
โ โ โ โ โ
โ โโโโโโโโผโโโโโโผโโโโโโโ โ
โ โโโโโ โ โ
โ โโโโโโโโผโโโโโโผโโโโโโโ โ
โ โ โโโโโถ โ
โ โโโโโโโโผโโโโโโผโโโโโโโ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ
โ ๋ค ๋์ ์ฐจ๊ฐ ๋ชจ๋ ์ ์ฐจ๋ฅผ ๊ธฐ๋ค๋ฆผ โ
โ โ
โ 2. ๋ค๋ฆฌ ์ ๋ฐ๋๋ฝ: โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โโโโ โโโโถ โ โ
โ โ A ์ฐจ๋ B ์ฐจ๋ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ์ข์ ๋ค๋ฆฌ์์ ์์ชฝ์์ ์ง์
โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ฝ๋ ์์¶
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;
void* thread_A(void* arg) {
pthread_mutex_lock(&lock1);
printf("Thread A: lock1 ํ๋\n");
sleep(1); // ๋ฐ๋๋ฝ ๋ฐ์ ํ๋ฅ ๋์
printf("Thread A: lock2 ๋๊ธฐ\n");
pthread_mutex_lock(&lock2); // ๋ฐ๋๋ฝ!
printf("Thread A: ๋ ๋ค ํ๋\n");
pthread_mutex_unlock(&lock2);
pthread_mutex_unlock(&lock1);
return NULL;
}
void* thread_B(void* arg) {
pthread_mutex_lock(&lock2);
printf("Thread B: lock2 ํ๋\n");
sleep(1); // ๋ฐ๋๋ฝ ๋ฐ์ ํ๋ฅ ๋์
printf("Thread B: lock1 ๋๊ธฐ\n");
pthread_mutex_lock(&lock1); // ๋ฐ๋๋ฝ!
printf("Thread B: ๋ ๋ค ํ๋\n");
pthread_mutex_unlock(&lock1);
pthread_mutex_unlock(&lock2);
return NULL;
}
int main() {
pthread_t tA, tB;
pthread_create(&tA, NULL, thread_A, NULL);
pthread_create(&tB, NULL, thread_B, NULL);
pthread_join(tA, NULL);
pthread_join(tB, NULL);
printf("์๋ฃ\n"); // ๋ฐ๋๋ฝ ์ ๋๋ฌ ๋ชปํจ
return 0;
}
/*
์ถ๋ ฅ (๋ฐ๋๋ฝ ๋ฐ์ ์):
Thread A: lock1 ํ๋
Thread B: lock2 ํ๋
Thread A: lock2 ๋๊ธฐ
Thread B: lock1 ๋๊ธฐ
... (์์ํ ๋๊ธฐ)
*/
2. ๋ฐ๋๋ฝ ํ์์กฐ๊ฑด¶
๋ค ๊ฐ์ง ํ์์กฐ๊ฑด¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ์ ๋ค ๊ฐ์ง ํ์์กฐ๊ฑด โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ค๋ฉด ๋ค์ ๋ค ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํด์ผ ํจ โ
โ (ํ๋๋ผ๋ ๊นจ์ง๋ฉด ๋ฐ๋๋ฝ ๋ฐ์ ์ ํจ) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. ์ํธ ๋ฐฐ์ (Mutual Exclusion) โ โ
โ โ - ์์์ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฌ์ฉ ๊ฐ๋ฅ โ โ
โ โ - ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์์์ด ํด์ ๋ ๋๊น์ง ๋๊ธฐ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 2. ์ ์ ์ ๋๊ธฐ (Hold and Wait) โ โ
โ โ - ํ๋ก์ธ์ค๊ฐ ์์์ ๋ณด์ ํ ์ฑ๋ก ๋ค๋ฅธ ์์ ๋๊ธฐ โ โ
โ โ - ์ด๋ฏธ ํ ๋น๋ ์์์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์ถ๊ฐ ์์ฒญ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 3. ๋น์ ์ (No Preemption) โ โ
โ โ - ์์์ ๊ฐ์ ๋ก ๋นผ์์ ์ ์์ โ โ
โ โ - ํ๋ก์ธ์ค๊ฐ ์๋ฐ์ ์ผ๋ก ํด์ ํด์ผ ํจ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 4. ์ํ ๋๊ธฐ (Circular Wait) โ โ
โ โ - ํ๋ก์ธ์ค ์งํฉ {P0, P1, ..., Pn}์์ โ โ
โ โ - P0โP1โP2โ...โPnโP0 ์ํ ๋๊ธฐ ์กด์ฌ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ํ ๋๊ธฐ ์๊ฐํ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ํ ๋๊ธฐ ์์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์ธ ํ๋ก์ธ์ค, ์ธ ์์: โ
โ โ
โ โโโโโโโโโ โ
โ โ P0 โ โ
โ โโโโโฌโโโโ โ
โ ๋ณด์ : R0 โ
โ ๋๊ธฐ: R1 โโโโโโโโโโโโ โ
โ โ โ โ
โ โผ โผ โ
โ โโโโโโโโโ โโโโโโโโโ โ
โ โ R1 โ โ P1 โ โ
โ โโโโโโโโโ โโโโโฌโโโโ โ
โ ๋ณด์ : R1 โ
โ ๋๊ธฐ: R2 โโโโโโ โ
โ โ โ โ
โ โผ โผ โ
โ โโโโโโโโโโโโโโโโโโ โ
โ โ R2 โโ P2 โ โ
โ โโโโโโโโโโโโโโฌโโโโ โ
โ ๋ณด์ : R2 โ
โ ๋๊ธฐ: R0 โโโโโถ R0 โ
โ โ (P0 ๋ณด์ ) โ
โ โโโโโโโโโโโโโโโโโโโโโโ
โ โโ
โ P0 โ R1 โ P1 โ R2 โ P2 โ R0 โ P0 (์ํ!) โโ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3. ์์ ํ ๋น ๊ทธ๋ํ¶
๊ทธ๋ํ ํ๊ธฐ๋ฒ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์์ ํ ๋น ๊ทธ๋ํ (RAG) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋
ธ๋: โ
โ โข ํ๋ก์ธ์ค: โ (์) โ
โ โข ์์ ์ ํ: โก (์ฌ๊ฐํ) โ
โ - ๋ด๋ถ ์ (โ): ์์ ์ธ์คํด์ค ์ โ
โ โ
โ ์ฃ์ง: โ
โ โข ์์ฒญ ์ฃ์ง: Pi โ Rj (Pi๊ฐ Rj๋ฅผ ์์ฒญ) โ
โ โข ํ ๋น ์ฃ์ง: Rj โ Pi (Rj๊ฐ Pi์๊ฒ ํ ๋น๋จ) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ์์ โ โ
โ โ โ โ
โ โ โ P1 โโโโ์์ฒญโโโโถ โก R1 โ โ
โ โ โ โ โ โ โ
โ โ โ โ โ
โ โ โผ ํ ๋น โ โ
โ โ โ P2 โ โ
โ โ โ โ
โ โ P1์ด R1์ ์์ฒญ โ โ
โ โ R1์ ํ ์ธ์คํด์ค๊ฐ P2์๊ฒ ํ ๋น๋จ โ โ
โ โ R1์๋ 2๊ฐ์ ์ธ์คํด์ค ์กด์ฌ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ฐ๋๋ฝ ์ํ์ ๊ทธ๋ํ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ ์ํ ์์ ํ ๋น ๊ทธ๋ํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โ P1 โ โ
โ โ โโ โ โ
โ โ ์์ฒญ โ โฒ ํ ๋น โ โ
โ โ โผ โฒ โ โ
โ โ โโโโโโโ โฒ โ โ
โ โ โ R1 โ โฒ โ โ
โ โ โ โ โ โฒ โ โ
โ โ โโโโฌโโโ โฒ โ โ
โ โ โ โฒ โ โ
โ โ ํ ๋น โ โฒ โ โ
โ โ โผ โฒ โ โ
โ โ โ P2 โโโ์์ฒญโโโโถ โโโโโโโ โ โ
โ โ โ โ R2 โ โ โ
โ โ โฒ ํ ๋น โ โ โ โ โ
โ โ โฒ โโโโฌโโโ โ โ
โ โ โฒ โ ํ ๋น โ โ
โ โ โฒ โผ โ โ
โ โ โฒโโโโโโโโโโโ P3 โ โ
โ โ โ โ โ
โ โ โ ์์ฒญ โ โ
โ โ โผ โ โ
โ โ โโโโโโโ โ โ
โ โ โ R3 โ โโโโโโโโโ โ โ
โ โ โ โ โ โ ํ ๋น โ โ
โ โ โโโโโโโ โ โ โ
โ โ โ P1 โโโโโโโ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฌ์ดํด: P1 โ R1 โ P2 โ R3 โ P3 โ R2 โ P1 โ
โ (๋๋ P2 โ R3 โ P3 โ R2 โ P2) โ
โ โ
โ โ ๋ฐ๋๋ฝ ๋ฐ์! โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ฌ์ดํด๊ณผ ๋ฐ๋๋ฝ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ฌ์ดํด๊ณผ ๋ฐ๋๋ฝ์ ๊ด๊ณ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๊ท์น: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ์ฌ์ดํด์ด ์์ผ๋ฉด โ ๋ฐ๋๋ฝ ์์ โ โ
โ โ โข ์ฌ์ดํด์ด ์์ผ๋ฉด: โ โ
โ โ - ์์๋น ์ธ์คํด์ค๊ฐ 1๊ฐ โ ๋ฐ๋๋ฝ ํ์ โ โ
โ โ - ์์๋น ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ โ ๋ฐ๋๋ฝ ๊ฐ๋ฅ์ฑ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฌ์ดํด์ ์์ง๋ง ๋ฐ๋๋ฝ์ด ์๋ ๊ฒฝ์ฐ: โ
โ โ
โ โ P1 โ์์ฒญโโถ โโโโโโโ โโ์์ฒญโ โ P3 โ
โ โ โ R1 โ โ โ
โ โ โ โโ โ โ โ
โ โ โโโโฌโโโ โ โ
โ โ โ โ โ
โ โ ํ ๋น ํ ๋น โผ ํ ๋น โ ํ ๋น โ
โ โ โ โ โ
โ โโโโโโโ โ P2 โ P4 โโโโโโโโโโโ โ
โ โ
โ R1์ 2๊ฐ ์ธ์คํด์ค โ P2์ P4๊ฐ ํด์ ํ๋ฉด P1, P3 ์งํ โ
โ โ ๋ฐ๋๋ฝ ์๋ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4. ๋ฐ๋๋ฝ ์๋ฐฉ¶
๋ค ์กฐ๊ฑด ์ค ํ๋ ๊นจ๊ธฐ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ ์๋ฐฉ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. ์ํธ ๋ฐฐ์ ๊นจ๊ธฐ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ๊ฐ๋ฅํ๋ฉด ๊ณต์ ๊ฐ๋ฅํ ์์ ์ฌ์ฉ โ โ
โ โ โข ์: ์ฝ๊ธฐ ์ ์ฉ ํ์ผ โ โ
โ โ โข ํ๊ณ: ๋ณธ์ง์ ์ผ๋ก ๋ฐฐํ์ ์ธ ์์ (ํ๋ฆฐํฐ, ๋ฎคํ
์ค) โ โ
โ โ โ ์ผ๋ฐ์ ์ผ๋ก ๊นจ๊ธฐ ์ด๋ ค์ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 2. ์ ์ ์ ๋๊ธฐ ๊นจ๊ธฐ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๋ฐฉ๋ฒ 1: ์์ ์ ๋ชจ๋ ์์ ์์ฒญ โ โ
โ โ โข ํ์ํ ๋ชจ๋ ์์์ ํ ๋ฒ์ ์์ฒญ โ โ
โ โ โข ๋จ์ : ์์ ์ด์ฉ๋ฅ ์ ํ, ๊ธฐ์ ๊ฐ๋ฅ โ โ
โ โ โ โ
โ โ ๋ฐฉ๋ฒ 2: ์์ฒญ ์ ๋ชจ๋ ์์ ํด์ โ โ
โ โ โข ์ ์์ ์์ฒญ ์ ๋ณด์ ์์ ๋ฐ๋ฉ โ โ
โ โ โข ๋จ์ : ๊ตฌํ ์ด๋ ค์ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 3. ๋น์ ์ ๊นจ๊ธฐ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ์์ ์์ฒญ ์คํจ ์ ๋ณด์ ์์ ๊ฐ์ ํด์ โ โ
โ โ โข ๋๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์ ์ ์ โ โ
โ โ โข ์ ์ฉ ๊ฐ๋ฅ: CPU ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ โ โ
โ โ โข ์ ์ฉ ์ด๋ ค์: ๋ฎคํ
์ค, ํ๋ฆฐํฐ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 4. ์ํ ๋๊ธฐ ๊นจ๊ธฐ โ
๊ฐ์ฅ ์ค์ฉ์ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ์์์ ์์ ๋ฒํธ ๋ถ์ฌ โ โ
โ โ โข ์ค๋ฆ์ฐจ์์ผ๋ก๋ง ์์ ์์ฒญ โ โ
โ โ โข ์ํ ๋๊ธฐ ๊ตฌ์กฐ์ ๋ถ๊ฐ๋ฅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ํ ๋๊ธฐ ์๋ฐฉ ์ฝ๋¶
#include <stdio.h>
#include <pthread.h>
// ์์์ ์์ ๋ฒํธ ๋ถ์ฌ
// lock1 = ์์ 1 (์์ 1)
// lock2 = ์์ 2 (์์ 2)
pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;
// ํญ์ ์ค๋ฆ์ฐจ์์ผ๋ก ํ๋!
void* thread_A(void* arg) {
// lock1(1) โ lock2(2) ์์๋ก ํ๋
pthread_mutex_lock(&lock1); // ์์ 1
printf("Thread A: lock1 ํ๋\n");
pthread_mutex_lock(&lock2); // ์์ 2
printf("Thread A: lock2 ํ๋\n");
// ์๊ณ ๊ตฌ์ญ
printf("Thread A: ์์
์ํ\n");
pthread_mutex_unlock(&lock2);
pthread_mutex_unlock(&lock1);
return NULL;
}
void* thread_B(void* arg) {
// ๋์ผํ๊ฒ lock1(1) โ lock2(2) ์์๋ก ํ๋
pthread_mutex_lock(&lock1); // ์์ 1
printf("Thread B: lock1 ํ๋\n");
pthread_mutex_lock(&lock2); // ์์ 2
printf("Thread B: lock2 ํ๋\n");
// ์๊ณ ๊ตฌ์ญ
printf("Thread B: ์์
์ํ\n");
pthread_mutex_unlock(&lock2);
pthread_mutex_unlock(&lock1);
return NULL;
}
int main() {
pthread_t tA, tB;
pthread_create(&tA, NULL, thread_A, NULL);
pthread_create(&tB, NULL, thread_B, NULL);
pthread_join(tA, NULL);
pthread_join(tB, NULL);
printf("์๋ฃ (๋ฐ๋๋ฝ ์์!)\n");
return 0;
}
5. ๋ฐ๋๋ฝ ํํผ¶
์์ ์ํ์ ๋ถ์์ ์ํ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์์ ์ํ vs ๋ถ์์ ์ํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์์ ์ํ (Safe State): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋๋ฝ ์์ด ์๋ฃํ ์ ์๋ ์ํ โ โ
โ โ โข ์์ ์์ (Safe Sequence) ์กด์ฌ โ โ
โ โ โ โ
โ โ ์์ ์์: <P1, P3, P4, P2, P0> โ โ
โ โ = ์ด ์์๋ก ์์์ ํ ๋นํ๋ฉด ๋ชจ๋ ์๋ฃ ๊ฐ๋ฅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ๋ถ์์ ์ํ (Unsafe State): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ์์ ์์๊ฐ ์กด์ฌํ์ง ์๋ ์ํ โ โ
โ โ โข ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ (๋ฐ๋์ ๋ฐ์ํ๋ ๊ฑด ์๋) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ ์์ ์ํ โ โ โ
โ โ โ (๋ฐ๋๋ฝ ๋ฐ์ ๋ถ๊ฐ๋ฅ) โ โ โ
โ โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ ๋ถ์์ ์ํ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ โ โ โ
โ โ โ โ ๋ฐ๋๋ฝ ์ํ โ โ โ โ
โ โ โ โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํํผ ์ ๋ต: ํญ์ ์์ ์ํ๋ง ์ ์ง โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ํ์ ์๊ณ ๋ฆฌ์ฆ (Banker's Algorithm)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ํ์ ์๊ณ ๋ฆฌ์ฆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Dijkstra๊ฐ ๊ฐ๋ฐ (1965) โ
โ ์ํ์์ด ๊ณ ๊ฐ์๊ฒ ๋์ถํ ๋์ ์ ์ฌํ ๋ฐฉ์ โ
โ โ
โ ๋ฐ์ดํฐ ๊ตฌ์กฐ: โ
โ โข n = ํ๋ก์ธ์ค ์ โ
โ โข m = ์์ ์ ํ ์ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Available[m] โ โ
โ โ ๊ฐ ์์ ์ ํ๋ณ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์คํด์ค ์ โ โ
โ โ โ โ
โ โ Max[n][m] โ โ
โ โ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์ฒญํ ์ ์๋ ์ต๋ ์์ โ โ
โ โ โ โ
โ โ Allocation[n][m] โ โ
โ โ ํ์ฌ ๊ฐ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์ โ โ
โ โ โ โ
โ โ Need[n][m] = Max[n][m] - Allocation[n][m] โ โ
โ โ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ถ๊ฐ๋ก ํ์ํ ์์ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ํ์ ์๊ณ ๋ฆฌ์ฆ ์์ ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ํ์ ์๊ณ ๋ฆฌ์ฆ ์์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์์ ์ ํ: A, B, C (๊ฐ๊ฐ 10, 5, 7๊ฐ ์กด์ฌ) โ
โ ํ๋ก์ธ์ค: P0, P1, P2, P3, P4 โ
โ โ
โ ํ์ฌ ์ํ: โ
โ โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ โ Process โ Allocation โ Max โ Need โโ
โ โ โ A B C โ A B C โ A B C โโ
โ โโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโคโ
โ โ P0 โ 0 1 0 โ 7 5 3 โ 7 4 3 โโ
โ โ P1 โ 2 0 0 โ 3 2 2 โ 1 2 2 โโ
โ โ P2 โ 3 0 2 โ 9 0 2 โ 6 0 0 โโ
โ โ P3 โ 2 1 1 โ 2 2 2 โ 0 1 1 โโ
โ โ P4 โ 0 0 2 โ 4 3 3 โ 4 3 1 โโ
โ โโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โ โ
โ Available = [3, 3, 2] (A:3, B:3, C:2 ์ฌ์ฉ ๊ฐ๋ฅ) โ
โ โ
โ ์์ ์ฑ ๊ฒ์ฌ: โ
โ 1. Need[P1] = [1,2,2] โค Available[3,3,2] โ P1 ์คํ ๊ฐ๋ฅโ
โ P1 ์๋ฃ ํ Available = [3,3,2] + [2,0,0] = [5,3,2] โ
โ โ
โ 2. Need[P3] = [0,1,1] โค Available[5,3,2] โ P3 ์คํ ๊ฐ๋ฅโ
โ P3 ์๋ฃ ํ Available = [5,3,2] + [2,1,1] = [7,4,3] โ
โ โ
โ 3. Need[P4] = [4,3,1] โค Available[7,4,3] โ P4 ์คํ ๊ฐ๋ฅโ
โ P4 ์๋ฃ ํ Available = [7,4,3] + [0,0,2] = [7,4,5] โ
โ โ
โ 4. Need[P0] = [7,4,3] โค Available[7,4,5] โ P0 ์คํ ๊ฐ๋ฅโ
โ P0 ์๋ฃ ํ Available = [7,4,5] + [0,1,0] = [7,5,5] โ
โ โ
โ 5. Need[P2] = [6,0,0] โค Available[7,5,5] โ P2 ์คํ ๊ฐ๋ฅโ
โ โ
โ ์์ ์์: <P1, P3, P4, P0, P2> โ
โ โ ์์คํ
์ ์์ ์ํ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ํ์ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋¶
#include <stdio.h>
#include <stdbool.h>
#define P 5 // ํ๋ก์ธ์ค ์
#define R 3 // ์์ ์ ํ ์
int available[R] = {3, 3, 2};
int maximum[P][R] = {
{7, 5, 3},
{3, 2, 2},
{9, 0, 2},
{2, 2, 2},
{4, 3, 3}
};
int allocation[P][R] = {
{0, 1, 0},
{2, 0, 0},
{3, 0, 2},
{2, 1, 1},
{0, 0, 2}
};
// Need ๊ณ์ฐ
int need[P][R];
void calculate_need() {
for (int i = 0; i < P; i++)
for (int j = 0; j < R; j++)
need[i][j] = maximum[i][j] - allocation[i][j];
}
bool is_safe() {
int work[R];
bool finish[P] = {false};
int safe_sequence[P];
int count = 0;
// work = available ๋ณต์ฌ
for (int i = 0; i < R; i++)
work[i] = available[i];
while (count < P) {
bool found = false;
for (int i = 0; i < P; i++) {
if (!finish[i]) {
// need[i] <= work ๊ฒ์ฌ
bool can_allocate = true;
for (int j = 0; j < R; j++) {
if (need[i][j] > work[j]) {
can_allocate = false;
break;
}
}
if (can_allocate) {
// ์์ ํ์ ์๋ฎฌ๋ ์ด์
for (int j = 0; j < R; j++)
work[j] += allocation[i][j];
finish[i] = true;
safe_sequence[count++] = i;
found = true;
}
}
}
if (!found)
return false; // ์์ ์์ ์์
}
printf("์์ ์์: ");
for (int i = 0; i < P; i++)
printf("P%d ", safe_sequence[i]);
printf("\n");
return true;
}
int main() {
calculate_need();
if (is_safe())
printf("์์คํ
์ ์์ ์ํ์
๋๋ค.\n");
else
printf("์์คํ
์ ๋ถ์์ ์ํ์
๋๋ค!\n");
return 0;
}
6. ๋ฐ๋๋ฝ ํ์ง์ ๋ณต๊ตฌ¶
ํ์ง ์๊ณ ๋ฆฌ์ฆ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ ํ์ง ์๊ณ ๋ฆฌ์ฆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋จ์ผ ์ธ์คํด์ค ์์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๋๊ธฐ ๊ทธ๋ํ (Wait-for Graph) ์ฌ์ฉ โ โ
โ โ โ โ
โ โ ์์ ํ ๋น ๊ทธ๋ํ์์ ์์ ๋
ธ๋ ์ ๊ฑฐ: โ โ
โ โ โ โ
โ โ Pi โ Rq โ Pj ๋ณํโ Pi โ Pj โ โ
โ โ (Pi๊ฐ Rq๋ฅผ ์์ฒญ, Rq๊ฐ Pj์๊ฒ ํ ๋น) โ โ
โ โ โ โ
โ โ ๋๊ธฐ ๊ทธ๋ํ์ ์ฌ์ดํด โ ๋ฐ๋๋ฝ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ๋ค์ค ์ธ์คํด์ค ์์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ์ํ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ ๋ฐฉ์ ์ฌ์ฉ โ โ
โ โ ํ์ฌ ์์ฒญ์ ๊ธฐ์ค์ผ๋ก ์์ ์ฑ ๊ฒ์ฌ โ โ
โ โ ๋ฐ๋๋ฝ ์ํ์ธ ํ๋ก์ธ์ค ์งํฉ ์๋ณ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํ์ง ๋น๋: โ
โ โข ์์ ์์ฒญ๋ง๋ค โ ์ค๋ฒํค๋ ๋์ โ
โ โข ์ฃผ๊ธฐ์ ์ผ๋ก (์: 5๋ถ๋ง๋ค) โ
โ โข CPU ์ด์ฉ๋ฅ ์ด ๋ฎ์์ง ๋ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋๊ธฐ ๊ทธ๋ํ ์์¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋๊ธฐ ๊ทธ๋ํ ์์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์์ ํ ๋น ๊ทธ๋ํ: ๋๊ธฐ ๊ทธ๋ํ: โ
โ โ
โ โP1 โ์์ฒญโโถ โกR1 โP1 โโโโโโโโโโ โ
โ โ โ ํ ๋น โ โ โ
โ ํ ๋น โ โP2 โP2 โโโโโโโโโ โ
โ โ โ ์์ฒญ โ โ
โ โกR2 โโโโโโ โP3 โโโโโโโโโ โ
โ โ ํ ๋น โ โ โ
โ โP3 โ์์ฒญโโถ โกR3 โํ ๋นโ โP4 โP4 โโโโโโ โ
โ โ
โ R1 โ P2 โ R2 โ P3 โ R3 โ P4 โ
โ โ
โ ๋๊ธฐ ๊ทธ๋ํ: โ
โ P1 โ P2 โ P3 โ P4 โ P3 (์ฌ์ดํด!) โ
โ โ
โ โ ๋ฐ๋๋ฝ ๋ฐ์ (P3, P4๊ฐ ๋ฐ๋๋ฝ ์ํ) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ฐ๋๋ฝ ๋ณต๊ตฌ ๋ฐฉ๋ฒ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฐ๋๋ฝ ๋ณต๊ตฌ ๋ฐฉ๋ฒ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. ํ๋ก์ธ์ค ์ข
๋ฃ (Process Termination) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๋ฐฉ๋ฒ 1: ๋ชจ๋ ๋ฐ๋๋ฝ ํ๋ก์ธ์ค ์ข
๋ฃ โ โ
โ โ โข ํ์คํ์ง๋ง ๋น์ฉ์ด ํผ โ โ
โ โ โข ์ค๋ ์คํ๋ ํ๋ก์ธ์ค๋ ์ข
๋ฃ๋จ โ โ
โ โ โ โ
โ โ ๋ฐฉ๋ฒ 2: ํ ๋ฒ์ ํ๋์ฉ ์ข
๋ฃ โ โ
โ โ โข ์ข
๋ฃ ํ ๋ฐ๋๋ฝ ์ฌ๊ฒ์ฌ โ โ
โ โ โข ์ ํ ๊ธฐ์ค: ์ฐ์ ์์, ์คํ์๊ฐ, ์์ ์ฌ์ฉ๋ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 2. ์์ ์ ์ (Resource Preemption) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ํ๋ก์ธ์ค์ ์์์ ๊ฐ์ ๋ก ๋นผ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ โ โ
โ โ ํ ๋น โ โ
โ โ โ โ
โ โ ๊ณ ๋ ค ์ฌํญ: โ โ
โ โ โข ํฌ์์ ์ ํ: ์ด๋ค ํ๋ก์ธ์ค์ ์์์ ์ ์ ํ ์ง โ โ
โ โ โข ๋กค๋ฐฑ: ์ ์ ๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ ์ํ๋ก ๋ณต๊ตฌ โ โ
โ โ โข ๊ธฐ์ ๋ฐฉ์ง: ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ํฌ์๋์ง ์๋๋ก โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 3. ์ฒดํฌํฌ์ธํธ/๋ณต๊ตฌ (Checkpoint/Recovery) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋ก์ธ์ค ์ํ ์ ์ฅ (์ฒดํฌํฌ์ธํธ) โ โ
โ โ โข ๋ฐ๋๋ฝ ๋ฐ์ ์ ์ด์ ์ฒดํฌํฌ์ธํธ๋ก ๋กค๋ฐฑ โ โ
โ โ โข ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์์ ์ฃผ๋ก ์ฌ์ฉ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ฐ๋๋ฝ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋น๊ต¶
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ ๋ฐฉ๋ฒ โ ์ค๋ฒํค๋ โ ์์ ์ด์ฉ๋ฅ โ ๊ตฌํ ๋ณต์ก๋ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ ์๋ฐฉ โ ๋์ โ ๋ฎ์ โ ๋ฎ์ โ
โ (Prevention) โ โ โ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ ํํผ โ ๋์ โ ์ค๊ฐ โ ๋์ โ
โ (Avoidance) โ โ โ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ ํ์ง/๋ณต๊ตฌ โ ์ค๊ฐ โ ๋์ โ ์ค๊ฐ โ
โ (Detection) โ โ โ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ ๋ฌด์ โ ์์ โ ์ต๊ณ โ ์์ โ
โ (Ostrich) โ โ โ โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโ
๋ฌด์ (Ostrich Algorithm):
โข ๋ฐ๋๋ฝ์ด ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ค๊ณ ๊ฐ์
โข ๋ฐ์ํ๋ฉด ์๋์ผ๋ก ์ฌ๋ถํ
โข Unix, Linux, Windows ๋ฑ ๋๋ถ๋ถ์ OS๊ฐ ์ฑํ
โข ํ์ค์ ์ธ ์ ๊ทผ๋ฒ
7. ์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: ๋ฐ๋๋ฝ ํ์์กฐ๊ฑด¶
๋ค์ ์ค ๋ฐ๋๋ฝ์ ๋ค ๊ฐ์ง ํ์์กฐ๊ฑด์ ํด๋นํ์ง ์๋ ๊ฒ์?
A. ์ํธ ๋ฐฐ์ B. ์ํ ๋๊ธฐ C. ์ฐ์ ์์ ์ญ์ D. ๋น์ ์ E. ์ ์ ์ ๋๊ธฐ
์ ๋ต ๋ณด๊ธฐ
**์ ๋ต: C. ์ฐ์ ์์ ์ญ์ ** ๋ฐ๋๋ฝ์ ๋ค ๊ฐ์ง ํ์์กฐ๊ฑด: 1. ์ํธ ๋ฐฐ์ (Mutual Exclusion) 2. ์ ์ ์ ๋๊ธฐ (Hold and Wait) 3. ๋น์ ์ (No Preemption) 4. ์ํ ๋๊ธฐ (Circular Wait) ์ฐ์ ์์ ์ญ์ ์ ๋ฐ๋๋ฝ๊ณผ๋ ๋ค๋ฅธ ๋์์ฑ ๋ฌธ์ ์ ๋๋ค.๋ฌธ์ 2: ์์ ํ ๋น ๊ทธ๋ํ¶
๋ค์ ์์ ํ ๋น ๊ทธ๋ํ๊ฐ ๋ฐ๋๋ฝ ์ํ์ธ์ง ํ๋ณํ์ธ์.
P1 โ R1, R1 โ P2
P2 โ R2, R2 โ P3
P3 โ R1
์ ๋ต ๋ณด๊ธฐ
**๋ถ์:** - P1์ด R1 ์์ฒญ - R1์ด P2์๊ฒ ํ ๋น๋จ - P2๊ฐ R2 ์์ฒญ - R2๊ฐ P3์๊ฒ ํ ๋น๋จ - P3๊ฐ R1 ์์ฒญ **๋๊ธฐ ๊ด๊ณ:** - P1 โ P2 (R1 ๋๋ฌธ์) - P2 โ P3 (R2 ๋๋ฌธ์) - P3 โ P2 (R1 ๋๋ฌธ์, R1์ P2๊ฐ ๋ณด์ ) **์ฌ์ดํด:** P2 โ P3 โ P2 **๊ฒฐ๋ก : ๋ฐ๋๋ฝ ์ํ** (๋จ, ๊ฐ ์์์ด ๋จ์ผ ์ธ์คํด์ค๋ผ๊ณ ๊ฐ์ )๋ฌธ์ 3: ์ํ์ ์๊ณ ๋ฆฌ์ฆ¶
๋ค์ ์ํ์์ ์์คํ ์ด ์์ ์ํ์ธ์ง ํ์ธํ์ธ์.
Available = [1, 1, 2]
| Process | Allocation | Max |
|---|---|---|
| P0 | (0,1,0) | (2,2,2) |
| P1 | (1,0,0) | (1,1,2) |
| P2 | (0,0,1) | (1,2,3) |
์ ๋ต ๋ณด๊ธฐ
**Need ๊ณ์ฐ:** - P0: (2,2,2) - (0,1,0) = (2,1,2) - P1: (1,1,2) - (1,0,0) = (0,1,2) - P2: (1,2,3) - (0,0,1) = (1,2,2) **์์ ์ฑ ๊ฒ์ฌ:** 1. Available = [1,1,2] 2. Need[P1] = [0,1,2] <= [1,1,2]? Yes! - P1 ์คํ ํ: Available = [1,1,2] + [1,0,0] = [2,1,2] 3. Need[P0] = [2,1,2] <= [2,1,2]? Yes! - P0 ์คํ ํ: Available = [2,1,2] + [0,1,0] = [2,2,2] 4. Need[P2] = [1,2,2] <= [2,2,2]? Yes! - P2 ์คํ ํ: ์๋ฃ **์์ ์์:๋ฌธ์ 4: ์ํ ๋๊ธฐ ์๋ฐฉ¶
์ํ ๋๊ธฐ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์์์ ์์๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ , ์ ์ด ๋ฐฉ๋ฒ์ด ๋ฐ๋๋ฝ์ ๋ฐฉ์งํ๋์ง ์ฆ๋ช ํ์ธ์.
์ ๋ต ๋ณด๊ธฐ
**๋ฐฉ๋ฒ:** - ๋ชจ๋ ์์ ์ ํ์ ๊ณ ์ ํ ์์ ๋ฒํธ ๋ถ์ฌ - ํ๋ก์ธ์ค๋ ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก๋ง ์์ ์์ฒญ **์ฆ๋ช :** ์ํ ๋๊ธฐ๊ฐ ๋ฐ์ํ๋ ค๋ฉด: P0 โ R(i0) โ P1 โ R(i1) โ ... โ Pn โ R(in) โ P0 ๊ฐ ํ์ดํ๋ "๋ณด์ ํ ์์ฒญ"์ ์๋ฏธ: - P0๊ฐ R(i0)๋ฅผ ๋ณด์ ํ๊ณ ์๊ณ P1์ด R(i0)๋ฅผ ๊ธฐ๋ค๋ฆผ - P1์ด R(i1)์ ๋ณด์ ํ๊ณ P2๊ฐ R(i1)์ ๊ธฐ๋ค๋ฆผ - ... - Pn์ด R(in)์ ๋ณด์ ํ๊ณ P0๊ฐ R(in)์ ๊ธฐ๋ค๋ฆผ ์ค๋ฆ์ฐจ์ ๊ท์น์ ๋ฐ๋ฅด๋ฉด: - P0๊ฐ R(in)์ ์์ฒญํ๋ ค๋ฉด i0 < in ์ด์ด์ผ ํจ - ํ์ง๋ง ์ํ์ด๋ฉด in < i0 < i1 < ... < in (๋ชจ์!) ๋ฐ๋ผ์ ์ํ ๋๊ธฐ ๋ถ๊ฐ๋ฅ โ ๋ฐ๋๋ฝ ๋ถ๊ฐ๋ฅ๋ฌธ์ 5: ๋ฐ๋๋ฝ ๋ณต๊ตฌ¶
๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ ๋ "ํ ๋ฒ์ ํ๋์ฉ ํ๋ก์ธ์ค ์ข ๋ฃ" ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ด๋ค ๊ธฐ์ค์ผ๋ก ํฌ์์๋ฅผ ์ ํํด์ผ ํ๋์ง ์ค๋ช ํ์ธ์.
์ ๋ต ๋ณด๊ธฐ
**ํฌ์์ ์ ํ ๊ธฐ์ค:** 1. **ํ๋ก์ธ์ค ์ฐ์ ์์** - ๋ฎ์ ์ฐ์ ์์ ํ๋ก์ธ์ค ๋จผ์ ์ข ๋ฃ 2. **์คํ ์๊ฐ** - ์งง๊ฒ ์คํ๋ ํ๋ก์ธ์ค ์ข ๋ฃ (์์ค ์ต์ํ) - ๋๋ ๊ฑฐ์ ์๋ฃ๋ ํ๋ก์ธ์ค๋ ๋ณดํธ 3. **์ฌ์ฉ ์์๋** - ๋ง์ ์์์ ๋ณด์ ํ ํ๋ก์ธ์ค ์ข ๋ฃ (๋ ๋ง์ ์์ ํ๋ณด) 4. **์๋ฃ๊น์ง ๋จ์ ์์** - ๋ง์ ์์์ด ๋ ํ์ํ ํ๋ก์ธ์ค ์ข ๋ฃ 5. **ํ๋ก์ธ์ค ์ ํ** - ๋ฐฐ์น ์์ ๋ณด๋ค ๋ํํ ํ๋ก์ธ์ค ์ฐ์ ๋ณดํธ 6. **๊ธฐ์ ๋ฐฉ์ง** - ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ํฌ์๋์ง ์๋๋ก - ์ข ๋ฃ ํ์ ์นด์ดํธ ๋ฐ ์ ํ **์ต์ ์ ํ:** ์ ๊ธฐ์ค๋ค์ ๊ฐ์ค ํฉ์ผ๋ก ๋น์ฉ ํจ์ ์ ์ ํ ์ต์ ๋น์ฉ ํ๋ก์ธ์ค ์ ํ๋ค์ ๋จ๊ณ¶
์ด๊ฒ์ผ๋ก ํ๋ก์ธ์ค ๋๊ธฐํ ํํธ๊ฐ ์๋ฃ๋์์ต๋๋ค. ๋ค์ ํ์ต ์ฃผ์ : - 10_Memory_Management_Basics.md - ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (์์ )