Mano의 컴퓨터시스템구조 제3판, 프로텍 미디어, 김종상 옮김 도서를 정리, 요약하는 글입니다.
1. 프로그램 제어
- 컴퓨터의 명령어는 대체로 데이터 전송 명령어, 데이터 처리 명령어, 프로그램 제어 명령어가 있다. 여기서는 제어 명령어에 대해서 알아본다.
- 분기(Branch) 명령어 : 조건부 분기 명령어와 무조건 분기 명령어가 있다. 무조건 분기 명령어는 어떤 조건에서나 지정된 주소로 분기가 일어나고, 조건부 분기 명령어에서는 어떤 특수한 조건(어떤 변수가 음수냐 양수냐)에 따라서만 분기한다.
- 스킵(skip) 명령어 : 실행 사이클 동안 프로그램 카운터(PC) 값을 증가시켜 바로 다음 명령어를 뛰어 넘게 하는 무주소 명령어이다.
- 콜(call)과 리턴(return) 명령어 : 서브루틴과 관련되어 있다. 특정 상태를 나타내는 레지스터를 조정함으로써 분기를 한다.
2. 상태 비트 조건
- 상태 비트(status bit)는 조건 비트(condition bit), 플래그(flag) 등으로 불린다. 상태 비트의 블럭도는 위 그림과 같다. 8비트 ALU와 4비트 상태 레지스터(V, Z, S, C)로 구성되어 있다.
- C 비트 : ALU 출력 캐리가 1이면 1, 아니면 0
- S 비트 : ALU 연산 결과에서 가장 높은 자리의 비트(부호 비트)가 1이면 1, 아니면 0
- Z 비트 : ALU 연산 결과를 나타내는 워드의 비트가 모두 0이면 1, 아니면 0
- V 비트 : C8, C9 캐리의 exclusive-OR 결과가 1이면 1, 아니면 0 (부호화된 2의 보수로 숫자 계산해서 오버플로 발생하면 1)
- 입력된 A, B가 만약 더하였을 때 오버플로가 발생하면 V가 1이다. A, B를 exclusive-OR했을 때 결과가 0이면 Z가 1이고 A = B이다. A 속의 1비트를 검사하고 싶을 때는 그 비트를 제외한 모든 비트를 0으로 한 B와 AND를 시키면 알 수 있다. 즉 A = 00010000로 해서 and 연산을 하게 하고 이때 Z = 1이면 x = 0이며 Z = 0이면 x = 1이라는 것을 알 수 있다.
3. 조건부 분기 명령어
- 반대 조건을 나타내는 경우 N(No)를 끼워 넣는 형식으로 표현한다.
- 조건이 맞으면 프로그램은 지정된 주소로 분기하며 그렇지 않으면 다음 명령어를 수행한다.
- 비교 명령은 두 피연산자의 차를 계산한 후의 상태 비트를 가지고 둘 중 어느 것이 큰가 결정한다.
- 부호 없는 숫자의 경우 부호화된 2의 보수로 뺄셈을 해준다.
4. 서브루틴 Call과 Return
- 서브루틴은 어떤 특정한 작업을 수행하도록 일련의 명령어들로 구성된 프로그램이다. 어떤 프로그램이 수행되는 중 서브 프로그램을 호출하면 그 시작 위치로 분기가 되고 서브루틴이 끝나면 다시 주 프로그램으로 분기한다.
- 서브루틴을 부르는 명령어(call subroutine)는 현재 프로그램 카운터를 어떤 위치에 저장시킨다. 그 다음 서브루틴의 시작 위치로 이동하여 수행한다. 모든 서브루틴의 마지막 명령어는 return from subroutine 인데, 저장해두었던 리턴 주소를 프로그램 카운터에 넣는 것이다.
- 리턴 주소를 저장하는 것은 스택을 쓰는 것이 효율적이다. 가장 마지막으로 올린 서브루틴의 주소가 스택의 top에 있기 때문에 retrun from subroutine 명령어에서는 스택의 값을 pop하여 PC에 올려놓으면 된다. 서브루틴이 실행되는 동안 다른 서브루틴을 호출하면 새로운 리턴 주소를 스택에 올리면된다. 마이크로 연산을 정리하면 다음과 같다.
(1) call subroutine
SP ← SP + 1
M[SP] ← PC
PC ← (서브루틴의) 유효주소
(2) return from subroutine
PC ← M[SP]
SP ← SP - 1
5. 프로그램 인터럽트
- 프로그램 인터럽트은 정상적인 프로그램의 진행을 벗어나게 하는 여러 가지 문제를 말한다. 인터럽트는 다음 세가지의 요건 제외하면 서브루틴 콜과 비슷하다.
(1) 다음에 설명한 소프트웨어 인터럽의 경우를 제외하고는 명령어의 수행에 의한 것이라기보다 내외부적인 신호에 의해 프로그램 진행이 바뀐다.
(2) 서비스 프로그램의 주소는 명령어의 주소 필드에 있는 것이 아니라 하드웨어 의해 결정된다.
(3) 인터럽트에서의 프로그램 카운터만이 아니라 CPU의 다른 상태를 나타내는 정보도 대피시킨다.
- 프로그램이 인터럽트 되어 서비스 프로그램을 수행한 뒤에는 다시 원래의 프로그램으로 돌아오기 위해서는 인터럽트 발생 이전과 똑같은 상태의 CPU로 돌려놔야 한다. 그러기 위해서는 프로그램 카운터의 내용, 모든 레지스터의 내용, 상태 조건의 내용을 확인해야 한다. 이 모든 CPU의 상태를 나타내는 상태 비트 조건의 집합을 가진 독립된 레지스터를 program status word(PSW)라 한다.
- 인터럽트 서브루틴 콜과 비슷한 점은 인터럽트 시 CPU 상태가 스택에 저장되며 서비스 프로그램 카운터가 바뀐다는 점이다. 다른 점은, 서비스 프고그램의 시작 위치는 하드웨어 요건에 의해 결정된다는 점이다.
- CPU 는 실행 사이클이 한 번씩 완료될 때마다 인터럽트가 발생했는지 확인하고 이때 발생했다면 인터럽트 사이클로 들어가게 된다. 이 사이클 동안 PC와 PSW가 스택에 저장되고 분기해야 할 주소가 PC에 놓여지고 새로운 PSW가 결정된다. 서비스 프로그램의 마지막은 항상 return from interrupt인데, 이 때는 이전의 PC와 PSW를 받아내어 리턴 주소를 결정하게 된다.
6. 인터럽트의 형태
- 인터럽트의 형태는 다음 세 가지가 있다.
(1) 외부 인터럽트 : 입출력(I/O) 장치, 타이밍 장치, 전원 등 외부적요인으로 발생한다. 무한 루프를 진행함으로써 그 프로그램에 할당된 시간이 지나면 인터럽트가 발생한다. 전원 공급이 끊어질 때는 CPU의 전 상태가 비소멸성 기억 장치로 수밀리초 이내에 기억하게 되는 서비스 프로그램으로의 인터럽트가 발생한다. 이는 프로그램이 수행되는 당시의 상황에 의해 좌우되므로 비동기성이다.
(2) 내부 인터럽트 : 불법적인 명령이나 데이터를 사용할 때 발생한다. 오버플로 발생했거나, 0으로 나눈다거나, 스택이 넘치거나, 메모리 보호가 어려워졌을 때 적절한 조치를 취한다. 내부 인터럽트는 외부 인터럽트와 달리 매번 같은 위치에서 발생하므로 동기성이다.
(3) 소프트웨어 인터럽트 : 내부나 외부 인터럽트는 CPU의 하드웨어에서의 신호에 의해 일어나는 반면 소프트웨어 인터럽트는 명령어의 수행에 의해 일어난다. 프로그래머에 의해 프로그램 상 원하는 위치에서 인터럽트를 하는 것이다. supervisor call instruction은 사용자 모드에서 커널 모드로 CPU의 상태를 변화시키는 것이다. 커널 모드일 때만 동작일 경우 이 명령을 쓴다. 이 프로그램은 요구한 작업에 관한 정보를 operating system에 제공해주어야 한다.
'CS > 컴퓨터구조(Mano)' 카테고리의 다른 글
[컴퓨터구조] ch.9 파이프라인과 벡터 처리 (1) 파이프라인 (0) | 2024.10.15 |
---|---|
[컴퓨터구조] ch.8 중앙처리장치 (5) 간소화된 명령어 집합 컴퓨터 (1) | 2024.10.14 |
[컴퓨터구조] ch.8 중앙처리장치 (3) 어드레싱 모드 (2) | 2024.10.09 |
[컴퓨터구조] ch.8 중앙처리장치 (2) 명령어 형식 (0) | 2024.10.09 |
[컴퓨터구조] ch.8 중앙처리장치 (1) 스택 구조 (1) | 2024.10.09 |