중앙처리장치(central processing unit/ CPU): 데이터 조작을 제어하는 컴퓨터 안의 회로
CPU는 대개 사람 손에 들어갈 정도로 작고 납작한 정사각형 모양
CPU 연결 핀들은 마더보드라 불리는 주 회로기판에 장착된 소켓에 연결된다.
모바일 컴퓨팅 기기에 들어가는 CPU는 우표의 절반 크기로, 마이크로 프로세서라고 불린다.

CPU 기초

CPU는 연산장치, 제어장치, 레지스터 장치 등의 세 부분으로 구성된다.
연산장치(aRITHMETIC/LOGIC UNIT):데이터에 대한 덧셈, 뺄셈과 같은 연산을 수행
제어장치(Contol unit): 컴퓨터의 동작을 조정하는 회로를 포함
레지스터 장치(Register unit): 레지스터라고 불리는 데이터 저장용 셀들을 가지고 있는데, 이들은 CPU 내에서 정보를 임시로 저장하기 위해 사용되며 개념상 주기억장치의 셀들과 비슷하다. 일부 레지스터들은 범용 레지스터로 간주되고, 나머지는 용도 지정 레지스터로 간주된다.
범용 레지스터: CPU에서 조작되는 데이터를 위한 임시 저장 공간으로 사용된다. 연산장치 회로의 입력이나 연산장치에서 계산된 결과를 저장하기 위한 공간으로 이용된다.

연산 수행 순서

  1. 제어 장치가 데이터를 주기억장치로부터 범용 레지스터로 전송

  2. 어느 레지스터가 데이터를 갖고 있는지 연산장치에 알림

  3. 연산장치 안의 적절한 회로를 작동시킴

  4. 연산장치에게 결과를 받을 레지스터가 어느 것인지 알림
    버스(BUS): CPU와 주기억장치를 연결하는 전선묶음. 비트 패턴들을 전송한다. 버스를 통해 CPU는 주기억장치에 메모리 셀의 주소와 읽기 신호를 보내어 주기억장치로부터 데이터를 읽고, 저장할 때에도 목적지 셀의 주소, 데이터, 전자 신호 등을 주기억장치 회로에 보낸다.
    캐시 메모리: CPU 내부에 위치한 수백KB 정도의 고속 메모리. 이 특별한 메모리 공간에 현재 자주 사용하는 주기억장치 부분의 복사본을 유지. 캐시메모리가 있으면 레지스터와 주기억장치 사이에서 일어날 데이터 전송 작업이 레지스터와 캐시 메모리 사이에서 일어나게 된다. 캐시 메모리에 일어나는 변경들은 모아서 적절한 시점에 한꺼번에 주기억장치로 전달된다. 캐시메모리 덕분에 CPU는 주기억장치와의 통신으로 인한 지연을 피할 수 있으므로 보다 신속하게 계산을 수행할 수 있게 된다.

기계어

기계어(Machine language): 인코딩 체계와 명령 집합
기계 명령(Machine instruction): 기계어에서 표현되는 명령

명령의 종류

필수적인 기계 명령의 개수를 그리 많지 않다
어느 선을 넘어서서 기능을 추가하는 것은 편의성 측면에서는 도움이 되겠지만 컴퓨터의 기본적인 계산 능력에 추가되는 것은 없다.

CPU 구조에 대한 두가지 철학

  1. RISC(Reduced Instruction Set Computer): CPU가 최소의 기계 명령 집합을 실행하도록 설계되어야 한다는 철학. 효율성을 우선시함.
  2. CISC(Complex Instruction Set Computer): CPU가 다수의 복잡한 명령들을 실핼 할 수 있어야하며, 다수의 명령이 기능적으로 중복되어도 무방하다는 철학. 복잡해지는 소프트웨어에 더 잘 대처할 것이다.

