KOCW에서 제공하는 경성대학교 양희재 교수 운영체제 강의를 듣고 정리한 글 입니다.
3-7주차. 프로세스 관리(스케줄링, 동기화)
3-7주차. 프로세스 관리(스케줄링, 동기화)
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/275
2. 전통적 동기화 문제
- 1) 생산자-소비자 문제 Bounded Buffer Problem
- 2) 공유 데이터베이스 접근 Readers-Writers Problem
- 3) 식사하는 철학자 문제 Dining Philosopher Problem
1) 생산자-소비자 문제 Bounded Buffer Problem
(1) 생산자-소비자 문제
- 생산자 프로세스가 데이터를 생산하면 소비자 프로세스는 그것을 소비한다.
- -> 버퍼는 생산자와 소비자가 모두 접근하는 임계 구역인 셈이다.
- -> 세마포어를 사용해서 상호 배제로 문제를 해결할 수 있다.
- 예) 컴파일러(생산) > 어셈블러(소비), 파일 서버(생산) > 클라이언트(소비), 웹 서버(생산) > 웹 클라이언트(서버)
세마포어를 사용해 임계구역 문제를 해결했고,
세마포어 2개를 추가해 busy wait 문제를 해결했다.
2) 공유 데이터베이스 접근 Readers-Writers Problem
3) 식사하는 철학자 문제 Dining Philosopher Problem
(1) 식사하는 철학자 문제
동기화 문제 해결하다보니 교착 상태 발생했다.
(2) 교착 상태
교착 상태란?
: 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
교착상태 필요 조건
- Mutual exclusion (상호배타)
- Hold and wait (보유 및 대기)
- No Preemption (비선점) : 자원 할당 받으면 스스로 반납할 때 까지 자원 사용하도록 허용 (뺏지 않음)
- Circular wait (환형대기) (자원 할당도 상에 원이 만들어짐)
- -> 이 네 조건을 다 만족하면 교착상태가 발생할 수도있다.
자원 할당도란?
어떤 자원이 어떤 프로세스에게 할당되었는가?
어떤 프로세스가 어떤 자원을 할당 받으려고 기다리고 있는가?
자원: 사각형, 프로세스: 원, 할당: 화살표
- 자원할당도에서 알 수 있는것
- R1에 점 : 리소스 1개이다.
- R1->P2 : P2가 R1 사용중이다.
- P2가 R1 사용하려고 요청중이다.
자원 할당도란?
- 아래 두가지를 나타낼 수 있는 방법
- 어떤 자원이 어떤 프로세스에게 할당되었는가?
- 어떤 프로세스가 어떤 자원을 할당 받으려고 기다리고 있는가?
데드락이 일어났을 때 자원 할당도
데드락이 일어나지 않게 하는 방법
: 교착상태 필요조건 중 하나라도 만족시키지 않으면 된다.
환형 대기를 깨는 방법
짝수번 프로세스는 왼, 오른쪽 들기,
홀수번 프로세스는 오, 왼쪽 들기
이렇게 바꾸면 환형 대기가 생기지 않는다.
요약
운영체제에서 제일 중요한 작업 : 프로세스 관리
-> CPU 스케줄링, 프로세스(쓰레드)동기화( : 프로세스들이 자원 공유하고 영향주고 받으므로 중요)
프로세스 동기화에서 중요한 문제 : 임계구역, Bisy wait, Ordering.. -> 이런 문제 해결하다보니 교착상태 발생함.
'CS > OS' 카테고리의 다른 글
[운영체제] 동기화 예제 1) 생산자-소비자 문제 (0) | 2024.12.11 |
---|---|
[운영체제] 은행 계좌 문제 (세마포어) (0) | 2024.12.11 |
[운영체제] 2. 운영체제의 개요, 역사, 현대의 운영체제 (0) | 2024.12.10 |
[Linux] 유용한 명령어 모음 (0) | 2024.03.05 |
[Linux] VM Root Directory Extend (1) | 2024.03.05 |