중앙처리장치(CPU) 작동 원리

seheo·2022년 7월 10일
0

컴퓨터구조

목록 보기
1/1

1. 프로그램 실행 과정


출처: [따배씨] 0.7 CPU의 기본 구조 | 따라하며 배우는 C언어, c언어 , 컴퓨터 작동원리, 코딩

  1. 사용자가 프로그램 실행 명령을 내리면
  2. OS는 보조기억장치 → 주기억장치로 프로그램을 적재한다.
    • OS의 기억장치 관리 기법에 따라 주기억장치에 적재
  3. 주기억장치의 명령을 CPU가 한 줄씩 실행한다.
    • 주기억장치와의 속도차이를 해결하기 위해 캐시메모리를 통해 CPU의 레지스터로 전달
    • 레지스터에 저장된 데이터를 ALU를 통해 실제 연산된다.
    • 처리 결과는 보조기억장치에 저장되거나 출력 장치로 보냄
  4. 제어장치는 1~3 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어

2. CPU 구성 요소들

제어 유니트(Control Unit)

  • PC, IR, 부호기(제어신호 발생기), 명령어 해독기, 번지 해독기 등으로 구성

ALU

  • AC, 보수기, 오버플로 검출기, 시프트 레지스터 등으로 구성

레지스터

  • PC (Program Counter) : 다음 인출(Fetch) 될 명령어의 주소를 가지고 있는 레지스터
  • AC (Accumulator) : 연산 결과 데이터를 일시적으로 저장하는 레지스터
  • IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터
  • PSR (Program Status Register) : 현재 CPU 의 상태를 가지고 있는 레지스터
    • 시스템 내부의 순간 상태가 기록
    • 오버플로, 언더플로, 자리올림, 인터럽트 등 저장
    • 제어장치와 연상장치의 실행 순서를 제어
  • MAR (Memory Address Register) : PC 에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되는 주소 레지스터
  • MBR (Memory Buffer Register) : 기억장치에 저장될 데이터 혹은 읽혀진 데이터가 일시적으로 저장되는 버퍼 레지스터

3. 실제 CPU 내부의 동작방식

ALU

  • CPU 내부에서 실제로 연산을 담당하는 블록
    • 산술연산
    • 논리연산

제어 유니트(Control Unit)

프로그램 컴파일 → 실행파일 생성 → (생략) → 실행파일의 명령어 한 줄을 CPU 전달

CPU로 전달된 32비트 명령어

💡 “10011010 00011010 10011110 10010011”
  • ALU는 이해 불가 : 덧셈을 해야되는지, 논리연산을 해야되는지
  • 컨트롤 유닛이 해석하여 ALU에게 신호를 보내준다.

레지스터 세트

CPU 내부에서 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간

  • 각 레지스터 별로 용도가 정해져있다.

버스 인터페이스

CPU 내에는 I/O 버스의 통신방식을 이해하고 있는 ‘버스 인터페이스(Bus Interface)’가 존재

  • 입출력 장치의 통신방식을 이해하는 버스 인터페이스가 CPU의 레지스터나, 제어 유니트에 실어 송수신

4. 프로그램 실행과정


출처: [따배씨] 0.7 CPU의 기본 구조 | 따라하며 배우는 C언어, c언어 , 컴퓨터 작동원리, 코딩

Hello.c 파일 실행

1. 전처리기에 의한 치환 작업

  • #include, #define 과 같이 #으로 시작하는 소스코드를 적절히 변경

2. 컴파일러에 의한 번역

출처 : https://com24everyday.tistory.com/288

C언어 같은 언어로 구현된 프로그램을 어셈블리 프로그램으로 변경해주는 단계

3. 어셈블러에 의한 이진코드(binary code) 생성

  • ADD
    • 이러한 어셈블리 코드를 “0011”같은 이진코드로 번역

4. 링커에 의한 연결과 결합

프로그램 내에서 참조하는 함수나 라이브러리를 하나로 묶는 작업

  • 이 과정 후에 실행파일 생성
  • 결론 : 실행 파일 안에는 컴퓨터가 이해할 수 있는 이진 코드가 존재

Makefile
1. -c flag를 이용해 생성 시에 오브젝트 파일까지 만든다. (어셈블리 과정까지 수행)
2. ar명령어를 통해 실행파일이 아닌 라이브러리 생성
다른 프로그램에서도 사용될 만한 여러 소스파일(모듈)들을 오브젝트 파일들로 만들어서 하나로 묶어낸 것을 라이브러리 파일 또는 아카이브 파일이라고 한다.
이렇게 라이브러리 파일을 만들어 놓으면 다른 프로그램에서 쉽게 해당 모듈을 사용

5. 실행파일을 메모리에 로드

  • 메모리 공간에 올란간 명령어들은 CPU에 의해서 순차적으로 실행
    • 명령어 A, B, C는 CPU로 이동된 후 하나씩 실행된다.

6. Fetch, Decode, Execution

  • 1단계 Fetch
    • 메모리상 명령어 A를 CPU로 이동
    • IR(Instruction Register)에 명령어 저장
  • 2단계 Decode
    • 가져온 명령어의 내용 해석 명령어
    • 컨트롤 유닛이 해석
  • 3단계 Execution
    • 해석된 명령어의 명령대로 CPU의 ALU가 실행.
    • 명령어 A의 명령을 해석해보니 “덧셈”이라는 명령으로 해석하여 덧셈을 실행함

7. 시스템 버스

Data Bus

  • 데이터를 이동하기 위한 버스
  • 데이터란 명령어, 피연산자 등

Address Bus

  • 주소 값 이동을 위한 버스
  • 주소 값을 알아야 데이터를 가져 올 수 있기 때문에 필요

Control Bus

  • CPU와 메모리의 통신하겠다는 신호를 주고 받는 버스

CPU : “데이터 줘”
메모리 : “어디꺼”
CPU : “100번지꺼”
메모리 : “100번지 주소 보낼께”

CPU가 데이터를 요구하는 “데이터 줘” 신호를 전송하는 버스 - Control bus
데이터가 저장된 주소 값을 “100번지꺼” 달라고 주소를 전송하는 버스 - Adress bus
메모리 주소 100번지에서 실제 값을 가져와 전송하는 버스 - Data bus

CPU는 어떻게 동작할까?

0개의 댓글