OS는 갈수록 범위가 누적이 된다.. 미리미리 해놓지 않으면 나중엔 감당이 안될듯.
주말 내내 푹 쉬다가 이제서야 포스팅을 하다니. 나도 참 게으르다.
1. Process Synchronization
프로세스(쓰레드)의 동기화는 크게 세 가지 방법이 있다.
1) S/W적 동기화
2) H/W적 동기화
3) Semaphore
S/W적 동기화 방법은 해당하는 알고리즘이 다 나와있다.
피터슨의 알고리즘과 데커의 알고리즘, 그리고 램포트의 빵집 알고리즘까지.
약 7가지 정도 된다.
그에 해당하는 알고리즘들은 시간나면 올리겠음.
H/W적 동기화 방법에는 세 가지가 있는데, 인터럽트, TAS, Swap이 그것이다.
인터럽트적인 방법으로는 인터럽트를 비활성화 시키는 것인데, 하나의 쓰레드가 동작할 때 다른 쓰레드가 끼어들지 못하도록 하는 것이다. 하지만 요즘은 많이 안 쓰인다.
swap은 favored 값 바꾸는 것을 H/W적으로 해결하는 것이다.
그렇다면 남은 것은 한가지. 세마포어.
세마포어는 단순한 인테저형 변수 S를 뜻한다. 하지만 이것은 프로세스 동기화를 구현하는데 아주 중요한 역할을 한다.
세마포어를 사용하기 위해서는 Atomic Function을 만든다. P와 V의 두가지 함수를 만들어 처리를 하는데
자세한 세마포어 알고리즘은 다음과 같다.
P(s)
while (s<=0)
do no-op;
s--;
V(s)
s++;
프로세스를 놓고 보면,
Ti(Pi)
p(mutex);
CS
v(mutex);
RS
그렇다면 이 세마포어는 어떻게 프로세스를 동기화 시킬까?
먼저, P(s)에서 세마포어 변수가 s에 1이 들어간다고 가정함.
'공대남자 > 프로그래밍' 카테고리의 다른 글
[LabVIEW] 스트링 이어 붙이기, 정수 카운트 (0) | 2010.05.13 |
---|---|
데이터베이스 개론 기본개념 정리 (0) | 2010.05.03 |
쓰레드를 이용한 서버/클라이언트 소켓 프로그램 (2) | 2010.04.01 |
프로세스 동기화 시험전 잠깐 정리 (0) | 2010.03.31 |
운영체제 - 멀티 프로세스 생성하고 실행하는 프로그램 (0) | 2010.03.20 |