정의: 시스템을 동시에 작동시키기 위해 사건들을 조화시키는 것
여러 도메인에 걸쳐 상당히 자주 등장하는 개념이다.
현재 도메인은 프로세스.
프로세스의 동기화 정의: 여러 다른 프로세스들 간 사이의 동작을 올바르게 맞추기 위한 여러 방법
스레드의 동기화: 한 프로세스 내에 여러 스레드들 사이의 동작을 올바르게 맞추는 것
프로세스 동기화를 통해서 하려는 일: 실행 순서 제어, 상호 배제
실행 순서 제어: 프로세스가 동시에 실행되는 것 처럼 보이게끔 스케쥴링하는 것.
상호 배제: 이때 동시에 접근해서는 안되는 자원에는 접근 제한을 거는 것
결국 동시에 여러 프로세스를 굴리기 위해서는 <- 실행 순서 제어와 상호 배제를 구현해야하고 <- 그것들을 구현하는 방법이 == 프로세스 동기화 <- 그리고 그 동기화의 방법으로는 뮤텍스, 세마포어, 모니터 등이 있는 것.
총합이란 변수가 존재하고, 소비하다() 함수는 1을 빼고 총합을 갱신, 생상하다() 함수는 1을 더하고 총합을 갱신하는 간단한 로직이 있다 할때, 공유자원
을 건드리는 임계구역
이라는 개념을 가지고 있지 않으면 똑같이 반복문 100번 돌려 놓으면 총합은 10일거라고 착각 하게 된다. but 결과는 천차만별이다.
생산하다 소비하다를 각각 호출할때 아직 총합의 갱신이 이루어지지 않은채로 막 지가 알아서 지 멋대로 값을 갱신을 하다보면 마이너스까지 내려가기도, 혹은 +100 온전히 다 받아들일 수도 있기 때문이다.
공유자원은 이렇게 공동으로 사용하는 총합 같은 것이 공유 자원이고, 임계구역은 이런 공유자원을 건드리는 코드 영역을 임계구역이라고 함.
이런 경우 흔히 상호 배제를 구현하여 해결한다.
상호 배제 mutual exclusion: 어떤 프로세스가 임계구역을 실행중일땐 다른 모든 프로세스는 임계구역을 실행할 수 없다.
진행 progress: 임계구역을 아무도 실행중이지 않다면 프로세스는 진행할 수 있어야 한다.
유한 대기 bounded waiting: 상호 배제는 유한하게 유지되고 언젠가는 진행상태로 올수 있게 해야한다. (설사 앞선 프로세스가 다 마치지 못했다 하더라도 무한대기는 안된다.)
1️⃣ 동기화의 의미에 대한 설명 빈칸 채우기
( )를 위한 동기화: 프로세스를 올바른 순서대로 실행하기
더 보기( )를 위한 동기화: 동시에 접근해서는 안되는 자원에...
더 보기2️⃣ 임계 구역에 대한 설명 중 옳지 않은 것
직역하면 그냥 이게 상호배재락
기법이다.
lock변수, acquire(), release() 총 세 개의 핵심 동작으로 상호배재락을 구현
// mutual exclusion lock의 간단한 구성 조건
...
static boolean lock = false;
...
static void acquire(){
while(lock==true){
//대기
}
lock = true; //종료
}
static void release(){
lock= false;
}
...
//공유 자원을 사용하고 자 하는 매서드: acquire와 release()로 감싸는게 포인트
acquire(); //lock을 얻은 프로세스만 탈출
useSharedResource();//임계구역 사용하는 코드
release(); //임계구역을 성공적으로 사용했다면 lock=false로 반납
...
sema·phore
1.수기 신호 2.수기 신호로 알리다
결국 임계구역을 동시에 접근하는 것을 막기 위한 하나의 수단이고 이 방법은 뮤텍스락
과 크게 다르지 않지만, 몇가지 유의미한 차이가 있다.
그 전에 세마포를 이루는 개념 3가지. count변수(S변수), wait, signal
count : 동시에 접근 가능한 프로세스를 몇 개를 둘 지를 결정한다. 최소 값은 0 최대 값은 설정값이다. 만약 1이라면 뮤텍스락과 유사한, 동시에 한 작업만 가능한 자원으로 상호배제를 만족하게 되는거고, 2이상이라면 여러 작업이 사용해도 되는 자원이라는 의미
세마포에 대하여 구체적인 내용은 Operating Systems Concepts라는 심도 있는 책을 통해 보강할 예정이다. 현 책에 있는 내용으로는 의문점을 해결하지 못하였다.
동기화 툴의 향상된 개념이다. 공유자원을 사용하는 모든 연산에 인터페이스를 묶어서 관리한다. 공유자원 사용을 위한 대기 큐에 넣어놓고, 사용 할 수 있는 조건이 되었을때 poll하여 공유자원 상호배제를 수행함.
모니터 역시 나중에 더 심화를 다뤄야 겠다. 부족하다 소스가
1️⃣ 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것
2️⃣ 조건 변수 x와 y가 있다. 스레드 A는 실행 과정에서 x.wait을 호출. 스레드 B는 y.wait을 호출. 스레드 C가 y.signal을 호출하면 재개되는 스레드 명은?
더 보기3️⃣ 빈칸에 들어갈 말
세마포를 이용하면 동시에 실행되는 프로세스 혹은 스레드 간에 ()를 위한 동기화와 ()를 위한 동기화를 할 수 있다.
더 보기공용자원과 프로세스가 있을때 프로세스A를 수행하기 위해 공용자원 A, B가 필요하고 프로세스B를 수행하기 위해 공용자원 A,B가 필요할때 각각 하나씩 나누어서 집어들은 상태에서 무한 대기 상태가 걸려 아무것도 못하는 상태가 교착 상태.
아래 4가지 중 하나라도 조건에서 해제 된다면 교착 상태를 풀 수 있다.
1️⃣ 교착 상태에 대한 설명으로 옳지 않은 것?
2️⃣ 교착 상태 발생 조건 4가지 서술
더 보기3️⃣ 교착 상태가 발생할 위험이 있는 그래프의 특징
더 보기상호 배제: 동기화 방법을 통해 기껏 만든 상호 배제 때문에 교착 상태가 발생될 수 있다면, 그냥 애라 모르겠다. 아무렇게나 자원 동시에 막쓰게 풀어버리자. 그럼 교착 상태는 해방가능
점유와 대기: 프로세스를 진행할때 자원을 점유하고 나머지 자원이 도착할때까지 기다리는 상황이 점유와 대기인데, 점유와 대기를 하지 않게끔. 즉 프로세스가 자원을 사용할때 온전히 사용하게 하는 형태. 이렇게 되면 문제가 프로세스를 잘게 쪼개어 여러 프로세스가 동시에 동작하게끔 하는게 안된다. 점유와 대기가 안일어나면 즉 효율은 떨어진다. 또 자원 이용시간이 길어질 경우 자원 점유후 바로 해제해야하므로 영영 굶는 기아 상태에 빠질 수 있음
비선점: 선점을 아무나 막 할 수 있게 해버리면 크리티컬한 문제가 발생 할 수 있다. 예를들어 프린터기가 있을 수 있다. 프린터기 자원이 필요한 프로세스가 자신의 작업을 막 수행하려 할때마다 선점해서 사용해버리니 이상한 출력물이 나올 가능성이 매우 높다.
원형대기: 현실적인 예방
방법이다. 순환이 발생하는 구조를 차단시켜버린다. -> 즉 시작과 끝의 값을 매겨서 항상 번호가 앞순위의 자원만 추가로 대기할 수 있게 혹은 후순위의 자원만 추가로 대기할 수 있게 설정하는 방법
결국 prevention은 해결 방법중에서 가장 비효율적인 해결 방법이다.
교착 상태의 원흉: 한정된 자원 + 너무 많은 프로세스가 동시에 사용하려고 함.
회피: 프로세스들이 아무리 많아지더라도 한정된 자원을 안전하게 제공하자 -> 조심히 교착 상태에 빠지지 않게, 그러면서 동시에 최대한 효율적이고 균등하게 배분할 수 있도록 하자 -> 프로세스 요구 자원량에 대한 계산이 미리 필요
프로세스는 나는 어느정도 자원을 사용할거에요 미리 알려줘야하고,
운영체제는 프로세스가 표시한 자원량을 스캔하여 현재 스케쥴링된 프로세스들을 어떻게 관리하여 실행시킬지 데드락이 안걸리게 할지 생각을 해야함.
프로세스의 최대 자원 사용량 정보가 저장되는 장소: 운영체제 리소스 매니저
해당 정보들을 이용하여 데드락 회피 알고리즘을 계산 하는 주체: 운영체제 리소스 매니저
회피 알고리즘의 결과를 토대로 프로세스 스케쥴링을 결정하는 주체: 운영체제 스케쥴러
회피만으로 백프로 데드락을 방지 할 수 있는가? -> NO 왜냐하면, 사용량 정보보다 실제 사용량이 더 많아지는 경우 자체가 있을 수 있으며, 빡빡한 자원속에서 데드락 조건이 발생할 가능성은 충분히 있음
결국 회복 알고리즘으로 극복을 해야만 함.
일단 탐지 알고리즘에 대한 내용은 고급과정이라서 설명을 안하고 넘어간다
2가지 방식으로 교착 상태를 회복한다. 물론 현재 내용을 복구 하기 위한 체크포인트 개념도 있다고 하는데 설명하지 않고 넘어간다
1️⃣ 교착 상태를 회복하는 방법 틀린거
2️⃣ 아래 표 상태에서 P2에 자원 2개 나누어 줬다. 프로세스 P2가 실행 올바르게 종료한뒤 자원 반납 하면 남은자원은?
프로세스 | 요구량 | 현재 사용량 |
---|---|---|
P1 | 10 | 5 |
P2 | 4 | 2 |
P3 | 9 | 2 |
3️⃣ 교착 상태에 대한 대처 방법 중 타조 알고리즘 설명
4️⃣ 교착 상태 예방에 대한 설명으로 옳지 않은 것은?