본문 바로가기

운영체제

중앙처리장치(CPU) - 1 (CPU 구조)

728x90
반응형

Goal

  • CPU 구성 요소에 대한 이해
  • CPU 동작 과정을 설명할 수 있다.

CPU란?

명령어를 해석하여 실행하는 장치로 인간으로 치면 두뇌에 해당하는 하드웨어 장치이다.

(CPU를 흔히 Processor 라고도 한다.)

 

CPU 구성 요소

  1. 연산 장치(ALU, Arithmetic and Logic operation Unit) : 산술 및 논리 연산 장치
    • 산술 연산(덧셈, 뺄셈, 곱셈 나눗셈 등)과 논리 연산(AND, OR 등)을 수행
  2. 제어 장치(Control Unit)
    • 프로그램에서 주어진 명령을 '해석'하고 이를 '실행'하기 위해 제어신호를 만든다.
    • 연산, 읽기, 쓰기 등의 동작신호와 각 장치를 제어하기 위한 타이밍(timing) 신호를 때맞춰 만든다.
  3. 레지스터(register)
    • cpu의 임시 기억 장소로 명령, 주소, 데이터 등을 일시적으로 담아둔다.
    • 다른 기억 장치들에 비해 접근 속도가 가장 빠르다.
  4.  CPU 내부 버스
    • CPU 내부 장치를 연결하는 버스
    • 후면 버스(BSB, Back Side Bus) 라고도 한다.
    • CPU 클록과 같아서 시스템 버스보다 훨씬 빠르다.
  5. 기타 장치
    • 부동 소수점 처리장치(FPU)
    • 내장 GPU
    • 캐시 메모리

 

<참고> 버스

더보기
FSB와 BSB

 

멀티 코어 프로세서 안에서 BSB(Back Side Bus)는 CPU 내부 통신에,

FSB(Front Side Bus)는 CPU 외부 통신에 쓰인다.

즉, CPU를 기준으로 BSB, FSB를 구분한다.

 

<참고> BSB

CPU 외부 캐시가 사라지면서 명칭 또한 이미 없어진 지 오래라 쓰이지 않지만, L1~L2, 후발 주자인 L3캐시는 CPU 내부에서 SRAM으로 존재하고 있기에 명칭이 사라지지 않고 유지되고 있다.

 

FSB : CPU에 연결되는 시스템 버스

 

시스템 버스(System Bus)

CPU, Memory, IO Device를 연결하는 버스

 

종류

  • 제어버스(control bus)
  • 주소버스(adress bus)
  • 데이터버스(data bus)

 

제어 버스(control bus)

  • 제어장치와 연결된 버스로, CPU가 메모리와 주변장치에 제어 신호를 보냄
  • 메모리와 주변장치에서도 작업이 완료되거나 오류가 발생하면 제어신호를 보내기 때문에 양방향이다.

 

주소버스(adress bus)

  • 메모리 주소 레지스터(MAR)와 연결된 버스로, 메모리나 주변장치에 데이터를 읽거나 쓸 때 주소 정보를 보냄
  • CPU => 메모리와 I/O 장치로 보내지는 주소정보로, 단방향이다.

 

데이터 버스(data bus)

  • 메모리 버퍼 레지스터(MBR)와 연결된 버스로, CPU가 메모리나 I/O 장치와 데이터를 주고 받는다.
  • CPU가 데이터를 읽고 쓸 수 있도록 데이터 이동이 양방향으로 이루어진다.

레지스터(Register)

CPU내의 임시 기억장소로, 처리할 명령어나 연산의 중간 값 등을 일시적으로 저장한다.

일반적으로 현재 계산을 수행중인 값을 저장하는데 사용된다.

 

레지스터 종류

용도에 따라 범용 레지스터와 특수 목적 레지스터로 구분된다. (CPU에 따라 종류, 크기, 개수가 다를 수 있음)

 

범용 레지스터(GPR, General Purpose Register) : 연산에 필요한 데이터나 연산 결과를 임시로 저장하는 레지스터

특수 목적 레지스터 : 특별한 용도로 사용하는 레지스터로, 용도와 기능에 따라 구분되는 레지스터

 

특수 목적 레지스터 종류

  • PC(Program Counter) : 다음에 인출할 명령어 주소를 저장
  • IR(Instruction Register) : 현재 수행 중인 명령어를 저장(가장 최근에 인출된 명령어 저장)
  • MAR(Memory Adress Register) : 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 저장
  • MBR(Memory Buffer Register) : 메모리로부터 읽어온 데이터 또는 메모리에 써야할 데이터 저장
  • AC(Accumulator) : 연산 결과를 자신에게 다시 누적(accumulation) 시키는 장치(= 누산기)
  • Flag Register : (= status register) : 연산 결과의 상태를 나타내는 플래그 비트들로 구성
  • SP(Stack Pointer) : 현재 실행 중인 스레드의 스택 Top의 가상 주소를 저장
  • Count Register : 반복 명령어 사용시 반복 카운터로 사용되는 값을 저장

