반응형
KOCW에서 제공하는 경성대학교 양희재 교수 운영체제 강의를 듣고 정리한 글 입니다.
1. 세마포어
1) 세마포어 구조
class Semaphore {
int value; // number of permits
Semaphore(int value) {
...
}
void acquire() {
...
}
void release() {
...
}
}
// acquire
void acquire() {
value--;
if (value < 0) {
// aquire 되면 세마포 큐에 들어가고, block 됨
add this process / thread to list;
block;
}
}
// release
void release() {
value++;
if (value <= 0) {
remove a process P from list;
wakeup P;
}
}
value : number of permit
2) 세마포어 사용
(1) 상호 배타 mutual exclusion
: 오직 한 쓰레드만 진입
// value=1이면 Parent/Child 중 1개만 들어올 수 있음.
sem.value = 1;
sem.acquire();
//Critical-Section
sem.release();
(2) Ordering
특정 프로세스를 먼저 실행되도록 하는 경우
// S1을 S2보다 먼저 실행하고싶은 경우
sem.value = 0;
/*P2*/
sem.acquire();
//S2;
//-
/*P1*/
//-
//S1;
sem.release();
/*
(1) P1 먼저 실행 시 S1먼저 실행됨 (O)
(2) P2 먼저 실행 시 aquire() 때문에 block되어 S2실행 못함.
시간 지나 P1으로 차례 넘어간 경우 S1실행, P2 release() 되어 S2 실행됨. (O)
*/
은행계좌 문제, 세마포어 자세히
https://almighty-denver.tistory.com/276
728x90
반응형
'CS > OS' 카테고리의 다른 글
[운영체제] 동기화 예제 1) 생산자-소비자 문제 (0) | 2024.12.11 |
---|---|
[운영체제] 6. 동기화 문제 (0) | 2024.12.11 |
[운영체제] 5. 은행 계좌 문제 (임계 구역 문제, 세마포어) (0) | 2024.12.11 |
[운영체제] 3-5주차. 프로세스 관리(스케줄링, 동기화) (0) | 2024.12.10 |
[운영체제] 2. 운영체제의 개요, 역사, 현대의 운영체제 (0) | 2024.12.10 |