[CS] 하드웨어와 CPU, 캐시메모리

soo's·2023년 7월 15일
0

CS

목록 보기
1/3
post-thumbnail

0. 컴퓨터의 구성

컴퓨터는 하드웨어와 소프트웨어로 나눌 수 있음

  • 하드웨어 : 컴퓨터를 구성하는 물리적 장치
  • 소프트웨어 : 하드웨어의 동작을 실행하는 명령어의 집합

그 중에서도 하드웨어에 대해 정리해보겠음

1. 하드웨어의 구성

하드웨어는 크게 4가지의 부품으로 이루어진다고 볼 수 있음

  • CPU (중앙처리장치)
  • 메모리 (주기억장치)
  • 보조기억장치
  • 입출력장치

2. CPU(중앙처리장치)

CPU는 프로그램 명령어와 데이터를 읽어와 처리하고 명령어의 수행 순서를 제어함
크게 세 구성요소로 볼 수 있음

  • ALU(산술논리연산장치) : 비교와 연산 담당
  • 레지스터들 : cpu의 데이터 기억 담당
  • 제어장치(CU) : 명령어 해석과 실행 담당

사진 출처 : 혼자 공부하는 컴퓨터구조

사진에서 볼 수 있듯이 메인보드 속 CPU에는 ALU와 레지스터들 그리고 제어장치로 이루어져 있음

2-1) ALU

사진 출처 : 혼자 공부하는 컴퓨터구조

ALU는 레지스터들로부터 피연산자(연산의 대상)를 전달 받거나, 제어장치로부터 제어신호를 입력받음

제어신호를 받아 연산을 거치고 난 후, 그 결과값을 다시 레지스터로 전달하고 플래그 레지스터에 플래그를 내보냄
(플래그는 연산 결과에 대한 정보인데 0플래그 : 0인지 아닌지 / 부호플래그 : 음수인지 양수인지 등등을 전달해서 결과값에 대한 정보를 주는거임)

🙋🏻‍♀️ ALU는 왜 결과값을 메모리가 아닌 레지스터에 저장하는가?
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느림
ALU가 연산할 때마다 결과를 메모리에 저장하면 CPU는 메모리에 자주 접근하게 되고, 결과적으로 프로그램 실행 속도를 늦추게 됨 ㅇㅇ 따라서 레지스터에 일시적으로 저장하는거임


2-2) 제어장치

CPU의 제어장치는 메모리(주기억장치)에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄

사진 출처 : 혼자 공부하는 컴퓨터구조

제어장치는 4가지 정보를 받아들이게 됨
1. 명령어 레지스터가 준 해석할 명령어
2. 클럭 : 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
3. 플래그 레지스터가 준 플래그
4. CPU 외부에서 제어버스로 전달받은 제어신호

메모리에 어떤 명령어(연산 후 저장하라)와 데이터가 저장되어있다고 가정했을 때, 흐름을 간략하게 정리해보겠음
제어장치가 명령어 읽기 제어신호를 메모리에 보냄 -> 메모리의 명령어를 명령어 레지스터에 저장함 -> 제어장치가 명령어 해석함 -> 제어장치가 명령어 실행에 필요한 데이터가 있다고 판단하여 다시 명령어 읽기 제어신호를 메모리에 보냄 -> 메모리의 데이터를 메모리 버퍼 레지스터에 저장함 -> ALU가 레지스터에 있는 데이터 가지고 연산하고 결과값을 레지스터에 저장함 -> 제어신호가 명령어 해석에 따라(연산 후 저장하라) 이 결과값을 '메모리 쓰기' 제어신호와 함께 메모리로 전달 -> 메모리가 결과값을 저장함

이 흐름을 쭉 읽어보면 왜 제어장치가 저 정보들을 받게 되는지 이해감

🙋🏻‍♀️ CPU에서 명령어를 해석하고 제어 신호를 보내는 것은 무엇인가요? 그것에 대해서 아는 만큼 설명해주세요.
명령어를 해석하고 제어신호를 보내는 것은 제어장치임
제어장치는 명령어 레지스터로부터 해석해야할 명령어를 받고, ALU가 저장한 플래그도 전달받아서 이를 참고하여 제어신호를 발생시킴
제어신호는 CPU 내부에 전달할 수도 있고 시스템 버스 중 하나인 제어버스를 통해 CPU 외부의 메모리나 입출력 장치에도 전달하여 메모리에 값을 쓰거나 읽을 수 있게 되는 것


2-3) 레지스터

CPU에는 다양한 레지스터들이 있음
그 중에서도 주요 레지스터들에 대해 정리하겠음

  1. 프로그램 카운터 (PC) :메모리에서 읽어 들일 명령어의 주소 저장 레지스터 (다음에 수행할 명령어 주소 저장)
  2. 명령어 레지스터 (IR) : 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터
  3. 메모리 주소 레지스터 (MAR) : 메모리의 주소를 저장하는 레지스터
  4. 메모리 버퍼 레지스터 (MBR) : 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터
  5. 범용 레지스터 : 디양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
  6. 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
  7. 누산기 (AC) : 연산 결과 임시 저장하는 레지스터

사진 출처 : 혼자 공부하는 컴퓨터구조