레지스터 기본 구성

명령어 인출 사이클

  1. PC에 저장된 명령어 주소를 MAR로 전송
    • MAR <- PC
  2. MAR 번지 메모리의 명령어를 MBR로 전송하고 PC를 증가시켜 다음번 명령어 주소를 준비
    • MBR <- M[MAR] , PC <- PC + n (명령어 길이에 따라 가변적인 수치)
  3. 메모리에서 인출해온 명령어를 IR로 전송
    • IR <- MBR

명령어 실행 사이클 (해독, 실행)

IR에 저장된 명령어를 해독하고 CPU 내외부에서 명령어의 실행에 필요한 제어신호들을 발생시킨다.

(IR로 읽어들인 명령어가 무엇인지에 따라 다르게 동작)

 

명렁어 인출, 해독, 실행의 모든 과정은 제어 장치가 통제한다.


연산장치(ALU)

ALU의 구성

  1. 상태 레지스터(Status Register) : 연산 결고의 상태(status = flag) 를 저장한다.
  2. 2의 보수화기(2's Complementer) : 음수 연산을 위해 2의 보수를 만든다.
  3. 산술연산장치 : 사칙 연산 등의 산술연산을 수행
  4. 논리연산장치 : NOT, AND, ORO, XOR 등의 논리 연산을 수행
  5. 시프트 레지스터 : 비트 열을 이동시키는 기능을 한다.

 

상태 레지스터에서 각 플래그 값의 의미

  • S(Sign) : 부호 플래그. 0이면 양수, 1이면 음수
  • C(Carry) : 올림수(carry)나 빌리수(borrow)가 발생하면 1로 설정
  • Z(Zero) : 연산 결과가 0이면 1로 설정
  • E(Equal) : 비교 결과가 같으면 1로 설정
  • V(oVerflow) : 연산결과 자릿수 넘침이 발생하면 1로 설정
  • I(Interupt mask) : 인터럽트 가능(enable) 상태이면 0, 불가능(disable) 상태이면 1로 설정. 우선순위가 높은 인터럽트가 처리중일 때는 불가능으로 설정한다. 뒤에 추가적으로 들어오는 같거나 낮은 순위의 다른 인터럽트 요구에 대해서는 서비스를 지연시킨다.
  • P(Privilege) : CPU가 컴퓨터 관리자 모드로 사용되면 1, 일반 사용자 모드로 사용되면 0으로 설정

제어장치(CU)

 

제어장치는 메모리에서 명령어를 인출해 해독하고 명령을 실행하는데 필요한 제어 신호를 만든다.

제어장치는 CPU 내외부에서 사용하는 다양한 제어신호를 타이밍에 맞추어 발생시킨다.

 

일반적으로 제어장치 설계 방식으로 마이크로프로그램 제어방식을 사용한다.

=> 제어신호의 발생에 필요한 마이크로명령어들이 제어 메모리에 마이크로프로그램 형태로 저장되는 방식이다.

 

제어장치의 구성 (마이크로프로그램 제어방식)

  1. 제어 메모리(control memory) : 제어장치 내부의 기억장치로 제어신호 발생에 필요한 마이크로명령어들이 마이크로 프로그램으로 저장된다.
  2. 명령어 해독기(instruction decoder) : IR에 들어온 명령어를 해독해 연산코드를 구한다. 이를 근거로 연산코드가 지시하는 동작을 실행한 제어 서브루틴의 시작 주소를 마이크로 프로그램에서 찾아낸다.
  3. 주소 해독기(adress decoder) : 명령어의 오퍼랜드(피연산자)에서 유효주소나 간접주소를 찾아 실제 사용할 수 있는 유효주소를 만들어 레지스터에 저장한다.
  4. 제어신호 발생기 : CPU 내외부의 각 부분에 필요한 제어신호를 만든다.
  5. 타이밍(timing) 발생회로 : 제어신호 발생을 위한 정확한 타이밍을 만들어낸다.
  6. 기타 장치들 : 마이크로명령어를 일시적으로 저장하는 버퍼 레지스터, 제어 메모리의 주소를 저장하는 레지스터, 마이크로명령어의 실행순서를 결정하는 장치 등

 

마이크로프로그래밍

제어장치에는 기계어 명령어 종류만큼의 제어 서브루틴들이 준비되어 있다. 제어 서브루틴 하나가 기계어 명령어 종류 하나를 처리한다. 제어 서브루틴은 명령어 수행에 필요한 제어신호를 발생시키는 마이크로명령어들로 구성되어 있다.

 

마이크로프로그램 제어방식은 다음 그림과 같은 처리과정을 거처 제어신호를 생선시킨다.

  1. 명령 레지스터 IR에 들어온 명령어를 해독해 연산코드를 구한다.
  2. 연산코드에서 해당 명령에 필요한 제어 서브루틴의 시작 주소를 계산한다.
  3. 제어 메모리의 마이크로프로그램에서 해당 제어 서브루틴을 찾아낸다.
  4. 찾아낸 제어 서브루틴에서 마이크로명령어를 차례대로 인출한다.
  5. 마이크로명령어를 해독해 실행할 마이크로연산의 종류를 결정한다.
  6. 각 마이크로연산 필드에서 제어신호를 만들어 출력한다.

 

*마이크로명령어(microinstruction) = 제어 워드(control word)

제어장치에서 제어신호를 만드는 저수준의 제어 명령어 단위.

마이크로명령어 형식은 여러 개의 마이크로연산 필드를 포함시켜 동시에 여러개의 제어 신호를 발생시킬 수 있다.

 

*제어 서브루틴

특정 명령어의 연산을 수행하기 위해 제어장치에서 연속적으로 수행되어야 할 마이크로명령어들의 조합.


<참고> CPU 성능 관련 용어

더보기

*클록 펄스(Clock Pulse, or Tick)

CPU를 비롯한 디지털회로에서 주기적으로 전기적인 신호를 공급 받아야 하는데, 이 주기적인 전기적 신호를 클록 펄스 라고 한다. (인간으로 치면 심장 박동같은 역할을 한다.)

이 신호에 맞춰 CPU가 동작하게 된다.

 

*헤르츠(Hz)

클록 펄스가 발생하는 속도를 나타내는 단위로, 발생하는 클록 펄스를 나타낸다.

ex) 초당 1000번이면 1kHz(= 1000Hz)가 된다.

 

