Computer Science 기본 지식/컴퓨터 구조 15

[컴퓨터 구조] 12. 가상 메모리

가상 메모리 기술 2차 저장장치를 메인 메모리를 "캐시"로 사용하는 기술로 여러 프로그램을 동시에 실행하여 메모리를 효과적으로 공유하고 메인 메모리 장치의 크기 한계를 극복하여 더 큰 프로그램을 실행할 수 있게 해 준다. 프로그램 데이터 보호 - 프로그램마다 사용하는 주소 공간을 따로 두고 이를 보호한다 : 각 프로그램들이 자신만의 주소 공간을 가지고 가상 메모리 기술이 가상 주소 공간에 대해 실제 주소로 변환해준다. 페이징 기법 프로세서는 가상 주소를 만들어서 사용하는 반면, 메모리는 실제 주소를 사용하여 데이터에 접근한다. 가상 메모리와 주 메모리는 일정한 크기의 조각으로 나뉜 페이지로 구성되어 있으며 각 가상 페이지 하나는 주 메모리 페이지 하나에 사상된다. RISC-V에서 주소는 64비트를 가지지..

[컴퓨터 구조] 함수 호출 규약

함수 호출 규약이란 함수 호출 시 일어나는 행동에 대한 규칙을 의미하며 함수 인자들에 대해 어떤 순서로 스택에 쌓을 것 인지, 인자를 레지스터로 이용할 것 인지 그리고 함수 종료 후 스택을 누가 정리할 것 인지에 대해 정해놓은 규칙이다. 어떤 함수 규약이 호출되던, 다음과 같은 일이 발생한다. 1. 모든 인자들은 4 바이트(8 바이트)로 확장되고 적절한 메모리 위치로 삽입된다. 이 위치들은 주로 스택 상 메모리이지만 레지스터들을 사용할 수 도 있다. 이는 호출 규약에 따른다. 2. 프로그램 실행은 호출된 함수의 주소로 점프한다. 3. 함수 안에서 보존 레지스터들이 스택에 저장된다. 함수 프롤로그라고도 하며 컴파일러가 작성한다. 4. 함수에 해당하는 코드들이 실행되고 return 반환값이 eax 레지스터에..

[컴퓨터 구조] 스택 포인터와 프레임 포인터

함수 호출과정에서 스택 프레임에 대해 일어나는 일을 알아보도록 한다. 스택 포인터와 프레임 포인터 스택 프레임 (Stack Frame) 기본적으로 함수가 호출될 때마다 전달한 인자와 정의한 지역(자동) 변수가 높은 주소부터 낮은 주소의 방향으로 차례대로 저장되는 구조이다. 이외에도 다른 함수를 호출할 때 복귀할 주소(다음 실행할 명령어의 주소), 프레임 포인터 및 보존되는 레지스터들이 스택에 저장된다. 스택 포인터는 함수 호출 시작부터 피호출 프로그램이 실행되는 단계 차례대로 저장되는 값들을 저장하기 위해 현 시점에서 저장할 메모리의 위치를 가리킨다. 스택 프레임에 저장되는 값 - 복귀 주소 - 호출자 루틴의 프레임 포인터 - 사용하던 보존 레지스터 - 피호출자에 전달하는 인자 - 피호출자에서 사용되는 ..

[컴퓨터 구조] 11. 캐시 성능 측정 및 향상

다단계 캐싱(multilevel caching) 여러 캐시를 계층적 구조로 사용하여 실패 손실을 줄이는 기술. 1 차 캐시에 데이터가 없다면 2차 캐시를 조회하게 되는데 2차 캐시에 데이터가 있다면 주 메모리 접근 시간보다 훨씬 작다. 보통 1차 캐시는 2차 캐시보다 작다. 1차 캐시는 CPU와 최대한 가깝도록 설계하여 적중 시간을 최소화하고 2차 캐시는 더 크게 설계하여 큰 블록에 대한 실패율을 감소시킨다. 적중된 캐시에 의한 정상적인 CPU 실행 시간은 다음과 같다. CPU 시간 = (CPU 클럭 사이클 + 메모리 지연 클럭 사이클) x 클럭 사이클 시간 메모리 지연 클럭 사이클은 읽기와 쓰기 행동에 의해 걸리는 시간의 합이다. 메모리 지연 클럭 사이클 = 읽기 지연 사이클 + 쓰기 지연 사이클 읽기..

[컴퓨터 구조] 10. 메모리 기술

메모리 계층 메모리는 계층구조를 가지는 형태로 발전해왔으며 CPU 프로세서와 가까울 수록 데이터 접근시간이 빠르고 비용이 비싸다. 메인 메모리 DRAM으로 구현되고 캐시는 SRAM으로 구현되며 USB와 같은 휴대 메모리는 플래시 메모리를 사용한다. 하드 디스크와 같은 가장 느린 저장장치는 자기 테이프로 구현되어있다. 메모리의 지역성 어떤 데이터를 접근하기 위해 기본적인 원리가 있는데, 최근에 참조한 데이터가 다시 참조할 가능성이 높다는 시간적 지역성과 최근에 참조한 데이터와 근처에 있는 주소의 데이터를 참조할 가능성이 높을 것이라는 공간적 지역성이 사용된다. 메모리 계층에서 데이터의 이동 메모리 계층구조는 여러 층으로 구성되어 있지만 데이터는 인접한 두 계층 사이에서만 한 번에 복사가 된다. 이런 두 계..

