페이징 설명에 필요한 용어
- 논리적 주소, Logical Address : 프로세스가 메모리에 적재되기 생성되는 독자적인 주소 공간이다. 논리적 주소는 각 프로세스마다 독립적으로 0번째 주소부터 할당이 된다.
- 물리적 주소, Physical Address : 실제로 메모리에 적재되는 위치 주소를 말한다.
- 주소 바인딩, Address Binding : CPU가 기계어 명령을 수행하기 위해 프로세스의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인하는 과정을 말한다.
Paging이란?
프로세스가 할당 받은 메모리 공간을 일정한 크기의 페이지 단위로 나눠 물리 메모리에서 연속되지 않는 서로 다른 위치에 저장하는 메모리 관리 방법이다.
먼저, 논리적 메모리 상으로는 붙어서 저장이 되어 있다고 하지만 물리적 메모리에서는 붙어 있지 않고 제 각각 저장이 되어 있게 된다. 그 상태에서 주소 바인딩을 위해 모든 프로세스가 주소 변환을 위해 페이지 테이블을 갖게 된다.
Page num | Frame num |
0 | 10 |
1 | 30 |
2 | 20 |
페이지 테이블은 이렇게 논리적 메모리 주소값(Page num)과 물리적 메모리 주소값(Frame num)을 가지고 있게 된다.
페이징 기법에서는 Page 단위로 메모리 적재가 되기 때문에 물리적 메모리를 페이지와 같은 크기의 프레임으로 미리 나눠둔다. 이렇게 미리 분할하게 되면 메모리 할당이 빠르게 이뤄지게 된다 .
쉽게 말하면 차곡차곡 쌓이는 논리적 메모리가 있고, 메모리 위치에 상관 없이 막 쌓이는(가운데 빈 공간이 있어도)물리적 메모리가 있다. 그리고 논리적 메모리와 물리적 메모리 주소를 매핑시키는 페이지 테이블이 있는 것이다.
Paging의 문제
물리적 메모리 공간을 작은 페이지 단위로 나눴지만 일부분이 애매하게 나눠 메모리가 남은에도 불구하고 할당이 불가능한 상태가 될 수가 있는데 이런 상태를 메모리 단편화라고 한다.페이징은 내부 단편화가 발생할 수 있다.
메모리 단편화에는 프로세스가 필요한 양보다 더 큰 메모리가 할당 되서 메모리 공간이 낭비되는 내부 단편화가 있고, 메모리에 비어있는 공간 크기가 작아 빈 공간이데 활용하지 못 하는 외부 단편화가 있다.
내부 단편화
페이징은 메모리의 크기를 Page 단위로 미리 나눠 놓는다.
하지만 미리 나눠 놓은 메모리를 모두 사용하지 못 한 경우 내부 단편화라고 한다.
Page의 단위를 10으로 메모리를 나눠두었고 각 Page에 프로세스를 받는다고 했을 때 프로세스가 10이 딱 들어오면 베스트지만 만약 프로세스의 크기가 7이 들어왔다고 가정하게 되면 3만큼의 메모리가 낭비되는 것이다. 이것이 내부 단편화이다.
즉, 준비된 메모리의 크기(사전에 Page 단위로 메모리 크기를 조절한다.)를 들어온 프로세스가 다 채우지 못 한 상태를 말한다.
외부 단편화
외부 단편화는 Segmentation에서 발생하는 문제인데 내부 단편화랑은 조금 다르다.
쉽게 말 하면 메모리에 비어있는 공간 크기가 작아 빈 공간인데 활용하지 못 하는 것이다.
세그먼테이션은 필요한 메모리만큼 물리적 메모리를 할당해 주는데 10이 메모리에 들어왔다 나가면 10만큼의 자리가 생기게 된다. 이때 다음 프로세스의 크기가 6이 들어왔다. 그럼 남은 10의 자리에서 6만큼 내어주고 메모리의 크기는 4만큼 남게 된다. 하지만 이때 딱 4나 4 이하의 크기를 가진 프로세스가 들어오는 것이 아니라 4보다 큰 5가 들어왔다고 가정하면 준비된 메모리의 크기보다 더 큰 프로세스가 들어왔으므로 남은 4의 메모리 공간은 활용하지 못 하게 되고 이것을 외부 단편화라고 한다.
Q. Paging과 Segment의 차이는 무엇인가?
paging은 일정한 크기의 단위로 나누어 할당하는데 반해, segmentation은 code, data, heap, stack 등의 기능(의미)단위로 물리 메모리에 할당하는 기법이다.
Q. Paged segmentation 기법이 무엇인가?
paged segmentation이란, segmentation을 기본으로 하되, 이를 다시 동일 크기의 page로 나누어 물리 메모리에 할당하는 메모리 관리 기법이다. 즉, 프로그램을 의미 단위의 segment로 나누고 개별 segment의 크기를 page의 배수가 되도록 하는 벙법이다. 이를 통해 segmentation 기법에서 발생하는 외부 단편화 문제를 해결하고, 동시에 segment 단위로 프로세스간의 공유나 접근 권한 보호가 이루어지도록 해서 paging 기법의 단점을 해결한다.