운영체제 - Memory Management

Young Hun Park·2022년 12월 1일
0
post-custom-banner

1. Logical Address 와 Physical Address

Physical address는 Process가 physical memory에 할당된 실제 주소값을 뜻합니다.
하지만 만약 개발자가 Physical memory의 physical address까지 신경쓰면서 개발한다면 효율이 매우 떨어질 것 입니다.

따라서 CPU에서는 Logical address를 통해서 process에 접근하고
MMU 라는 하드웨어가 Logical address를 Physical address로 변환 해줍니다.

MMU에서는 relocation register와 limit register를 통해 변환합니다.
Relocation register는 주솟값의 시작점을 뜻하며 limit register는 해당 process 주솟값의 범위를 뜻합니다.

2. Contiguous Allocation 와 External Fragmentation

Contiguous Allocation 방식의 등장 배경

											⬇️

Multiprogramming 환경에서 process가 비연속적으로 할당된다면 relocation register와 limit register 만으로 process 고유의 메모리 영역을 보존 할 수 없습니다. 그렇게 Contiguous Allocation 방식이 등장하게 되었습니다.

하지만 Contiguous Allocation 방식도 한계가 존재합니다.
바로 External Fragmentation 문제 입니다.

External Fragmentation 문제

External Fragmentation는 연속적으로 할당된 process들이 할당 해제되면서 발생하는 빈 메모리 공간들을 말합니다.
이 메모리 공간들이 문제되는 이유는 새로운 process를 할당하려고 했을 때
이 공간들이 효율적으로 활용되기 어려워 대부분의 경우 낭비되기 때문입니다.

이 문제를 해결하기 위해 나온 방식 중 Compaction 이 있습니다.
Compaction 방식은 이러한 빈 메모리 공간들을 모아서 하나의 큰 메모리 공간을 확보하는 방식인데 오버헤드가 커서 많이 사용되는 방식은 아닙니다.

그렇게 하여 문제를 근복적으로 해결하기 위해 나온 방식이 Non-Contiguous Allocation
즉, Paging 입니다.

3. Paging과 Internal Fragmentation

Paging 방식의 등장 배경

Paging이 나오게 된 배경은 매우 간단합니다.
Process 단위로 할당 해제 된 빈 메모리들을 활용하기 어렵다는 것이 문제였는데
그럼 메모리 할당 단위를 Process 단위에서 Page 단위로 더 작게 쪼개면 됩니다.

또한 그렇게 하면 process를 꼭 한 덩어리로 연속적이게 할당할 필요가 없게 되어
page 단위로 쪼개 비연속적으로 할당 할 수 있게 됩니다!

Page Table

Logical Address는 Page 단위로 쪼개지며 해당 page들은 page table를 통해서 physical memory의 Frame에 맵핑됩니다.

또한 Logical Address는 크게 Page Number와 Page Offset으로 나누어 지는데 page number는 page table의 index이고 page offset은 page table의 값에 더해져 physical address를 구할 때 사용됩니다.

Internal Fragmentation 문제

Internal Fragmentation 이란 Page의 크기가 process에 할당할 메모리 보다 클 때 발생하는 남은 메모리 공간을 말하고 이 공간이 낭비되는 문제를 Internal Fragmentation 문제 라고 합니다.

Page 크기를 크게 잡는다면 이러한 문제가 많이 발생하지만
반대로 page 크기를 작게 잡으면 page의 수가 많아져 page table 크기가 커지게 됩니다.
그렇게 되면 page table도 메모리에 올라가기 때문에 메모리 낭비를 야기하고 read하는 시간도 길어져 성능에 악역향을 미치게 됩니다.

따라서 Page의 크기를 적절하게 잡는 것이 중요한데
요즘에는 메모리 용량의 크기가 넉넉해졌기 때문에
Internal Fragmentation 문제가 발생하더라도 Page의 크기를 상대적으로 크게 잡는 편이라고 합니다.

4. Paging 방식의 발전

TLB(Translation Look-aside Buffer)

Page Table은 메인메모리(DRAM)에 할당되기 때문에 크기가 클수록 read 성능이 떨어질 수 밖에 없습니다.

TLB는 page table의 read 속도를 개선시키기 위해 자주 접근 되는 page들을 저장해놓는 버퍼 캐시입니다.
TLB는 캐시메모리에 할당되기 때문에 read 성능이 크게 향상됩니다.

Multi-level Paging

앞서 말씀드린 것처럼 Page Table의 크기가 클수록 성능에 안좋은 영향을 끼칩니다.
그래서 page 갯수가 많아졌을 때 단순히 page table의 크기를 키우는 것이 아닌 계층구조로 여러 page table들을 만드는 방식이 Multi-level Paging 입니다.
즉, page table의 page number를 맵핑하는 또 다른 outer page table를 만드는 것 입니다.

Segment

Segment는 logical address space를 개발자가 이해 할 수 있는 의미 단위로 분할한 것 입니다. 여러 page들이 모여 segement를 이루게 되며 page의 상위 개념입니다.
또한 segment도 동일하게 segment table를 통해서 physical memory에 맵핑됩니다.

전체 Mapping 과정

위 사진은 Intel Pentium 프로세서의 MMU에서 logical address가 physical address로 맵핑되는 것을 도식화 한 것 입니다.
먼저 Segment Table를 통해서 Linear address로 바꾸고 여러 page table들을 거쳐서 physical address로 변환 되는 것을 볼 수 있습니다.

Reference:
https://rebro.kr/178
A. Silberschatz, P.B. Galvin, and G. Gagne, “Operating System Concepts”

profile
개발자에게 유용한 지식
post-custom-banner

0개의 댓글