어제 연속할당에 이어 비연속 할당에 대해 알아보자.
비연속 할당은 프로그램을 여러 block으로 분할하여 실행 시 필요한 block들만 메모리에 적재하는 것이다. 적재돼있지 않은 block들은 swap device에 존재하게 된다. 크게 보면 Virtual Memory의 개념이다.
실제로 비연속적으로 메모리에 할당돼있지만 address mapping을 통해 사용자/process는 프로그램 전체가 메모리에 연속적으로 적재되어 있다고 가정하고 실행할 수 있다.
swap device에 프로그램을 같은 크기의 block으로 분할한다. 이를 page라고 부르기에 paging system이다. 메모리에도 page와 같은 크기로 page frame을 분할하여 필요한 block만 비연속 할당한다.
이 방법은 같은 크기로 분할하면 되기에 관리하기 간편하지만, 함수 단위로 나누어진 것이 아니라 크기로 나누어졌기에 공유나 보호하는 과정이 복잡하다. process는 page 단위로 나누어져 있고 메모리는 page frame으로 같은 크기로 나누어져 있기에 page frame이 남아있으면 메모리에 적재되거나 남아있지 않으면 적재되지 못하는 경우로 나뉠 뿐이지, 메모리 공간은 충분한데 올라가지 못하는 외부 단편화는 일어나지 않는다. 하지만 내부 단편화는 발생할 수 있다.
paging system은 window os에서 실제 사용하고 있다.
Direct mapping(직접 사상)
kernel 안에 저장된 PMT에서 page가 메모리에 적재되어 있는지 확인한다. residence bit = 1인 경우는 해당 page가 메모리에 적재된 것으로, 계산을 통해 실제 주소를 알 수 있다.
residence bit = 0인 경우를 page fault라고 하는데 page가 메모리에 아직 적재되지 않은 것으로, swap device에서 해당 page를 메모리로 적재한 후 residence bit = 1로 바꿔주고, 마찬가지로 계산으로 실제 주소를 알 수 있다.
direct mapping은 main memory에 있는 kernel 안에 저장된 PMT를 한 번 확인하고, 계산된 실제 주소로 main memory를 한 번 더 확인한다. 해서 원하는 데이터에 접근하기 위해 메모리 접근 횟수가 2배이므로 성능 저하와 PMT를 위한 메모리 공간이 필요한 문제점이 있다. 해서 Associative mapping과 PMT를 위한 전용 기억장치(공간)을 사용한다는 해결 방안이 나왔다.
Associative mapping(연관 사상)
TLB(Translation Look-aside Buffer)라는 PMT 탐색 전용 하드웨어 같은 곳에 PMT를 적재한다. TLB 전기 신호 한 번에 답이 나오는 병렬 탐색 하드웨어기에 속도가 빠르고 메모리 접근 횟수도 줄일 수 있다. 하지만 비싼 하드웨어로 큰 PMT를 다루기 어려움이 있다.
Hybrid direct/associative mapping
Direct mapping과 Associative mapping을 혼합하여 각각의 장점만 취하는 방법으로 하드웨어 비용은 줄이고 TLB의 장점은 활용한다. 전체 PMT는 메모리(커널 공간)에 저장하고, PMT 중 일부만 TLB에 적재한다. TLB에 적재할 PMT는 최근에 사용된 page로, 프로그램의 수행 과정에서 한 번 접근한 영역을 다시 접근할 가능성이 높다는 지역성을 활용하는 것이다.
만약 함수를 만들었는데 범용적으로 사용 가능한 함수일 때, 각 프로세스마다 같은 함수가 적재되는 것보다 함수는 한곳에 올려놓고 모든 프로세스가 공유할 수 있도록 하는 것이 효율적일 것이다. Page Sharing이 바로 이러한 개념이다. 비연속 할당 메모리이기에 여러 프로세스가 특정 page를 공유하는 것이 가능하다.
여러 프로세스가 page를 공유할 때, 보안 문제가 생긴다. 어떤 프로세스는 page를 사용해도 되는지 안되는지를 나타내기 위해 Protection bit를 사용한다. 각 페이지별 VRWE(메인 메모리 적재 여부, 읽기, 쓰기, 실행)을 1100과 같은 형식으로 적어두어 접근 권한을 관리할 수 있다.
Paging System 기법은 많은 장점에도 불구하고 프로그램의 논리적 구조를 고려하지 않아 page sharing/protection이 복잡하다는 어려움이 있다. 해서 이를 고려한 기법인 Segmentation System 기법이 등장하게 된다.
비연속 할당 기법들 중 하나인 Paging System 기법을 공부하며 꽤 딥해서 다음 기법은 다음 페이지에 정리해야겠다. 아윌비백..👍🏻
참고