(1) κ°μ
Concurrent Processes (λ³ν νλ‘μΈμ€)
- λ κ° μ΄μμ νλ‘μΈμ€λ€μ΄ λμμ μνλ¨μ μλ―Ένλ€.
- λ 립μ μΌλ‘ μμ μ΄ μνλλ©°, λ€λ₯Έ νλ‘μΈμ€μ νλ ₯νμ¬ κΈ°λ₯ μνλ κ°λ₯νλ€.
- νλ ₯ μν μμ νλ‘μΈμ€ κ°μ *λκΈ°ν λλ ν΅μ μ΄ νμνλ€.
- 곡μ μμμ κ°μ§κ³ μννλ€.
- λ³ν νλ‘μΈμ€ μ²λ¦¬λ μ νλ μμμ 곡μ νκΈ° μν΄ *μνΈμμ©μ΄ νμνλ€.
- μνΈ μμ©νλ νλ‘μΈμ€λ€μ λκΈ°ννμ§ μμΌλ©΄ λ¬Έμ κ° λ°μν μ μλ€.
- Deadlock λ¬Έμ , Critical Section λ¬Έμ , κ²°κ³Όλ₯Ό μμΈ‘ν μ μλ μν© λ±μ΄ λ°μν μ μλ€.
*λκΈ°ν : νλ ₯νλ νλ‘μΈμ€ κ°μ μ€ν μμκ° νμνλ€. ex)μ
κΈμ΄ λλμΌ μΆκΈμ΄ μνλμ΄μΌ νλ€.
*μνΈμμ© : μ νλ μμμ 곡μ νκΈ° μν¨μ΄λ©°, μνΈμμ©νλ νλ‘μΈμ€λ μμμ λ§κ² μ€νλλλ‘ λκΈ°νκ° λμ΄μΌ νλ€.
(2) Concurrent Processes Promblem
β λ³ν νλ‘μΈμ€ μ²λ¦¬ κ³Όμ μμ OSκ° λ°λμ ν΄κ²°ν΄μΌ ν κ²
- λ€λ₯Έ Processκ° κ΄μ¬νμ§ λͺ»νλλ‘ κ³΅μ μμμ μνΈ λ°°νμ μΈ μ¬μ©(Mutual exclusion)μ 보μ₯ν΄μΌ νλ€.
- νλμ κΈ°λ₯μ 곡λμΌλ‘ μ¬μ©νμ¬ μννλ λ νλ‘μΈμ€ κ°μ λκΈ°ν(Synchronization)λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ νλ€. -> νλ‘μΈμ€ κ°μ μμλ₯Ό μ ν΄μ ν νλ‘μΈμ€λ§ μ²λ¦¬νλ€.
- λ κ° μ΄μμ νλ‘μΈμ€μ μ€ν μμμ 무κ΄νκ² νμ κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ΄μΌ νλ€.(μΌκ΄μ±)
- Deadlock λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΄μΌ νλ€.
- νλ‘μΈμ€ κ°μ μλ£ κ΅νμ μν λ©μμ§ μ λ¬ λ°©μκ³Ό κ°μ ν΅μ λ¬Έμ (Communication)μ ν΄κ²°μ΄ νμνλ€.
β€ Critical Section (μκ³ κ΅¬μ)
- μ΄λ€ νλ‘μΈμ€κ° 곡μ μμμ μ κ·Όνλ©΄, κ·Έ νλ‘μΈμ€λ μκ³κ΅¬μμ μλ€κ³ νλ€.
- μκ³κ΅¬μμ μ κ·Όν νλ‘μΈμ€λ *μνΈ λ°°μ λ₯Ό 보μ₯λ°μμΌ νλ€.
- μκ³κ΅¬μμ κ°λ₯ν ν 빨리 μνλμ΄μΌλ§ νλ©°, νλ‘μΈμ€κ° μκ³κ΅¬μμ λ€μ΄κ° ν λΈλ‘ μνκ° λμ΄μλ μ λλ€.
*μνΈλ°°μ (Mutual Exclusion) : νλμ νλ‘μΈμ€λ§ 곡μ μμμ λν΄ λ°°νμ μΌλ‘ μ κ·Όνκ³ λλ¨Έμ§ νλ‘μΈμ€λ€μ 곡μ λ°μ΄ν°μ μ κ·Όν νμκ° μλλΌλ κΈ°λ€λ €μΌ νλ€.