이외에 CPU 성능을 결정짓는 요소

  • 코어 개수
  • 코어당 쓰레드 개수
  • 캐시 성능 (L1, L2, L3 캐시 용량)

*클록 펄스(Clock Pulse, or Tick)

CPU를 비롯한 디지털회로에서 주기적으로 전기적인 신호를 공급 받아야 하는데, 이 주기적인 전기적 신호를 클록 펄스 라고 한다. (인간으로 치면 심장 박동같은 역할을 한다.)

이 신호에 맞춰 CPU가 동작하게 된다.

 

*헤르츠(Hz)

클록 펄스가 발생하는 속도를 나타내는 단위로, 발생하는 클록 펄스를 나타낸다.

ex) 초당 1000번이면 1kHz(= 1000Hz)가 된다.

 

이외에 CPU 성능을 결정짓는 요소

  • 코어 개수
  • 코어당 쓰레드 개수
  • 캐시 성능 (L1, L2, L3 캐시 용량)

*클록 펄스(Clock Pulse, or Tick)

CPU를 비롯한 디지털회로에서 주기적으로 전기적인 신호를 공급 받아야 하는데, 이 주기적인 전기적 신호를 클록 펄스 라고 한다. (인간으로 치면 심장 박동같은 역할을 한다.)

이 신호에 맞춰 CPU가 동작하게 된다.

 

*헤르츠(Hz)

클록 펄스가 발생하는 속도를 나타내는 단위로, 발생하는 클록 펄스를 나타낸다.

ex) 초당 1000번이면 1kHz(= 1000Hz)가 된다.

 

이외에 CPU 성능을 결정짓는 요소

  • 코어 개수
  • 코어당 쓰레드 개수
  • 캐시 성능 (L1, L2, L3 캐시 용량)

*클록 펄스(Clock Pulse, or Tick)

CPU를 비롯한 디지털회로에서 주기적으로 전기적인 신호를 공급 받아야 하는데, 이 주기적인 전기적 신호를 클록 펄스 라고 한다. (인간으로 치면 심장 박동같은 역할을 한다.)

이 신호에 맞춰 CPU가 동작하게 된다.

 

*헤르츠(Hz)

클록 펄스가 발생하는 속도를 나타내는 단위로, 발생하는 클록 펄스를 나타낸다.

ex) 초당 1000번이면 1kHz(= 1000Hz)가 된다.

 

이외에 CPU 성능을 결정짓는 요소

  • 코어 개수
  • 코어당 쓰레드 개수
  • 캐시 성능 (L1, L2, L3 캐시 용량)

 

32bit vs 64 bit

컴퓨터 bit수는 CPU가 한 번에 처리할 수 있는 bit수를 의미하는데,

기술적으로 다음과 같은 두 가지 판정 방법이 있다.

  • 데이터버스의 비트 수
  • 범용 레지스터의 비트 수

 

 

References

dreamform.egloos.com/2805479

컴퓨터 구조론(윤남일, 이강우 지음)

728x90
반응형