전체 글
-
[OS] Deadlock handling (2)운영체제 2020. 11. 29. 18:59
Deadlock 이 발생하도록 놔두고 탐지한 뒤 복구하는 방법 Deadlock detectionSingle instance resource wait-for 그래프를 통해 탐지 Resource allocation graph 에서 리소스를 제거하여 프로세스간의 의존 관계를 표현한 뒤 cycle 을 찾음 Serveral instances resource Work = Available allocation[i] 가 0 이면 Finish[i] = true, 0이 아니면 Finish[i] = false : Deadlock 여부를 판단할 때 hold and wait 특성에 의해 자원을 갖고 있지 않은 프로세스에 대해 체크하는 것은 무의미 하기 때문 Finish[i] == false 이면서 Request[i]
-
[OS] Deadlock handling (1)운영체제 2020. 11. 29. 18:58
Deadlock handling Deadlock 이 발생하지 않도록 막는 방법 Deadlock prevention 직접적으로 4가지 조건을 막는 방법. 장치 사용률/시스템 처리량 저하 Mutual exclusion : 공유 가능한 자원은 배타적 접근을 요구하지 않음 (공유해야 되는것만 공유하자) Hold and wait : 이미 공유 자원을 점유한 프로세스는 다른 자원을 요청할 수 없음 프로세스 실행 시 모든 자원을 할당 받은 뒤 실행 : 낮은 자원 이용률 이미 가진 자원을 release 한 상태에서만 요청 가능 : Starvation 발생 가능 A 를 가지니 B가 필요하고, B를 위해 A를 해제하니 A가 다시 필요해져서 무한히 반복.. No preemption : 이미 공유 자원을 점유한 프로세스가 즉..
-
[OS] Deadlock 과 Resource allocation graph운영체제 2020. 11. 29. 18:57
Deadlock Deadlock : 아무것도 하지 못하고 서로 대기하는 상황 Livelock : 뭔가 하고는 있는데(busy wait) 의미가 없는것 Resource 의 종류 CPU cycles, memory space, I/O devices, mutex lock, semaphore 등 유형 Single instance : 리소스에 가용한 인스턴스가 1개 뿐인 것 Multiple instance Deadlock 특성 Mutual exclusion : 어떤 리소스에 대해 한 순간에 하나의 프로세스만 접근할 수 있음 Hold and wait : 프로세스가 어떤 리소스를 갖고 있는데 다른 리소스를 추가로 요청 No preemption : 리소스들이 선점을 허용하지 않음 Circular wait : 위 세 가지..
-
[OS] Monitor, Condition variable(조건변수)운영체제 2020. 11. 28. 04:45
Monitors 공유 자원의 접근을 Monitor 객체 내부에서만 할 수 있게 제한을 둠 ( C/C++ 은 지원하지 않고, java 가 주로 모니터 기법을 사용) Condition variable(조건변수) mutex 간의 순서를 보장하기 위함 조건변수 x, y 를 정의 x.wait() : 이 함수를 호출한 프로세스는 대기 x.signal() : 대기중인 프로세스가 있다면 x.wait() 를 호출한 프로세스 중 하나가 실행됨. 대기중인 프로세스가 없다면 아무일도 일어나지 않음 Semaphore 의 signal() 이 항상 S++ 을 하여 그 상태에 영향을 주는것과는 다름 Signal 을 보낸다는 것은 해당 프로세스가 Lock 을 얻었음을 의미 Signal and wait : signal 을 주고, 내가 ..
-
[OS] Mutex, Semaphore 동기화, Busy waiting운영체제 2020. 11. 28. 04:42
Mutex Locks OS 가 Critical section 문제를 해결하기 위해 가장 간단하게 제공하는 솔루션임 Atomic 하게 수행되는 acquire(), release() 함수를 통해 이를 수행함 acquire() = Lock 을 얻어 C.S.에 접근하는 함수 release() = C.S. 작업을 모두 마쳐 Lock 을 해제하는 함수 단점 : busy waiting ( = Lock 을 얻을 때까지 의미 없이 접근을 시도하는 것. 이러한 Lock 을 spinlock 이라함) Semaphore Mutex lock 은 자원의 개수가 여러개 일 때에도 하나의 스레드만 접근을 허용하는데 세마포어는 개수까지 고려하여 N개의 프로세스가 동시에 접근할 수 있도록 함 wait(), signal() 함수를 통해 구..
-
[OS] Critical section (임계구역), test_and_set, compare_and_swap운영체제 2020. 11. 28. 04:40
Critical Section(임계 구역) 두 개 이상의 thread 가 동시에 접근하면 안되는 영역을 말함. 여러 스레드가 동시에 공유 자원에 접근하고, 이에 수정을 가하는 경우 원하지 않는 결과가 도출될 수 있기 때문에 정의된 영역임 while (true) { } Critical section 문제를 잘 해결하지 않으면 서로 다른 프로세스에서 fork() 함수가 동시에 호출되었을 때 두 프로세스가 동시에 Process descriptor 로부터 pid 를 할당받게되고, 둘이 같은 pid 를 할당 받을 수도 있음 Critical section 문제의 해결을 위한 조건 Mutual exclusion(상호배제) : 한 프로세스가 임계 구역을 수행하고 있다면 다른 프로세스 그 누구도 임계 영역을 수행할 수 ..
-
[OS] 동기화와 Race condition운영체제 2020. 11. 28. 04:35
Synchronization Producer : 데이터를 제공하는 스레드 ( 예를 들어 무한 반복하며 counter++; 하는 스레드) Consumer : 데이터를 소비하는 스레드 ( 무한 반복하며 counter--; 하는 스레드) 멀티 스레드 환경에서는 counter 라는 공유 변수에 동시에 접근하여 예상하지 못한 결과가 발생하곤 함 Race condition 공유 데이터에 여러 프로세스가 동시에 접근하려고 하는 상황 Race condition 이 발생하는 순간 데이터의 consistency 가 깨졌다. 라고 표현하며 이 경우 Synchronization(동기화) 를 제공해주어야함 예를 들어 counter 가 0 일 때 producer 스레드가 6번 수행되고, consumer 스레드가 1번 수행된다면 ..