해당 포스팅은 학교 수업 내용을 요약정리하는것에 초점을 두고 진행합니다. (3학년 2학기과정 OS수업)
참고문헌 : OSTEP(Operating System : Three Easy Pices)
1. Summary and Intro
과연 세그먼트 방식은 완벽할까 ?
메모리에 프로세스를 연속적으로 할당할 시에(contiguous allocation) 외부단편화 문제와 직면하게 된다.
* 외부 단편화란(external fragment) ? 프로세스 메모리 할당 시 연속적으로 주어야 하기 때문에, 메모리 총 공간에선 충분히 할당 가능함에도, 연속적으로 할당 가능한 공간이 없어(조각 조각 나 있어서) 할당이 불가능한 경우. 이 외부 단편화가 중요한 issue인것은, 메모리는 비싸기 때문이다. 값비싼 메모리자원이 외부 단편화로 인해 최대 1/3 수준 까지 손실될 수 있다면 ? 아아 돈아까워 죽는다 해결해야 한다 !!!!
물론 compaction을 통해 단편화문제를 일부 해결 가능하나, compaction은 메모리를 copy함에 있어서 I/O problem을 야기하고, 하드웨어 병목현상이 일어나기 때문에 이 조차도 현재 사용하는 방식은 아니다.
결국 메모리를 가변 크기로 할당한다면 외부 단편화문제는 필연적이다.
그리고 외부단편화 문제를 해결하기 위하여 나온것이 고정 크기 단위로 할당하는 페이징(paging)이다.
2. What is Paiging?
1번에서 말했듯, 페이징은 고정 크기 단위로 메모리를 할당하는 것이다.
논리 주소공간을 페이지(paging)
물리 주소공간을 페이지 프레임(page frame) 이라고 부른다.
똑같은 크기로 분할하는데 논리 주소공간이냐 물리 주소공간이냐에 따라 용어만 다른 것이다.
앞으로 계속 나오는 용어니 익혀두자.
위 처럼 논리 주소와 물리 주소를 동일한 고정 크기로 분할한다.
고정 크기 단위로 잘라준다는 특징 이외에 'not contiguos' 하다는 특징 또한 존재하다.
연속적일 필요가 없다는 것이다. 이를 가능하게 만드는게 페이지 테이블(page table)인데 이는 추후 포스팅에서 다루겠다.
위 그림의 물리주소를 살펴보자.
Process B(노랑색)의 조각과 Process A(주황색)의 조각이 연속성없이 뒤죽박죽 섞여있다.
이때 page tables에서 각각의 논리 주소가 물리 주소 어디로 매핑되는지에 대한 정보를 담고있고,
그 정보에 따라 논리 주소와 물리 주소가 mapping되어 연속적이여야 할 필요를 없앴다.
따라서 페이징은 주소 공간을
1. 고정 크기 단위로
2. 연속적일 필요없게
할당 함으로써 외부 단편화 문제를 해결했다.
이 외에도 힙, 스택의 방향에 대한 고려를 하지 않아도 되어(연속적일 필요가 없으니) 효율적으로 주소 공간 개념을 지원하고 공간 관리의 단순함 또한 제공해주는 장점이 있다.
하지만 동시에 페이징 기법은 내부단편화(internal fragment)를 야기하기도 하는데 ...
3. 내부 단편화
쉽게, 99KB의 메모리 공간을 4KB의 고정된 크기로 페이징을 한다고 가정해보자.
그럼 총 24칸의 메모리 공간이 나오고 3KB의 자투리 조각이 나오게 된다.
이를 내부 단편화라고 하는데, 이것이 외부 단편화에 비해 크기가 클까?
그럴리가 없다.
페이징 기법 사용 시 general하게 4KB의 단위로 자르기 때문에
내부 단편화가 일어난다 해도 그 크기는 4KB 미만일 가능성이 높다.
결론적으로 내부 단편화가 발생하더라도, 거의 메모리 공간을 100%에 가깝게 활용할 수 있다.
다음 포스팅에선 페이징 테이블에 대해 자세히 다뤄보겠다!
'OS' 카테고리의 다른 글
[OS] TLB - Paging의 성능문제에 대한 해결책 (0) | 2022.12.17 |
---|---|
[OS] 페이지 테이블 (page table)이란? (0) | 2022.11.20 |