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 b38e46d commit 02f6de0
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ use_math: true
1. [ROM의 종류](#2-2-2-1-rom의-종류)
3. [캐시 메모리](#2-2-3-캐시-메모리)
1. [지역성](#2-2-3-1-지역성)
4. [메모리 구조와 주소](#2-2-4-메모리-구조와-주소)
4. [논리 주소와 물리 주소](#2-2-4-논리-주소와-물리-주소)
3. [보조기억장치](#2-3-보조기억장치)
4. [입출력장치(I/O)](#2-4-입출력장치io)
5. [버스](#2-5-버스)
Expand Down Expand Up @@ -1076,7 +1076,34 @@ CPU가 메모리(RAM)에 자주 접근하면 그만큼 성능이 저하되나,
> $\text{캐시 적중률(%)} = \left( \frac{\text{캐시 히트 수}}{\text{전체 메모리 접근 수}} \right) \times 100$
{: .prompt-info }

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

앞서 메모리에 접근한다 하면 컴퓨터 내에 하나의 RAM에 접근하는것이라고 설명했다. 하지만 컴퓨터는 두가지의 주소 체계를 사용하는데, 바로 **논리 주소(Logical Address)****물리 주소(Physical Address)**이다.

먼저 **물리 주소**는 물리적인 RAM의 주소를 의미한다. 즉, RAM의 실제 주소를 의미한다. 여태 "12번지의 데이터"라고 했을때, 이 12번지가 바로 RAM의 물리주소를 의미했었다.

하지만 프로그램 내에선 논리 주소를 사용하는데, **논리 주소**는 CPU와 프로그램 내에서 사용되는 주소 체계다.
실행되는 프로그램엔 각각 0번지 부터 시작하는 주소가 할당된다. 반면 물리 주소는 이러한 구분 없이 0번지부터 시작한다.

때문에 어떤 프로그램 내에서 "12번지" 라고 하면 이는 논리 주소를 의미하며, 물리 주소에선 다른 주소일 수도 있다.

이렇게 논리 주소를 물리 주소로 변환해야 하는데, 이를 변환하는 장치를 **메모리 관리 장치(Memory Management Unit, MMU)**라고 한다. 간단하게 설명하면 논리 주소 "12번지"를 물리 주소로 변환하려면 물리 주소에서의 프로그램의 시작점을 더한다.

예를 들어 어떠한 프로그램이 물리 주소 100번지부터 시작한다고 하면, 이 프로그램의 논리 주소 12번지는 물리 주소 112번지가 된다.[^lapa1]

---

논리 주소와 물리 주소로 나누는 이유는 여러가지가 있는데, 가장 큰 이유는 프로그램의 주소 변동과 메모리 보호 때문이다.

프로그램이 실행될 때마다 매번 메모리 주소가 변동하는데, 이때 논리 주소를 사용하면 프로그램의 주소 변동에 따라 물리 주소를 MMU를 통해 변환해주기만 하면 되기 때문에 편리하다.

또한 논리 주소를 사용하면 메모리 보호도 쉽게 가능하다.
예를 들어, 프로그램 A는 물리 주소 100번지 ~ 150번지를 사용하고, 프로그램 B는 200번지 ~ 250번지를 사용한다고 하자.

만약 프로그램 A가 70번지 데이터를 사용하려고 한다면, 이는 논리 주소이기 때문에 MMU를 통해 물리 주소로 변환되어 물리 주소 170번지로 변환된다.
하지만 프로그램 A는 물리 주소 150번지까지만 사용하므로, 170번지에 접근하려고 하면 Segmentation Fault 에러가 발생한다.

이처럼 논리 주소를 사용하여 메모리 보호를 할 수 있으며, 프로그램의 주소 변동에도 유연하게 대처할 수 있다.

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

Expand Down Expand Up @@ -1109,3 +1136,4 @@ CPU가 메모리(RAM)에 자주 접근하면 그만큼 성능이 저하되나,
[^risc1]: 실제론 RISC의 명령어가 더 적거나 하진 않을 수 있다. 하지만 주소 지정 방식이 CISC보다 단순하여 명령어 처리에 효율적이다.
[^risc2]: 실제로 전력 소모면에선 임베디드를 제외하면 큰 차이가 없긴 하다.
[^ram1]: 프로그램의 명령어들과 프로그램이 가지고있는 데이터를 의미한다.
[^lapa1]: 프로그램의 시작점의 물리 주소를 가지고 있는 레지스터가 베이스 레지스터이다.

0 comments on commit 02f6de0

Please sign in to comment.