목록분류 전체보기 (248)
S E P H ' S
메모리는 CPU 자원만큼 컴퓨터를 사용하는데 매우 중요한 자원 중 하나이다. 이전에는 운영체제에서 CPU 자원을 관리하는 프로세스 관리에 대해 살펴보았고, 지금부터는 메인 메모리를 관리하는 기능에 대해 살펴볼 것이다. 특히 과거에는 메모리가 매우 비싼 자원이었고 크기 또한 작아 운영체제에서 메모리에 대한 관리가 지금보다 더 중요했었다. 현재는 과거보다 훨씬 큰 메모리를 저렴하게 사용하지만, 지금도 메모리는 부족하다. 메모리가 커진 만큼 프로그램의 크기와 처리하는 데이터의 크기는 그보다 더욱 빠른 속도로 커져왔다. 그러므로 현재에도 여전히 메모리를 최대한 효율적으로 사용하기 위해 여러 방법들이 연구되고 있고, 운영체제 기능에서도 매우 중요한 위치를 차지하고 있다. 1. 메모리에 프로그램 할당하기 메모리는 ..
세마포는 매우 오래된 동기화 도구다. 현재는 모니터(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 라는 저장 공간(메모리 공간)에 저장해두고 소비자는 여기서 필요한 만큼 가져간다. 버퍼의 크기는 현실적으로 유한하..