μ°μ΅ λ¬Έμ
1. νλ‘μΈμ€ κ° ν΅μ μμ λ°μ΄ν°λ₯Ό μλ°©ν₯μΌλ‘ μ μ‘ κ°λ₯νμ§λ§ λμ μ μ‘μ λΆκ°λ₯νκ³ νΉμ μμ μ νμͺ½ λ°©ν₯μΌλ‘λ§ μ μ‘ν μ μλ ν΅μ λ°©μ?
- λ°μλ°©ν₯ ν΅μ
2. μν λ³νλ₯Ό μ΄ν΄λ³΄κΈ° μν΄ λ°λ³΅λ¬Έμ 무ν μ€ννλ©° κΈ°λ€λ¦¬λ κ²?
- λ°μ λκΈ° (busy waiting)
- μμ λλΉμ μμ
3. νλ‘μΈμ€ κ° ν΅μ μμ λκΈ°κ° μλ ν΅μ κ³Ό λκΈ°κ° μλ ν΅μ μ μ
- λκΈ° x : μ μ λ³μ, νμΌ λ°©μ
- λκΈ° o : νμ΄ν, μμΌ λ°©μ
4. νμ΄νλ₯Ό μ΄μ©νμ ν΅μ ν λ νμ΄νλ₯Ό 2κ° μ¬μ©νλ μ΄μ ?
- μλ°©ν₯ ν΅μ μ νκΈ° μν¨μ΄λ€.
- μλ‘ λ€λ₯Έ νλ‘μΈμ€κ° κ°κ° νλμ νμ΄νλ₯Ό μ½κ³ μ΄λ€.
5. 곡μ μμμ λ³νμ μΌλ‘ μ½κ±°λ μ°λ μν©?
- κ²½μ 쑰건 (race condition)
6. 곡μ μμμ μ κ·Ό μμμ λ°λΌ μ€ν κ²°κ³Όκ° λ¬λΌμ§λ νλ‘κ·Έλ¨μ μμ
- μκ³ κ΅¬μ (critical section)
7. μκ³κ΅¬μ ν΄κ²° 쑰건 μ€ ν νλ‘μΈμ€κ° μκ³κ΅¬μμ λ€μ΄κ°μ λ λ€λ₯Έ νλ‘μΈμ€λ μκ³κ΅¬μμ λ€μ΄κ° μ μλ 쑰건?
- μνΈ λ°°μ (mutual exclusion)
- μκ³κ΅¬μμλ ν λ²μ νλμ νλ‘μΈμ€λ§ μ‘΄μ¬ κ°λ₯.
8. μκ³ κ΅¬μ ν΄κ²° 쑰건 μ€ ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μ§νμ λ°©ν΄ν΄μλ μ λλ€λ 쑰건?
- μ§νμ μ΅ν΅μ± (progress flexibility)
9. μκ³ κ΅¬μ λ¬Έμ λ₯Ό νλμ¨μ΄μ μΌλ‘ ν΄κ²°ν λ°©μμΌλ‘, νλμ¨μ΄μ μ§μμ λ°μ λͺ λ Ήμ΄λ₯Ό μ€ννλ λμ€μ νμμμμ΄ κ±Έλ¦¬μ§ μλλ‘ νλ λ°©μ?
- κ²μ¬μ μ§μ (test - and - set)
- νΈλ¦¬ν λ°©μμ΄μ§λ§ busy waitμ μ¬μ©νλ―λ‘ μμμ λλΉκ° μλ€.
10. μΈλ§ν¬μ΄μ Semaphore(n)μμ nμ 무μμ κ°λ¦¬ν€λκ°?
- 곡μ κ°λ₯ν μμμ κ°μ
11. μΈλ§ν¬μ΄μμ λ΄λΆ λ³μλ₯Ό RSλΌκ³ ν λ μΈλ§ν¬μ΄ P()μ λ΄λΆ μ½λλ₯Ό μ°μμ€
if(RS>) {
then RS = RS - 1;
} else {
block();
}
12. μΈλ§ν¬μ΄μμ λ΄λΆ λ³μλ₯Ό RSλΌκ³ ν λ μΈλ§ν¬μ΄ V()μ λ΄λΆ μ½λλ₯Ό μ°μμ€
RS = RS + 1;
wake_up();
13. μΈλ§ν¬μ΄κ° μ λλ‘ μλνμ§ μλ κ²½μ°λ₯Ό μ€λͺ
- νλ‘μΈμ€κ° μΈλ§ν¬μ΄λ₯Ό μ¬μ©νμ§ μκ³ μκ³κ΅¬μμ λ°λ‘ λ€μ΄κ° κ²½μ°
- P()λ₯Ό λλ² μ΄μ μ¬μ©νμ¬ wake_up μ νΈκ° λ―Έλ°μν κ²½μ°,
νλ‘μΈμ€ κ° λκΈ°νκ° μ΄λ€μ§μ§ μμΌλ―λ‘ μΈλ§ν¬μ΄μ νμμ λκΈ°νλ νλ‘μΈμ€λ€μ 무ν λκΈ° μνκ° λλ€.
14. μΈλ§ν¬μ΄μ λ΄λΆ μ½λλ νμμμμ΄ κ±Έλ¦¬λ©΄ λ¬Έμ κ° λ°μν μλ μλ€. κ·Έλμ λ΄λΆ μ½λλ 무μμΌλ‘ 보νΈλ°λκ°?
- P(), V()μ λ΄λΆμ μ½λλ κ²μ¬μ μ§μ μ μ¬μ©ν΄μ λΆλ¦¬ μ€νμ λ°©μ§νλ€.
15. 곡μ μμμ λ΄λΆμ μΌλ‘ μ¨κΈ°κ³ 곡μ μμμ μ κ·ΌνκΈ° μν μΈν°νμ΄μ€λ§ μ 곡ν¨μΌλ‘μ¨ μμμ 보νΈνκ³ νλ‘μΈμ€ κ° λκΈ°νλ₯Ό μν€λ κ²μΌλ‘, μΈλ§ν¬μ΄μ λ¨μ μ ν΄κ²°νλ©΄μ μκ³κ΅¬μ λ¬Έμ λ₯Ό ν΄κ²°ν λ°©μ?
- λͺ¨λν°
μ¬ν λ¬Έμ
1. νλ‘μΈμ€ κ° ν΅μ μ ν΅μ λ°©ν₯μ λ°λΌ λΆλ₯νμ¬ μ€λͺ
- λ¨λ°©ν₯ ν΅μ
- ν λ°©ν₯μΌλ‘λ§ λ°μ΄ν° μ μ‘ κ°λ₯.
- μ μ λ³μμ νμ΄ν
- λ°μλ°©ν₯ ν΅μ
- μλ°©ν₯μΌλ‘ μ μ‘ κ°λ₯
- λμ μ μ‘ λΆκ°
- 무μ κΈ°
- μλ°©ν₯ ν΅μ
- λ°μ΄ν°λ₯Ό λμμ μλ°©ν₯μΌλ‘ μ μ‘ κ°λ₯
- μΌλ°μ μΈ ν΅μ ꡬ쑰
2. λκΈ°κ° μλ ν΅μ κ³Ό λκΈ°κ° μλ ν΅μ μ μλ―Έλ₯Ό μ€λͺ νκ³ μ μ ν μλ₯Ό μ μνμμ€.
- λ°μ λκΈ° (busy waiting)
- μν λ³νλ₯Ό μ΄ν΄λ³΄κΈ° μν΄ λ°λ³΅λ¬Έμ ν΅ν΄ 무ν μ€ννλ©° κΈ°λ€λ¦¬λ κ².
- λ°μ΄ν°κ° λμ°©ν¨μ μλ €μ£Όλ λκΈ°νλ₯Ό ν΅ν΄ ν΄κ²°
- μ¬μ©ν κ²½μ° μ΄μ 체μ κ° μμμ μλ €μ€λ€.
- λκΈ° O
- λκΈ°ν ν΅μ
- λκΈ°νλ₯Ό μ§μνλ ν΅μ λ°©μ
- λ°μ΄ν° λμ°©κΉμ§ λκΈ° μν
- νμ΄ν, μμΌ
- λκΈ° X
- λΉλκΈ°ν ν΅μ
- λ°μ΄ν° μμ μͺ½μ λ°μ λκΈ° μ¬μ©
- μ μ λ³μ, νμΌ
3. μ€μνμ μλ₯Ό λ€μ΄ μκ³κ΅¬μ λ¬Έμ λ₯Ό μ€λͺ
- μνκ΄ λμΌ μ’μ λμ μλ§€ μν©
4. λ€μ μ½λμ λ¬Έμ μ μ μ€λͺ
- μνΈ λ°°μ λ¬Έμ κ° λ°μνλ μ νμ μμ
- λ κ°μ νλ‘μΈμ€κ° κ°κ° whileλ¬Έμ μ€ννμ¬ μκ³ κ΅¬μμ μ§μ νλ μν©μ΄λ€.
5. λ€μ μ½λμ λ¬Έμ μ μ μ€λͺ
- μ§νμ μ΅ν΅μ± λ¬Έμ κ° λ°μνλ μ νμ μμ
- νλμ νλ‘μΈμ€κ° μκ³κ΅¬μμ λλ² μ§μ νκ³ μΆμ΄λ κ·Έλ¬μ§ λͺ»νλ€.
- μ°μ μμμ μλ―Έκ° μλ€.
6. νμΌμ μ΄μ©ν΄ TestλΌλ λ¬Έμλ₯Ό μ£Όκ³ λ°λ μ½λ μμ±
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
void main() {
int pid, fd;
char buf[5];
fd = open("test.txt", O_RDWR);
pid = fork();
if (pid < 0 || fd < 0)
exit(-1);
else if (pid == 0)
{
write(fd, "Test", 5);
close(fd);
exit(0);
}
else
{
wait(0);
lseek(fd, 0, SEEK_SET);
read(fd, buf, 5);
printf("%s", buf);
close(fd);
exit(0);
}
}
λ°μν