본문 바로가기
개발공부 개발새발/OS

OS ) CPU와 메모리

by 휴일이 2023. 11. 2.

CPU의 구성

 

산술논리 연산장치(ALU)  CPU를 연산하는 장치. 산술 연산과 논리 연산을 수행.
제어장치 CPU에서 작업을 지시하는 부분.
레지스터 작업에 필요한 데이터를 CPU 내부에 보관하는 곳

레지스터의 종류는 다양하다. 계산을 하기 위해 가져온 데이터를 저장하거나, 계산의 중간 값을 임시로 보관하거나, 작업을 진행하기 위해 필요한 정보를 보관하기도 한다.

 

 

CPU 는 어떻게 동작할까?

int D2 = 2; // 메모리 100번지라고 가정
int D3 = 3; // 메모리 120번지라고 가정
int sum; // 메모리 160번지라고 가정

sum = D2 + D3;

해당 유사 코드를 어셈블리어 유사 코드로 컴파일(?) 하면…

 

 

LOAD mem(100), register 2 // 메모리 100번지 내용을 R2로 이동
LOAD mem(120), register 3 // 메모리 120번지 내용을 R3로 이동
ADD register 5, register 2, register 3 // R2와 R3를 더한 후 R5에 임시저장
MOVE register 5, mem(160) // R5 결과를 160번지(sum)에 저장
  • 1행 : 메모리 100번지 값을 CPU로 가져오라는 명령. 메모리 100번지는 D2를 의미한다. D2에 있는 2가 CPU의 레지스터 2로 옮겨진다. 레지스터 2는 덧셈을 하기 전에 데이터를 임시로 보관하는 곳이다.
  • 2행 : 메모리 120번지(D3)의 3이 덧셈 연산을 하기 전에 레지스터 3에 잠시 보관.
  • 3행 : 레지스터 2(D2) 값과 레지스터 3(D3) 값을 더하라는 명령. 더한 결과 값은 레지스터 5에 임시로 저장한다. 덧셈 결과인 숫자 5는 최종적으로 sum(메모리 160번지)에 저장되어야 한다.
  • 4행 : 레지스터 5에 임시로 저장된 5를 메모리 100번지(sum)로 옮긴다.

→ 이러한 과정을 거쳐 덧셈 연산이 이뤄진다!~

이걸 실제 CPU 의 작업 과정에 대입해보면 !

 

  1. 제어장치는 메모리 100번지에 있는 값(2)을 레지스터2로 옮기라는 명령을 내린다.
  2. 제어장치는 메모리 120번지에 있는 값(3)을 레지스터3으로 옮기라는 명령을 내린다.
  3. 레지스터2와 3의 값을 산술논이 연산장치(ALU)로 보내서 더하라는 명령을 내린다.
    1. 결과값 5는 레지스터 5에 임시 보관한다.
  4. 레지스터5의 값을 메모리 160번지(sum)으로 옮기라는 명령을 내린다.

CPU는 산술논리 연산장치, 제어장치, 레지스터들이 협업해 작업을 처리한다.

레지스터 종류

사용자 가시 레지스터

사용자 프로그램에 의해 변경된다.

데이터 레지스터(DR)

  • 메모리에서 가져온 데이터를 임시로 보관할 때 사용.
  • CPU에 있는 대부분의 레지스터.
    • 일반 레지스터 또는 범용 레지스터라고 부른다.

주소 레지스터(AR)

  • 데이터 또는 명령어가 저장된 메모리의 주소를 저장.

사용자 불가시 레지스터

사용자가 임의로 변경이 불가능하다.

프로그램 카운터(PC)

  • CPU가 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려준다.

명령어 레지스터(IR)

  • 현재 실행 중인 명령어를 저장한다.

메모리 주소 레지스터(MAR)

  • 메모리에서 데이터를 가져오거나 메모리로 데이터를 보낼 때 주소를 지정하는 데 사용한다.

