대학/컴퓨터구조
-
Virtual Memory대학/컴퓨터구조 2023. 6. 13. 22:23
Disk를 Virtual Memory로 사용하기 위해 메인 메모리를 캐시로 사용한다. Virtual address는 page table을 통해 Physical address로 변환되는데 이 과정을 살펴보자. 디스크는 데이터를 페이지 단위로 관리하기 때문에, 가상 메모리 역시 페이지 단위로 관리된다. 그 페이지 내부에서 특정 데이터를 찾기 위해 offset를 지정하게 되고, 나머지 부분은 페이지의 인덱스를 나타내게 된다. Valid가 0이면 해당 주소에 해당하는 데이터가 속한 페이지는 디스크상에 존재하는 것이고, 1이라면 메인 메모리에 캐싱된 상태이다. 하지만, CPU입장에서는... 페이지 테이블에 접근 페이지 테이블에서 얻은 실제 메모리에 접근 이 두 과정을 거치는 것 또한 느리다. 그렇기에 페이지 테이..
-
Memory hierarchy대학/컴퓨터구조 2023. 6. 13. 21:23
데이터를 모두 하드디스크에서 처리한다면 어떨까? 적은 가격에 많은 공간을 사용할 수 있겠지만, 속도가 매우 느릴 것이다. 반대로 모두 캐시에서 처리한다면? 매우 빠르겠지만, 비싸고 적은 공간만 사용할 수 있을 것이다. 그렇기에 메모리는 계층구조를 이루어 데이터가 이동하며 저장 및 사용되는데, 이때 사용되는 용어가 캐싱이다. 캐시메모리 - DRAM - Disk의 계층 구조에서 장치간 동작 속도의 차이가 큰데, 이 속도차이를 극복하기 위해 디스크부터 캐시로 데이터를 미리 로드하는 행위를 캐싱이라 하는데, 캐싱이 가능한 이유는 메모리의 Locality 특성 때문이다. Locality란, 같은 메모리 영역을 자주 접근하려는 경향, 그리고 접근한 메모리 근처의 메모리영역을 접근하려는 영향을 의미한다. 즉, 캐싱을..
-
ILP - Instruction Level Parallelism대학/컴퓨터구조 2023. 6. 12. 22:26
여러 명령어를 동시에 처리하는 기술이다. 이를 달성하기 위해서는 pipeline을 더 세부적으로 쪼개거나, pipeline stage에 동시에 여러 명령어를 수행하는 방법으로 달성할 수 있다. 이번 포스트에서는 pipeline stage에 여러 명령어를 동시에 수행하는 방법에 대해 알아보자. 64-bit 공간에 32-bit 명령어 2개를 넣어 두 개의 명령어를 동시에 처리하는 것이다. 하지만, 이 방법을 사용할 때는 반드시 지켜줘야 하는 규칙이 있는데, 명령어의 종류가 ALU/branch인 명령어와 Load/Store인 명령어만 동시에 처리할 수 있다는 것이다. ALU, ALU 또는 ALU, branch 와 같이 성격이 비슷한 명령어를 동시에 처리할 수는 없다. 왜 그럴까? 회로를 살펴보면 알 수 있다...
-
Hazard대학/컴퓨터구조 2023. 6. 12. 20:37
Data Hazard 아래와 같이 연속으로 같은 레지스터에 값을 쓰고 읽는 경우 data hazard가 발생한다. WB에서 레지스터에 값을 저장해야 ID에서 저장된 값을 읽어올 수 있기에, 2 cycle 동안 명령어를 정지시키고 실행한다. 참고로 3 cycle을 멈춰야 하는게 아닌가 할 수 있는데, flip-flop이라 하더라도, 전자가 채워지는 시간을 고려하면 2 cycle에도 가능하다고 한다... 하지만 이렇게 명령어를 정지하게되면(nop) 성능상에 문제가 생길 수 밖에 없다. 따라서 회로상으로 명령어의 연산 결과를 바로 가져다 쓰도록 구현한 forwarding 기법이 등장했다. 하지만, 데이터 로드를 수행하는 명령어를 수행한 경우에는? ID에서 가져오고자 하는 레지스터의 값은 MEM단계가 끝난 뒤에..
-
CPU circuit - Pipeline대학/컴퓨터구조 2023. 6. 11. 21:55
명령어를 아래 5단계로 나눠 각 단계를 각 회로에 할당시켜서 여러 명령어를 동시에 처리하는 기법이다. IF: 명령어를 메모리에서 가져옴 ID: 명령어를 decode하고 레지스터에서 값을 읽어옴 EX: 명령어 관련 레지스터나 값을 연산함 MEM: 메모리에 접근함 WB: 연산이나 메모리의 결과를 레지스터에 저장함 파이프라인 기법을 사용하면 한 명령어를 처리하는데 시간이 약간 늘어날 수 있다. 왜냐하면 레지스터 접근 단계(ID, WB)에서는 시간이 적게 걸리는데, 파이프라인 기법을 쓰기 위해서는 모든 단계의 시간을 가장 오래 걸리는 단계의 시간으로 맞춰줄 필요가 있기 때문이다. 하지만, 명령어를 병렬 처리하기 때문에 전체 시간으론 매우 단축된다. 즉, CPU설계에 있어, 명령어 stage당 소요되는 시간이 밸..
-
CPU circuit - Basic대학/컴퓨터구조 2023. 6. 11. 21:08
CPU 내부 회로 구성과 데이터, 컨트롤 시그널이 어떻게 이동하는지 알아보자. 너무 복잡하기 때문에 이번엔 스탭별로 기능을 확장해가며 명령어별로 회로가 어떻게 동작하는지, 컨트롤 시그널이 어떻게 나오는지 알아보고, 다음에 파이프라인 기법이 적용된 회로를 살펴보자. 담백하게 기능을 간략화환 회로의 그림은 다음과 같다. 위 그림에서 PC, Instruction memory, Registers, Data memory 모두 레지스터이다. 레지스터는 Filp-flop 회로로 구현이 되어있기 때문에 CPU clock에 동기화되어 데이터를 내보낸다. 따라서 80000 주소의 명령어를 실행할 때 PC값은 80004로 업데이트되지만, clock이 들어오기 전까진 80000 주소값을 내보내는 것이다. 모든 레지스터는 cl..
-
Arithmetic for Computer대학/컴퓨터구조 2023. 4. 25. 23:49
Overflow (Underflow) overflow 현상은 다음과 같은 상황에 발생한다. $$ ve + ve $$ $$ -ve + (-ve) $$ $$ ve - (-ve) $$ $$ -ve - ve $$ overflow가 발생하지 않도록 연산에 유의하거나, 발생했을 때 별도의 처리를 해 줘야 한다. 이미지, 영상 처리과 같은 곳에서는 Satrating operations 과정을 거치는데, 간단하게 말하면, overflow가 발생한 경우, 표현 가능한 최대의 숫자로 값을 바꾸는 것을 의미한다. Multiplication (H/W) 하드웨어 레벨에서의 곱셈을 하는 방식은 위 그림과 같다. 1001 * 1001 의 연산을 예로 들어보자. multiplier의 가장 낮은 bit가 1인 경우, product r..
-
MIPS Instruction set대학/컴퓨터구조 2023. 4. 25. 18:50
Registers 레지스터 사용처 $a0 ~ $a3 argument값을 저장할 때 사용 $v0, $v1 return값을 저장할 때 사용 (long 타입의 경우 두 레지스터를 사용하기 위함) $t0 ~ $t9 임시로 값을 저장할 때 사용 $s0 ~ $s7 사용빈도가 높은 값을 저장할 때 사용 $gp global pointer (for stack data) $sp stack pointer $fp frame pointer $ra return address $zero 0 상수값을 갖고있음. 덮어쓰기 불가 Instructions 명령어 읽기 기능 add A, B, C add A = B + C addi A, B, c add immediate A = B + c // c는 상수. (subi는 없고 대신 음수 상수를 이..