선릉역 1번 출구
컴퓨터 구조(4) - CPU 본문
ALU: 계산을 담당하는 장치
INPUT: 레지스터를 통해 피연산자(operand)를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아 들임
OUTPUT: Integer Result를 레지스터에 저장하고 Status=flag(register)값을 내보냄
*결과값을 레지스터에 저장하는 이유는 메모리에 바로 저장하게 되면 cpu와 메모리 사이의 이동시간으로 느려지기 때문
flag의 종류
- 부호 플래그: 연산 결과가 음수인지 양수인지를 나타냄
- 제로 플래그: 연산 결과가 0인지 나타냄
- 캐리 플래그: 캐리가 발생했는지 나타냄
- 오버플로우 플래그: 오버플로우가 발생했는지 나타냄
- 인터럽트 플래그: 인터럽트가 가능한지 나타냄
- 슈퍼바이저 플래그: 커널 모드로 사용중인지, 사용자 모드로 실행 중인지를 나타냄
제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품
cpu의 구성 요소 중 가장 정교하게 설계된 부품으로 제조사마다 구현 방식이나 명령어를 해석하는 방식이 다를 수 있음
특징
1. 제어장치는 클럭 신호를 받아들임
- 클럭: 부품이 움직이는 신호 단위
- 컴퓨터의 모든 부품이 클럭 신호에 맞춰 작동함(but 한 클럭 신호마다 작동하는 것이 아니고 클럭이라는 박자에 맞춰 움직인다는 것임)
2. 해석해야 할 명령어를 받아들임
- 명령어 레지스터로부터 해석할 명령어를 받아들이고 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알림
3. 제어장치는 플래그 레지스터 속 플래그 값을 받아들임
4. 제어 버스로 전달된 제어 신호를 받아 들임
- 외부로 내보내는 제어 신호(메모리/입출력장치)
- 내부로 내보내는 제어 신호(ALU-연산 수행/레지스터-레지스터 간 데이터 이동 및 레지스터에 저장된 명령어 해석을 위함)
레지스터: 명령어와 데이터가 저장되는 공간
- 프로그램 카운터: 메모리에서 가져올 명령어의 주소가 저장
- 명령어 레지스터: 메모리에서 읽어 들인 명령어를 저장
- 메모리 주소 레지스터: 메모리의 주소를 저장하는 레지스터, cpu가 읽어들이고자 하는 주소 값을 주소 버스로 보낼 때 거치는 레지스터
- 메모리 버퍼 레지스터: 메모리와 주고받을 값을 저장하는 레지스터, 메모리에 r/w전에 이 레지스터를 거침
- 플래그 레지스터: ALU 연산 결과 도는 cpu 상태에 대한 부가적인 정보를 저장
- 범용 레지스터: 데이터와 주소를 모두 저장할 수 있음
- 스택 포인터:
- 베이스 레지스터
CPU로 실행할 프로그램이 메모리 1000번지에 저장된 상황
(메모리 1000번지에는 명령어 1101이 저장되어 있음)
프로그램 카운터 | 1000 |
메모리 주소 레지스터 | |
메모리 버퍼 레지스터 | |
명령어 레지스터 |
메모리에서 가져올 명령어가 1000번지에 있다는 것을 의미(PC의 값)
프로그램 카운터 | 1000 |
메모리 주소 레지스터 | 1000 |
메모리 버퍼 레지스터 | |
명령어 레지스터 |
1000번지를 읽기 위해서 주소 버스를 통해 값을 내보내야 하므로 메모리 주소 레지스터에 1000을 저장
주소 버스를 통해 메모리 주소 레지스터 값인 1000을 보냄 + 제어신호(메모리 읽기)
프로그램 카운터 | 1001 |
메모리 주소 레지스터 | |
메모리 버퍼 레지스터 | 1101 |
명령어 레지스터 |
pc의 값인 1000이 실행되었으므로 pc + 1 해줌
프로그램 카운터 | 1001 |
메모리 주소 레지스터 | |
메모리 버퍼 레지스터 | 1101 |
명령어 레지스터 | 1101 |
메모리 버퍼 레지스터에 있는 값이 명령어 레지스터로 이동함
그럼 제어장치는 명령어 레지스터에 있는 명령어를 해석하고 제어 신호를 발생시킴
*CPU가 주소 버스로 내보낼 값은 메모리 주소 레지스터를, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거침
주소 지정 방식
- 즉치 주소지정: 피연산자가 명령어에 포함됨
- 직접 주소지정: 명령어에 피연산자의 주소(주기억장치)가 포함됨
- 간접 주소지정: 명령어에 주기억장치의 주소가 포함되고 주기억장치의 주소에는 피연산자가 들어있는 주기억장치의 주소가 들어있음
- 스택 주소 지정: 메모리 안 스택이라는 특정 영역에서 최상단을 가리키는 스택 포인터를 사용하는 방식
- 변위 주소 지정: operand의 값과 특정 레지스터의 값을 더해 메모리의 유효 주소를 알아내는 방식
명령어 사이클: 명령어를 처리하는 정형화된 흐름
- 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클: CPU로 가져온 명령어를 실행하는 단계
- 간접 사이클: CPU로 가져온 명령어 실행 시 메모리 접근이 필요한 경우
인터럽트: CPU의 작업을 방해하는 신호
'CPU가 인터럽트를 처리한다' = 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아옴
- 동기 인터럽트(예외): CPU에 의해 발생하는 인터럽트
- 비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트
CPU가 인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 설정되어 있어야 함
*인터럽트 플래그가 0으로 설정되어 있어도 무시할 수 없는 플래그가 존재하긴 함
인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램
ex) 마우스가 어떤 인터럽트 요청을 보냈을 때 어떻게 작동한다
-> 각기 다른 인터럽트 서비스 루틴을 구분하기 위해 인터럽트 벡터를 사용함
'Computer > CS' 카테고리의 다른 글
컴퓨터 구조(6) - 메모리와 캐시 메모리 (0) | 2022.11.15 |
---|---|
컴퓨터 구조(5) - CPU의 속도 (0) | 2022.11.15 |
컴퓨터 구조(3) - 명령어 (0) | 2022.11.12 |
컴퓨터 구조(2) - 정보 단위 (0) | 2022.11.12 |
컴퓨터 구조(1) - 기본 구성 요소 (0) | 2022.11.12 |