포털:고등학교/정보·통신 계열 전문 교과(2015)/컴퓨터 구조/프로그램 실행
메이저 사이클
[편집]메이저 상태는 중앙 처리 장치가 무엇을 하고 있는지 나타내는 것으로, 해당 사이클 동안에 무엇을 위해 기억 장치에 접근하는가를 나타낸다.
인출 사이클(fetch cycle)
[편집]■ 프로그램 카운터에 명령어가 저장되어 있는 기억 장치의 주소 값을 메모리 주소 레지스터에 전달한다. ■ 메모리 주소 레지스터에 기록된 주소 값으로 기억 장치에 있는 실제 데이터 주소로 이동한다. ■ 기억 장치에 있는 데이터를 메모리 버퍼 레지스터에 저장한다. ■ 메모리 버퍼 레지스터에서 명령 레지스터로 이동하여 명령어가 직접 명령인 지 간접 명령인지를 해석·판단하여 실행 사이클을 진행할 것인지 간접 사이 클을 실행할 것인지를 판단한다. ■ 메모리 버퍼 레지스터에서 명령 레지스터로 명령어가 전송되면 다음 명령어 실행을 위해서 프로그램 카운터의 값이 증가하여 다음 명령어의 실행을 대 기한다.
간접 사이클(indirect cycle)
[편집]명령어의 오퍼랜드가 간접 주소에서 주소부가 간접 주소 지정 방식으로 판정된 경우, 실 제 데이터가 저장된 기억 장소의 주소를 알기 위해 다시 한 번 기억 장치에 접근하여 주소 값을 구한 후 메모리 버퍼 레지스터에 데이터를 저장하는 과정을 간접 사이클이라고 한다.
명령어의 주소 부분에 특정 비트를 두어 ‘1’이면 간접 주소, ‘0’이면 직접 주소로 판단 할 수 있게 되어 있으며, 직접 주소인 경우는 간접 사이클은 해당되지 않는다.
실행 사이클(execute cycle)
[편집]인출 사이클과 간접 사이클을 거쳐 기억 장치에 접근하여 자료를 읽고, 인출 사이클 에서 해독한 명령어의 연산을 실행하는 상태를 실행 사이클이라 한다.
인터럽트 사이클(interrupt cycle)
[편집]인터럽트가 발생했을 때 인터럽트 프로그램을 처리하는 상태를 인터럽 트 사이클이라 한다. 인터럽트를 사용하면 입출력 연산이 진행되는 동안에 도 중앙 처리 장치는 다음 명령을 실행할 수 있기 때문에, 인터럽트는 주로 처리의 효율성을 높이기 위해 사용된다.
CPU는 현재 실행 중인 프로그램의 연산을 보류하고 인터럽트에 응답하 여 요구된 인터럽트 프로그램을 처리한 후, 다시 복귀하여 하던 일을 계속 한다.
명령어 인출과 실행
[편집]명령어 인출
[편집]■ 명령어를 해독하기 위해서는 먼저 해독할 명령을 주기억 장치에서 제어 장 치로 가져와야 한다. 이 과정을 명령어 인출(instruction fetch)이라고 한다. ■ 일정한 행위가 반복적으로 일어날 때 하나의 구간을 명령어 인출 주기(fetch cycle)라 한다. ⓛ 주기억 장치에서는 인출할 명령어의 주소를 명령 계수기가 가리킨다. ② 이 내용이 주소 레지스터에 옮겨져서 그 주소에 기억된 명령이 기억 레지 스터로 이동하게 된다. ③ 명령 계수기는 다음 명령이 기억된 주소를 가리키도록 증가된다. ④ 기억 레지스터에 기억된 명령은 명령 코드와 주소부가 분리되어 명령 코드 부의 내용 중에서 명령 코드는 명령 레지스터로, 명 령어 형식은 형식 레지스터로 각각 옮겨진다. ⑤ 형식 레지스터의 내용을 검사하여 직접 주소 형식 이면 실행 단계로 진행시킨다. ⑥ 간접 주소 형식의 명령어는 주소 값을 가져오기 위 하여 기억 레지스터에서 주소부를 주소 레지스터 로 옮긴다. ⑦ 주소 레지스터가 가리키는 곳의 내용을 기억 레지 스터에 옮기는 작업을 수행한 후 실행 단계를 진행 시킨다.
명령어 실행
[편집]■ 명령어 인출이 끝나면 실행 단계로 바뀐다. 실행 단계에서는 이미 명령 코드가 명령어 레지스터에 기억되어 있다. 현재 기억 레지스터에는 연산될 데이터의 주소가 기억되어 있다. <그림 Ⅲ-17>은 인출된 명령어가 실행되는 과정이다. ■ 기억 레지스터에 기억된 명령 코드는 명령어 해독기에서 해독되어 누산기 에 기억된 피연산 데이터와 연산 데이터인 기억 레지스터의 내용을 가산기 로 보내어 연산한다. ■ 연산된 결과는 누산기에 옮겨져서 기억되는 것으로 하나의 명령 실행이 끝난다. ■ 명령을 실행하기 위하여 명령어 인출 단계로 진행된다.
마이크로 동작
[편집]마이크로 동작의 표현
[편집]하나의 명령어를 수행하기 위한 작은 연산들로 단항(unary) 연산과 이항(binary) 연 산이 있다. 단항 연산은 피연산자가 하나만 존재하며, 부호의 반전과 부정 등이 있고, 이항 연산은 두 개의 데이터가 연산되는 경우이다. 마이크로 동작은 정해진 기호를 사용하여 표현한다. 마이크로 동작은 상태나 데이터 의 흐름, 연산 등을 레지스터 전체 또는 특정 부분, 특정 비트의 위치를 표현할 수 있다.
기호 | 역할 | 예 |
---|---|---|
대문자와 소문자 | 레지스터 표시 | ACC, A, MBR, R2 |
첨자 | 레지스터의 비트 | A2, A15, A2-8 |
괄호(()) | 레지스터의 부분 위치 | IR(ADR), MBR(AD) |
화살표(←) | 정보의 전달 | A ← B |
콜론(:) | 제어 기능의 끝 | P : |
콤마(,) | 마이크로 동작 구분 | A ← B, MAR ←C |
플러스(+) | 더하기 | X ← A + B |
마이너스(-) | 빼기 | X ← A - B |
¢ | 두 레지스터의 접합 | C ← A ¢ B |
프라임(~) | 보수 | X ← ~ |
∧ | 논리 AND | X ← A ∧ B |
∨ | 논리 OR | X ← A ∨ B |
SHL | 예시왼쪽으로 1비트 시프트, 오른쪽에 0 채움 | A ← SHL(A) |
SHR | 오른쪽으로 1비트 시프트, 왼쪽에 최상위 비트 복사 | A ← SHR(A) |
레지스터 전송
[편집]1. 병렬 전송(parallel transfer) 한 개의 클럭 펄스(Clock Pulse)가 가해지면 레지 스터의 모든 비트가 동시에 전송된다. 제어 회로에서 P=1이 발생하면, 레지스터 R1의 내용이 R2에 전송되는 적재 동 작이 이루어진다. 제어 회로는 클럭 펄스의 상승 에지에서 동기화된다. 첫 번째 펄 스의 상승 에지에서 P가 1이 되고, 두 번째 펄스의 상승 에지에서 P가 0으로 되는 순간에 레지스터의 전송이 이루어진다.
2. 직렬 전송(serial transfer) 클럭 펄스가 인가될 때마다 정보가 한 비트씩 전송된다. 하나의 마이크로 동작이 하 나의 워드 시간 동안에 이루어진다.
마이크로 동작 기호 |
---|
S : A1 ← B4, B1 ← B4, Ai ← Ai-1, Bi ← Bi-1, i=2,3,4 |
레지스터 B의 내용을 레지스터 A로 직렬 전송하는 블록도로 직렬 전송은 (b)에 서 시프트 제어 신호가 1이 되었을 때 일어난다. 처음에 B4가 A1에 직렬 이동되고, B1은 B4가 회전된다. 그 다음부터는 i가 2, 3, 4로 바뀌면서 A와 B 모두 바로 앞쪽 비트가 다음으로 이동된다. 직렬 전송에서 중요한 것은 워드 타임(word time)으로, 레지스터의 모든 내용이 시프트되는 데 필요한 시간을 의미한다. 4비트 레지스터의 완전한 전송을 위해서 는 제어 기능 S는 네 개의 클럭 펄스 동안 1을 유지해야 한다.
3. 버스 전송(bus transfer) 레지스터 상호 간의 자료 전송이 가능하려면 레지스터와 레지스터 사이에는 연 결선이 있어야 한다.
4. 기억 장치 전송(memory transfer) 기억 장치와 외부 회로 사이에서 이루어지는 전송으로 기억 장치에서 외부 회로 로 데이터를 전송하는 읽기 동작과 외부 회로의 정보를 기억 장치로 전송하는 쓰 기 동작이 있다. 주기억 장치를 M으로 표현하고, 기억 장치의 주소를 저장하는 레지스터를 MAR, 읽어 낸 자료와 기록할 자료를 일시적으로 저장하는 레지스터를 MBR이라 한다.
산술 마이크로 동작
[편집]레지스터에 저장된 숫자나 데이터에 대한 산술 동작을 수행하는 것으로 덧셈, 뺄셈, 보수, 시프트 등이 기본적인 산술 연산이다. 곱셈, 나눗셈 등 다른 산술 연산들은 기본 적인 마이크로 동작의 조합으로 수행된다. <표 Ⅲ-6>은 병렬 가산기의 입력들을 조정 함으로써 얻어지는 산술 마이크로 동작이다.
표현식 | 동작 내용 |
---|---|
F ← A + B | A와 B를 합하여 F에 기억 |
F ← A + B + 1 | 올림수가 있는 A와 B를 합하여 F에 기억 |
F ← A + B | B를 1의 보수로 취해 A와 덧셈(감산) |
F ← A + B + 1 | B를 2의 보수로 취해 A와 덧셈(감산) |
F ← A – 1 | A를 1 감소 |
F ← A + 1 | A를 1 증가 |
F ← A | A의 내용 전송 |
논리 마이크로 동작
[편집]레지스터 내의 비트 열 사이에 이루어지는 2진 연산 동작을 말한다.
1. 선택적 비트 설정 레지스터 A의 특정 비트를 1로 설정하고자 할 때 대응되는 레지스터 B의 비트를 1로 설 정하여 OR 연산 결과와 같게 한다.
2. 선택적 보수화 레지스터 B의 1에 대응하는 부분의 레지스 터 A의 비트를 선택하여 XOR 연산 결과와 같게 한다.
3. 선택적 지움 지우고자 하는 비트를 1로 설정하고 NOT 연산을 취한 후 레지스터 A와 AND 연산을 한다(A ← A ∧ B-).
4. 마스크 레지스터 B의 내용과 레지스터 A를 대응시켜 B의 1에 대응되는 내용은 그대로 통과시키고, 0과 대응되는 비트는 단절되어 0이 되도록 AND 연산 결과와 같게 한다.
5. 삽입 어떤 내용이 기억된 비트의 묶음 내에 특정 비트를 새로운 내 용으로 바뀌게 한다. 먼저 대상이 되는 레지스터의 해당 비트 부분을 0으로 지운 후, 삽입 대상 비트를 대응시켜 새로운 내용으로 바뀌게 한다.
6. 비교 동작 레지스터 A와 레지스터 B를 비교하여 두 개 의 워드가 일치하는 A를 0으로 설정하여 XOR 연산 결과와 같게 한다.
시프트 마크로 동작
[편집]레지스터 내용에 대한 시프트 동작을 실행하는 것으로 직렬 컴퓨터에서는 레지스터 간에 2진 정보를 전송하기 위하여, 병렬 컴퓨터에서는 산술·논리 연산을 수행하기 위하여 사용한다.
1. 직렬 전송 시프트(serial transfer shift) 레지스터 사이의 직렬 전송을 수행하는 동작으로 1비트씩 차례로 목적 레지스 터로 전송시킨다. 왼쪽 방향의 시프트는 SHL(shift left), 오른쪽 방향의 시프트는 SHR(shift right)로 표기한다.
2. 논리 시프트(logical shift) 대상이 되는 레지스터의 내용을 왼쪽 또는 오른쪽으로 1비트씩 차례로 이동시켜 바깥으로 밀려 나가는 비트는 손실되고 반대편의 공백에는 0으로 채워지도록 한 다. SHL과 SHR로 표기하고, 직렬 전송 시프트와의 차이는 외부 입력을 표시하지 않는다.
3. 산술 시프트(arithmetic shift) 부호와 함께 기억된 2진 정보를 시프트하기 위한 마이크로 동작으로 산술적 계산을 할 때 사용한다. 가장 왼쪽의 부호 비트는 변하지 않으며, 데이터의 값 을 나타내는 비트만 시프트 된다. 왼쪽 시프트는 곱셈을 수행할 때 사용하고, 오 른쪽 시프트는 나눗셈을 수행할 때 사용하며, ASHL(arithmetic shift left)과 ASHR(arithmetic shift right)로 표기한다.
4. 회전 회전은 시프트 레지스터의 양 끝의 플립플롭을 연결하여 순환시키는 시프트 로 한쪽 끝에서 밀려 나간 비트가 다시 반대편 끝 위치에 입력으로 채워진다. CIL(circular left)과 CIR(circluar right)로 표기한다.
마이크로 사이클
[편집]마이크로 사이클이란 마이크로 오퍼레이션을 수행하는데 필요한 중앙 처리 장치의 사이클 시간(cycle time)으로서 중앙 처리 장치의 처리 속도를 표시한다. 클럭 펄스의 제공으로 마이크로 동작을 제어하게 되는데, 클럭 펄스의 제공 방법에 따라 구분된다.
동기 고정식(synchronous fixed)
[편집]동기 고정식은 모든 마이크로 연산의 수행 시간이 같다고 가정하고, 마이크로 동작들 중 가장 수행 시간이 긴 것을 기본으로 클럭 발생기의 클럭 주기로 설정한다. 이 방식은 하드 웨어 구조와 제어가 간단하고 모든 마이크로 연산의 수행 시간이 비슷한 경우에 사용된다.
동기 가변식(synchronous variable)
[편집]마이크로 연산의 수행 시간이 서로 다를 경우 수행 시간이 비슷한 것끼리 그룹을 만 들어 서로 다른 마이크로 주기 시간을 정의하는 방식이다. 이 방식은 다소 제어가 복잡 하지만 마이크로 수행 시간의 차이가 현저할 때 중앙 처리 장치의 시간을 효율적으로 이용할 수 있다는 장점이 있다.
비동기식(asynchronous)
[편집]마이크로 연산의 수행 시간이 현저할 뿐만 아니라 수행 시간을 예측할 수 없을 때 각 각의 마이크로 연산에 대하여 서로 다른 마이크로 주기 시간을 정의하는 방식이다. 이 방식은 중앙 처리 장치의 시간 낭비가 없어 효율적으로 사용할 수 있지만 제어가 복잡 하므로 거의 사용하지 않는다.
추가적 설명
[편집]컴퓨터의 구조 및 프로그램 실행 과정
[편집]컴퓨터 시스템의 구성을 간단히 살펴보면, 두뇌에 해당하는 중앙처리장치(CPU)와 중앙처리 장치가 처리할 프로그램과 데이터를 임시로 저장하는 주기억장치(Main Memory), 프로그램 과 데이터 등을 반영구적으로 저장할 수 있는 하드디스크를 비롯해서, 키보드, 모니터, 프린 터 등의 주변장치로 구성되어 있다.
우선 가장 중요한 CPU의 구조를 좀더 자세히 살펴보면, CPU는 덧셈, 뺄셈과 같은 산술연 산과 논리합, 논리곱과 같은 논리연산을 수행하는 ALU(Arithmetic and Logic Unit)가 있으 며 ALU가 연산을 수행할 때 그 대상이 되는 데이터를 임시로 저장하는 CPU내의 저장 공 간인 레지스터(register)가 있다. ALU는 항상 이 레지스터로부터 데이터를 가져와서 연산하 고 그 결과 값 역시 다시 레지스터에 저장하게 된다. 보통 CPU내에는 이런 레지스터들이 다수 존재하게 되는데 CPU가 명령을 수행하는 데 필요한 시스템 레지스터와 프로그래머에 의해서 사용 가능한 범용 레지스터들이 있다. 보통 범용 레지스터들의 묶음을 레지스터 파 일이라고 하고 레지스터 파일에 있는 각각의 레지스터들은 번호나 이름으로 구별하게 된다. CPU내에는 ALU와 레지스터 파일 외에 명령을 해석한 후에 실행을 위해 ALU와 레지스터 파일을 제어하는 회로가 존재하게 되는데 이를 컨트롤 로직(control logic)이라고 한다.
보통 프로그래머가 작성한 프로그램은 CPU가 바로 해석할 수 있는 기계어의 형태로 번역 되어 하드디스크에 저장되었다가 운영체제에 의해서 실행될 때 주기억장치에 올려지고 CPU의 컨트롤 로직에 의해서 하나씩 실행되게 된다. 프로그램이 실행될 때 필요한 데이터 역시 하드디스크에 저장되었다가 메모리를 통하여 레지스터에 저장된 후 연산에 사용된다. 연산의 결과 값은 반대로 레지스터에 저장된 후에 메모리를 거쳐 하드디스크에 저장하게 된 다. 물론 입력데이터는 하드디스크가 아닌 키보드나 다른 입력장치를 통해 입력 될 수도 있 으며 출력 역시 모니터나 프린터 등의 장치가 될 수 있다.