모든 데이터(위 이미지에서, Instruction memory와 Data memory)가 컴퓨터의 메모리에 저장된다. load와 store 명령어는 메모리에 액세스하여 데이터를 읽거나 쓴다. 이상적으로는, 프로그래머들은 무제한이고 빠른 메모리를 바란다. 현재의 메모리들인 SRAM, DRAM, SSD, HDD를 비교하면, 가격 : SRAM > DRAM > SSD > HDD 성능 : SRAM > DRAM > SSD > HDD 용량 : HDD > SSD > DRAM > SRAM 이 된다. 크고 빠른 메모리를 동시에 제공하는 단일 메모리는 없지만, 현대 컴퓨터는 크고 빠른 메모리의 illusion을 제공한다. 메모리 시스템은 계층(hierarchy)적인 방식으로 다양한 메모리 기술을 포함한다. - 가장 낮은 레..
학교강의필기장
이전 장에서, data forwarding만으로 data hazard를 해결할 수 없음을 보았다. 따라서 pipeline을 정지시키는 stall을 사용한다. 이는 시간을 낭비하며 아무런 작업을 수행하지 않는 과정이다. ID단계에서 and 명령어와 IF단계에서 or명령어를 1CC동안 prevent하고, 파이프라인에 nop(아무 동작을 하지 않는 명령어)를 삽입해서 진행시킨다. 이렇게 1CC를 기다린 후, data forwarding을 통해 문제를 해결할 수 있다. and와 or을 1CC동안 진행하지 못하게 막는다. (prevent) IF/ID 파이프라인 레지스터 변경을 막으면 and는 다시 ID단계로 들어간다. PC의 변경을 막으면 or은 다시 IF단계로 들어간다. 즉, 레지스터에 상태를 기록하는 것을 막..
Allocation of Frames 각 프로세스는 필요로 하는 최소한의 프레임 개수가 있다. 예를 들어 IBM 370에서는 SS MOVE 명령어를 처리하기 위해 최소 6개의 페이지가 필요하다. 최대 할당량은 시스템의 총 프레임 수이다. 할당 방식에는 고정 할당(Fixed Allocation)과 우선순위 할당(Priority Allocation)이 사용된다. Fixed Allocation Equal allocation은 운영체제에 프레임을 할당한 후, 남은 프레임이 100개이고 프로세스가 5개라면 20개씩 나눠주는 방법이다. Proportional allocation은 프로세스의 크기에 따라 할당하는 방식이다. 다중 프로그래밍의 정도와 프로세스 크기가 변할 때 동적으로 변경된다. Global alloca..
만약 아래와 같은 명령어가 실행됐다고 가정하자. sub $2, $1, $3 and $12, $2, $5 이 때, $1 - $3 값이 -20이라 할 때, and 연산에서 $2는 -20을 기대하지만 아직 sub 연산이 끝나지 않았으므로 10을 가져온다. 이 문제를 Data Hazard 라고 한다. 이를 위한 해결책으로 Data Forwarding을 사용할 수 있다. sub 명령의 EX/MEM 레지스터 값을 and 연산의 Rs 포트로 보낼 수 있다. 즉, 다른 명령의 레지스터를 ALU의 소스로 사용하는 것이다. datapath는 data hazard를 감지할 수 있어야 한다. 즉, destination register가 source register로 사용되는지 확인해야 한다. 여기서 and 연산의 경우, su..
Page Replacement 페이지 폴트 서비스 루틴을 수정해서 메모리의 과다 할당을 방지 modify bit를 사용해서 페이지 전송의 오버헤드를 줄인다. (수정된 페이지만 디스크에 기록) 페이지 교체는 논리적 메모리와 물리적 메모리 간의 분리를 완료시킨다. (작은 물리적 메모리에서도 큰 가상 메모리 제공) 1. 디스크에서 원하는 페이지의 위치를 찾는다. 2. 빈 프레임을 찾는다. - 존재하면 해당 프레임을 사용! - 없으면 페이지 교체 알고리즘을 사용해서 대상 프레임을 선택한다. 변경된 프레임(victim)이 있다면 디스크에 기록한다. 3. 원하는 페이지를 빈 프레임에 가져와서 페이지와 프레임 테이블을 업데이트한다. 4. 트랩을 일으킨 명령을 다시 시작하여 프로세스를 계속 진행한다. 프레임 할당 알고..
전체 프로그램이 메모리에 있어야 실행될 수 있지만, 전체 프로그램이 동시에 사용되는 경우는 드물다. 따라서 전체 프로그램 코드가 동시에 필요하지 않아, 부분적으로 로드된 프로그램을 실행하는 기능을 고려할 수 있다. 이렇게 하면 프로그램은 물리적 메모리의 제약을 받지 않게 되고, 실행중인 각 프로그램이 더 적은 메모리를 차지하게 되므로 동시에 더 많은 프로그램을 실행할 수 있다. 이는 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..