β€ Mutual Exclusion (μνΈ λ°°μ )
- λ€μμ νλ‘μΈμ€λ€μ΄ νλμ 곡μ μμ(μκ³ κ΅¬μ)μ μνΈ λ°°νμ μΌλ‘ μ¬μ©νλ€.(λμ μ¬μ© λΆκ°)
- 곡μ λ³μμ μ κ·Ό μ€μΈ νλμ νλ‘μΈμ€λ₯Ό μ μΈν λ€λ₯Έ νλ‘μΈμ€λ€μ΄ 곡μ λ³μλ₯Ό μ κ·Όνμ§ λͺ»νκ² μ μ΄νλ κΈ°λ²μ΄λ€.

μνμ€μΈ νλ‘μΈμ€μμ saveκ° λκΈ° μ μ λ€λ₯Έ νλ‘μΈμ€κ° μνλλ©΄ μ³μ λ΅μ΄ λμ€μ§ μλλ€.
β Mutual Exclusion Algorithm μꡬ 쑰건
- 곡μ μμμ λν΄μλ μ΄λ ν μκ°μ λ°λμ νλμ νλ‘μΈμ€λ§μ΄ μκ³κ΅¬μμ μ§μ ν΄μΌ νλ€.
- μκ³κ΅¬μμ μ κ·Όνκ³ μ νλ νλ‘μΈμ€μ μνμ΄ λ¬΄ν λκΈ°νμ§ μμμΌ νλ€.
- Starvationμ΄ λ°μνμ§ μλλ‘ ν΄μΌ νλ€.
- Deadlockμ΄ λ°μνμ§ μλλ‘ ν΄μΌ νλ€.
- μκ³κ΅¬μμ΄ μ¬μ© μ€μ΄ μλλ©΄ μκ³κ΅¬μμ μ§μ νκΈ°λ₯Ό μνλ νλ‘μΈμ€μκ² μ¦μ μ§μ νλλ‘ νμ©ν΄μΌ νλ€.
- μκ³κ΅¬μμ μ§μ ν νλ‘μΈμ€λ μΌμ ν μκ° λ΄μ μκ³κ΅¬μμ λΉ μ Έ λμμΌ νλ€.
(3) Mutual Exclusion Algorithm (μνΈ λ°°μ μκ³ λ¦¬μ¦)
β€ 1λ¨κ³ Mutual Exclusion Primitive(1λ¨κ³ μκ³ λ¦¬μ¦)
- ν μκ°μ λ¨μ§ νλμ νλ‘μΈμ€λ§μ΄ μκ³ κ΅¬μμ μ§μ νλλ‘ λ³΄μ₯ν΄μΌ νλ€.(μνΈλ°°μ 보μ₯)
- ν κ°μ 곡μ λ³μλ₯Ό μ΄μ©νλ€.(processnumber) -> λκΈ°νλ₯Ό μν΄ μ¬μ©νλ 곡μ λ³μλ€.
Pseduo Code
program mutex1;
var processnumber;
p0(){ //νλ‘μΈμ€ p0μ μκ³κ΅¬μ procedure
while(true){
while(processnumber != 0) //p1μ μ§μ
μ¬λΆ νμΈ
;
critical_section
processnumber = 1; //p1μκ² μκ³κ΅¬μ μ§μ
μμ μ보
}
}
p1(){ //νλ‘μΈμ€ p1μ μκ³κ΅¬μ procedure
while(true){
while(processnumber != 1) //p0μ μ§μ
μ¬λΆ νμΈ
;
critical_section
processnumber = 1; //p0μκ² μκ³κ΅¬μ μ§μ
μμ μ보
}
}
//main
processnumber = 1; //곡μ λ³μλ₯Ό p1 μ§μ
μμλ‘ μ΄κΈ°ν
parbegin
p0(); //p0κ³Ό p1μ λμ μν -> μ΄λ€ κ²μ΄ λ¨Όμ μνλ μ§λ μν©μ λ°λΌ λ³κ²½
p1();
Parend
1λ¨κ³ μκ³ λ¦¬μ¦μ μνΈλ°°μ λ₯Ό λ§μ‘±μν€μ§λ§ λ¬Έμ μ μ΄ μλ€.
- μκ³κ΅¬μ μ§μ μ κ΅λλ‘ μ§μ ν΄μΌ νκ³ , λΉ λ₯Έ νλ‘μΈμ€λ λλ¦° νλ‘μΈμ€μ μλμ μμ‘΄νλ€.
- ν νλ‘μΈμ€κ° μκ³ κ΅¬μ λ΄μμ μ€μ§λλ€λ©΄ λ€λ₯Έ νλ‘μΈμ€λ μνμ ν μ μλ€.
- 곡μ λ³μ μ€μ μ λ°λΌ μμλλ μμκ° κ²°μ λλ€.
β€ 2λ¨κ³ Mutual Exclusion Algorithm
- λ κ°μ 곡μ λ³μ(p0_inside, p1_inside)λ₯Ό μ΄μ©νμ¬ μνΈλ°°μ λ₯Ό ν΄κ²°νκ³ μ νλ€.
Pseduo Code
program mutex2;
boolean p0_inside, p1_inside;
p0(){
while(true){
while(p1_inside == TRUE)
;
p0_inside = TRUE; //p0μ΄ μκ³κ΅¬μ μ§μ
μλ
critical_section
p0_inside = FALSE; //p1μκ² μ§μ
μμ μ보
remainder section
}
}
p1(){
while(true){
while(p0_inside == TRUE)
;
p0_inside = TRUE; //p1μ΄ μκ³κ΅¬μ μ§μ
μλ
critical_section
p0_inside = FALSE; //p0μκ² μ§μ
μμ μ보
remainder section
}
}
//main
p0_inside = false, p1_inside = false;
parbegin
p0();
p1();
Parend
2κ°μ νλ‘μΈμ€κ° λ³ννλ©΄μ ν μ€μ© μννμ λ λ¬Έμ μ μ΄ μκΈ΄λ€.
- λμμ μκ³κ΅¬μ μ§μ μ΄ κ°λ₯ν κ²½μ°κ° λ°μνμ¬ μνΈλ°°μ κ° λ³΄μ₯λμ§ μλλ€.
- 1λ¨κ³μ λ€λ₯΄κ² μμκ° μ ν΄μ Έ μμ§ μλ€. (p0μ΄ λ¨Όμ λ€μ΄μλ λκ³ , p1μ΄ λ¨Όμ λ€μ΄μλ λλ€.)
β€ 3λ¨κ³ Mutual Exclusion Algorithm
- 2λ¨κ³μ λ¬Έμ μ ν΄κ²°
Pseduo Code
program mutex3;
boolean p0_inside, p1_inside;
p0(){
while(true){
p0_inside = TRUE;
while(p1_inside == TRUE)
;
critical_section
p0_inside = FALSE;
remainder section
}
}
p1(){
while(true){
p1_inside = TRUE;
while(p0_inside == TRUE)
;
critical_section
p1_inside = FALSE;
remainder section
}
}
//main
p0_inside = false, p1_inside = false;
parbegin
p0();
p1();
Parend
whileλ¬Έ μν μ΄μ μ μμ μ νλκ·Έ(px_inside)λ₯Ό trueλ‘ λ―Έλ¦¬ λ³κ²½νλ€.(μνΈλ°°μ λ 보μ₯) νμ§λ§ κ΅μ°©μνκ° λ°μ(λ νλ‘μΈμ€κ° μνμ λͺ»νλ μν)ν μνμ΄ μλ€.
- λ νλ‘μΈμ€κ° whileλ¬Έ μ΄μ μ μ°¨λ‘λλ‘ px_insideλ₯Ό κ°κ° trueλ‘ λ³κ²½νλ©΄, λ΄λΆμ whileλ¬Έμμ κ°κ° 무ν 루νλ₯Ό λκ² λλ€.
- while(p1_inside == TRUE)κ³Ό while(p0_inside == TRUE)
β€ 4λ¨κ³ Mutual Exclusion Algorithm
- 1λ¨κ³μ 3λ¨κ³ μκ³ λ¦¬μ¦μ κ²°ν©ν κ²μ΄λ€.
- 3κ°μ 곡μ λ³μ(p0_inside, p1_inside, processnumber)λ₯Ό μ΄μ©νλ€.
Pseduo Code
program mutex3;
boolean p0_inside, p1_inside;
var processesnumber;
p0(){
while(true){
p0_inside = TRUE;
processesnumber = 1;
while(p1_inside == TRUE and processesnumber == 1)
;
//p0μ μ§μ
μ¬λΆ νμΈ
critical_section
p0_inside = FALSE;
remainder section
}
}
p1(){
while(true){
p1_inside = TRUE;
processesnumber = 0;
while(p0_inside == TRUE and processesnumber == 0)
;
//p1μ μ§μ
μ¬λΆ νμΈ
critical_section
p1_inside = FALSE;
remainder section
}
}
//main
p0_inside = false, p1_inside = false;
parbegin
p0();
p1();
Parend
3λ¨κ³ μνΈ λ°°μ μκ³ λ¦¬μ¦μ κ΅μ°©μν λ°μ μνμ μ κ±°νκ³ , μνΈλ°°μ λ λ§μ‘±μν¨λ€.
(4) Synchronization by Hardware (νλμ¨μ΄μ μν λκΈ°)
νλμ¨μ΄μ μΈ μκ³κ΅¬μ λ¬Έμ ν΄κ²°
- λ¨μΌ νλ‘μΈμ(CPU) μμ€ν μμ μκ³κ΅¬μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μλ 곡μ λ³μκ° λ³κ²½λλ λμ λ€λ₯Έ νλ‘μΈμ€κ° 곡μ λ³μμ μ κ·Όνμ§ λͺ»νλλ‘ νΉμ μΈν°λ½νΈ λ°μμ νμ©νμ§ μλλ‘ μ€μ νλ©΄ λλ€.
- λ μ΄μ λΆν μ΄ λΆκ°λ₯ν νΉλ³ν νλμ¨μ΄ λͺ λ ΉμΈ *TestAndSet(targer)μ μ΄μ©νμ¬ μκ³κ΅¬μ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ νλ€. (νλμ¨μ΄ μΉ© μ΄μ©)
*TestAndSet : μΌλ¨ μνμ΄ μμλλ©΄ μΈν°λ½νΈ μμ΄ λͺ¨λ λλ§μ³μΌ νλ νλμ¨μ΄μ λͺ λ Ήλ¬ΈμΌλ‘, 곡μ λ³μ λΆλΆμ νλμ¨μ΄ μΉ©μΌλ‘ ꡬννλ€. λ€μ λ§ν΄μ TestAndSetμ΄ μνλλ λμ λ€λ₯Έ κ²μ΄ μνλμ§ μλλ€.
Pseudo Code
boolean TestAndSet(boolean & target){
boolean temp = target;
target = true;
return temp;
//targetμ΄ falseμΈ κ²½μ°, temp = falseλ‘ μ€μ , false λ°ν
}
testandsetexample(){
boolean lock;
p0(){
while(true){
while(TestAndSet(lock))
;
critical section
lock = false;
remainder section
}
}
p1(){
while(true){
while(TestAndSet(lock))
;
critical section
lock = false;
remainder section
}
}
lock = false;
parbegin
p0();
p1();
parend
}
(5) Semaphore(μΈλ§ν¬μ΄)
β μΈλ§ν¬μ΄(μκ³κ΅¬μμμ νλ‘μΈμ€λ€μ λκΈ°ν λ°©λ²)μ μ
- νλ‘μΈμ€ λκΈ°ν λ¬Έμ ν΄κ²°μ μν λ κ°μ§ μ°μ°(P, V)μ΄ νμνλ€.
P : λ€λλλμ΄λ‘ κ²μ¬(Proberen)λ₯Ό λνλ΄λ©°, νλ‘μΈμ€λ₯Ό λκΈ°μμΌμ λμμΌλ‘ μκ³κ΅¬μμ μ§μ νκΈ° μν μ°μ°(wait), Sκ°μ κ°μμν¨λ€. (곡μ μμμ κ°μ Έκ°λ€)
V : λ€λλλμ΄λ‘ μ¦κ°(Verhogen)λ₯Ό λνλ΄λ©°, λκΈ° μ€μΈ νλ‘μΈμ€λ₯Ό κΉ¨μ°κΈ° μν΄ μ νΈλ₯Ό 보λ΄λ λμμΌλ‘ μκ³κ΅¬μμμ λμ€κΈ° μν μ°μ°(signal), Sκ°μ μ¦κ°μν¨λ€. (곡μ μμμ λ°λ©νλ€)
S : μΈλ§ν¬μ΄λ₯Ό λνλ΄λ©° νμ€ λ¨μ μ°μ° Pμ Vμ μν΄μλ§ μ κ·Όλλ μ μ λ³μλ‘, μ΄ Sκ°μ μ΄μ©νμ¬ νλ‘μΈμ€λ€μ μκ³κ΅¬μ μ κ·Όμ μ μ΄νλ€.
μΈλ§ν¬μ΄ μ¬μ©λ²κ³Ό Pμ°μ° λ° Vμ°μ° μ μ
while(true){
P(S);
μκ³κ΅¬μ
while S <= 0 do no-operation; // S = 0 μΌ λ λ λ€λ₯Έ νλ‘μΈμ€κ° 곡μ μμμ μμ²νλ©΄ μμκ°μ λ°©μ§
S = S - 1;
V(S);
μλ₯ꡬμ
S = S + 1;
}
β μΈλ§ν¬μ΄λ₯Ό μ΄μ©ν μμ°μ/μλΉμ(λ°μ΄ν°μ μμ°μ/μλΉμ) λ¬Έμ ν΄κ²°
- 곡μ λ³μ semaphore mutex = 1; -> λ²νΌ μ κ·Όμ λν μνΈ λ°°μ λ₯Ό μν μΈλ§ν¬μ΄
- 곡μ λ³μ semaphore empty = n; -> λ²νΌμ λΉμ΄ μλ νλͺ©μ κ°μλ₯Ό μν μΈλ§ν¬μ΄
- 곡μ λ³μ semaphore full = 0; -> λ²νΌμ μ±μμ Έ μλ λ°μ΄ν°μ κ°μλ₯Ό μν μΈλ§ν¬μ΄
- μμ°μ : λ²νΌμ λ°μ΄ν°λ₯Ό λ£κΈ° μν΄ λ²νΌμ λΉμ΄ μλ νλͺ©μ μ(empty)λ₯Ό 1κ°μμν¨λ€.
- emptyκ°μ΄ 0μ΄λ©΄ νλ‘μΈμ€κ° λΈλ‘λλ€. λ€μ λ§ν΄ μμ°μκ° λ²νΌμ μ κ·Όνμ§ λͺ»νλ€.
- μλΉμ : λ²νΌμ μ±μμ§ λ°μ΄ν°μ κ°μλ₯Ό λνλ΄λ fullκ°μ 1κ°μμν¨λ€.
- fullκ°μ΄ 0μ΄λ©΄ νλ‘μΈμ€κ° λΈλ‘λλ€. λ€μ λ§ν΄ μλΉμκ° λ²νΌμ μ κ·Όνμ§ λͺ»νλ€.

