[iOS CS Study] Paging이란?

Oxong·2021년 7월 20일
0

iOS CS Study

목록 보기
11/18

21.07.18

공부한 것을 정리하는 용도의 글이므로 100% 정확하지 않을 수 있습니다.
참고용으로만 봐주시고, 내용이 부족하다고 느끼신다면 다른 글도 보시는 것이 좋습니다.
+ 틀린 부분, 수정해야 할 부분은 언제든지 피드백 주세요. 😊

                                                 by. ryalya




들어가기 전

메모리 관리 기법 중 가장 많이 쓰이는 것은 가상 메모리 관리 기법이다.

물리 메모리를 사용할 때는 보통 페이지를 고정 크기인 프레임(Frame)단위로 나눈다.

논리메모리 또는 가상메모리를 일정한 크기의 블록으로 나누는 것페이징(Paging)으로 외부단편화를 해결할 수 있다.

따라서 페이징(Paging)에 대해 알기 전에 내부 단편화외부 단편화에 대해 간략하게 알아야 한다.



단편화

메모리(RAM)의 공간이 여러 작은 조각으로 나뉘어져 사용 가능한 메모리가 충분히 존재하지만 할당을 못하는 상태.

즉, 메모리 할당과 해제가 계속하여 이루어지는 환경에서 발생하는 현상으로 공간이 할당되었는데도 불구하고 사용하지 않는 공간이 있거나, 전체적으로 봤을 땐 빈공간이 충분한데도 불구하고 연속된 메모리 공간이 없어 사용할 수 없는 경우 등으로 메모리가 낭비되고 있는 것!

내부 단편화와 외부 단편화로 나뉜다.


외부 단편화

→ 메모리 배치에 대한 문제

메모리가 할당되고 해제되는 작업이 반복될 때, 사용하지 않는 작은 메모리 공간(hole)이 중간중간 존재하게 된다.

이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상태를 외부 단편화라고 한다.

아래 그림을 보며 이해해보자.

색깔이 있는 부분은 메모리를 소비하는 작업이 가동중인 부분이다.

현재 사용 가능한 메모리의 총량은 총 90MB가 있다.

새로 요청하는 작업의 메모리가 70MB이므로 메모리의 총량은 충분하지만 hole이 연속적이지 않고 흩어져있으므로 70MB의 공간이 없어 해당 작업을 수행할 수 없다.

페이징 기법으로 해결이 가능


내부 단편화

메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비 되는 상태.

위의 그림을 보면, 현재 각각의 메모리에는 40MB씩 할당되어 작업이 진행되고 있다.

그런데 위에서 세번째 메모리는 40MB가 할당되었는데 사실상 30MB만 사용되고 있다.

10MB만큼의 내부 단편화 발생한 것이다.

세그멘테이션 기법으로 해결이 가능




Paging 기법


[요약] 가상메모리 사용하는 방법으로 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화를 해결할 수 있지만 페이지 단위에 알맞게 꽉채워 쓰는게 아니므로 내부 단편화 문제는 여전히 있다.


간단하게 말하면 보조기억장치를 이용한 가상 메모리(Virtual Memory)를모두 같은 크기의 블록으로 편성하여 운용하는 기법이다.

출처 : OS - Memory

RAM(물리메모리)을 일정한 크기의 블록으로 나눈 것을 Frame(프레임)이라 하고, 논리메모리 또는 가상메모리를 일정한 크기의 블록으로 나눈 것을 paging(페이징)이라고 한다.

페이징 기법이란 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법이다.

이렇게 하기 위해선 프레임과 페이징을 연결해야하는데, 이러한 Page Mapping에 사용하려고 Page Table을 만든다.

이러한 페이징 기법을 사용하게되면 연속적이지 않은 공간도 연속적으로 활용할 수 있기 때문에 위의 외부 단편화 문제점을 해결할 수 있다.

만약 페이지 단위를 작게 하면 내부 단편화 문제도 해결할 수 있지만, 그만큼 Mapping 과정 또한 늘어나기 때문에 Trade-Off 가 발생할 수 있다.



Segmentation 기법


[요약] 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하여 메모리에 할당하는 방식으로 내부 단편화를 해결할 수 있지만, 외부 단편화는 존재.


페이징 기법은 주로 가상 메모리를 물리적으로 일정한 크기의 단위로 분할하였지만, 세그멘테이션 기법은 가상 메모리를 서로 크기가 다른 세그멘트(Segment)(논리적 단위)로 분할해 사용하는 기법이다.

가상메모리의 블록 크기는 제각각이므로 대신 main Memory의 영역 구분을 없앤 후, 블록에 Protection Key라는 이름표를 달아 준다.

출처 : OS - Memory

페이징 기법과 마찬가지로 세그멘테이션도 mapping을 위해서는 세그먼트 테이블이 존재하는데, 이 세그먼트 테이블에는 세그먼트 번호, 시작주소, 세그먼트 크기가 들어있다.

그래서 CPU가 세그먼트 테이블에게 테이블 번호, 사용할 메모리 크기를 전달하면, 세그먼트 테이블은 메모리로 가서 해당 테이블 번호의 base(시작주소) 와 limit(세그먼트 크기) 를 비교하여 limit보다 메모리 공간이 작으면 인터럽트를 발생시켜 해당 프로세스를 강제 종료한다.



※ 보통은 이러한 세그멘테이션 기법보다는 페이징 기법을 대부분 사용한다. 그 이유는 세그멘테이션 기법 또한 크기가 다양한 만큼 다양한 공간이 생기기 때문에 그만큼 메모리 낭비가 존재하기 때문이다.



Reference

OS - Memory

메모리 단편화(Memory Fragmentation)가 무엇이고 왜 발생하는가?

0개의 댓글