페이징 기법을 이용해 분산 메모리 할당을 진행해도 여전히 내부 단편화 문제가 존재한다.
이를 막기 위해 다른 기법이 고안되었다. 바로 세그먼트 기법이다. 먼저 세그먼트란 무엇인가?
세그먼트란 연관된 기능을 수행하는 하나의 모듈 프로그램이다. 세그먼트는 단위 크기가 변하지만 페이징은 고정크기이다. 세그먼트 크기가 다르기 때문에 메모리가 페이지 프레임으로 나누어지지 않고 동적분할(가변분할)기법으로 메모리를 할당한다. 즉 세그먼트는 가변크기이고 페이지는 고정 크기다. 세그먼트는 즉 크기가 달라 length의 개념이 필요하다.
페이지 기법과 마찬가지로 세그먼트 기법도 매핑 테이블을 사용하는데 이걸 세그먼트 매핑 테이블이라고 한다.
세그먼트 주소매핑 예이다.
논리 주소는 우선 세그먼트 테이블의 세그먼트 번호와 변위로 구성된다. 여기에서 세그먼트 테이블은 기준과 한계로 이루어지는데 변위는 무조건 한계보다 작아야한다. 한계는 length의 개념이다. 기준은 물리 메모리 세그먼트 시작 주소다.
즉 논리주소의 세그먼트 번호를 이용해 세그먼트 테이블에서 해당 번호에서 한계와 기준을 가져온다. 기준은 메모리 세그먼트 시작 주소이며 실제 주소는 기준과 변위를 더한다. 대신 변위의 크기는 한계보다 작아야한다. (CPU로 만들어진 논리 주소를 검사해야한다.)
세그먼트는 내부 단편화가 없고 수정하지 않을 동일한 세그먼트를 공유할 수 있다. 예를 들어 파워포인트 세그먼트는 내부를 수정하지 않기 때문에 다른 여러 파일들에서 해당 세그먼트를 공유할 수 있다. 대신 세그먼트는 외부 단편화 문제가 존재한다.
페이징은 내부 단편화 문제가 있고 세그먼트는 외부 단편화 문제가 있다. 이를 적절하게 융합하고 더 빠른 메모리 할당을 위해 만들어진 기법이 페이지화된 세그먼트 기법이다.
논리주소에는 세그먼트 번호와 피이지 번호와 페이지 변위가 들어간다. 즉 세그먼트 매핑 테이블, 페이지 테이블이 존재한다. 먼저 세그먼트 번호를 이용해 해당 세그먼트 테이블에 접근한다. 이 때 자신의 영역을 벗어나는지 길이에 관해 체크한다. 만약 통과했다면 그 세그먼트 테이블은 세그먼트를 위한 페이지 테이블이 존재한다. 그러면 그 페이지 테이블에서 해당 페이지가 어느 프레임에 저장되어있는지, 즉 물리주소를 확인한다. 물리 메모리에 있다면 바로 접근을 한다.
댓글