일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- dp
- 이분탐색
- jpa
- 다이나믹 프로그래밍
- 그리디
- 다익스트라
- 생활코딩
- 수학
- 삼성 SW 역량테스트
- JavaScript
- Air Table
- LCS
- 종만북
- 시뮬레이션
- 접미사 배열
- Cloud Pub/Sub
- REACT
- Cloud Run
- 삼성SW역량테스트
- 데이터 분석
- CI/CD
- 고속 푸리에 변환
- Bit
- 컴퓨터 구조
- 펜윅 트리
- ICPC
- 백준 1753번
- 우선순위 큐
- BFS
- r
- Today
- Total
코딩스토리
Chapter 7. 데이터 경로 연습문제 본문
# 컴퓨터 아키텍처 (저자 우종정) 7장 연습문제입니다. 제가 공부하고 이해한 방식대로 풀었기 때문에 정확하진 않습니다. 제가 배운 부분만 풀었기 때문에 모든 문제를 풀진 않았습니다.
# 구글링을 통해 나오는 다른 답들과 다를 수 있습니다.. 저도 구글링 했다가 이해가 안돼서 직접 풀었습니다..
풀이
1. 답) 2번
메모리에 두번 접근하기 위해 데이터 메모리와 명령어 메모리로 분할하는 것은 단일 사이클 방식이다.
3번은 헷갈릴 수 있는데 쉽게 생각해보면 단일은 한 사이클 내에 모든 작업을 수행해야 하기 때문에 일반적으로는 다중 사이클보다 더 오래 걸린다.
2. 답) 3번
멀티플렉서(MUX)는 다수의 입력 단자 중 조건에 맞는 하나를 선택하고, 단일 출력하는 조합 회로이다.
즉 여러개의 입력이 동시에 들어와서 충돌이 생기는 것을 방지하려면 MUX를 이용해 입력을 하나로 만들어 주면 된다.
3. 답) 1번
프로그램 계수기 = PC
PC는 다음 수행할 명령어의 주소를 일시적으로 저장하는 레지스터이다.
명령어를 인출하기 위해서는 PC에서 값을 받아와야 한다.
4. 답) 데이터 경로
데이터 경로의 정의이다.
데이터 경로 : CPU가 명령어를 실행할 때 프로세서가 명령어의 정의에 따라 데이터를 경유시키는 경로
5. 답) 틀리다
다시 사용 -> 다중 사이클 방식
6. 답)
lw r3, r2, #1 은 r3 <- M[r2 + imm(#1)*2]라는 말과 같다. (이 부분만 잘 기억하면 쉽게 풀 수 있다.)
이 명령어를 정리해보면
rs = r2
rt = r3
imm = 1
① - rs의 주솟값, 즉 r2의 주솟값은 010₂이다.
② - rt의 주솟값, 즉 r3의 주솟값은 011₂이다.
③ - imm값, 즉 000001₂이다. (picoMips 명령어는 imm 필드값을 6bit 사용한다.)
④ - r3에 담겨있는 데이터, 즉 0000000000000001₂이다. (위치가 조금 애매하긴 한데 제가 생각하기엔 이게 맞는듯)
# 중요한 점은 ④이 ALU에 들어가는 것이 아니고 imm값이 ALU에 들어간다.
# 이 데이터는 아래의 화살표를 따라 데이터 메모리로 간다.
⑤ - ALU에서 연산해서 나온 값, 즉 Reg[r2] + imm*2의 값인 0000000000000100₂이다.
# 이때 ⑤값을 메모리 주소 형태(Word)로 나타내면 16진수로 0004가 된다.
# 즉 메모리의 0004 주소에 있는 데이터를 r3에 적재하면 된다.
⑥ - 데이터 메모리에 있는 데이터를 가져온다. 0004 주소에 있는 데이터는 0000000010000010₂이다.
⑦ - r2의 값은 변하지 않았다. 즉 0000000000000010₂이다.
⑧ - r3의 값은 데이터 메모리에서 가져온 ⑥의 값이 되어야 한다. 즉 0000000010000010₂이다.
(구글링 하면 뜨는 답안들과 완전히 다른 답이 나왔네요..)
7.
(1) 답 : ALU에 Reg[r3]의 값이 아니라 0을 넣어주면 된다. 아래 그림처럼
# 제가 생각한 가장 간단한 방법은 이거지만 가장 애매한 문제네요 ㅎㅎ
(2) 답 : 직접 해보는 걸로.. 단일 사이클을 잘 이해했다면 할 수 있습니다.
8. 답)
sw r3, 1(r2) 는 r3 -> M[r2 + imm*2]와 같다.
이 명령어를 정리해보면
rt = r3
rs = r2
imm = 1
① - Reg[r2], 즉 0000000000000010₂ 이다.
② - Reg[r3], 즉 0000000000000001₂ 이다.
③ - ① 과 같다. (J 명령어가 아니기 때문에 PC의 값에 영향을 받지 않는다.)
④ - Reg[r3]값이 아닌 imm값이 들어가야 한다. 따라서 0000000000000001₂ 이다.
⑤ - ALU에서 연산을 통해 얻은 값, 즉 r2 + imm*2 = 0000000000000100₂ 이다
⑥ - ⑤과 같다. (이 번호들이 데이터 경로의 순서대로 써져있는 게 맞다면..)
⑦ - Reg[r3]의 값인 ②과 같다. (이 명령어는 메모리에 r3의 데이터를 저장해야 하므로)
9. 답)
(그림을 그리긴 너무 귀찮고 생각만 해보면)
만약 문제에서 말한 2개의 공통 사이클이 명령어 인출 사이클과 명령어 해독*읽기 사이클이라면,
beq 명령어는 if ( a == b ) PC = PC + 2(명령어의 크기) + imm * 2 라고 표현할 수 있다.
이때 a == b를 계산하는 사이클 하나와
나머지 부분 PC = PC + 2(명령어의 크기) + imm * 2를 계산하는 사이클 하나로 나눌 수 있다.
이 사이클을 데이터 경로로 표현해보면 답을 찾을 수 있지 않을까 싶다..
'컴퓨터구조' 카테고리의 다른 글
Chapter 9. 파이프라이닝 연습문제 (0) | 2020.12.17 |
---|---|
Chapter 9. 파이프라이닝 (0) | 2020.12.17 |
Chapter 7. 데이터 경로 (2) | 2020.12.06 |
Chapter 6. 연산장치 (0) | 2020.12.05 |
Chapter 5. 데이터 표현 (0) | 2020.12.03 |