4. CPU의 작동 원리
4-1. ALU와 제어장치
‼ ALU와 제어장치가 무엇을 내보내고, 무엇을 받아들이는지 집중 ‼️
ALU
- 계산하는 부품
[받는 것]
- 레지스터를 통해 피연산자를 받아들이고,
- 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들임
[내보내는 것]
-
연산을 수행한 결과를 내보내고,
→ 이 결과값은 바로 메모리게 저장되지 않고 일시적으로 레지스터에 저장
[WHY] 메모리가 아닌 레지스터에 우선 일시적으로 저장하나요?
- CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 훨씬 빠르기 때문
- CPU가 ALU에서 연산할 때마다 메모리에 자주 접근하게 될텐데 프로그램 실행 속도를 빠르게 하기 위해
-
계산결과와 더불어 부호 플래그 를 내보냄
-
연산 결과가 연산결과를 담을 레지스터보다 클 때, '결과값이 너무 크다(overflow)' 라는 추가정보를 내보냄
[플래그 종류]
- 부호 플래그 : 1일 때, 음수
- 제로 플래그 : 1일 때, 0
- 캐리 플래그 : 1일 때, 자릿수 올림 있음
- 오버플로우 플래그 : 1일 때, 연산에서 결과가 표현 가능한 범위를 벗어났음
- 인터럽트 플래그 : 1일 때, 인터럽트가 활성화되어 있음
- 슈퍼바이저 플래그 : 1일 때, 현재 실행 중인 코드가 슈퍼바이저 모드에서 실행되고 있음
→ 플래그들은 플래그 레지스터라는 레지스터에 저장
제어장치
- 제어 신호를 내보내고, 명령어를 해석하는 부품
- 제어 신호 : 컴퓨터 부품들을 관리하고 작동시키는 전기 신호
[받는 것]
- 클럭(clock) 신호를 받아들임
- 해석해야 할 명령어를 받아들임
- 플래그 레지스터 속 플래그 값을 받아들임
- 시스템 버스 중에서 제어 버스로 전달된 제어 신호를 받아들임
[(외부로) 내보내는 것]
- 메모리로 제어 신호를 내보냄 : 메모리에 저장된 값을 읽거나 메모리에 새로운 값을 쓰고 싶을 때
- 입출력장치로 제어 신호를 내보냄 : 입출력장치의 값을 읽거나 입출력장치에 새로운 값을 쓰고 싶을 때
[(내부로) 내보내는 것]
- ALU에 제어 신호를 내보냄 : 수행할 연산을 지시하기 위해
- 레지스터에 제어 신호를 내보냄 : 레지스터 간에 데이터를 이용시키거나, 레지스터에 저장된 명령어를 해석하기 위해
4-2. 레지스터
반드시 알아야 할 레지스터
1. 프로그램 카운터 (PC; Program Counter)
- 메모리에서 가져올 명령어의 주소
- 메모리에서 읽어 들일 명령어의 주소를 저장
- 명령어 포인터 (IP; Instruction Pointer) 라고 부르기도 함
- 변위 주소 지정 방식이라는 주소 지정 방식에 사용
2. 명령어 레지스터 (IR; Instruction Register)
- 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터
3. 메모리 주소 레지스터 (MAR; Memory Address Register)
4. 메모리 버퍼 레지스터 (MBR; Memory Buffer Register)
- 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터
- 메모리 데이터 레지스터(MDr; Memory Data register)라고도 부름
5. 플래그 레지스터 (flag register)
- ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장
6. 범용 레지스터 (general purpose register)
- 이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식 (stack addressing mode)
7. 스택 포인터 (stack pointer)
- 주소 지정에 사용될 수 있는 특별한 레지스터
- 스택 주소 지정 방식이라는 주소 지정 방식에 사용
- 스택의 꼭대기를 가리키는 레지스터
- 스택에 마지막으로 저 장한 값의 위치를 저장하는 레지스터
특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식 (displacement addressing mode)
- 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
8. 베이스 레지스터
- 주소 지정에 사용될 수 있는 특별한 레지스터
- 변위 주소 지정 방식이라는 주소 지정 방식에 사용
[⭐️혼공단 미션 인증!⭐️]
p.125-2번
1. (플래그 레지스터) : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
2. (프로그램 카운터) : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
3. (범용 레지스터) : 데이터와 주소를 모두 저장할 수 있는 레지스터
4. (명령어 레지스터) : 해석할 명령어를 저장하는 레지스터
4-3. 명령어 사이클과 인터럽트
명령어 사이클 (instruction cycle)
- 내가 실행하는 프로그램은 수많은 명령어로 이루어져 있고, CPU는 이 명령어들을 하나씩 실행함
- 이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행됨
→ 이 주기를 명령어 사이클이라 함
[메모리에 저장된 명령어 하나를 실행한다고 가정]
-
인출 사이클 (fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
-
실행 사이클 (execution cycle) : CPU로 가져온 명령어를 실행하는 단계
제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계
-
명령어를 인출하여 CPU로 가져왔다 하더라도 바로 실행 사이클에 돌입할 수 없는 경우가 있음
명령어를 실행하기 위해서는 메모리 접근을 한 번 더 해야 하기 때문
→ 간접 사이클 (indirect cycle)
인터럽트(Interrupt)
- 사전적 의미 : 방해하다, 중단시키다.
- CPU가 수행 중인 작업은 방해를 받아 잠시 중단될 수 있는데, 이렇게 CPU의 작업을 방해하는 신호
동기 인터럽트 (synchronous interrupts) : CPU에 의해 발생하는 인터럽트, 예외(exception)라고 부름
비동기 인터럽트 (asynchronous interrupts) : 입출력장치에 의해 발생하는 인터럽트, 일반적으로 비동기 인터럽트를 인터럽트라 칭함 → 책에서는 혼동방지로 하드웨어 인터럽트라고 함