Page Replacement 페이지 폴트 서비스 루틴을 수정해서 메모리의 과다 할당을 방지 modify bit를 사용해서 페이지 전송의 오버헤드를 줄인다. (수정된 페이지만 디스크에 기록) 페이지 교체는 논리적 메모리와 물리적 메모리 간의 분리를 완료시킨다. (작은 물리적 메모리에서도 큰 가상 메모리 제공) 1. 디스크에서 원하는 페이지의 위치를 찾는다. 2. 빈 프레임을 찾는다. - 존재하면 해당 프레임을 사용! - 없으면 페이지 교체 알고리즘을 사용해서 대상 프레임을 선택한다. 변경된 프레임(victim)이 있다면 디스크에 기록한다. 3. 원하는 페이지를 빈 프레임에 가져와서 페이지와 프레임 테이블을 업데이트한다. 4. 트랩을 일으킨 명령을 다시 시작하여 프로세스를 계속 진행한다. 프레임 할당 알고..
CS
전체 프로그램이 메모리에 있어야 실행될 수 있지만, 전체 프로그램이 동시에 사용되는 경우는 드물다. 따라서 전체 프로그램 코드가 동시에 필요하지 않아, 부분적으로 로드된 프로그램을 실행하는 기능을 고려할 수 있다. 이렇게 하면 프로그램은 물리적 메모리의 제약을 받지 않게 되고, 실행중인 각 프로그램이 더 적은 메모리를 차지하게 되므로 동시에 더 많은 프로그램을 실행할 수 있다. 이는 CPU 이용률과 처리량을 늘리고, 응답 시간이나 완료 시간을 늘리지 않으면서 메모리에 프로그램을 로드하거나 교체하는 데 필요한 I/O를 줄일 수 있다. Virtual Memory 가상 메모리는 사용자의 논리 메모리와 물리 메모리의 분리를 의미한다. 실행을 위해 프로그램의 일부만 메모리에 있으면 되므로, 논리 주소 공간은 물리..
pipelined datapath 의 두 가지 키포인트 1. 어떤 것을 한 단계에서 다른 단계로 전달하려면, 파이프라인 레지스터에 넣어야 한다. - 그렇지 않으면, 다음 명령어가 그 단계에 들어올 때 데이터나 정보가 손실된다. 2. 각 하드웨어 구성요소 - 명령어 메모리, 레지스터 읽기 포트, ALU, 데이터 메모리, 레지스터 쓰기 포트는 한 번에 한 단계에서만 사용할 수 있다. - 하드웨어는 여러 명령어에 의해 동시에 공유될 수 없다. 레지스터 파일은 읽기/쓰기를 위한 별도의 포트를 갖고 있으므로 다른 구성요소로 간주할 수 있다. 위는 pipeline datapath의 예시이다. 시간은 왼쪽에서 오른쪽으로 진행되고, 각 clock cycle(CC)마다 명령어가 진행된다. 다섯 개의 명령어가 차례로 파..
Shared Pages Shared Code - 여러 프로세스에서 공유되는 읽기 전용 코드의 한 복사본 - 여러 스레드가 동일한 프로세스 공간을 공유하는 것과 유사하다. - 읽기-쓰기 페이지의 공유가 허용된다면 프로세스간 통신에도 유용하게 사용 가능 (OS에 따라, Shared Page를 사용해서 Shared Memory를 구현하는 경우도 있다) Private Code and data - 각 프로세스는 코드와 데이터의 별도 복사본을 유지한다. - 개인 코드와 데이터를 위한 페이지들은 논리적 주소 공간 어디에든 나타날 수 있다. two-level paging 32비트 아키텍처에서 앞서 다룬대로 페이지 테이블을 만들면, 페이지의 크기가 4KB일 때 페이지 테이블은 각각 4MB가 된다. two-level pa..
위 파이프라인이 적용된 데이터패스에서 lw 명령어의 경우를 살펴보자. 명령어가 실행되면(IF), IF/ID 레지스터는 명령어를 저장한다. 이때 프로세서는 아직 명령어가 무엇인지 모르기에 beq를 대비하여 PC+4를 저장한다. ID 단계에서는 이제 데이터패스는 명령어가 lw임을 알게 된다 ID/EX 레지스터에는 ID 단계에서 생성된 데이터 세트(두 개의 32비트 데이터, 부호 확장된 immediate value, PC+4)가 저장된다. EX 단계에서는 레지스터 1의 값과 부호 확장된 immediate value를 ID/EX 레지스터에서 읽어온다. 두 값은 ALU를 통해 대상 데이터 메모리 주소를 계산하고 EX/MEM 레지스터에 저장한다. MEM 단계에서는 EX/MEM 레지스터에서 메모리 주소를 읽어와 데이..
프로그램이 실행되기 위해서는 디스크에서 메모리로 가져와 프로세스 내에 배치돼야한다. 주 기억장치와 레지스터는 CPU가 직접 액세스 할 수 있는 유일한 저장 공간이다. 레지스터 액세스는 CPU클록 안에 이루어지며, 주 기억 장치는 여러 사이클을 소요할 수 있고, 이로 인해 지연이 발생할 수 있다. 캐시는 주 기억장치와 CPU 레지스터 사이에 위치하여 데이터 접근 속도를 향상시킨다. 메모리 장치는 주소의 읽기 요청 또는 주소의 데이터 및 쓰기 요청의 연속으로 작업한다. 메모리의 보호는 올바른 동작을 보장하기 위해 필요하다. Protection 프로세스의 주소 공간은 프로세스가 접근할 수 있는 주소 범위를 나타낸다. 운영체제는 프로세스가 할당받은 주소 공간 외의 영역에 접근하는 것을 방지해서 메모리 보호를 제..
앞서 다룬, 위의 Data Path 구현방식은 모든 명령을 처리할 수 있지만, 비효율적이기에 쓰이지 않는다. 그러면 어떤 방법을 사용해야할까? Pipelining 여러 가지 작업을 동시에 작동시킨다. pipelining의 각 단계를 stage라고 한다. stage란 명령어를 처리하는 동안 하드웨어 유닛에서 수행하는 활동이다. - 처리량(throught - 단위 시간 내 처리할 수 있는 작업 수) 향상시킴 - 응답시간(response time - 각각의 단일 작업 수행 시간) 은 같음 IF(Instruction fetch) : 메모리에서 명령을 가져옴 ID(Instruction decode/register file read) : 명령을 해독하면서 레지스터를 읽음 EX(Excute/address calcul..
시스템 모델 시스템은 리소스로 구성되며, 리소스 유형(CPU 사이클, 메모리 공간, 입출력 장치 등) R1, R2 ... Rm이 존재한다. 각 리소스 유형 Ri는 Wi개의 인스턴스를 갖는다. 각 프로세스는 리소스를 요청-사용-해제 로 사용한다. 데드락 in 멀티스레드 프로그램 데드락은 스레드 1이 first_mutex를 확보하고, 스레드가 2가 second_mutex를 확보할 때, 스레드 1이 second_mutex를 기다리고 동시에 스레드 2가 first_mutex를 기다릴 때 발생할 수 있다. 라이브락은 데드락처럼 스레드가 멈추진 않았지만 계속 시도해도 진행이 안되는 경우에 발생한다. 데드락은 네 가지 조건이 동시에 성립할 때 발생한다. (필요조건) 상호배제(Mutual exclusion): 한 번에..