메모리 버퍼 레지스터(MBR)

  • 메모리에서 가져온 데이터나 메모리로 옮겨갈 데이터를 임시로 저장한다.
  • 항상 메모리 주소 레지스터와 함께 동작한다.

프로그램 상태 레지스터 PSR

조건의 결과에 따라 다른 코드가 실행되는 if 같은 분기 문장에 이용.

if (D2 - D3 > 0)
	goto 100;
else
	goto 200;
  1. D2, D3 의 결과를 임시로 저장.
  2. 음수인지 양수인지를 제어장치에 알려주고 몇 번 행으로 이동할지 결정.
  • 산술논리 연산장치(ALU)와 연결되며, 연산 결과를 저장한다.

레지스터

레지스터 특징
일반 레지스터 데이터 레지스터 DR CPU가 명령어를 처리하는 데 필요한 데이터를 임시로 저장하는 범용 레지스터.
주소 레지스터 AR 데이터 또는 명령어가 저장된 메모리의 주소를 저장.
특수 레지스터 프로그램 카운터 PC 다음에 실행할 명령어의 위치(코드 행 번호)를 저장.
명령어 레지스터 IR 현재 실행 중인 명령어를 저장.
메모리 주소 레지스터 MAR 메모리 관리자가 접근해야 할 메모리의 주소를 저장.
메모리 버퍼 레지스터 MBR 메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장.
프로그램 상태 레지스터 PSR 연산 결과(양수, 음수 등)을 저장.

(시스템) 버스

CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용. 지나다니는 길 이라고 생각하자.

제어 버스

  • 제어장치와 친구.
  • 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 가는 버스.
  • CPU, 메모리, 주변장치와 양방향 신호.

주소 버스

  • 메모리 주소 레지스터와 친구.
  • 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보(주소)가 오고 가는 버스.
  • 단방향. 주소 버스를 통해 CPU로 전달되는 정보는 없다.

데이터 버스

  • 메모리 버퍼 레지스터와 친구.
  • 제어버스, 주소 버스를 거친 데이터를 실어 목적지까지 이동하는 버스.
  • 양방향 신호.
버스 특징
제어 버스 제어 장치와 연결. CPU가 메모리와 주변장치에 제어 신호를 보내기 위해 사용. 메모리와 주변장치에서도 작업이 완료되거나 오류가 발생하면 제어 신호를 보내니, 양방향 신호.
주소 버스 메모리 주소 레지스터와 연결된 버스. 데이터를 읽거나 쓸 때 메모리나 주변장치에 위치 정보를 보내기 위해 사용. 단방향.
데이터 버스 메모리 버퍼 레지스터와 연결. 양방향 데이터 이동.

CPU 비트

버스의 대역폭

  • 한 번에 전달할 수 있는 데이터의 최대 크기.
  • 대역폭의 크기만큼 데이터가 오고갈 수 있다.
  • 버스의 대역폭은 CPU가 한번에 처리할 수 있는 데이터 크기와 같다.

비트

  • 32bit, 64bit란, CPU가 한번에 처리할 수 있는 데이터의 최대 크기.
  • 버스의 대역폭, 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기는 항상 같다.

워드

CPU가 한번에 처리할 수 있는 데이터의 최대 크기.

메모리의 종류

읽거나 쓸 수 있는 램(RAM), 읽기만 가능한 롬(ROM)으로 구분된다.

램 RAM

무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 의미로 붙은 이름.

휘발성 메모리

DRAM (동적 램)

  • 저장된 0과 1의 데이터가 일정 시간이 지나면 사라진다.
  • 일정 시간마다 다시 재생시켜야 한다.
  • 메인메모리에 사용.

SRAM (정적 램)

  • 전력이 공급되는 동안에는 데이터를 보관할 수 있으니 재생할 필요가 없다.
  • 속도는 빠르지만 가격이 비싸다.
  • 캐시같은 고급 메모리에 사용.

SDRAM

  • DRAM이 발전된 형태.
  • 클록 틱(펄스)이 발생할 때마다 데이터를 저장하는 동기 DRAM.

