chap. 7 데이터 경로
명령어를 실행할 때 데이터가 어떤 종류의 컴퓨터 구성 요소를 경유하는지 살펴볼 필요가 있다. 이 장에서는 명령어의 실행 과정을 단계별로 분석하고, 명렁어를 실행하기 위한 데이터 경로를 구성해본다.
- 명령어 실행 과정 - 경유하는 컴퓨터 구성 요소
- 명령어를 실행하기 위한 데이터 경로
데이터 경로
명령어가 실행되면 지시에 따라 어디로 흘러야 할지
-
세탁시스템
세탁물- 데이터, 전체 시스템- 컴퓨터, 과정- 데이터 경로
-
대표적인 경로: PC, 레지스터 파일, 연산장치(ALU), 메모리
-
회로 구성 요소: 멀티플렉서, 부호 확장기. 시프터(왼쪽으로 1비트씩 이동)
-
방식: 단일 사이클 방식, 다중 사이클 방식
- 터널을 뚫는다고 생각해보자.
- 하루에 뚫는 것: 단일
- 며칠에 거쳐 뚫는 것: 다중
드릴을 재사용.
멈췄던 자리로 가서 일 시작.
- 목적은 같다만 방식에 차이가 있다.
-
예제
-
전가산기 ~ 덧셈한 결과와 올림수
-
반가산기 ~ 입력한 값 덧셈과 올림수
-
단일 사이클:
어떤 공간에 덧셈한 결과를 더해
올림수가 있으면 1이 전달, 없으면 0이 전달
차근차근 자리에 있는 수와 올림수까지 더해. 결과를 전달하고 올림수가 발생하면 그 다음 자리수의 합을 구하는 연산장치에 1을 보내.
전가산기 여러개 사용. 한번에 계산. 한 사이클 안에서 끝.
-
다중 사이클:
기억 소자 플립플롭
전가산기 더해서 저장공간에 넣고 시프트
한 번 계산하고 넣고 시프트,
한 번 계산하고 넣고 시프트,
...
전가산기 하나 사용.
-
성능평가: 처리 시간 비교
- 전가산기 한 번에 1나노시간이 걸린다고
- CPU 실행시간 = 명령어 개수 평균CPI 사이클 시간
- 단일: 명령어 1개 x 1사이클/명령어 x 16ns/사이클 = 16ns
- 다중: 명령어 1개 x 16사이클/명령어 x 1ns/사이클 = 16ns
- 다중은 드릴을 여러 날에 걸쳐여러 번 반복사용할 수 있고, 임시 저장소를 둔다.
- 단일은 드릴 한 개는 하루에 한 번만 사용.
-
picoMIPS의 명령어 형식 - 컴퓨터 구조가 단순해서 많이 쓰임.
- 전제: 1워드 = 16 비트
- 명령어의 형식 분류: R, I, J
- R: 세 개의 피연산자가 명령어에 들어감(레지스터)
ex. rs, rt, rd | rs=7, rt=8, rd = rs + rt
(레지스터 소스, 레지스터 타겟, 레지스터 데스티네이션) 주소값 저장됨.
- I: 명령어 자체의 뒤에 6비트 공간 할당, 그 안에 상수값을 명령어에 넣어준다.
ex. imm에 값이 들어감. 조건 분기 때 사용. 메모리에서 데이터 가져올 때, 저장할 때.
- J: 어드레스가 들어가는 부분이 있다. 주소값이라고 하지만 상수값이 들어간다. 엥?
상대 주소는 몇번째, 절대주소는 진짜 주소. 상대주소가 들어가나보다.
-
모든 명령어는 16비트로 구성된다.
-
명령어 형식과 종류
- op/ fn-확장 비트. op로만은 구분이 다 되지 못해서.
-
명령어 시작
- 명령어 인출
pc가 가리키는 메모리의 내용인 명령어를 읽음
pc가 다음 명령어를 가리키도록 pc의 내용을 갱신
-
명령어가 지시하는 연산을 수행
- 명령어를 해독했고, 종류에 따라 연산을 진행.
- 단일 사이클: 한 사이클 동안 동일한 자원을 다시 사용할 수 없고 한번만 사용. 메모리에 두 번 이상 접근할 수 었고 ALU도 두 번 이상 사용할 수 없음.
명령어 메모리와 데이터 메모리를 따로 둔다.
다중 사이클은 한 군데 있고 재사용.
- pc를 갱신할 때 워드 크기만큼 더해줬었음.
- ALU를 보통 두 번 사용한대. 왠지는 잘 못들음.
- 근데 한 번밖에 못쓰니까 하나 더 두던지, ALU가 하던 일을 pc갱신 장치를 사용해서 한 번만 사용하도록 하던지.
- 다중: 메모리 다시 접근 가능, ALU 여러번 사용, pc 갱신 장치 필요 없어.
- 버퍼라고해서 임시로 데이터를 저장하는 공간이 주어짐.
- 첫날 드릴로 어디까지 뚫었는지 그 위치값을 저장해두어야 다음날 거기 가서 했던 거 이어서 할 수 있음