제어장치는 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킴
위 과정을 통해 명령어 사이클 중 인출 사이클이 완료됨
인출 이후에는 누산기(AC)에 메모리 버퍼 레지스터(MBR)의 값을 더해주는 실행 사이클이 진행됨

🙋🏻‍♀️ CPU의 명령 사이클에 대해서 설명해주세요. 딥하게 말고!
명령 사이클은 CPU가 하나의 명령어를 실행하는 데 필요한 전체 단계를 말함
첫번째 인출 단계에서 프로그램 카운터에 현재 실행해야 할 명령어의 주소가 저장되고, 메모리 주소 레지스터를 거쳐 메모리 버퍼 레지스터에 값이 저장되면서 PC가 증가합니다. 그 다음 메모리 버퍼 레지스터의 값이 명령어 레지스터에 저장됩니다.
그 다음 해독 단계에서 제어장치가 명령어를 해독하고
실행 단계에서 메모리 버퍼 레지스터에 저장된 값을 가지고 ALU가 연산하여
마지막 저장 단계에서 레지스터에 저장하거나 명령에 따라 메모리나 입출력 장치에 저장합니다.
이러한 단계를 거쳐 하나의 명령어가 실행되며, 프로그램 카운터(PC)가 증가함에 따라 다음 명령어를 인출하는 과정을 반복합니다.

3. 캐시 메모리

  • 캐시 메모리 : CPU 내부에 위치하며, 주기억장치와 CPU 간의 데이터 전송 속도 차이를 극복하기 위해 사용되는 고속 메모리(주기억장치는 CPU에 비해 상대적으로 접근 속도가 느림). CPU의 성능을 향상시키고 전체 시스템의 응답 시간을 줄임

3-1) 캐시 메모리의 계층 구조

캐시 메모리는 3 level 계층 구조로 나뉨

  • L1 : 용량이 작고, 매우 빠른 액세스 속도, CPU 코어에 바로 연결
  • L2 : L1 캐시보다 약간 느림, L1 캐시보다 용량이 큼, 공유 캐시로 사용되기도 함
  • L3 : L1, L2 캐시보다 더 큰 용량을 가지고 있으며, 일부 시스템에서만 사용, 여러 개의 CPU 코어 간에 데이터를 공유하는 데 사용

3-2) 캐시 메모리 작동 원리

  • 시간 지역성의 원리(Time Locality):
    시간 지역성은 CPU가 최근에 액세스한 데이터나 명령어에 다시 빠르게 액세스할 가능성이 높다는 개념. 시간 지역성을 활용해서 CPU가 최근에 액세스한 데이터를 캐시메모리에 저장 -> 빠른 액세스 속도

📌 예시) for나 while 같은 반복문에 사용하는 조건 변수는 반복문 안에서 시간 지역성의 원리를 기반으로 또 다시 접근할 가능성이 높기 때문에 캐시에 저장함

  • 공간 지역성의 원리(Spatial Locality) :
    공간 지역성은 CPU가 특정 데이터나 명령어를 액세스할 때, 해당 데이터 주변의 데이터도 순차적으로 액세스될 가능성이 높다는 개념.
    공간 지역성을 활용하여 캐시 메모리는 CPU가 요청한 데이터와 함께 근접한 데이터를 함께 저장하여 미리 가져옴 -> 빠른 액세스 속도

📌 예시) Arr[0], Arr[1]과 같은 연속 접근 시, 공간 지역성의 원리를 기반으로 근접한 데이터도 액세스 될 가능성이 높기 때문에 캐시에 저장함

3-3) 캐시 히트와 미스

  • 캐시히트 : CPU가 요청한 데이터를 캐시에서 성공적으로 찾았을 때 발생하는 상황, 캐시 히트는 주로 시간 지역성의 원리에 의해 발생
  • 캐시미스 : 캐시 미스는 CPU가 요청한 데이터를 캐시에서 찾지 못하고 주기억장치로부터 데이터를 가져와야 하는 상황, 주로 공간 지역성의 원리에 반하여 CPU가 요청한 데이터와 근처의 데이터를 함께 캐시에 저장하지 않았을 때 발생할 수 있음

캐시미스의 상황들

  1. Conflict Miss:
    충돌 미스는 가장 일반적인 캐시 미스 유형 중 하나
    CPU가 캐시에서 데이터를 찾을 때, 요청한 데이터의 메모리 주소와 다른 데이터가 동일한 캐시 세트에 매핑되어 충돌이 발생하는 경우에 발생.

  2. Cold Miss:
    CPU가 처음으로 데이터를 요청하거나, 이전에 캐시에 저장된 데이터가 초기화된 경우에 발생
    캐시가 초기화되었거나, 이전에 액세스하지 않은 데이터를 가져와야 하므로 주기억장치에서 데이터를 가져오는 시간이 소요됨

  3. Capacity Miss:
    용량 미스는 캐시의 용량이 요청된 데이터를 저장하기에 충분하지 않은 경우 발생
    CPU가 캐시에 저장하려는 데이터의 크기가 캐시의 용량을 초과하여 캐시에 저장되지 못하는 경우에 발생하는 것으로 주로 큰 데이터 구조나 프로그램의 일부가 캐시에 저장되지 못하는 경우에 발생

🙋🏻‍♀️ 캐시미스가 뭔가요? 캐시미스에 대한 예시를 들어주세요

참고
https://taegyunwoo.github.io/interview/CS_CPU

0개의 댓글