Today I Learned
스탠다드 특강에서 CPU 구성요소에 대해 배웠다. 오늘은 그 내용을 간략하게 정리해보려 한다.
CPU는 메모리에 저장된 명령어를 읽고, 해석하고, 실행하는 장치이다.
내부에는 1.ALU 2.제어장치 3.레지스터 라는 구성요소가 있다.
1. ALU - 계산기
예를 들어 1과 2를 더하라는 계산을 하라하면 '1'과 '2'는 피연산자, '더하기'라는 수행할 연산이라고 할 수 있다.
레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들인다.
ALU는 레지스터와 제어장치로부터 받아들인 피연산자와 제어신호를 이용해 산술연산, 논리연산 등 다양한 연산을 수행한다.
ALU가 내보내는 정보로는 특정 숫자나 문자가 될수도 있고, 메모리 주소가 될 수도 있다. 그리고 이 결과 값은 바로 메모리에 저장되는것이 아니라 일시적으로 레지스터에 저장된다. 일일이 메모리에 저장하게 되면 CPU는 메모리에 더 자주 접근하게 되고, 이는 CPU의 프로그램 실행속도를 늦출 수 있기 때문이다.
ALU는 계산결과와 더불어 플래그를 함께 내보낸다. 플래그에 대한 정보는 다음과 같다.
이런 플래그 레지스터를 읽으면 연산결과에 대한 추가적인 정보, 참고 정보를 얻을 수 있다.
이 밖에도 덧셈을 위한 가산기, 뺄셈을 위한 보수기, 시프트 연산을 수행해 주는 시프터, 오버플로우를 대비한 오버플로우 검출기 등이 있다.
2. 제어장치 - CPU내의 다양한 작업들을 조율하는 자, CPU 구성요소 중 가장 정교하게 설계 된 부품일지도?!
제어장치는 제어신호를 내보내고 명령어를 해석하는 부품이다. 클럭신호를 받아들이고, 해석해야 할 명령어를 받아들인다. 플래그 레지스터 속 플래그 값을 받아들이고 제어버스로 전달된 제어 신호를 받아들인다. 나는 이 제어장치의 역할이 CPU안의 조율자 정도로 이해했다. 다양한 명령을 읽고 실제로 수행하도록 명령을 내린다 정도..?
CPU 내부로 전달되는 제어신호는 주로 ALU와 레지스터에 관련된다. ALU에는 수행할 연산을 지시하는 제어 신호가, 레지스터에는 데이터 이동이나 명령어 해석을 위한 제어 신호가 전달된다. 이러한 제어 신호들은 CPU내의 다양한 작업들을 조율하는데 필수 적이다.
3.레지스터 - 빠른 임시저장소
프로그램의 명령어와 데이터는 실행전후로 반드시 레지스터에 저장된다. 고로 레지스터에 저장된 값을 관찰하면 프로그램의 실행 흐름을 파악할 수 있다. CPU안에는 다양한 레지스터들이 존재하고 각각 다른 역할을 가지고 있다. CPU 작동과 프로그램 실행에 중요한 역할을 하며, 각각의 레지스터는 특정한 유형의 데이터나 명령어를 저장하고 처리하는데 특화되어 있다. 그 중 많은 CPU가 공통으로 포함하고 있으며 여러 전공서적에서 중요하게 다루는 네가지 레지스터는 다음과 같다.
- 프로그램 카운터: 메모리에서 가져올 명령어의 주소. 즉 읽어들일 명령어의 주소를 저장한다
- 명령어 레지스터: 해석할 명령어를 저장하는 레지스터. 제어장치는 이 레지스터의 명령어를 받고 해석한 후 제어신호를 내보낸다.
- 메모리 주소 레지스터: 메모리의 주소를 저장하는 레지스터
- 메모리 버퍼 레지스터: 메모리와 주고받을 값을 저장하는 레지스터
명령어 싸이클과 인터럽트
명령어 싸이클이란 정형화된 흐름, 그러니까 CPU가 하나의 명령어를 처리하는 과정에는 정해진 흐름이 있는데 이 흐름을 반복하면서 명령어들을 처리하는것을 말한다. 명령어 싸이클은 CPU가 명령어를 가져오고, 해석하고, 실행하는 일련의 단계를 포함한다. 각 단계에서 CPU는 명령어를 처리하는데 필요한 작업을 수행하고, 이 과정이 완료되면 다음 명령어로 넘어간다.
그러나 때로는 이 흐름이 끊어지는 상황이 발생하는데, 이를 '인터럽트'라고 한다. 인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트로 구분될 수 있다. 인터럽트는 예상치 못한 사건이나 요청이 발생 했을때 CPU에게 신호를 보내서 현재 진행중인 작업을 일시중단하고, 해당 사건이나 요청을 처리하도록 하는 매커니즘이다. 이를 통해 더 효율적으로 시스템 자원을 관리할 수 있다!
명령어 싸이클과 인터럽트는 CPU가 효율적으로 작동하고 다양한 상황에 대응할 수 있게 하는 핵심적인 개념이다.
'TIL' 카테고리의 다른 글
TIL #18) Transaction (0) | 2024.01.30 |
---|---|
TIL #17) ORM, Prisma 파먹기 (0) | 2024.01.27 |
TIL #15) SQL 외래키 제약조건 (1) | 2024.01.24 |
TIL #14) 개인프로젝트를 하며 새로 배운것(nvm, git bash, 트러블 슈팅) (0) | 2024.01.23 |
TIL #13) 개인프로젝트 진행 중 발생 오류 (2) | 2024.01.22 |