ALU와 제어장치
- ALU : 레스터를 통해 피연산자를 받아들이고 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다. 피연산자와 제어신호로 산술연산, 논리 연산 등 다양한 연산을 수행한다.
※ CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리다.
- 플래그 : ALU가 내보내는 연산 결과에 대한 추가적인 상태 정보. 플래그 레지스터에 저장된다.
플래그 종류 | 의미 | 사용 예시 |
부호 플래그 | 연산한 결과의 부호를 나타낸다 | 부호 플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미한다. |
제로 플래그 | 연산 결과가 0인지 여부를 나타낸다. | 제로 플래그가 1일 경우 연산 결과는 0, 0일 경우 연산 결과는 0이 아님을 의미한다. |
캐리 플래그 | 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다. | 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다. |
오버플로우 플래그 | 오버플로우가 발생했는지를 나타낸다. | 오버플로우 플래그가 1일 경우 오버플로우가 발생, 0일 경우 발생하지 않음 |
인터럽트 플래그 | 인터럽트가 가능한지를 나타냄 | 인터럽트 플래그 1일 경우 인터럽트가 가능함을 의미, 0일 경우 불가능함 |
슈퍼바이저 플래그 | 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타냄 | 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중, 0일 경우 사용자 모드로 실행 중 |
- 제어 장치 : 제어 신호를 내보내고, 명령어를 해석하는 부품
- 제어장치가 받아들이는 정보
- 클럭 신호 : 클럭 단위에 맞춰 레지스터 간의 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽는다.
- 해석해야할 명령어 : 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야할 내용을 알려준다.
- 플래그 레지스터 속 플래그 값 : ALU 연산에 대한 추가적인 상태 정보.
- 시스템 버스 중 제어 버스로 전달된 제어 신호 : 외부 장치로 부터 전달된 제어 신호를 받아들인다.
레지스터
레지스터는 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치이다.
이름 | 설명 |
프로그램 카운터 | 메모리에서 읽어 들일 명령어의 주소를 저장 |
명령어 레지스터 | 방금 메모리에서 읽어 들인 명령어를 저장 |
메모리 주소 레지스터 | 메모리의 주소를 저장 |
메모리 버퍼 레지스터 | 메모리와 주고받을 값(데이터와 명령어)을 저장 |
플래그 레지스터 | ALU 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장 |
범용 레지스터 | 데이터와 주소를 모두 저장할 수 있게 범용적으로 저장 |
스택 포인터 | 스택의 꼭대기를 가르키는 레지스터. 마지막으로 저장한 값의 위치를 저장 |
베이스 레지스터 | 명령이 시작되는 시작 번지를 저장 |
특정 레지스터를 이용한 주소 지정 방식
- 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식. 스택 포인터는 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터이다. 메모리 안에 스택 영역이 저장되어 있다.
- 변위 주소 지정 방식 : 오퍼랜드 필드 값과 특정 레지스터의 값을 더하여 유효주소를 얻는 방식
- 상대 주소 지정 방식 : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식.
- 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식. 즉, 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는지 오퍼랜드에 저장된 값을 연산하여 유효 주소를 얻는다.
명령어 사이클과 인터럽트
- 명령어 사이클 : 프로그램 속 명령어들은 일정한 주기가 반복되며 실행된다.
- 메모리에 있는 명령어를 CPU로 인출 -> CPU로 가져온 명령어를 실행
- 인터럽트 : CPU의 정상적인 작업을 중단하는 신호.
- 동기 인터럽트 : CPU에 의해 발생하는 인터럽트
- 비동기 인터럽트(하드웨어 인터럽트)
- 처리 순서
1) 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
2) CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부 확인
3) CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인
4) 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
5) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
6) 인터럽트 서비스 루틴 실행이 끝나면 4) 에서 백업해 둔 작업을 복구하여 실행을 재개
- 인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램. 인터럽트 핸들러라고도 부른다.
- 인터럽트 벡터 : 인터럽트 서비스 루틴을 구분하기 위해 식별하기 위한 정보
'CS > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 - (6) 보조 기억 장치와 입출력 장치 (0) | 2023.01.27 |
---|---|
컴퓨터 구조 - (5) 메모리와 캐시 메모리 (0) | 2023.01.26 |
컴퓨터 구조 - (4) CPU 성능 향상 기법 (0) | 2023.01.23 |
컴퓨터 구조 - (2) 데이터와 명령어 (0) | 2023.01.20 |
컴퓨터 구조 - (1) 개요 (0) | 2023.01.17 |
댓글