Skip to content

Commit

Permalink
Update 2024-10-25-os.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yulmwu committed Jan 6, 2025
1 parent d21f6fa commit b38e46d
Showing 1 changed file with 48 additions and 7 deletions.
55 changes: 48 additions & 7 deletions _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ author: yulmwu
date: 2024-10-25 00:00:00 +0900
categories: ["빠르게 끝내는 시리즈"]
tags: ["컴퓨터", "하드웨어", "CPU"]
use_math: true
---

# 목차
Expand Down Expand Up @@ -62,8 +63,9 @@ tags: ["컴퓨터", "하드웨어", "CPU"]
1. [RAM의 종류](#2-2-1-1-ram의-종류)
2. [ROM](#2-2-2-rom)
1. [ROM의 종류](#2-2-2-1-rom의-종류)
3. [캐시-메모리](#2-2-3-캐시-메모리)
4. [메모리 주소](#2-2-4-메모리-주소)
3. [캐시 메모리](#2-2-3-캐시-메모리)
1. [지역성](#2-2-3-1-지역성)
4. [메모리 구조와 주소](#2-2-4-메모리-구조와-주소)
3. [보조기억장치](#2-3-보조기억장치)
4. [입출력장치(I/O)](#2-4-입출력장치io)
5. [버스](#2-5-버스)
Expand Down Expand Up @@ -630,9 +632,7 @@ CPU가 메모리에 올아와있는 프로그램의 명령어를 실행할 때

#### 2-1-3-5. 메모리 버퍼 레지스터

> ### 버퍼(Buffer)
>
> 버퍼(Buffer)는 어떤 장치(또는 메모리)에서 다른 장치로 데이터를 전달하거나 받을 때 시간의 차이를 맞추기 위해 데이터를 일시적으로 저장하는데, 이 공간을 버퍼라 한다.
> **버퍼(Buffer)**는 어떤 장치(또는 메모리)에서 다른 장치로 데이터를 전달하거나 받을 때 시간의 차이를 맞추기 위해 데이터를 일시적으로 저장하는데, 이 공간을 버퍼라 한다.
{: .prompt-tip }

위 버퍼의 설명대로 CPU에서 주기억장치에 접근할 때 물리적으로 속도차이가 날 수 밖에 없는데, 이 속도 차이를 보완하기 위해 전달하고자 하는 데이터를 **메모리 버퍼 레지스터(MBR, Memory Buffer Register)**에 저장해두고 시간 차이를 줄인다음 전달하게 된다.
Expand Down Expand Up @@ -943,7 +943,7 @@ ARM 등이 RISC에 해당되며, 임베디드 시스템에 사용되는 프로
우리가 앞서 "메모리"라고 하면 대부분 **RAM**을 의미한다고 설명하였다. ROM은 나중에 설명하고, RAM에 대해 먼저 설명하겠다.

> CPU는 메모리로 부터 데이터를 가져와 명령어를 실행한다. 또한 데이터를 메모리에 저장하기도 한다.
{:.info}
{: .prompt-info }

사실 위 설명만으로도 RAM이 어떤 역할을 하는지 대략적으로 알 수 있다.
어떠한 프로그램이 실행되면 보조기억장치(HDD, SSD 등)에서 프로그램의 데이터[^ram1]를 메모리로 가져와 CPU가 실행하게 된다.
Expand Down Expand Up @@ -1035,7 +1035,48 @@ PROM은 처음에 데이터를 쓸 수 있지만, 한번 쓰면 다시 쓸 수

### 2-2-3. 캐시 메모리

### 2-2-4. 메모리 주소
먼저, CPU와 메모리(RAM) 사이에는 속도 차이가 존재한다. CPU가 메모리에 접근하는 CPU의 연산 속도보다 느리다.
때문에 메모리 버퍼 레지스터 같은 버퍼를 활용하여 속도 차이를 줄이는 방법이 있기도 한데, 다른 방법으론 **캐시 메모리(Cache Memory)**를 사용하는 방법이 있다.

앞서 설명했지만 일반적으로 메모리(RAM)은 DRAM을 사용한다. 이는 속도가 느리다는 단점이 있지만, 대용량의 저장이 가능하다는 장점이 있다.
캐시 메모리는 SRAM을 사용하는데, SRAM은 용량이 작고 가격이 비싸지만 속도가 빠르다는 장점이 있다.

이처럼 CPU로 부터 가까운 레지스터 -> 캐시 메모리 -> 메모리 -> 보조기억장치 순으로 접근 속도가 느려지는데, 이를 **메모리 계층 구조(Memory Hierarchy)**라고 한다.

레지스터는 크기도 워낙 작고, RAM과 같은 역할로 쓰기엔 적절하지 않기 때문에 메모리(RAM)과 레지스터 사이에 캐시 메모리를 두어 속도 차이를 줄이는것이다.

> **캐시(Cache)**는 사전적으로 "데이터나 값을 미리 저장해두는 임시 장소"라는 의미를 가지고 있다.
> 간혹 크롬 등의 웹브라우저에서 캐시를 지우라는 말을 들어본적이 있을텐데, 여기서 나오는 캐시도 웹페이지의 데이터를 미리 저장해두는 임시 장소라는 의미이다.
{: .prompt-tip }

CPU가 메모리(RAM)에 자주 접근하면 그만큼 성능이 저하되나, 자주 접근하는 데이터를 캐시 메모리에 저장해두면 CPU가 빠르게 접근할 수 있어 성능이 향상된다.
또한 CPU가 다음에 사용할 데이터를 예측하여 캐시 메모리에 저장하기도 한다.

물리적인 CPU 구조로 보면 캐시도 계층적으로 구성되어있는데, 레벨로 구분하여 크게 **L1 캐시**, **L2 캐시**, **L3 캐시**로 나눌 수 있다.
일반적으로 L1 캐시가 가장 빠르고 용량이 작고, L3 캐시가 가장 느리고 용량이 크다.

#### 2-2-3-1. 지역성

캐시 메모리는 RAM보다 크기가 훨씬 작다. 때문에 캐시 메모리에 어떤 데이터를 저장하는게 효율적인지를 판단해야 하는데, 이때 **지역성(Loacality)**이라는 개념이 중요하다.

지역성은 데이터 접근이 시간적, 혹은 공간적으로 가깝게 발생하는걸 의미한다. 예를 들어 12번지의 명령어를 실행한다면 13번지의 명령어를 실행할 확률이 높다는 것도 지역성의 일종이다. (공간 지역성)

지역성에는 크게 **시간 지역성(Temporal Locality)****공간 지역성(Spatial Locality)**이 있다.

* **시간 지역성**: 어느 메모리의 데이터를 접근했을 때, 가까운 시간 내에 다시 접근할 확률이 높다.
* **공간 지역성**: 특정 메모리의 데이터를 접근했을 때, 그 주변 메모리의 데이터를 접근할 확률이 높다.

---

만약 예측하여 캐시 메모리에 저장한 데이터가 CPU에 의해 사용된다면, 즉 예측이 맞다면 이를 **캐시 히트(Cache Hit)**라고 하며, 그 반대인 예측에 실패한 경우를 **캐시 미스(Cache Miss)**라고 한다.
캐시 미스가 많을수록 오히려 성능이 떨어지게 되므로, 이를 줄이는것이 성능 향상에 중요하다.

> 캐시 적중(예측) 횟수를 전체 메모리 접근 수로 나눈 비율을 **캐시 적중률(Cache Hit Rate)**이라고 한다.
>
> $\text{캐시 적중률(%)} = \left( \frac{\text{캐시 히트 수}}{\text{전체 메모리 접근 수}} \right) \times 100$
{: .prompt-info }

### 2-2-4. 메모리 구조와 주소

## 2-3. 보조기억장치

Expand Down

0 comments on commit b38e46d

Please sign in to comment.