[컴퓨터 구조] 9. 명령어 수준 병렬성

명령어 수준 병렬성(instruction-level parallelism, ILP) 파이프라이닝은 명령어 사이의 병렬성을 이용하는 기법이다. 병렬 수준을 높이기 위한 방법은 다음 두 가지가 있다. 1. 파이프라인 깊이를 증가시켜 더 많은 명령어들을 중첩시키는 방법 2. 매 파이프라인 단계에서 다수의 명령어를 내보내는 방법 다중 내보내기 Multiple Issue : 다수의 명령어를 내보내어 동시에 둘 이상의 명령어를 처리한다. - 다중 내보내기 (multiple issue) 방법은 매 단계마다 다수의 명령어를 내보내면 명령어 실행 속도가 클럭 속도보다 빨라질 수 있다. 즉 CPI가 1보다 작아질 수 있어 명령어 1개를 실행하는 속도가 클럭 주기보다 빠른 것이다. 정적 다중 내보내기 static multi..

[컴퓨터 구조] 8. 파이프 라인 해저드

파이프 라인 기술로 구현된 명령 처리 과정에서 발생할 수 있는 해저드 종류는 다음과 같다. 1. 구조적 해저드 CPU 자원의 한계로 사용할 수 있는 내부 버스는 동시에 사용될 수 없다. 동일한 레지스터/메모리 조각에 동시에 쓰려고 하는 경우가 그 예가 된다. 2. 데이터 해저드 두 명령어에서 사용되는 레지스터들이 의존적 관계가 있을 때 성립한다. 다음 명령어들을 보자. sub x2, x1, x3 and x12, x2, x5 or x13, x6, x2 add x14, x2, x2 sd x15, 100(x2) 마지막 네 명령어 모두 첫 번째 명령어의 레지스터 x2의 결과에 종속적이다. 실제 파이프라인 과정에서 정상적으로 읽고 써지는 단계는 마지막 두 단계, add와 sd인데 add의 경우 x2를 읽으려 할 ..

[컴퓨터 구조] 7. 파이프 라인된 데이터 패스

파이프라인된 데이터 패스의 경우 각 단계를 분리하기 위한 파이프라인 레지스터가 존재한다. IF/ID : IF와ID 단계를 분리하는 레지스터 ID/EX : ID와 EX 단계를 분리하는 레지스터 EX/MEM: ID와 MEM 단계를 분리하는 레지스터 MEM/WB: MEM과 WB 단계를 분리하는 레지스터 ld 명령어의 데이터 패스 예제 1. 명령어 인출 Instruction Fetch PC에 저장된 주소를 이용하여 명령어를 메모리에서 읽어와 IF/ID 레지스터에 저장한다. PC 는 4만큼 증가하여 저장되고 이 값이 IF/ID에도 저장된다. beq와 같은 명령어 처럼 나중에 사용될 수 있기 때문이다. 2. 명령어 해독 Instruction Decode Read register 1, 2 그리고 수치 값 ImmGen..

[컴퓨터 구조] 6. 명령어 파이프라이닝

기본적인 단일 사이클에서 명령어 단계 (4단계) 1. 명령어 인출(IF) : 다음 실행될 명령어를 기억장치로부터 가져온다. 2. 명령어 해독(ID) : 제어 유닛의 해독기에서 명령어의 opcode를 해석한다. 3. 오퍼랜드 인출(OF): 연산에 필요한 오퍼랜드의 데이터를 기억장치로부터 인출하는 단계 4. 실행(EX): 해독기에서 정해진 연산을 수행하는 단계 --- RISC-V 명령어 단계 (5단계) 1. 메모리에서 명령어를 가져온다. 2. 명령어를 해독하는 동시에 레지스터를 읽는다. 3. 연산을 수행하거나 주소를 계산한다. 4. (필요하면) 데이터 메모리에 있는 피연산자에 접근한다. 5. (필요하면) 결과값을 레지스터에 쓴다. 예시) 산술 연산 명령어 add x1, x2, x3 1. 명령어를 메모리에서 ..

[컴퓨터 구조] 5. CPU 성능 측정

컴퓨터 성능을 의미하는 단어 실행시간(응답시간): 컴퓨터가 작업을 완료하기까지 걸린 시간을 의미, 디스크, 메모리, 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간 등을 모두 포함 처리량(대역폭): 일정시간 동안 처리하는 작업량 CPU 성능 CPU 실행시간: 특장 작업의 실행을 위해 CPU가 소비한 시간 클럭주기 CPU의 클럭이 한 사이클에 걸리는 시간을 의미한다. 클럭 속도는 1초당 클럭 사이클 수를 뜻하며 클럭 주기의 역수이다. ex) 4GHz 클럭속도의 주기는 250ps CPU 성능 측정 프로그램의 CPU 실행 시간 = 프로그램(을 실행하는 데 걸린 CPU) 클럭 사이클 수 X 클럭 주기 명령어 성능 실제 프로그램을 실행하는 절차는 명령어의 처리와 관련이 있다. 어떤 프로그램의 실행에 필요한..