β μΈλ§ν¬μ΄λ₯Ό μ΄μ©ν λ°μ΄ν° μ½κΈ°/μ°κΈ° λ¬Έμ ν΄κ²°
- 곡μ λ³μ semaphore wrt = 1; -> μ°κΈ° νλ‘μΈμ€ μ κ·Ό μ λ°°νμ μ¬μ©μ μν μΈλ§ν¬μ΄
- 곡μ λ³μ semaphore mutex = 1; -> readcount λ³μμ μνΈ λ°°μ λ₯Ό μν μΈλ§ν¬μ΄
- int readcount = 0; -> μ½κΈ° νλ‘μΈμ€μ κ°μ (μ΄κΈ° κ°μ 0μ΄λ€)
- wrt μΈλ§ν¬μ΄λ μ°κΈ° νλ‘μΈμ€κ° μκ³κ΅¬μμ μμ κ²½μ°, λ€λ₯Έ μ°κΈ°λ μ½κΈ° νλ‘μΈμ€κ° μκ³κ΅¬μμ μ κ·Όνμ§ λͺ»νλλ‘ νλ€.
- P(wrt) : μ½κΈ° νλ‘μΈμ€κ° 1κ° μ΄μμΈ κ²½μ° μ°κΈ° νλ‘μΈμ€κ° μ€νλμ§ λͺ»νλλ‘ νλ€.
- readcount-- : μ½κΈ° νλ‘μΈμ€κ° μ½κΈ°λ₯Ό λ§μΉκ³ λΉ μ Έ λμ€λ κ²½μ°μ μμ μ μ μΈν λ€λ₯Έ μ½κΈ° νλ‘μΈμ€κ° μ‘΄μ¬νλ κ²½μ°μλ κ·Έλ₯ λΉ μ Έ λμ¨λ€.
- V(wrt) : μμ μ΄ λ§μ§λ§ μ½κΈ° νλ‘μΈμ€μΈ κ²½μ°μλ μ°κΈ° νλ‘μΈμ€μ μκ³κ΅¬μ μ§μ μ νμ©νλ€.
(6) Monitor
κ°μ λ° μ μ
- μμ°¨μ μΌλ‘λ§ μ¬μ©ν μ μλ νΉμ 곡μ μμμ΄λ 곡μ μμ κ·Έλ£Ήμ ν λΉνλλ° μ¬μ©λλ€.
- λ°μ΄ν° λ° νλ‘μλμ΄λ₯Ό ν¬ν¨νλ λ³νμ± κ΅¬μ‘°μ΄λ€.
- 곡μ μμμ μ κ·Όνκ³ μ νλ νλ‘μΈμ€λ λ°λμ νΉμ λͺ¨λν°μ μ§μ λΆ(entry)λ₯Ό νΈμΆν΄μΌ νλ€.
- μ΄λ―Έ μ¬μ© μ€μΈ λͺ¨λν°μ λ€μ΄κ°λ €κ³ νλ λ€λ₯Έ νλ‘μΈλ λ°λμ λκΈ°ν΄μΌ νλ€.
λͺ¨λν°
- μΈλ§ν¬μ΄μ P, Vμ°μ°μ΄ νλ‘κ·Έλ¨ μ 체μ νΌμ Έ μμ΄ μ΄λ€μ μ°μ°μ΄ λ―ΈμΉλ μν₯μ μ 체μ μΌλ‘ νμ
νκΈ° μ½μ§ μμ νλ‘κ·Έλ¨ μμ±μ΄ μ΄λ €μ΄ λ¨μ μ 극볡νκΈ° μν΄ λͺ¨λν° λ°©λ²μ΄ νμνλ€.
- μΈλ§ν¬μ΄μ λΉμ·ν κΈ°λ₯μ νμ§λ§ μ μ΄νκΈ°κ° μ©μ΄νλ€.
- νλ‘κ·Έλλ° μΈμ₯μ μ§μνλ€. μ¦, νλ‘κ·Έλ¨ λΌμ΄λΈλ¬λ¦¬ ννλ‘ μ§μνλ€.
- λ°μ΄ν°μ μ΄λ€ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ νλ‘μλμ΄μ μ§ν©μ΄λ€. (κ°μ²΄μ§ν₯ κ°λ )
- λͺ¨λν° λ΄μ λ°μ΄ν°λ λͺ¨λν° λ΄λΆμ μν΄μλ§ μ κ·Όμ΄ κ°λ₯νλ―λ‘ λͺ¨λν° μΈλΆμ νλ‘μΈμ€λ μ κ·Όν μ μμ΄ μ 보 μν(Informaiton Hiding)λΌκ³ λ νλ€. (κ°μ²΄μ§ν₯ κ°λ )
β λͺ¨λν° μ¬μ©
λͺ¨λν° κ΅¬μ‘°
- νλμ νλ‘μΈμ€κ° λͺ¨λν° λ΄λΆμ λ¨Έλ¬Όλ¬ μμΌλ©΄, λ€λ₯Έ νλ‘μΈμ€μ μ§μ μ νμ©ν μ μμΌλ―λ‘ λ€λ₯Έ νλ‘μΈμ€λ λͺ¨λν° λ°μμ signal()μ΄ μκΈ°κΉμ§ λκΈ°ν΄μΌ νλ€.
- λκΈ°ν κΈ°λ²μ΄ νμνλ€λ©΄ νλ‘κ·Έλλ¨Έλ 쑰건 λ³μλ₯Ό μ μΈνμ¬ ν΄κ²°νλ€.
- condition xμ λνμ¬ x.wait()μ x.signal()μ΄ μ΄μ©λλ€.
- 쑰건 λ³μμμ νΈμΆλ μ μλ μ°μ°μ waitμ signalμ΄λ€.
μ°μ° : x.wait() or wait(x)
x.wait() or wait(x) μ°μ°μ νΈμΆνλ νλ‘μΈλ λ€λ₯Έ νλ‘μΈλ₯Ό λ€μ μ°μ°μ΄ νΈμΆλ λκΉμ§ μ€λ¨μν¨λ€. μΈλ§ν¬μ΄μ Pμ°μ°κ³Ό μ μ¬νκ³ , xλ μΈλ§ν¬μ΄μ Sμ μ μ¬νλ€.
μ°μ° : x.signal() or signal(x)
x.signal() or signal(x)μ μ€λ¨λ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ¬κ°μν¨λ€. μΈλ§ν¬μ΄μ Vμ°μ°κ³Ό μ μ¬νλ€.
νν λ²νΌμμ μμ°μ/μλΉμ λ¬Έμ μ λν λͺ¨λν° μ¬μ© μμ

