1. ALU와 제어장치
1) ALU
- CPU 내부의 계산을 담당
- 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호(수행할 연산)를 받아들여 산술연산, 논리연산 등 다양한 연산을 수행
ALU가 연산을 수행한 결과는 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장됨
- ALU가 연산할 때마다 CPU가 메모리에 접근하게 되면 프로그램의 실행 속도가 늦어짐
- 레지스터에 일시적으로 저장하여 접근 속도를 향상시켜 프로그램의 속도를 향상
- 플래그는 연산 결과에 대한 추가적인 상태 정보를 의미하며 플래그 레지스터에 저장됨
- CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보
플래그 종류 | 의미 |
부호 플래그 | 연산한 결과의 부호를 나타냄 |
제로 플래그 | 연산 결과가 0인지 여부를 나타냄 |
캐리 플래그 | 연산 결과 올림수나 빌림수가 발생했는지를 나타냄 |
오버플로우 플래그 | 오버플로우가 발생했는지를 나타냄 |
인터럽트 플래그 | 인터럽트가 가능한지를 나타냄 |
슈퍼바이저 플래그 | 실행 중인 모드가 커널 모드인지 사용자 모드인지 나타냄 |
2) 제어장치
- 제어장치
- 제어 신호를 내보내고, 명령어를 해석하는 부품
- 제어 신호
- 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
- 제어장치가 받아들이는 정보
- 클럭 신호
- 클럭(clock)
- CPU의 속도를 나타내는 단위
- 일정 주기에 맞춰 데이터가 이동되거나 연산 수행, 명령어를 읽어들임
- 하나의 명령어가 여러 클럭에 걸쳐 실행될 수 있음
- 클럭(clock)
- 해석해야 할 명령어
- CPU가 해석해야 할 명령어는 명령어 레지스터에 저장됨
- 제어장치는 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어신호를 발생시킴
- 플래그 레지스터 속 플래그 값
- 플래그 값을 참고하여 제어 신호를 발생
- 시스템 버스(그 중 제어 버스)로 전달된 제어 신호
- 제어 신호를 CPU 뿐만 아니라 입출력 장치를 비롯한 CPU 외부 장치도 발생 가능
- 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들임
- 클럭 신호
- 제어장치가 내보내는 정보
- CPU 외부에 전달하는 제어 신호
- 제어 버스로 제어 신호를 내보냄
- 메모리에 전달하는 제어 신호, 입출력 장치(보조기억장치 포함)에 전달하는 제어 신호
- CPU 내부에 전달하는 제어 신호
- ALU에 전달하는 제어 신호, 레지스터에 전달하는 제어 신호
- CPU 외부에 전달하는 제어 신호
2. 레지스터
- 레지스터
- CPU 내부의 작은 임시 저장장치
- 프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨
1) 레지스터 종류
- 프로그램 카운터(PC: Program Counter)
- 메모리에서 가져올 명령어의 주소(=메모리에서 읽어 들일 명령어의 주소)를 저장
- 명령어 레지스터(IR: Instruction Register)
- 해석할 명령어(=메모리에서 읽어 들인 명령어)를 저장하는 레지스터
- 제어장치는 명령어 레지스터 속 명령어를 받아 해석한 뒤 제어신호를 생성
- 메모리 주소 레지스터(MAR: Memory Address Register)
- 메모리의 주소를 저장하는 레지스터
- CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 거침
- 메모리 버퍼 레지스터(MBR: Memory Buffur Register)
- 메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터
- 데이터 버스로 주고 받을 값이 메모리 버퍼 레지스터를 거침
- 플래그 레지스터(flag register)
- ALU 연산 결과에 따른 플래그를 저장
- 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
- 범용 레지스터 (general purpose register)
- 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
- 데이터와 주소를 모두 저장
- 일반적으로 CPU 안에 여러 개의 범용 레지스터가 존재
- 스택 포인터(stack pointer)
- 스택 주소 지정 방식
- 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터란 스택의 꼭대기를 가리키는 레지스터
- 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
- 메모리 안에 스택 영역 안에 저장됨
- 스택 주소 지정 방식
3. 명령어 사이클과 인터럽트
1) 명령어 사이클(instruction cycle)
- 명령어가 반복되며 실행되는 주기
- 프로그램 속 명령어들은 명령어 사이클이 반복되며 실행됨
- 그 중 인출 사이클과 실행 사이클이 반복
- 인출 사이클(fetch cycle)
- 메모리에 있는 명령어를 CPU로 가지고 옴
- 실행 사이클(execution cycle)
- CPU로 가져온 명령어를 실행
- 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어신호를 발생시키는 단계
- 간접 사이클(indirect cycle)
- 어떤 명령어는 메모리 접근을 한 번 더 해야함
- Ex) 간접 주소 지정 방식
- 어떤 명령어는 메모리 접근을 한 번 더 해야함
2) 인터럽트(interrupt)
- CPU의 작업을 방해하는 신호
- 동기 인터럽트(synchronous interrupt)
- CPU에 의해 발생하는 인터럽트
- CPU가 명령어를 실행하다 예상 못한 상황(Ex.프로그래밍상의 오류)에 마주쳤을 때 발생하는 인터럽트
- 때문에 예외(Exception)라고도 부름
- 비동기 인터럽트(asynchronous interrupt)
- 주로 입출력장치에 의해 발생하는 인터럽트
- 하드웨어 인터럽트라고 함
- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 '알림'과 같은 인터럽트를 사용
- Ex) 프린터 작업의 경우, CPU가 주기적으로 프린터의 작업 완료 여부를 확인할 필요 없이,
프린터로부터 완료 인터럽트를 받을 때까지 다른 작업을 처리 가능 → CPU의 효율적인 명령어 처리 가능
- 하드웨어 인터럽트 처리 순서
- 입출력장치가 CPU에 인터럽트 요청 신호를 전송
- 인터럽트 요청 신호: 인터럽트가 가능한지 여부를 확인
- CPU는 실행 사이클이 끝나고 인출 사이클 실행 전에 항상 인터럽트 여부를 확인
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
- 인터럽트 플래그: 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램
- 인터럽트 벡터: 인터럽트 서비스 루틴을 식멸하기 위한 정보
- 인터럽트 서비스 루틴이 종료되면 CPU는 백업해둔 작업을 복구하여 실행을 재개
- 입출력장치가 CPU에 인터럽트 요청 신호를 전송
'컴퓨터 구조 &운영체제 > 컴퓨터구조 + 운영체제' 카테고리의 다른 글
메모리와 캐시 메모리 (0) | 2024.02.07 |
---|---|
CPU 성능 향상 기법 (1) | 2024.02.06 |
명령어 (0) | 2024.02.02 |
데이터 (1) | 2024.01.22 |
CPU Scheduling (0) | 2023.08.29 |