CPU가 메모리에 접근하는 속도는 레지스터에 접근하느 속도보다 훨씬 느림
-> ALU 결과값을 메모리가 아닌 레지스터에 우선 저장
<플래그> -> 플래그 레지스터에 저장됨
- 부호 플래그
- 제로 플래그 : 연산 결과가 0인지
- 캐리 플래그 : 연산 과정에서 올림수나 빌림수 발생 여부
- 오버플로우 플래그
- 인터럽트 플래그 : 인터럽크 가능 여부
- 슈퍼바이저 플래그 : 커널 모드인지 사용자 모드인지
제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품 / 클럭, 수행할 명령어, 플래그, 제어신호를 받아들임
제어 신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
<중요하게 다루는, 많은 CPU가 공통으로 포함하는 여덟 개의 레지스터>
- 프로그램 카운터(PC; Program Counter) (= 명령어 포인터) -> 변위 주소 지정 방식
: 메모리에서 읽어 올 명령어의 주소를 저장
- 명령어 레지스터(IR; Instruction Register)
: 메모리에서 읽어 온 명령어를 저장
명령어 레지스터 속 명령어 -> 제어장치 -(해석)--(제어신호)->
- 메모리 주소 레지스터(MAR; Memory Address Register)
: 메모리 주소를 저장
CPU -(메모리 주소 레지스터)-> 주소 버스
- 메모리 버퍼 레지스터 (MBR; Memory Buffer Register) (= 메모리 데이터 레지스터 MDR; Memory Data Register)
: 메모리와 주고받을 값 (데이터 + 명령어)을 저장
메모리 -(메모리 버퍼 레지스터)-
- 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장
- 범용 레지스터 : 데이터와 주소 모두 저장 가능
- 스택 포인터 -> 스택 주소 지정 방식
: 스택의 꼭대기를 가리키는 레지스터. 스택에 마지막으로 저장한 값의 위치를 저장
- 베이스 레지스터 -> 변위 주소 지정 방식
변위 주소 지정 방식(displacement addressing mode)
: 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
= 연산 코드 + 레지스터 필드 + 오퍼랜드 필드
-> 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등
- 상대 주소 지정 방식(relative addressing mode) : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
-> 분기하여 특정 주소의 코드를 실행할 때 사용
- 베이스 레지스터 주소 지정 방식(base-register addressing mode) : 오퍼랜드와 베리스 레지스터의 값을 더하여 유효 주소를 얻는 방식
명령어 사이클: 하나의 명령어가 처리되는 주기 / 인출 - 실행 - 간접 - 인터럽트
- 인출 사이클(fetch cycle): 메모리에 있는 명령어를 CPU로 가져오는 단계
- 실행 사이클(execution cycle): CPU로 가져온 명령어를 실행하는 단계 / 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생
- 간접 사이클(indirect cycle) -> e.g. 간접 주소 지정 방식
- 인터럽트(interrupt): CPU의 작업을 방해하는 신호 -> 동기 인터럽트, 비동기 인터럽트
동기 인터럽트(synchronous interrupts): CPU에 의해 발생하는 인터럽트 (= 예외; exception)
-> 폴트, 트랩, 중단, 소프트웨어 인터럽트
- 폴트(fault): 에외가 발생한 명령어부터 실행을 재개
- 트랩(trap): 예외가 발생한 명령어의 다음 명령어부터 실행을 재개. e.g. 디버깅
- 중단(abort): CPU가 실행 중인 프로그램을 강제 중단할 수 밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
- 소프트웨어 인터럽트(software interrupt): 시스템 호출이 발생했을 때
비동기 인터럽트(asynchronous interrups): 주로 입출력장치에 의해 발생하는 인터럽트 (= 하드웨어 인터럽트)
-> 막을 수 있는 인터럽트(maskable interrupt) , 막을 수 없는 인터럽트(non-maskable interrupt)
- 인터럽트 서비스 루틴(ISR; Interrupt Service Routine) : 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램
= 인터럽트 핸들러(interrupt handler)
= 명령어 + 데이터
- 인터럽트 벡터(interrupt vector) : 인터럽트 서비스 루틴을 식별하기 위한 정보
인터럽트 서비스 루틴을 실행하기 전의 프로그램을 재개하기 위해 필요한 내용들을 스택에 백업.
'✍🏻 TIL > 혼자 공부하는 컴퓨터 구조+운영체제' 카테고리의 다른 글
| [Chapter 03] 명령어 (1) | 2025.07.25 |
|---|---|
| [Chapter 02] 데이터 (1) | 2025.07.24 |
| [Chapter 01] 컴퓨터 구조 시작하기 (1) | 2025.07.24 |