메인 메모리를 비휘발성으로 만들면 전력이 끊겨도 내용이 남아 편리할 수는 있다. 대신 메모리 내부가 복잡하고 속도가 느려지며 가격이 비싸진다. 그래서 아직도 메인메모리는 휘발성 메모리를 사용한다.

비휘발성 메모리

플래시메모리, FRAM, PRAM 등이 있다.

플래시 메모리

  • 전력이 없어도 데이터를 보관한다.
  • 디지털 카메라, MP3 플레이어, USB 드라이버…
  • 대신 각 소자가 최대 사용 횟수가 제한되어 있다.
    • SD 카드나 USB 드라이버를 오래 사용하면 성능 저하 또는 데이터를 잃어버릴 수 있으니 주의!

SSD

  • 가격은 비싸지만 빠른 데이터 접근 속도, 저전력, 높은 내구성.
  • 데스크탑, 노트북 등 많은 기기에서 사용된다.

  • 전력이 끊겨도 데이터를 보관할 수 있다.
  • 데이터를 한 번 저장하면 바꿀 수 없다.
    • 바이오스(OS 기본 소프트웨어)를 롬에 저장한다.

마스크 롬

데이터를 지우거나 쓸 수 없음.

PROM

전용 기계를 이용하여 데이터를 한 번만 저장할 수 있음.

EPROM

데이터를 여러 번 쓰고 지울 수 있음. 플래시 메모리처럼 사용할 순 있으나 가격이 비싸 잘 이용하진 않음.

메모리 보호

사용자 영역의 작업이 운영체제 영역으로 침범하지 못하도록 막는 것.

메모리가 보호되지 않으면?

  • 어떤 작업이 다른 작업의 영역을 침범해서!
    • 프로그램 파괴하거나 데이터 지우기.
    • 최악의 경우 운영체제 영역을 침범하여 시스템이 멈출 수도…

운영체제도 소프트웨어다.

  • 운영체제도 CPU를 사용하는 작업.
  • 사용자 프로세스가 CPU를 차지해서 작업하면 운영체제 작업이 잠시 중단됨.
  • 그러면 우리는 메모리 보호를 위해 하드웨어의 도움을 받아야 한다!

메모리를 보호하기 위해 CPU는?

  • 현재 진행중인 작업의 메모리 시작 주소를 경계 레지스터에 저장한 후 작업.
  • 현재 진행 중인 작업이 차지하고 있는 메모리의 크기(마지막 주소까지의 차이)를 한계 레지스터에 저장.
  • 사용자 작업이 진행되는 동안 두 레지스터가 주소 범위를 벗어나는지 하드웨어 측면에서 점검하며 메모리를 보호한다.
  • 만약 값을 벗어나면 메모리 오류 관련 신호(인터럽트)를 발생시킨다.
    • 모든 작업이 중단되고 CPU가 운영체제를 깨워 문제를 처리하도록 시킨다.
    • 운영체제가 해당 프로그램을 강제 종료시킨다.

모든 메모리 영역은 하드웨어와 운영체제의 협업에 의해 보호된다..!

부팅

컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정.

과정

  1. 사용자가 컴퓨터 전원을 켠다.
  2. 롬에 저장된 바이오스가 실행된다.
  3. 바이오스가 CPU, 메모리, 하드디스크, 키보드 등 주요 하드웨어가 제대로 작동하는지 확인하고 이상이 있으면 오류 메시지를 출력한다.
  4. 점검이 완료되면 하드디스크의 마스터 부트 레코드에 저장된 작은 프로그램을 메모리에 가져와 실행한다.
    1. 마스터 부트 레코드: 하드디스크의 첫 번째 섹터
    2. 운영체제를 실행하기 위한 코드, “부트스트랩”이 저장되어 있다.
    3. 부트스트랩 코드(로더)는 하드디스크에 저장된 운영체제를 메모리로 가져와 실행하는 역할을 하는 작은 프로그램.
728x90