<명령어를 효과적으로 실행하기 위한 기법>
(1). 주소 지정 방식
(2). 명령어 파이프라인
(3). 인터럽트
1. 주소 지정 방식
명령어의 형식을 어떻게 구성해야 효과적으로 명령어를 더 빨리 처리할 수 있을까에 대해 고민을 해본 것
주소: 주기억장치에서 데이터가 저장된 위치
(이때, 주기억장치와 ram은 다름)
주소 지정 방식: 주소를 지정하는 방식
주소지정방식를 다섯 가지 방법으로 분류해 보면
(1) 직접 주소지정 방식
- 가장 일반적인 개념의 간단한 주소 방식
- 오퍼랜드 필드의 내용이 유효 주소가 되는 방식
EA=A (유효 주소=기억장치 주소)
즉, 직접주소방식이면 주소값 그대로 어떠한 연산을 거치지 않은 자체로 주기억장치로 가서 해당 주소에서 데이터를 가지고 오는 방식
장점
- 데이터 인출을 위해 오퍼랜드에 저장된 해당 주소의 기억장치에 한번만 액세스 (그림에서 화살표가 한 개)
- 명령어 형식이 간단
단점
- 연산 코드를 제외하고 남은 비트들이 주소 비트로 사용되기 때문에 지정할 수 있는 기억장소의 수가 제한 (주소가 길면 지정할 수 X)
- 많은 수의 주소를 지정할 수 X
(2) 간접 주소지정 방식
- 오퍼랜드 필드의 내용이 유효 주소의 주소가 되는 방식
즉, A가 주기억장치의 주소가 되는 것이 아니라 A값을 읽어서 주기억장치로 가면 또 다른 주소가 적혀 있고 이 주소를 실제로 따라가 보면 데이터가 있는 방식
- 동작 방식
두 번의 기억장치 액세스가 필요
1번째는 유효 주소의 주소값을 읽기 위해 엑세스
2번째는 실제 유효 주소에 액세스하여 실질적인 데이터를 얻는 것
EA = (A) // ( )는 C의 포인터 같은 의미로 생각
유효 주소 = 기억장치 A번지의 내용
장점
- 최대 기억장치 용량 : CPU가 한번에 액세스할 수 있는 단어의 길이에 의하여 결정됨
N워드 -> 2의 N승의 주소 공간을 활용할 수 있음 // 직접 주소지정 방식의 단점 보완
- 기억장치의 구조 변경 등을 통해 확장 가능
- 명령어의 주소필드(오퍼랜드) 길이가 짧고 제한되어 있어도 긴 주소에 접근이 가능
단점
- 실행 사이클동안 두 번의 기억장치 액세스가 필요
- 직접 주소 지정 방식보다 속도가 느림
- 명령어 형식에서도 주소지정 방식을 표시하는 간접비트 필드가 필요
Q. 직접주소지정방식과 간접주소지정방식을 어떻게 구분할까
I = 0 : 직접 주소지정방식 I =1 : 간접 주소지정방식
간접 주소지정방식이든 직접 주소지정방식이든 연산 코드를 제외한 나머지 오퍼랜드 필드의 비트수만 가지고 주기억장치에 있는 주소를 표현해야 하기 때문에 간접 주소지정방식이 직접 주소지정방식보단 많은 데이터를 표현할 수 있다 하더라도 표현하는 데에 양적으로 한계를 가짐
=>레지스터 주소 지정 방식 사용
(3) 레지스터 주소 지정 방식
- 연산에 사용할 데이터가 레지스터에 저장되어 있는 방식
- 오퍼랜드 부분이 레지스터 번호를 나타내며, 유효주소는 레지스터 번호
(ex) R에 1이 들어가 있으면 1번 레지스터에 데이터가 있다
EA = R (유효 주소 = 레지스터 번호)
장점
- 비트 수가 적어도 되며, 데이터 인출을 위하여 기억장치에 액세스할 필요가 없음. (주기억장치에 갈 필요 X)
단점
- 데이터를 저장할 수 있는 공간이 CPU 내부의 레지스터로 제한됨. (용량은 작고 속도는 빠름)
(4) 레지스터 간접 지정방식
- 오퍼랜드 필드가 레지스터 번호를 나타내며, 해당 레지스터에 저장된 내용이 유효주소
ex) R이 1번이면 1번 레지스터로 가서 주소를 읽고 그 주소를 가지고 기억장치에 가서 데이터를 인출함)
특징
- 레지스터의 길이에 따라 주소지정 영역이 결정됨
- 레지스터의 길이:16비트 -> 주소지정영역 : 2의 16승 비트 (64K바이트)
EA = (R) (유효 주소 = 레지스터에 저장된 내용)
장점
- 많은 주소 공간을 활용할 수 있음.
단점
- 간접 주소 방식보다는 메모리 참조가 적게 일어나지만 여분의 메모리 참조가 필요
(주기억장치에 접근하는 액세스가 2->1, 여분의 메모리는 레지스터)
• 기억장치 엑세스
- 간접 주소 지정방식 : 기억장치에 두번 엑세스
- 레지스터 간접 주소 지정방식 : 기억장치에 한번만 액세스
(5) 변위 주소 지정방식
직접 주소지정방식과 레지스터 간접 주소지정방식을 조합한 방식
- 오퍼랜드 : 레지스터 번호필드와 변위 값 필드로 구성됨.
- 오퍼랜드의 두 필드의 조합으로 유효주소가 생성됨.
연산코드 뒤에 있는 레지스터 번호 필드를 보고 해당하는 레지스터에 간다 그곳에 있는 주소에 변위값을 더하고 더한 연산을 거친 것이 최종 주소가 된다 그 주소값을 가지고 기억장치로 간다
EA = (R) + A
(유효 주소 = R이 가리키는 레지스터의 내용 +변위 값 A)
사용하는 레지스터에 따른 종류
- 상대 주소지정방식 : 프로그램 카운터 사용
- 인덱스 주소지정 방식 : 인덱스 레지스터 사용
- 베이스 레지스터 주소지정방식 : 베이스 레지스터 사용.
(5)-1 상대 주소 지정방식
- 프로그램 카운터(PC)를 레지스터로 사용함.
- 주로 분기 명령어에서 사용됨.
EA = (PC) + A
유효 주소 = 프로그램 카운터의 내용 + 기억장치 주소
변위값은 음수도 가능 (2의 보수 존재)
(5)-2 인덱스 주소 지정방식
인덱스 레지스터를 사용함
인덱스 레지스터 : 인덱스(index) 값을 저장하는 특수 레지스터
인덱스 레지스터(IX)의 내용과 변위 A를 더하여 유효 주소를 결정
EA = (IX) + A
유효 주소 = 인덱스 레지스터의 내용 + 기억장치 주소
명령어가 실행될 때마다, 인덱스 레지스터의 내용이 자동적으로 증가 혹은 감소
명령어가 실행되면 다음 두 연산이 연속적으로 수행됨
EA = (IX) + A, IX ← IX + 1
(5)-3 베이스 레지스터 주소 지정방식
베이스 레지스터를 사용함
베이스 레지스터(BR)의 내용과 변위 A를 더하여 유효 주소를 결정
EA=(BR)+A
유효 주소=베이스 레지스터의 내용+기억장치 주소
2. 명령어 파이프 라인
- 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 방법으로 동시에 여러 개의 명령어를 실행하는 기법
명령어를 처리하는 것에 단계를 나눈다는 개념
<종류>
2-단계 명령어 파이프라인
4-단계 명령어 파이프라인
6-단계 명령어 파이프라인
(1) 2단계 명령어 파이프라인
명령어를 실행하는 하드웨어를 인출단계(fetch stage)와 실행단계 (execute stage)라는 두 개의 독립적인 파이프라인 모듈로 분리하여서 수행하는 방법
부연 설명))
명령어를 인출하는 일만 하는 하드웨어가 따로 있고 명령어를 실행하는 일만 하는 하드웨어가 따로 있음
클록이라는 단위 주기를 현실 세계의 초라는 개념으로 생각. 일정한 텀마다 명령어를 바꿔서 수행
=> 1클록에 인출 한 번 혹은 실행 한 번을 할 수 있다고 가정하고 시작
- CPU 세계에서 1초가 지났을 때 첫 번째 명령어 인출(인출하는 하드웨어에서)
- 1초가 지나면 첫번째 명령어에선 인출이 끝났으므로 그 명령어를 실행 단계를 수행하는 독립적인 하드웨어로 넘겨줌 - 그 다음 하드웨어에서 이를 실행. 이때 인출만 하는 하드웨어는 놀고 있으므로 두 번째 명령어를 인출
(명령어들이 동시에 실행되는 것처럼 보이나 동시에 실행되는 것이 아니라 각각의 하드웨어에서 병렬적으로 실행.)
(2) 4단계 명령어 파이프 라인
명령어 인출, 명령어 해독, 오퍼랜드(실제 데이터) 인출, 명령어 실행의 4단계로 구성된 파이프라인
이러한 4단계의 명령어를 병렬적으로 처리하는 것
명령어 인출(IF, Instruction Fetch) 단계
>명령어를 기억장치에서 인출하는 과정
>프로그램 카운터에서 제시된 기억장치 주소에 근거해서 명령어를 인출하여 명령어 레 지스터로 이동시키는 단계
명령어 해독(ID, Instruction Decode) 단계
>명령어 해독기(decoder)를 이용하여 첫 번째 단계에서 인출된 명령어를 해석
오퍼랜드 인출(OF, Operand Fetch) 단계
>기억장치에서 오퍼랜드를 인출하는 단계
>오퍼랜드는 피연산자 부분으로 연산에 사용될 변수나 데이터를 지칭함
실행(EX, Execute)단계
>명령어에서 지정된 연산을 수행하는 단계
한 클록이 지날 때마다 각자 자신의 하드웨어가 하고 있는 역할만 함
(3) 6단계 명령어 파이프 라인
명령어 인출, 명령어 해독, 오퍼랜드 계산, 오퍼랜드 인출, 명령어 실행, 오퍼 랜드 저장의 6단계로 구성된 파이프라인
FI(Fetch Instruction) 단계 : 명령어 인출단계
DI(Decode Instruction) 단계 : 명령어 해독단계
CO(Calculate Operand) 단계 : 오퍼랜드 계산 단계
>> 간접주소 또는 변위주소 지정방식: 유효주소를 찾는 계산이 필요함
FO(Fetch Operand) 단계 : 오퍼랜드 인출단계
EI(Execute Instruction) 단계 : 명령어 실행단계
WO(Write Operand) 단계 : 오퍼랜드 저장 단계
>>연산된 결과(오퍼랜드)를 저장하는 단계
6개의 하드웨어가 독립적으로 일처리 수행
<파이프 라인에 의한 속도 향상>
명령어 실행 시간 계산
k: 파이프라인의 단계 수
N: 실행할 명령어들의 수
각 파이프라인의 단계: 한 클록 주기씩 소요됨
T: 파이프라인을 적용했을때, N개의 명령어를 실행하는데 소요되는 시간
T = k + (N – 1)
T’: 파이프라인을 적용하지 않았을때, N개의 명령어를 실행하는데 소요되는 시간
T’ = k * N
ex)
k = 4
N = 10
파이프라인 클록 = 1 MHz (각 파이프라인 단계에서의 소요시간 = 1㎲)
T = 4 + (10 - 1) = 13 ㎲
T’ = (4 * 10) = 40 ㎲
파이프라이닝에 의한 속도 향상: T’ / T = 40 / 13 ≒ 3.08
=>파이프라인을 적용하지 않았을 때보다 파이프라인을 적용했을 때 속도가 약 세 배 빨라졌다
3. 인터럽트
CPU가 현재 실행 중인 프로그램의 처리를 강제적으로 중단시키고, 특정 주소에 위치한 프로그램을 수행하는 것
인터럽트 서비스 루틴(ISR, Interrupt Service Routine): 인터럽트를 처리하기 위해 실행되는 프로그램 루틴
(인터럽트가 시작되면, 현재 실행 중인 프로그램의 중요 데이터는 주기억장치에 저장 -> 현재 실행중인 프로그램은 중단 -> 중단된 프로그램은 인터럽트 서비스 루틴이 처리하는 프로그램이 종료된 후에 실행)
<인터럽트의 발생 원인과 종류>
- 기계 착오 인터럽트: 프로그램을 실행하는 도중, 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제로 인해 발생하는 인터럽트
- 슈퍼바이저 호출 인터럽트(Supervisor Call Interrupt): 슈퍼바이저 호출(SVC) 명령어를 사용하여 운영체제에 서비스를 요청할 때 발생하는 인터럽트
- 외부 인터럽트(External Interrupt): 오퍼레이터(operator)나 타이머(timer)에 의해 의도적으로 프로그램이 중단된 경우 발생하는 인터럽트
(ex)작업 관리자에서의 프로세스 메모리 중단)
- 입출력 인터럽트(I/O Interrupt): 입출력의 종료나 오류에 의해 CPU의 기능이 요청되는 경우 발생하는 인터럽트
(ex) I/O 제어기에 의한 프린터 출력, 키보드 입력 / scanf 함수가 끝날 때까지 cpu의 제어권을 입출력 장치에 넘겨주는 것)
- 프로그램 검사 인터럽트(Program Check Interrupt): 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제로 인해 발생하는 인터럽트
(ex) 오버플로우(overflow), 0에 의한 나누기(division by zero)->항상 error)
- 재시작 인터럽트(Restart Interrupt): 오퍼레이터 및 다른 프로세서에 의해서 재시작 명령이 도착하였을 때 발생하는 인터럽트
인터럽트 사이클(Interrupt Cycle)
- 인터럽트 발생을 처리하기 위한 사이클
- CPU가 인터럽트 요구의 존재 여부를 검사하는 과정
이때 인터럽트 가능? = 인터럽트가 왔니?
if 인터럽트 발생이 없다면
다음 명령어를 인출하는 사이클 수행
if 인터럽트 요구가 대기 중이라면
인터럽트 사이클에 의해서, 현재 프로그램의 실행을 중단하고 프로그램 상태(program state)를 저장
프로그램 카운터(PC)를 인터럽트 처리 루틴의 시작 주소로 설정하고 인터럽트를 처리
다중 인터럽트 처리
인터럽트 서비스 루틴을 수행하는 동안 또 다른 인터럽트가 발생하는 것
처리방식
(1) 순차적인 다중 인터럽트 처리
인터럽트 서비스 루틴을 처리하고 있는 도중에는, 새로운 인터럽트 처리요구가 들어오더라도 CPU가 새로운 인터럽트 사이클을 수행하지 X
나중에 발생한 인터럽트는 대기상태에서, 현재의 인터럽트에 대한 처리가 종료된 후에 발생한 순서대로 처리
(2) 우선순위 다중 인터럽트 처리
인터럽트의 우선순위를 정함
우선순위가 낮은 인터럽트가 처리되고 있는 동안에 우선순위가 더 높은 인터럽트가 들어오면, 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리함
문제
Q1. 다음은 주소 지정방식의 종류인 간접 주소 지정방식과 직접 주소 지정방식에 대한 보기들이다. 이들 중 틀린 보기는?
- 직접 주소 지정방식은 명령어 형식이 간단하다는 장점을 가진다.
- 실행 사이클 동안 직접 주소 지정방식은 기억장치에 한 번만 액세스하는 반면 간접 주소 지정방식은 두 번의 액세스가 필요하다.
- 간접 주소 지정방식이 직접 주소 지정방식보다 속도가 빠르다.
- 간접 주소 지정방식이 직접 주소 지정방식보다 더 많은 데이터를 표현할 수 있다.
- 간접 주소지정방식이 직접 주소지정방식보단 많은 데이터를 표현할 수 있다 하더라도 표현하는 데에 양적으로 한계를 가진다
Q2. 다음 보기에서 설명하고 있는 주소 지정방식의 종류는 무엇일까 ( )
연산에 사용할 데이터가 레지스터에 저장되어 있는 방식이다. 연산코드 뒤 레지스터 번호(R)에 1이 들어가 있으면 1번 레지스터에 데이터가 있다. |
Q3. 다음은 각각의 주소지정방식에서의 유효 주소를 표현한 식이다. 틀린 것은?
- 간접 주소 지정방식: 유효 주소=기억장치 A번지의 내용
- 레지스터 주소 지정방식: 유효 주소=레지스터 번호
- 레지스터 간접 주소 지정방식: 유효 주소=레지스터에 저장된 내용
- 상대 주소 지정방식: 유효 주소=프로그램 카운터의 내용+기억장치 주소
- 인덱스 주소 지정방식: 유효 주소=베이스 레지스터의 내용+기억장치 주소
Q4. 그림은 주소지정방식의 한 종류의 작동방식을 나타낸 그림이다 다음 그림이 설명하고 있는 주소지정방식은 무엇일까? ( )
Q5. 명령어를 효과적으로 실행하기 위한 기법 중 하나에 대한 설명이다. 보기에서 설명하고 있는 기법은 무슨 기법일까?
하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 방법으로 동시에 여러 개의 명령어를 실행하는 기법이다. 명령어를 처리하는 것에 단계를 나눈다는 개념. |
Q(6~7). 다음 문제에 주어진 조건을 보고 명령어를 실행하는데 파이프라인을 적용했을 때와 적용하지 않았을 때의 소요되는 시간을 각각 구하여라.
k(파이프라인의 단계 수) = 3 N(실행할 명령어들의 수) = 8 파이프라인 클록 = 1 MHz (각 파이프라인 단계에서의 소요시간 = 1㎲) |
Q6. T(파이프라인을 적용했을 때 소요된 시간): ( )
Q7. T’(파이프라인을 적용하지 않았을 때 소요된 시간): ( )
Q(8~9). 다음 보기에서 설명하고 있는 인터럽트의 종류는 무엇일까
Q8 ( )
입출력의 종료나 오류에 의해 CPU의 기능이 요청되는 경우 발생하는 인터럽트. I/O 제어기에 의한 프린터 출력, 키보드 입력 등이 대표적인 예시다 |
Q9 ( )
프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제로 인해 발생하는 인터럽트. 오버플로우(overflow), 0에 의한 나누기(division by zero) 등이 대표적인 예시다. |
Q10. 다중 인터럽트 처리는 처리 방식에 따라 순차적인 다중 인터럽트 처리방식과 우선순위 다중 인터럽트 처리방식으로 구분된다. 다음 그림은 둘 중 하나의 처리방식을 표현한 그림이다. 어떠한 처리방법을 표현한 그림일까?
( )
정답
A1. 다음은 주소 지정방식의 종류인 간접 주소 지정방식과 직접 주소 지정방식에 대한 보기들이다. 이들 중 틀린 보기는? 3
- 직접 주소 지정방식은 명령어 형식이 간단하다는 장점을 가진다.
- 실행 사이클 동안 직접 주소 지정방식은 기억장치에 한 번만 액세스하는 반면 간접 주소 지정방식은 두 번의 액세스가 필요하다.
- 간접 주소 지정방식이 직접 주소 지정방식보다 속도가 빠르다.
- 간접 주소 지정방식이 직접 주소 지정방식보다 더 많은 데이터를 표현할 수 있다.
- 간접 주소지정방식이 직접 주소지정방식보단 많은 데이터를 표현할 수 있다 하더라도 표현하는 데에 양적으로 한계를 가진다
간접 주소 지정방식이 직접 주소 지정방식보다 속도가 느리다. 직접 주소 지정방식은 기억장치에 한 번만 액세스하는 반면 간접 주소 지정방식은 두 번의 액세스가 필요하기 때문에 더 많은 데이터를 표현하는 반면 속도는 더 느리다.
A2. 레지스터 주소 지정 방식
A3. 다음은 각각의 주소지정방식에서의 유효 주소를 표현한 식이다. 틀린 것은? 5
- 간접 주소 지정방식: 유효 주소=기억장치 A번지의 내용
- 레지스터 주소 지정방식: 유효 주소=레지스터 번호
- 레지스터 간접 주소 지정방식: 유효 주소=레지스터에 저장된 내용
- 상대 주소 지정방식: 유효 주소=프로그램 카운터의 내용+기억장치 주소
- 인덱스 주소 지정방식: 유효 주소=베이스 레지스터의 내용+기억장치 주소
보기 5번에 표현된 식은 인덱스 주소 지정방식이 아니라 베이스 레지스터 주소 지정방식이다.
A4. 레지스터 간접 주소 지정방식
- 오퍼랜드 필드가 레지스터 번호를 나타내며, 해당 레지스터에 저장된 내용이 유효주소가 된다
A5. 명령어 파이프 라인
명령어를 효과적으로 실행하기 위한 기법 중 하나에 대한 설명이다. 보기에서 설명하고 있는 기법은 무슨 기법일까?
하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 방법으로 동시에 여러 개의 명령어를 실행하는 기법이다. 명령어를 처리하는 것에 단계를 나눈다는 개념. |
A6. 10㎲
T: 파이프라인을 적용했을때, N개의 명령어를 실행하는데 소요되는 시간
(k=3, N=8)
T = k + (N – 1)
3+(8-1)=10㎲
A7. 24㎲
T’: 파이프라인을 적용하지 않았을때, N개의 명령어를 실행하는데 소요되는 시간
T’ = k * N
3*8=24㎲
A8 ( 입출력 인터럽트 )
입출력의 종료나 오류에 의해 CPU의 기능이 요청되는 경우 발생하는 인터럽트. I/O 제어기에 의한 프린터 출력, 키보드 입력 등이 대표적인 예시다 |
A9 ( 프로그램 검사 인터럽트 )
프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제로 인해 발생하는 인터럽트. 오버플로우(overflow), 0에 의한 나누기(division by zero) 등이 대표적인 예시다. |
A10 우선순위 다중 인터럽트 처리
우선순위가 낮은 인터럽트가 처리되고 있는 동안에 우선 순위가 더 높은 인터럽트가 들어오면 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리하는 방식을 표현한 그림이다
참고) 2019 컴퓨터 구조 호준원교수님 강의노트, 디지털논리와 컴퓨터 설계, Harris et al. (조영완 외 번역), 사이텍미디어, 2007, 컴퓨터 구조와 원리 (비주얼 컴퓨터 아키텍처), 신종홍 저, 한빛미디어, 2011
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 4주차 (0) | 2020.05.28 |
---|---|
컴퓨터 구조 3주차(2) (0) | 2020.05.23 |
컴퓨터 구조 2주차(2) (0) | 2020.04.16 |
컴퓨터 구조 2주차(1) (0) | 2020.04.16 |
컴퓨터 구조 1주차 (0) | 2020.04.12 |