레지스터란?
CPU 내부의 작은 임시 저장 장치이며,
프로그램 속 명령어 & 데이터는 실행 전 후로 관련된 값들이 레지스터에 저장된다.
반드시 알아야 할 레지스터의 종류
1 | 프로그램 카운터 | 메모리에서 가져올 명령어의 주소를 저장 (메모리에서 읽어 들일 명령어의 주소) >> Instruction Pointer(명령어 포인터) 라고도 부르는 cpu도 있음 |
|
2 | 명령어 레지스터 | 해석할 명령어를 저장 (방금 메모리에서 읽어 들인 명령어) >> 제어장치가 해석 | |
3 | 메모리 주소 레지스터 | 메모리의 주소 저장 >> CPU가 읽어 들이고자 하는 주소를 주소버스로 보낼때 거치는 레지스터 | |
4 | 메모리 버퍼 레지스터 | 메모리와 주고 받을 값을 저장(데이터와 명령어) >> CPU가 정보를 데이터 버스로 주고 받을떄 거치는 레지스터 | |
5 | 플래그 레지스터 | 연산 결과 또는 CPU 상태에 부가적인 정보를 저장 | |
6 | 범용 레지스터 | 다양하고 일반적인 상황에서 자유롭게 사용(주소, 명령어, 데이터 등 다양하게 저장 가능) | |
7 | 스택 포인터 | 주소 지정에 사용 | 스택 주소 지정 방식: 스택과 스택 포인터를 이용한 주소 지정 방식 스택 포인터: 스택의 꼭대기를 가리키는 레지스터. (스택이 어디까지 차 있는지에 대한 표시 같은거.) |
8 | 베이스 레지스터 | 주소 지정에 사용 | 번위 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 특정 레지스터(프로그램 카운터, 베이스 레지스터)의 값을 더하여 유효 주소 얻기. 상대 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 우효 주소 얻기. 베이스 레지스터 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 베이스 레지스터(기준 주소)의 값을 더하여 유효 주소 얻기. |
명령어 사이클과 인터럽트 ★ ★ ★
명령어 사이클
- 명령어 사이클이란, 프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 말함.
인출 사이클 : 가장 먼저 CPU를 갖고 온다.
실행 사이클: 가지고 온 걸 실행한다.
인출 >> 실행 >> 인출 >> 실행... (반복).
but, CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있음.
이러한 메모리 접근이 더 필요한 경우엔 간접 사이클이 추가됨.
인출>> 간접 >> 실행 >> 인출 >>...(반복)
인터럽트가 발생했을 경우, 인터럽트 사이클 추가 됨.
인출 >> 간접 >> 실행 >> 인터럽트 >> 인출...(반복)
인터럽트
: 정해진 흐름대로 명령어를 처리하려는 CPU의 흐름을 끊어 버리는 행동을 함.
- 인터럽트(interrupt): 방해하다, 중단시키다.
- CPU가 꼭 주목해야 할 때이거나, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생.
ex>> 헤이헤이, 급해 급해!! 지금 하던 거 일단 멈추고 이것부터 실행해 줘!!
-인터럽트의 종류 :
1. 동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생.
-동기 인터럽트의 종류 : 폴트, 트랩, 중단, 소프트웨어 인터럽트.
2. 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생. 알림과 같은 역할(쿠쿠밥다됨 알림 같은 거)
하드웨어 인터럽트에 대해 더 자세하게 알아보자.
: 알림과 같은 인터럽트.
- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용.
- 입출력장치는 CPU에 비해 느리다.
인터럽트가 없다면 CPU는 명령 완료 여부를 확인하기 위해 주기적으로 확인해야 됨.
>> 그렇기 때문에 인터럽트를 이용해 입출력 작업동안 CPU가 다른 일을 할 수 있게 함.
하드웨어 인터럽트의 처리 순서
:인터럽트의 종류와 상관없이 인터럽트 처리 순서는 비슷함.
- 입출력 장치는 CPU에 인터럽트 요청 신호를 보냄.(입출력 장치들이 "지금 껴들어가도 되나요?" 하는 요청신호)
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인함.
- CPU는 인터럽트 요청을 확인하고 플래그 레지스터에 있는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인. >> 하드웨어 인터럽트에는 모든 인터럽트를 인터럽트 플래그로 막을 수 있진 않아. 막을수 있는 인터럽트와 막을수 없는 인터럽트로 나뉨
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업(스택영역에 백업)함.
- CPU는 인터럽트 벡터*를 참조하여 인터럽트 서비스 루틴*을 실행함.
- 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개.
* 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보.
* 인터럽트 서비스 루틴 :
인터럽트가 발생했 을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램. 프로그램이기에 메모리에 저장.
ex> 키보드가 인터럽트 요청을 보내면 이렇게 행동해야 함.
CPU가 인터럽트를 처리한 다라는 의미 >> 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다.(+ 그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다.)
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 ) 명령어 병렬 처리 기법 (0) | 2024.02.07 |
---|---|
컴퓨터 구조 ) 코어 & 멀티 코어, 스레드 & 멀티 스레드란 무엇인가? (0) | 2024.02.07 |
컴퓨터 구조 ) CPU를 구성하는 구성품 중 ALU와 제어장치에 대해 알아보자. (0) | 2024.02.06 |
컴퓨터 구조 ) 명령어의 구조에 대해 알아보자. (0) | 2024.01.25 |
컴퓨터 구조 ) 고급 언어와 저급 언어, 컴파일 언어와 인터프리트 언어란?? (0) | 2024.01.25 |