공부/컴퓨터 구조론(7)
-
[컴퓨터구조론] 캐시 메모리 블록 사상 방식
메모리 계층 구조는 위 그림과 같다. 아래에서 위로 갈수록 가격이 비싸고 속도가 빠르며 용량이 적다. 계층 구조 중 캐시 메모리에 대해서 공부해보려한다. 캐시 메모리 캐시 메모리는 CPU와 메인 메모리 사이의 속도 차이를 줄이기 위해 필요하다. CPU는 원하는 데이터를 가져오기 위해서 아래와 같은 과정을 거친다. CPU가 캐시 메모리에 워드를 요청한다. 존재하면 가져오고 존재하지 않으면 2번으로 간다. CPU가 메인 메모리에 워드를 포함한 블록을 요청한다. 존재하면 블록을 복사하여 캐시 메모리에 보내고 3번으로 간다. 존재하지 않으면 4번으로 간다. 캐시 메모리에 복사된 블록이 존재하므로 다시 캐시 메모리에 워드를 요청하여 가져온다. CPU가 보조 저장장치에 페이지를 요청하여 메인 메모리로 가져온다. C..
2022.12.16 -
[컴퓨터구조론] 파이프라이닝과 해저드
이전 포스팅에서 데이터 경로에 대해서 공부했었다. https://growth-coder.tistory.com/37 두 가지 방식 중 다중 사이클 방식을 사용하면 오늘 공부할 파이프라이닝을 구현할 수 있다. 파이프라이닝 다중 사이클 방식은 하나의 명령어가 여러 개의 사이클을 사용하기 때문에 하드웨어 장치에 여러 번 접근할 수 있다. 어떤 명령어가 A, B, C, D의 사이클로 이루어져 있다고 해보자. 이러한 명령어를 여러 번 수행한다고 하면 위와 같이 하나의 명령어가 끝나고 다음 명령어를 실행하는 방식으로 수행이 될 것이다. 그러나 다중 사이클 방식을 사용한다면 하나의 사이클이 끝나고 다음 사이클에서는 이전 사이클에서 사용된 하드웨어에 접근할 수 있기 때문에 아래와 같은 파이프라이닝이 가능하다. 하나의 사..
2022.12.15 -
[컴퓨터구조론] 데이터 경로 (단일 사이클 방식, 다중 사이클 방식)
CPU는 명령어를 실행시키기 위해 데이터를 하드웨어 장치로 보내야한다. 이렇게 데이터가 여러 하드웨어 장치로 이동하는 경로를 데이터 경로라고 한다. 지금까지 MIPS 명령어 사용법을 공부했는데 이제 16비트 picoMIPS 명령어 집합을 기준으로 데이터 경로를 공부해보려 한다. 데이터 경로는 크게 단일 사이클 방식과 다중 사이클 방식으로 나뉜다. 단일 사이클 방식 초기에는 단일 사이클 방식이 사용되었는데 이는 하나의 명령어가 하나의 사이클 내에서 수행되는 방식이다. 이러한 방식은 하나의 명령어가 한 사이클 동안 전체 데이터 경로를 사용하므로 하나의 명령어가 실행되는 동안은 하드웨어 장치에 두 번 이상 접근할 수 없다. 이러한 이유 때문에 단일 사이클 방식은 PC 갱신 장치를 필요로 한다. 다음 명령어의 ..
2022.12.14 -
[MIPS] MIPS 스택을 활용한 반복문
스택을 사용하기 위해서 아래와 같은 MIPS 명령어를 이해해야 한다. 명령어 피연산자 1 피연산자 2 의미 lw (load word) $t0 변수 이름 메모리에서 t0 레지스터로 값을 저장한다. sw (store word) $t0 변수 이름 t0 레지스터의 값을 메모리에 저장한다. jal loop 없음 jal loop 다음 명령어의 주소를 $ra에 저장하고loop로 jump 한다 jr $ra 없음 $ra 레지스터에 담긴 주소로 이동한다. 이전 포스팅에서 조건부 점프, 무조건 점프에 대해서 공부했었는데 https://growth-coder.tistory.com/34 jal과 jr 명령어는 무조건 점프에 해당한다. jal loop를 실행하게 되면 loop로 점프하기 전에 다음에 실행할 명령어의 주소를 $ra..
2022.12.12 -
[MIPS] MIPS 함수 및 반복문 사용법
MIPS 반복문을 사용할 때는 재귀적인 방식을 사용하곤 한다. 예를 들어 입력받은 수부터 1까지 모두 출력하는 어셈블리 코드의 흐름은 다음과 같다. 입력받은 수를 레지스터에 저장한다. 해당 레지스터의 수를 출력한다. 레지스터의 값에서 1을 뺀다. 레지스터의 값이 1이 아닌 경우 2번으로 돌아간다. 레지스터의 값이 0인 경우 종료한다. 이번 포스팅에서 새롭게 배울 내용은 함수를 실행시키는 방법이다. 지금까지는 main 함수 하나만 사용하였는데 우리가 임의로 함수를 만들어서 사용할 수도 있다. loop라는 이름의 함수를 만든다면 아래와 같다. .data .text main: loop: main 함수에서 특정 함수를 실행하고 싶다면 "j loop"와 같이 loop라는 함수로 jump할 것이라는 것을 알려주면 ..
2022.12.11 -
[MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력)
저번 포스팅에서는 정수와 문자열을 출력하는 방법에 대해서 공부하였다. 이번에는 두 수를 입력받아서 값을 더하는 어셈블리 코드를 만들어보려고 한다. 정수 출력 system call code는 1, 문자열 출력 system call code는 4이다. 그리고 정수 입력 system call code는 5, 문자 입력 system call code는 8이다. 두 정수를 입력받아서 합을 출력해보려 한다. 코드를 만들기에 앞서 system call code와 산술 연산 명령어를 정리하자면 다음과 같다. system call code 의미 1 정수 출력 4 문자 출력 5 정수 입력 8 문자 입력 산술 연산 명령어 명령어 피연산자 1 피연산자 2 피연산자 3 의미 add $t0 $t0 $t1 $t0 = $t0 + $..
2022.12.10