📗 ALU
ALU가 받아들이는 정보에는 피연산자와 제어신호가 있는데.
레지스터로부터 피연산자를 받고 제어장치로부터 제어신호(수행연산)를 받는다.
연산의 결과 값은 컴퓨터가 이해할 수 있는 0과 1로 표현된 정보로 구성된
문자, 숫자, 혹은 주소이다. 이 결과 값은 레지스터에 저장된다.
✔ 왜 결과값을 레지스터에 저장할까?
CPU가 레지스터에 액세스하는 속도가 메모리에 엑세스하는 속도보다 빠르기 때문이다.
레지스터에 결과를 저장하고 메모리에 기록하거나 결과 값을 가지고 다른 레지스터에
저장된 연산을 수행한다.
✔ 플래그는 무엇인가?
ALU가 내보내는 또다른 정보로는 플래그가 있는데 플래그란
컴퓨터에서 무언가를 기억하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로
프로그램에 사용되는 미리 정의된 비트를 말한다. 플래그가 나타낼 수 있는 정보는 1비트 정보로
(상태가) ~ 이다, 아니다 정도가 되겠다.
ALU가 내보내는 플래그에는 연산 결과에 대한 부가 정보가 담겨있다.
부호 플래그 : 연산한 결과의 부호를 나타낸다.
제로 플래그 : 연산 결과가 0인지 아닌지의 여부를 나타낸다.
캐리 플래그 : 연산 결과 올림수나 발림수가 발생했는지를 나타낸다.
오버플로우 플래그 : 오버플로우가 발생했는지를 나타낸다.
인터럽트 플래그 : 인터럽트가 가능한지를 나타낸다.
슈퍼바이저 플래그 : 모드를 나타낸다. 커널모드인지, 사용자모드인지 구분할 수 있다.
해당 정보들 뿐만 아니라 ALU가 내보낸 연산의 결과가 결과를 담을 레지스터에 비해
너무 크다면 플래그 레지스터에 담기도 한다. 이를 '오버 플로우'라고 한다.
✔ '오버플로우'시 다른 레지스터도 많은데 왜 플래그 레지스터에 저장할까?
연산 결과를 플래그 레지스터에 담는것이 아니다.
연산 결과의 크기가 너무 커서 레지스터에 담지못하는 상태인 '오버플로우' 상태가 될 때,
프로그램이 이를 감지하고 오버플로우 플래그를 플래그 레지스터에 저장한다.
이는 프로그램이나 운영체제로 하여금 오버플로우가 발생했다는 정보를 알리기 위함이고
프로그램이나 운영체제등이 이 정보를 활용하여 적절한 조치를 취할 수 있도록 한다.
📗 제어장치
제어장치가 받아들이는 정보는 다음과 같다.
💻 클럭
컴퓨터의 모든 부품들을 일사불란하게 움직일 수 있게 하는 시간 단위
컴퓨터 부품의 기본 연산 속도를 나타낸다.
✔ 오버 클럭?
사용자가 임의로 클럭을 끌어올리는 것을 말한다. 반대 말로는 언더 클럭이 있다.
순정 상태의 컴퓨터보다 연산속도가 더욱 빨라지지만 관리가 제대로 되지 않으면
컴퓨터의 수명이 줄어들거나 회로가 망가질 수도 있다.
💻 해석할 명령어
제어장치는 명령어 레지스터로 부터 해석할 명령어를 받아들인다.
그리고 명령에 알맞는 제어신호를 내보낸다.
💻 플래그
명령어 레지스터로부터 받은 명령어를 해석하는데
부가적인 정보도 필요하기 때문에 플래그도 받아들인다.
💻 제어신호(받음)
제어장치만이 제어신호를 발생시키는 것이 아니다.
입출력 장치를 비롯한 주변 장치들도 CPU처럼 제어신호를 발생시킨다.
주변 장치로부터 제어장치는 제어신호를 받게 된다.
💻 제어신호 (내보냄)
제어장치가 내보내는 제어신호는 다음과 같다.
학습 출처 : https://www.youtube.com/watch?v=kFWP6sFKyp0&t=13096s