본문 바로가기

CS/컴퓨터 구조

[컴퓨터 구조] CPU의 ALU

728x90

ALU란?

ALU는 Arithmetic Logic Unit의 약자로, 산술 논리 연산 장치입니다. 즉, ALU는 계산을 수행하는 부품입니다.

계산을 위해 필요한 요소

계산을 하기 위해서는 연산자피연산자가 필요합니다. 예를 들어, 1과 2를 더하는 계산을 해봅시다.

  • 피연산자: 1, 2
  • 연산자: ADD (더하기)

피연산자와 연산자는 어디에서 가져올까요?

이들은 메모리에서 CPU가 명령어를 읽어올 때 가져오게 됩니다.

ALU 작동 과정

  1. 명령어 가져오기: CPU가 메모리에서 1번지에 있는 명령어를 가져옵니다.
  2. 명령어 저장: 가져온 명령어를 레지스터에 저장합니다.
  3. 명령어 해독: 제어장치(CU)가 명령어를 해독합니다. 피연산자가 주소로 지정되어 있으면, 해당 주소에 있는 값을 가져와 다른 레지스터에 저장합니다. 이때 제어장치는 연산자(ADD)를 해독합니다.
  4. 연산 준비: 제어장치가 ALU에게 해독한 연산자(ADD)를 보내고, 피연산자(1, 2)를 레지스터에서 ALU로 보냅니다.
  5. 연산 수행: ALU는 연산을 수행하고, 결과를 레지스터에 저장합니다.

 

연산 결과는 특정 숫자, 문자, 메모리 주소 등 다양한 형태가 될 수 있습니다.

이 연산 결과를 메모리에 저장하지 않고 일시적으로 레지스터에 저장하는 이유는 무엇일까요?

바로 속도 때문입니다.

CPU가 메모리에 접근하는 것은 많은 시간이 소모됩니다. 레지스터는 CPU 내부에 위치하여 매우 빠르게 접근할 수 있는 반면, 메모리는 상대적으로 접근 속도가 느립니다.

속도와 용량의 관계:

  • 속도가 빠를수록 용량이 작습니다.
  • 속도가 느릴수록 용량이 큽니다.
  • 속도가 빠를수록 가격이 비쌉니다.

따라서, 연산 결과를 메모리에 계속 저장하는 것은 많은 시간을 소비하게 하며,

이는 CPU의 속도 저하로 이어지고 결국 프로그램 실행 속도를 늦출 수 있습니다.

 

이러한 문제 때문에 연산 결과는 먼저 레지스터에 저장한 후 필요할 때 메모리에 저장하는 방식을 사용합니다. 이는 CPU의 효율성을 높이고 프로그램 실행 속도를 빠르게 유지하는 데 도움을 줍니다.

하지만 모든 서버 컴퓨터가 이 방식을 사용하지는 않습니다.

 

실시간으로 데이터를 감지해야 하는 서버 컴퓨터는 연산 결과를 직접 메모리에 저장하는 방식을 사용합니다. 이러한 시스템에서는 데이터의 즉각적인 업데이트가 중요하기 때문입니다.

대표적인 예시로는 은행이 있습니다.

  • 예를 들어, 계좌에 1,000,000원이 있는데 이 돈을 다른 계좌로 송금하고자 할 때, 레지스터가 메모리에 값을 적기 전에 다시 1,000,000원을 송금할 수 있는 상황이 생길 수 있습니다.
  • 이러한 경우, 실시간으로 정확한 데이터 처리가 필요하기 때문에, 연산 결과를 레지스터에 저장하지 않고 바로 메모리에 저장하는 방식을 사용합니다.
  • 이렇게 하면 실시간으로 데이터 변동을 감지하고 처리할 수 있어 중요한 금융 거래나 데이터의 정확성을 유지할 수 있습니다.

직접 메모리에 저장해야 하는 상황은 속도보다는 데이터의 일관성이 중요할 때 사용합니다.

 

 

플래그란?

플래그(flag)는 해당 값의 부가적인 정보 데이터를 말합니다.

ALU가 계산한 값은 실제로 이진수로 되어 있습니다. 컴퓨터는 이진수로 되어있는 언어를 읽기 때문이죠.

이진수로 되어있는 값을 정확하게 해석하기 위해서는 플래그가 필요합니다.

 

 

플래그의 종류

플래그 종류 의미 사용예시
부호 플래그 연산한 결과의 부호를 나타낸다 1일 경우 계산 결과는 음수,
0일 경우 계산 결과는 양수
제로 플래그 연산 결과가 0인지 여부를 나타낸다 1일 경우 결과는 0,
0일 경우 결과는 0이 아닙니다
캐리 플래그 연산 결과 올림수나 빌림수가 발생했는지 1일 경우 올림, 빌림수가 발생,
0일 경우 발생하지 않음
오버플로우 플래그 오버플로우가 발생했는지 1일 경우 오버플로우 발생,
0일 경우 발생하지 않음
인터럽트 플래그 인터럽트가 가능한지 1일 경우 인터럽트 가능,
0일 경우 불가능
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행중인지를 나타낸다 1일 경우 커널모드,
0일 경우 사용자 모드

※ 오버플로우란? 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황을 오버플로우라고 합니다.

 

 

이러한 플래그는 CPU가 프로그램을 실행하는 도중 반드시 참고해야 하는 일종의 참고 정보입니다.

플래그들은 플래그 레지스터라는 레지스터에 저장됩니다.

플래그 레지스터는 이름 그대로 플래그 값들을 저장하는 레지스터입니다.

이 레지스터를 읽으면 연산 결과에 대한 추가적인 정보, 참고 정보를 얻을 수 있습니다.

728x90