본문 바로가기
C언어 공부

01. CPU와 Register, RAM, Cache, 프로그램의 실행

by 나노다 2024. 10. 12.

[사전지식] 

CPU와 Register

더보기

중앙 처리 장치 CPU 

  • 컴퓨터의 모든 연산은 중앙 처리 장치(CPU, Central Processing Unit)에서 수행.
  • CPU가 명령어를 실행하기 위해선 "1. 실행할 명령어 읽기 2. 연산 결과 어딘가에 저장하기"의 과정이 필요.

레지스터 Register 

  • CPU가 연산 수행을 위해 데이터를 저장하는 공간을 레지스터(Register)라 함.
  • 레지스터는 CPU 안에 있기 때문에 연산 시 접근이 매우 수월하지만, 그만큼 담을 수 있는 데이터 양이 적음. 
    ∴ CPU 밖의 저장 공간이 필요할 수밖에 없음.

RAM

더보기

RAM 

  • CPU가 명령어(무슨 연산 할지)와 그 명령어를 실행하기 위한 데이터를 읽는 공간. 휘발성 메모리.
  • 임의 접근 메모리(Random Access Memory) : 데이터에 순차적으로 접근해야하는 다른 메모리들과 달리, RAM은 원하는 데이터에 랜덤하게 접근할 수 있기 때문에 속도가 훨씬 빠름.

HDD, SDD

  • 비휘발성 메모리, 데이터 불러오는 속도 매우매우 느림.

ROM

  • Read Only Memory, CD나 DVD 등등

Cache

더보기

캐시 Cache

  • CPU의 RAM 접근 횟수를 줄여주는 저장 공간. 사용이 예측되는 데이터를 미리 캐시에 불러다 놓음.
  • RAM이 CPU 근처에 있긴 하지만, 사실 RAM에서 데이터를 불러오는 시간도 꽤 길기 때문에 활용. 
  • 직접적인 연산은 불가능하지만, 데이터를 빠르게 레지스터에 불러다 줌. 
    데이터를 "RAM → Cache → Register(CPU)"
  • 캐시 계층 L1, L2, L3 : L1일수록 저장 공간은 작고 레지스터와의 거리는 가까움.
      지금 가장 급한 데이터일수록 불러오는 속도가 젤 빠른 L1에, 여유로울 수록 L3에.
  • CPU는 사용이 예측되는 데이터들을 미리 캐시에 불러오는데, 미래를 볼 순 없기 때문에 정확도가 완벽하진 않음. 이에 적중률을 높이기 위해 램의 특정 부분만 반복적으로 접근하곤 함.
  • 캐시 미스 : CPU의 요청 데이터가 캐시에 없는 경우. 필요 데이터를 램까지 가서 찾아 오느라 시간이 지체됨

프로그램의 실행 (주소값, 가상 메모리, 페이징)

더보기

프로그램의 실행 과정

  1. HDD에 저장된 프로그램의 위치 찾아서 RAM에 복사.
  2. 운영체제가 CPU에게 RAM에 복사된 프로그램의 시작 주소값 알려줌.
  3. CPU는 들은 그대로 해당 위치부터 명령어 읽어나감.

주소값

  • 데이터를 읽기 위해선 RAM의 어디에서 얼마 만큼 읽어들일지(주소값) 말해주는 것이 중요.
  • RAM의 모든 데이터는 0번을 시작으로 1 바이트 단위로 고유의 주소(address)가 부여돼있음. 

가상 메모리와 물리 메모리

  • 프로그램이 여러 개 실행되는 경우, 각자가 필요한만큼 RAM의 공간을 분할해 차지함.
  • 이때 프로그램 간 명령어의 주소값이 중복돼 데이터 간 충돌이 발생할 위험 존재.
  • 가상 메모리 : CPU가 참조하는 메모리 주소값.
  • 물리 메모리 : 일련의 변환 과정(paging)을 거친 후 참조하게 되는 실제 메모리 주소값.

페이징(paging)

  • 페이징 : 메모리를 일정한 크기의 조각(page)들로 쪼개 각기 다른 영역에 대응시키는 변환 과정.
  • 페이지 : 페이징 때 변환 되는 최소 메모리 단위, 대개 4KB 정도.
  • 페이지 테이블 : 변환을 어찌 수행할 지 기록해둔 테이블. 프로그램 마다 하나씩 가짐.

  프로그램이 요구하는 메모리가 현재 보유중인 물리 메모리 용량을 초과하더라도, 우선순위가 낮은 페이지를 HDD에 복사해놓고, 당장 메모리를 필요로 하는 페이지에게 공간을 배당하는 방식으로 공존 가능. 때문에 각 프로그램은 자신이 메모리 공간 전체를 차지하는 것처럼 생각하며 작동. 가끔 컴이 느려지는 경우 중 하나가 HDD에 뒀던 페이지를 다시 메모리로 가져오는 과정에서 발생하곤 함.