기계 명령들은 데이터 전송 그룹, 연산 그룹, 제어 그룹 등의 세 그룹으로 분류된다.

  1. 데이터 전송 (data transfer): 데이터를 한 장소에서 다른 장소로 옮길 것을 요청하는 명령들로 구성된다. 데이터를 옮길 때는, 원래 장소에서 삭제하지 않고 복사해서 가져감으로, 전송, 이동이라는 용어보다는 복사, 복제라는 데이터 전송 명령 그룹의 동작에 더 맞는 표현이다.
    메모리 셀에 들어있던 내용을 범용 레지스터에 옮기라는 요청을 가리키는 명령은 LOAD , 레지스터에 들어 있던 내용을 메모리 셀에 옮기는 요청은 STORE
    데이터 전송 범주에서 중요한 명령 그룹은 프린터, 키보드, 디스플레이, 디스크 등 장치와의 통신을 위한 명령이다. 컴퓨터의 입출력(I/O) 작업을 다룬다.

  2. 연산(Arithmetic/logic): 연산 그룹은 제어장치가 연산 장치에 어떤 작업을 하도록 요청하는 명령들로 구성된다. 기본 산술 연산, 그 외 연산, 부울 연산 등이 있다. 레지스터의 내용을 오른쪽이나 왼쪽으로 이동하는 연산도 있다. 레지스터 밖으로 나가는 비트들을 버리는 것이 SHIFT이며, 이러한 비트들을 다른 쪽 끝의 빈자리를 채우기 위해 사용하는 것이 ROTATE 이다.

  3. 제어(Control): 제어 그룹은 데이터를 조작하는 대신 프로그램의 실행을 조종하는 명령들로 구성된다. 다음 명령이 아닌 명령을 실행하기 위해 쓰이는 JUMP 명령군과 같은 명령들을 포함한다.

인코딩된 기계 명령은 명령 코드(operation code / op-code) 필드와 피연산자(operand) 필드의 두 부분으로 구성된다.

프로그램의 실행

CPU 안의 두 개의 용도 지정 레지스터

  1. 명령 레지스터(Instruction register): 실행될 명령을 보관
  2. 프로그램 카운터 (program counter): 다음에 실행될 명령의 주소를 보관 및 컴퓨터가 현재 프로그램의 어느 부분에 와있는 추적하는 수단

기계 주기(Machine Cycle)

CPU 작업은 기계 주기를 반복함으로써 알고리즘을 실행 시키는 것이다.

  1. 인출(Fetch): 프로그램 카운터가 가리키는 메모리에서 다음 명령을 받아 온다. CPU는 프로그램 카운터가 가리키는 주소에 저장된 명령을 달라고 주기억장치에 요청한다.
  2. 해석(decode): 명령 레지스터 안의 비트 패턴을 해석한다.
  3. 실행(execute): 명령 레지스터 안의 명령이 요구하는 동작을 수행한다.

ex) 각 명령의 길이가 모두 바이트인 컴퓨터
인출과정

  1. 주기억장치에서 두 개의 메모리 셀의 내용을 읽음

  2. CPU가 메모리에서 받아온 명령을 명령 레지스터 안에 넣음

  3. 프로그램 카운터를 2만큼 증가시켜 메모리에 저장하여 다음 명령의 주소를 가지게 됨
    해석과정

  4. 명령 레지스터 안에 있는 명령을 CPU가 해석 (피연산자 필드를 적절한 요소들로 나누는 작업 포함)
    실행과정

  5. 적절한 회로를 작동시켜 명령을 실행
    명령 레지스터 안의 명령이 실행되면, CPU는 다시 인출 단계에서 기계 주기를 시작한다. 3번의 과정을 거친 프로그램 카운터가 CPU에 올바른 주소를 제공하게 된다.

연산 명령

논리 연산

AND, OR, XOR 등의 논리 연산을 의미
AND 연산: 일부만 0으로 만드는 경우 사용(masking)
OR: 일부만 1로 만드는 경우 사용
XOR: 비트 열의 보수를 만드는 경우 사용

회전 및 자리 이동 연산

레지스터 내부에서 비트들을 이동하거나 자리 맞춤 문제를 해결하는 수단
회전식 자리 이동(circular shift) /회전(rotation) : 오른쪽으로 한 비트씩 이동. 가장 왼쪽 비트 자리에 가장 오른쪽이었던 비트가 들어옴.
논리적 자리 이동 (logical shift): 왼쪽 방향으로 이동 후 빈자리는 0으로 채움. 2의 보수 표현에 2를 곱한 것과 같은 결과 나온다. 따라서 2진수에 논리적 자리 이동을 적용하면 곱하기 2에 해당하는 결과가 나온다.
산술적 자리 이동(arithmetic shift): 부호 비트가 변경 되지 않도록 처리하는 회전명령

산술 연산

덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산
뺄셈은 덧셈과 부호 변경의 조합으로 대체
곱셈은 덧셈의 반복, 나눗셈은 뺄셈의 반복으로 대체 가능
이렇게 대체 가능을 이용하여 덧셈만 가지고 있는 작은 cpu도 있다.

profile
나를 위한 기록장

0개의 댓글