reader-writer 문제에서 한쪽을 선호하는 방향으로 구현하는 것은 reader를 선호하는 방법과 writer를 선호하는 방법이 존재한다. 먼저 reader prefer 를 살펴보자. reader prefer는 대기하는 reader가 없을 때서야 writer가 출력될 수 있다. 따라서 writer의 mutex를 reader가 가지고 있다가, 실행중인(또는 대기중인) reader의 개수가 0이 될 때 놔준다. reader-prefer : reader while (alive) { pthread_mutex_lock(&mutex); read_count++; if(read_count == 1){ pthread_mutex_lock(&wmutex); } pthread_mutex_unlock(&mutex); //..
OS
뮤텍스는 락 획득을 시도한 순서대로 접근이 가능한 FIFO 형식으로 작동한다. reader는 동시에 출력이 가능하지만, writer는 동시 출력이 불가하기에 출력중인 reader가 있다면 writer의 출력은 막아준다. 동시에, 대기중인 writer가 있다면 reader는 접근하면 안된다. 따라서 뮤텍스 3개를 사용하여 구현할 수 있었다. Reader while (alive) { pthread_mutex_lock(&mutex); pthread_mutex_lock(&rmutex); read_count++; if(read_count == 1){ pthread_mutex_lock(&wmutex); } pthread_mutex_unlock(&rmutex); pthread_mutex_unlock(&mutex); ..
Page Replacement 페이지 폴트 서비스 루틴을 수정해서 메모리의 과다 할당을 방지 modify bit를 사용해서 페이지 전송의 오버헤드를 줄인다. (수정된 페이지만 디스크에 기록) 페이지 교체는 논리적 메모리와 물리적 메모리 간의 분리를 완료시킨다. (작은 물리적 메모리에서도 큰 가상 메모리 제공) 1. 디스크에서 원하는 페이지의 위치를 찾는다. 2. 빈 프레임을 찾는다. - 존재하면 해당 프레임을 사용! - 없으면 페이지 교체 알고리즘을 사용해서 대상 프레임을 선택한다. 변경된 프레임(victim)이 있다면 디스크에 기록한다. 3. 원하는 페이지를 빈 프레임에 가져와서 페이지와 프레임 테이블을 업데이트한다. 4. 트랩을 일으킨 명령을 다시 시작하여 프로세스를 계속 진행한다. 프레임 할당 알고..
전체 프로그램이 메모리에 있어야 실행될 수 있지만, 전체 프로그램이 동시에 사용되는 경우는 드물다. 따라서 전체 프로그램 코드가 동시에 필요하지 않아, 부분적으로 로드된 프로그램을 실행하는 기능을 고려할 수 있다. 이렇게 하면 프로그램은 물리적 메모리의 제약을 받지 않게 되고, 실행중인 각 프로그램이 더 적은 메모리를 차지하게 되므로 동시에 더 많은 프로그램을 실행할 수 있다. 이는 CPU 이용률과 처리량을 늘리고, 응답 시간이나 완료 시간을 늘리지 않으면서 메모리에 프로그램을 로드하거나 교체하는 데 필요한 I/O를 줄일 수 있다. Virtual Memory 가상 메모리는 사용자의 논리 메모리와 물리 메모리의 분리를 의미한다. 실행을 위해 프로그램의 일부만 메모리에 있으면 되므로, 논리 주소 공간은 물리..
Shared Pages Shared Code - 여러 프로세스에서 공유되는 읽기 전용 코드의 한 복사본 - 여러 스레드가 동일한 프로세스 공간을 공유하는 것과 유사하다. - 읽기-쓰기 페이지의 공유가 허용된다면 프로세스간 통신에도 유용하게 사용 가능 (OS에 따라, Shared Page를 사용해서 Shared Memory를 구현하는 경우도 있다) Private Code and data - 각 프로세스는 코드와 데이터의 별도 복사본을 유지한다. - 개인 코드와 데이터를 위한 페이지들은 논리적 주소 공간 어디에든 나타날 수 있다. two-level paging 32비트 아키텍처에서 앞서 다룬대로 페이지 테이블을 만들면, 페이지의 크기가 4KB일 때 페이지 테이블은 각각 4MB가 된다. two-level pa..
프로그램이 실행되기 위해서는 디스크에서 메모리로 가져와 프로세스 내에 배치돼야한다. 주 기억장치와 레지스터는 CPU가 직접 액세스 할 수 있는 유일한 저장 공간이다. 레지스터 액세스는 CPU클록 안에 이루어지며, 주 기억 장치는 여러 사이클을 소요할 수 있고, 이로 인해 지연이 발생할 수 있다. 캐시는 주 기억장치와 CPU 레지스터 사이에 위치하여 데이터 접근 속도를 향상시킨다. 메모리 장치는 주소의 읽기 요청 또는 주소의 데이터 및 쓰기 요청의 연속으로 작업한다. 메모리의 보호는 올바른 동작을 보장하기 위해 필요하다. Protection 프로세스의 주소 공간은 프로세스가 접근할 수 있는 주소 범위를 나타낸다. 운영체제는 프로세스가 할당받은 주소 공간 외의 영역에 접근하는 것을 방지해서 메모리 보호를 제..
시스템 모델 시스템은 리소스로 구성되며, 리소스 유형(CPU 사이클, 메모리 공간, 입출력 장치 등) R1, R2 ... Rm이 존재한다. 각 리소스 유형 Ri는 Wi개의 인스턴스를 갖는다. 각 프로세스는 리소스를 요청-사용-해제 로 사용한다. 데드락 in 멀티스레드 프로그램 데드락은 스레드 1이 first_mutex를 확보하고, 스레드가 2가 second_mutex를 확보할 때, 스레드 1이 second_mutex를 기다리고 동시에 스레드 2가 first_mutex를 기다릴 때 발생할 수 있다. 라이브락은 데드락처럼 스레드가 멈추진 않았지만 계속 시도해도 진행이 안되는 경우에 발생한다. 데드락은 네 가지 조건이 동시에 성립할 때 발생한다. (필요조건) 상호배제(Mutual exclusion): 한 번에..
Real-Time CPU Scheduling Event latency : 이벤트가 발생한 시점부터 해당 이벤트를 처리하는데 걸리는 시간 실시간 시스템의 성능에 영향을 미치는 두 가지 유형의 대기시간이 있다. - interrupt latency : 인터럽트가 발생한 시점부터 해당 인터럽트를 처리하는 루틴이 시작되는 데까지 걸리는 시간 - dispatch latency : 현재 프로세스를 CPU에서 제거하고 다른 프로세스로 전환하는데 걸리는 시간 Dispatch Latency 1. 커널 모드에서 실행중인 프로세스의 선점(preemption) : 기존 프로세스를 실행중이던 CPU에게 그 실행을 중지시킴 2. 낮은 우선순위 프로세스가 높은 우선순위 프로세스가 필요로 하는 자원을 해제(release)하는 것. ..