목록CS/OS (18)
S E P H ' S
세마포는 매우 오래된 동기화 도구다. 현재는 모니터(monitor) 라는 동기화 도구를 주로 사용하며 이는 좀 더 고수준의 동기화 기능을 제공한다. 1. 모니터 구조 위는 모니터 구조를 간단히 나타낸 그림이다. 모니터는 공유자원 + 공유자원 접근함수로 이뤄져 있고, 2개의 큐를 지니고 있다. 각각 Mutual Exclusion Queue(상호배제 큐), Conditional Synchronization Queue(조건동기 큐)이다. 상호배제 큐는 말그대로 공유자원에 하나의 프로세스만 진입하도록 하기 위한 큐이다. 조건동기 큐는 이미 공유자원을 사용하고 있는 프로세스가 특정한 호출 wait()을 통해 조건동기 큐로 들어갈 수 있다. 조건동기 큐에 들어가있는 프로세스는 공유자원을 사용하고 있는 다른 프로세스..
Deadlock(교착상태) 프로세스는 실행을 위해 CPU, 메모리, 파일 등 여러 하드웨어 자원이 필요하다. 이를 운영체제에서 적절히 분배한다. 그러나 다음과 같은 예를 들어보자. 한 프로세스가 A 자원을 점유한 상태에서 B 자원을 요청한다. 그런데 또 다른 프로세스가 B 자원을 요구하고 있다면 자원의 분배 순서가 잘못되고 교착상태에 빠지게 된다. 1. 교착상태 필요조건(Necessary Conditions) 교착상태가 일어나기 위한 필요 조건이 네가지가 존재한다. 이는 필요 조건이므로 반드시 교착상태가 일어나는 것이 아니라 일어날 확률이 생기는 것이다. 상호배제(Mutual Exclusion) : 한 프로세스가 자원을 사용하고 있다면, 다른 프로세스는 이 자원을 사용할 수 없다. (젓가락은 한 철학자가..
1. 전통적 동기화 예제(Classical Synchronization Problems) 1.1 Producer-Consumer Promblem 생산자-소비자 문제는 생산자가 데이터를 생산하면 소비자는 그 데이터를 소비하는 형태의 문제이다. 컴퓨터 환경에서 예를 보면, 컴파일러 -> 어셈블러, 웹서버 -> 웹 클라이언트 등이 있다. 컴파일러에서 생성한 어셈블리어는 어셈블러에서 이를 소비하여 기계어를 만든다. 생산자-소비자 관계를 간단히 그림으로 나타내면 위와 같다. 이 관계의 대부분은 생산자에서 생산한 데이터 양을 소비자가 한 번에 소비하는 경우는 드물다. 생산한 데이터는 중간의 Buffer 라는 저장 공간(메모리 공간)에 저장해두고 소비자는 여기서 필요한 만큼 가져간다. 버퍼의 크기는 현실적으로 유한하..
현대 컴퓨터의 메모리에는 여러 프로세스가 존재하는데, 이러한 프로세스들이 하나의 공유 메모리나 또 다른 프로세스에 접근할 때는 신중해야 한다. 이처럼 한 프로세스가 다른 프로세스에게 영향을 주고받는 프로세스를 Cooperating Process 라고 한다. 반대로 아무런 영향을 미치지 않는 독립적인 프로세스는 Independent Process 이다. 현대 컴퓨터 환경에는 Cooperation Process 가 훨씬 많이 존재한다. 이들은 서로 영향을 미치기 때문에 데이터나 흐름에 대한 동기화가 매우 중요하다. 프로세스 사이에 동기화 하는 것을 프로세스 동기화라고 하며 현재는 쓰레드 기준으로 스위칭을 하므로 Thread Synchronization으로 많이 불린다. 프로세스 동기화는 여러 프로세스가 공유..