[OS] CPU

EMMA·2022년 5월 2일
0
post-thumbnail
post-custom-banner

Central Processing Unit

컴퓨터의 가장 핵심적인 제어 장치이자 두뇌.
컴퓨터 부품과 정보를 교환하고 시스템을 제어하고, 프로그래밍 언어를 해석하고 실행한다.
CPU는 0,1의 2진수로 구성된 기계어만 인식한다.


기본 구성

  • 산술논리 연산장치 (Arithmetic and Logic Unit, 줄여서 ALU)
  • 제어장치 (Control Unit)
  • 레지스터 (Register)
    • 사용자 가시 레지스터: 데이터 레지스터, 주소 레지스터
    • 사용자 불가시 레지스터: 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터
이미지 출처: https://en.wikipedia.org/wiki/Von_Neumann_architecture

아래와 같이 프로그래밍이 작성되었다고 해보자.

int D2 = 2, D3 = 3, sum;
sum = D2+D3 

그러면 실행 process는 아래와 같다.
1 메모리 100번지에 있는 값을 레지스터 2로 갖고 온다 (D2 = 2)
2 메모리 120번지에 있는 값을 레지스터 3으로 갖고 온다 (D3 = 3)
3 레지스터에 있는 2와 3을 더한 결과 5를 레지스터에 넣는다
4 레지스터에 있는 5를 메모리 160번지에 저장한다

이는 매우 단순하게 정리한 것이고, 실제로는 많은 레지스터의 도움을 받으며 연산과정이 실행된다.

버스의 종류

버스는 CPU - 메모리, 주변장치 간에 데이터를 오고가게 해주는 이동 수단이다.
버스의 대역폭 (bandwidth) 은 CPU가 한번에 처리할 수 있는 데이터의 크기를 말한다.

  • 제어 버스: 제어장치와 연결된 버스로, CPU가 제어 신호를 보내면 제어 버스를 통해 메모리와 주변장치에 전달된다. 반대로, 메모리/주변장치에서도 완료 혹은 에러 신호를 보낼 수 있다.
  • 주소 버스: 메모리 주소 레지스터와 연결된 버스로, 데이터를 읽거나 쓸 때 사용할 메모리 주소 정보를 보내기 위해 사용한다.
  • 데이터 버스: 메모리 버퍼 레지스터(메모리에서 가져왔거나 옮길 데이터를 임시로 저장하는 곳으로, 항상 메모리 주소 레지스터와 작동함) 와 연결된 버스

주요 레지스터 deep dive

레지스터는 크게 2가지로 나뉜다.
user-visible register (사용자 프로그램에 의해 변경 가능)
user-invisible register (사용자가 임의로 변경할 수 없는, 특수 레지스터)

  • 데이터 레지스터
    • 메모리에서 가져온 데이터를 임시로 보관
    • CPU 내 레지스터의 대부분을 차지함
  • 주소 레지스터
    • 데이터 또는 명령어가 저장된 메모리의 주소를 저장하는 곳


  • 프로그램 카운터
    • 명령어 포인터라고도 한다
    • 다음에 처리해야 할 명령어의 주소를 기억하고 있다가 제어장치에 알려준다
  • 명령어 레지스터
    • 현재 실행 중인 명령어가 저장되어 있다
    • 즉, CPU의 제어장치는 명령어 레지스터에 있는 명령을 해석해서 제어 신호를 보내는 것
  • 메모리 주소 레지스터
    • 메모리에서 데이터를 갖고 오거나, 메모리에 데이터를 보낼 때 메모리 주소 정보가 필요
    • 이 때 필요한 주소를 메모리 주소 레지스터에 넣어 메모리 관리자가 이를 인식, 해당 위치에서 데이터를 꺼내오거나 넣는다
  • 메모리 버퍼 레지스터
    • 메모리에서 꺼내온 데이터나 보낼 데이터를 임시로 저장하는 곳
    • 메모리 주소 레지스터와 함께 동작한다

아까의 코드로 다시 돌아가보자.
int D2 = 2, D3 = 3, sum;
sum = D2+D3 

여기서 int D2 = 2의 진행 과정을 다시 분석하면 레지스터의 역할을 좀 더 이해할 수 있다.

1 프로그램 카운터에 실행하는 코드 첫 번째 행이 저장된다
2 이 번호는 제어장치에 전송되고, 명령어 레지스터에는 해당 명령어가 저장된다
3 제어 장치가 명령어 레지스터에 있는 명령어를 해석 > 메모리에 있는 데이터를 갖고 오라고 명령한다
4 메모리 주소 레지스터에는 100번지 라는 주소가 저장된다
5 메모리 관리자는 메모리의 100번지에 저장된 값을 메모리 버퍼 레지스터로 갖고 온다
6 제어장치는 메모리 버퍼 레지스터에 저장된 값을 레지스터 2로 옮긴다


그 외에도, 상태 레지스터 등 다양한 레지스터가 존재한다.


출처: 쉽게 배우는 운영체제, 조성호

profile
예비 개발자의 기술 블로그 | explore, explore and explore
post-custom-banner

0개의 댓글