(7) Message
- νλ‘μΈμ€ κ°μ ν΅μ λ° λκΈ°νμ μ ν©ν λΉκ΅μ λ¨μν λ©μ»€λμ¦μ΄λ€.
- 곡μ λ³μλ₯Ό μ΄μ©ν λ°©λ²μ 곡μ λ³μμμ λ³λͺ©νμ λ¬Έμ κ° λ°μν μ μκ³ , 곡μ λ³μ νκ΄΄ μ μμ€ν μ±λ₯μ νμ ν μ ν λ¬Έμ κ° λ°μνμ¬ μ΄μ νλ‘μΈμ€ κ° μ§μ ν΅μ μ ν΅νμ¬ μνΈ κ°μ μμλ₯Ό μ νμ¬ λκΈ°νλ₯Ό ν΄κ²°νκ³ μ νλ€.
- λ©μμ§μ μ μλ μ‘μ μΈ‘ νλ‘μΈμ€μ μμ μΈ‘ νλ‘μΈμ€ κ°μ κ΅νλ μ μλ μ 보μ μ§ν©μ΄λ€.
- λΆμ° OSμμ λ©μμ§ λ©μ»€λμ¦μ μ¬μ©μ΄ 보νΈν λμ΄ μλ€.
λ©μμ§ νμ
μ‘μ μΈ‘ λ° μμ μΈ‘ μλ³μ(identifier)κΈΈμ΄, νμ(type), dataλ‘ κ΅¬μ±λλ€.
λ©μμ§ λ°μ μ κ³ λ €μ¬ν
naming λ¬Έμ : λ©μμ§ κ΅νμ κ΄κ³λλ ν΄λΉ νλ‘μΈμ€λ€μ΄ μλ νλ‘μΈμ€λ₯Ό μ€μ νλ λ°©λ²μ κ²°μ νλ€.
μ§μ λ€μ΄λ°κ³Ό κ°μ λ€μ΄λ° λ°©μμ λ κ°μ§ ννκ° μ‘΄μ¬νλ€.
β€ μ§μ Naming Method
- μ‘μ μΈ‘(sender)μ΄ νΉμ μμ μΈ‘(recipient)μ μ€μ ν΄μΌ νκ³ , λ°λλ‘ λ©μμ§ μμ μ ν¬λ§νλ μμ μΈ‘μ μ‘μ μΈ‘μ μ€μ νλ€.
- μΌλμΌ ν΅μ κ΄κ³λ‘ μΈνμ¬ λ³΄λ€ μμ νκ³ νμ€ν λ©μμ§ ν΅μ μ΄ κ°λ₯νλ€.
process A;
..
send(B, message); //Aκ° Bμκ² λ©μμ§λ₯Ό 보λ΄κ² λ€.
..
process B;
..
receive(A, message); //Bκ° Aλ‘λΆν° λ©μμ§λ₯Ό λ°κ² λ€.
..
β€ κ°μ Naming Method
- λ©μμ§κ° νΉμ λͺ©μ λ§μ μνμ¬ μ¬μ©λλ μμμ μ‘μ λκ³ , κ·Έ μμμμ λ€λ₯Έ λ©μμ§λ μμ νλ λ°©μμΌλ‘ νΉμ μμμ μ°νΈν¨(mailbox)μ΄λΌκ³ λΆλ₯Έλ€.
- λͺ¨λ νλ‘μΈμ€ κ°μ λ©μμ§ κ΅νμ μ΄ μ°νΈν¨μ ν΅νμ¬ μνλλ€.
- μ‘μ μΈ‘κ³Ό μμ μΈ‘ κ°μ μΌλμΌ, μΌ λ λ€μ, λ€μ λ μΌ, λ€μ λ λ€μμ ν΅μ κ΄κ³κ° κ°λ₯νλ€λ μ μμ λ§€μ° μ μ©νλ€.
process A;
..
send(mailbox1, message);
..
process B;
..
receive(mailbox1, message);
..
β λ©μμ§ λ°©μμμμ κ³ λ €ν΄μΌ ν μ¬ν
볡μ¬(Copying) λ¬Έμ
- μ 체 λ©μμ§λ₯Ό μμ μΈ‘μ μ£Όμ 곡κ°μ 볡μ¬νμ¬ λκ±°λ, λλ λ νλ‘μΈμ€ κ°μ λ©μμ§μ λν ν¬μΈν°λ₯Ό λ¨μν μ λ¬ν¨μΌλ‘μ¨ ν΄κ²°νλ€.
- ν νλ‘μΈμ€μμ μ€λ₯κ° λ°μνλλΌλ μ΄λ‘ μΈνμ¬ λ©μμ§μ μ§μ 볡μ¬λ³Έλ§μ΄ μμλλ€.
- μ‘μ μΈ‘ νλ‘μΈμ€μ λ²νΌμ λ©μμ§ λ³΅μ¬, μμ μΈ‘ νλ‘μΈμ€μ λ²νΌμ λ©μμ§ λ€μ 볡μ¬νλ€.
- λ¨μ μ λ©μμ§ λ³΅μ¬κ° κΈ°μ΅μ₯μΉμ CPUμ μ¬μ΄ν΄μ λλΉνλ€.
λ²νΌλ§(Buffering) λ¬Έμ
- μμ μ μν μ€λΉκ° λμ΄ μμ§ μμ κ²½μ° μ‘μ μΈ‘μ λ©μμ§λ₯Ό μΌλ¨ λ²νΌμ μ‘μ (μ μ₯)νκ³ λμ€μ μμ μΈ‘μ΄ μ€λΉλλ©΄ κ·Έ λ μ μ‘λλ€.
- λΉλκΈ°μ ν΅μ μ κ°λ₯νκ² νκΈ° μν΄μλ λ²νΌλ§ λ°©μμ΄ νμνλ€.
- μμ μΈ‘ μν©μ κ΄κ³μμ΄ μμ μ μ€νμ κ³μν μ μλ κ³Όμ μ “set and forget” μ΄μμ΄λΌ νλ©°, μ΄λ μμ€ν λ³νμ±μ μ λλ₯Ό ν₯μμν¨λ€.
κΈΈμ΄(Length) λ¬Έμ
- λ©μμ§μ κΈΈμ΄λ₯Ό κ³ μ μ μΌλ‘ ν κ²μΈμ§ λλ κ°λ³μ μΌλ‘ ν κ²μΈμ§λ₯Ό κ²°μ νλ€.
- κ³ μ κΈΈμ΄ λ©μμ§: ꡬνμ΄ μ©μ΄νλ, λ²νΌμ ν¬κΈ°μ λΉνμ¬ λ©μμ§κ° μμ κ²½μ° λ²νΌμ λλΉλ₯Ό μ΄λνλ©°, λ°λλ‘ λ©μμ§κ° ν΄ κ²½μ°μλ λ©μμ§λ₯Ό λΆν νμ¬ μ μ‘ν΄μΌ νλ λ¬Έμ μ μ΄ μλ€.
- κ°λ³κΈΈμ΄ λ©μμ§: λμ μΌλ‘ λ²νΌλ₯Ό μμ±νλ κ²μΌλ‘ ꡬνμ΄ λ³΅μ‘νκΈ°λ νλ λμ μ μλ ₯μ κ°μ§λ€.
'π CS & Infra > Operating System' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [OS] 09. μ 보 λ³΄νΈ λ° λ³΄μ (0) | 2023.10.16 |
|---|---|
| [OS] 08. κ΅μ°©μν (Deadlock) (0) | 2023.10.16 |
| [OS] 06. νμΌ μμ€ν (0) | 2023.10.16 |
| [OS] 05. λμ€ν¬ μ€μΌμ€λ§ (0) | 2023.10.16 |
| [OS] 01. μ΄μ체μ μκ° (2) (0) | 2023.10.16 |