Recap : paging system 정리
이전 게시글에서 non-continous memory allocation
의 기법 중 paging system
에 대해
공부했었다.
paging system
은 프로세스를 일정한 물리적 단위 로 나눠 프로세스를 page
단위로 , 실제 물리적 메모리도 page
크기만큼 나눈 page frame
단위로 나눠 둔 후
모든 page
들을 swap device
에 담아두고 필요한 부분만 메모리에 적재하는 시스템이다.
메모리에 적절한 page
들을 담기 위해 frame table
을 이용해 현재 물리적 메모리에 어떤 프로세스의 page
들이 담아야 할 지 다음 page
가 적재 될 물리적 메모리를 확인했다.
프로세스는 각 프로세스 별 PMT (page mapping table)
을 가지고 있어 프로세스의 가상 메모리 주소를 실제 메모리 주소로 변경하는 단계를 거쳤다.
paging system
의 장점은 일정한 물리적 단위로 나눠버리기 때문에 물리적 메모리 주소를 관리하기 쉽다는 것이다. 예를 들어 코드가 100줄짜리인 프로세스가 있다면 20줄씩 5가지의 page
로 나눠버리면
물리적 메모리는 20줄 단위로 파티션만 나눠두고 파티션에 페이지를 넣으면 되기 때문에 실제 메모리를 관리하기 매우 간단하다.
원래는
kb
와 같은 용량 단위로 이야기 하는데 쉽게 설명하기 위해 코드 줄 수로 얘기했다.
이런 특징은 fixed partition
방식과 유사하다 볼 수 있다.
하지만 이로 인한 단점은 프로세스를 논리와 상관 없이 물리적 단위로 나눠버리기 때문에 프로세스를 공유 , 보호 하는 것이 힘들다.
어떤 큰 용량의 함수가 존재하는데 함수의 중간 부분을 기점으로 나뉘어 버린다면 나뉘어진 두 개의 페이지를 공유하거나 , 각 페이지의 보호 설정 (읽기, 쓰기, 실행, 삭제 등) 을 어떻게 해야 하는지 곤란하다.
Segmentation system
페이징 시스템이 물리적 단위로 냅다 나눠버렸다면 세그멘테이션 시스템에선 논리적 단위로 나눈다.
함수는 함수 크기 별로, 자료구조는 자료구조 별로 .. 등등 본인의 논리적 단위에 맞게 나눠버린다는 것이다.
이렇게 논리적으로 나뉜 세그멘테이션들은 물리적 메모리에 세그멘테이션 그대로 온전히 적재된다.
준비 할 수 없다. 그렇기 때문에 페이징 시스템에선 fixed partition
을 사용했다면
세그멘테이션 시스템에서는 variable partition
을 사용한다.
들어오고자 하는 세그멘테이션의 크기를 보고 적절한 메모리 공간에 할당하는 것을 의미한다.
Segment Map Table
테이블을 살펴보면 페이징 시스템과 다르게 segment length , protection bits
등이 추가된 것을 볼 수 있다.
segment length
: 세그먼트의 크기를 나타내는 것으로 페이징 시스템에선 각 페이지들의 크기가 고정된 반면 세그멘테이션 시스템에선 세그멘트의 크기가 유동적이니 필요하다.protection bits
: 세그멘테이션 시스템에선 세그먼트를 공유하는 것이 매우 간편하다. 왜냐면 공유하고자 하는 데이터 혹은 함수가 통째로 공유되기 때문이다. 공유하고자 하는 세그멘테이션이 명확하니 세그멘테이션의 권한을 설정하여 프로세스를 보호한다.Address mapping
어드레스를 맵핑하는 과정은 페이징 시스템과 별반 다를 것이 없다.
v = (s,d)
로 작성되어있는 가상 주소를 통해 실제 주소를 찾아내는 과정을 살펴보자
kernel
의 SMT
에 접근하여 s
를 확인한다residence bit
가 0일 경우엔 segment fault
로 swap device
에 존재하는 세그먼트를 메모리에 적재하고 추후 과정을 진행한다.segment address
를 확인하여 실제 메모리에 적재된 세그멘트의 시작 주소를 확인하고 d
만큼 더해 실제 주소를 찾아낸다. 이 때 d
가 l
보다 큰 경우엔 segment overflow
처리 모듈을 호출한다.
어떤 변수 혹은 함수의 가상 주소가 세그먼트 밖의 값을 호출하는 경우를 의미한다.
허가되지 않은 연산의 경우엔 segment protection
처리 모듈을 호출한다.
Memory management
VPM (variable partition method)
와 유사하게 적재시 크기에 맞추어 실제 메모리를 분할 후 적재한다.
segmentation system
의 장점우선 프로그램을 논리적 단위로 분할하기 때문에 각 세그멘테이션을 공유하고 관리하는 것이 간편하다.
또한 동적으로 분할하기 때문에 internal fragment
가 존재하지 않는다.
Paging system , segmentation system
의Fragment
이전 챕터에서 깜박하고
fragment
에 대한 이야기를 하지 않았다.
예전continuous memory
에서fragment
에 대한 이야기를 했었는데fragment
는 두 가지 종류가 있다.
internal fragment
: 준비된 메모리의 양보다 할당된 값이 적어 할당 이후 실제 메모리의 주소가 남아 낭비되는 경우 (주로pixed partition
에서 흔함)external fragment
: 비어있는 메모리의 양은 할당되어야 할 값보다 크지만 메모리가 연속적이지 않게 준비되어 있어 메모리가 할당되지 못하는 경우 (주로variable partition
에서 흔함)
paging system
은fixed partition
,segmentation system
은variable partition
이다.
그럼 각 시스템 별로 어떤fragment
가 존재할 것 같은지 이해가 될 것이다.
internal fragment
가 존재하지 않기 때문에 딱 필요한 만큼만 메모리에 프로세스를 적재하는 것이 가능하여 메모리를 효율적으로 사용하는 것이 가능하다.
segmentation system
의 단점하지만 variable partition
을 사용하는 만큼 구현하기 복잡하고
오버헤드가 크다는 단점이 있다.
매번 실제 메모리의 용량을 계산하기도 해야하고 세그먼트 별 길이를 또 거려해야 하고 .. 등등 말이다.
Hybrid paging/segmentation system
짜잔 그래서 짬뽕을 시켰습니다. 두 시스템의 장점을 혼합해 사용하는 것이 hybrid
기법이다.
segmentation system
의 장점은 프로세스를 논리적 단위로 나누기 때문에 세그먼트를 공유하는 것이 간편했다는 것이다.
paging system
의 장점은 일정한 물리적 단위로 나누기 때문에 실제 메모리 주소를 준비하는 것이 간편하여 오버헤드가 적다 는 것이였다.
그럼 프로세스를 논리적 단위에 맞게 segment
로 나눈 후 물리적 메모리에 적재 할 때는 segment
를 일정한 page
단위로 나눠 적재하여 메모리 관리를 간편하게 하자는 것이 hybrid
기법이다.
다음의 이미지처럼 말이다.
Address mapping
가상 메모리 주소는 v = (s , p ,d )
로 표현되며 맵핑 과정에선 SMT , PMT
모두 사용된다.
전체적인 흐름을 먼저 살펴보자
전체적인 흐름에서는 v = (s , p , d)
로 있는 경우
kernel
을 통해 SMT
를 조회하여 SMT
에 적힌 PMT address
의 주소로 접근한다.PMT
를 통해 현재 page
의 residence bit
를 확인하고 page frame number
를 통해 실제 메모리의 page frame
에 접근한다.page frame
의 시작 부분주소와 d
를 더해 실제 메모리 주소를 확인한다.전체적인 흐름을 파악했으면 SMT , PMT in hybrid
를 살펴보자
SMT in hybrid
우선 SMT in hybrid
에서는 residence bit
가 존재하지 않는다.
그 이유는 물리적 메모리에 적재되는 것은 세그멘트가 아니라 segment
를 나눈 page
이기 때문이다.
또한 SMT
에서는 PMT address
를 가리키고 있다.
PMT in hybrid
PMT
에서는 residence bit , page frame number
를 확인하는 것이 가능하다.
실제 물리적 메모리에 적재되는 것은 page
이기 때문이다.
Hybrid
기법의 장단점장점
페이지를 공유하고 보호하기가 쉽다.
각 페이지는 하나의 세그멘테이션에서 분할 된 페이지이기 때문에 물리적 단위로 짤랐을지언정 서로 같은 논리적 단위 안에서 관리된다. (만약 40줄짜리 함수를 10줄씩 나눠 4가지 페이지로 나눴더 하더라도 모두 동일한 함수의 일부이다.) 그로 인해 서로 다른 페이지더라도 모두 같은 protection bit
를 이용하여 보호하고 공유하는 것이 가능하다.
메모리 할당 / 관리 오버헤드가 적다.
그 이유는 메모리를 할당 할 때 page
단위로 할당하기 때문에 실제 메모리는 그저 fixed partition
방식처럼 메모리를 page size
별로 나눠놓기만 하면 된다.
External fragmentation
이 존재하지 않는다.fixed partition
이니까
단점
Table
의 개수가 늘어난다. 만약 한 프로세스를 n
개의 segmentation
으로 나누고 각 세그멘테이션의 크기가 동일하다 가정하고 한 개의 세그멘테이션 별 m
개의 page
로 나누기로 한다면
n * m
개의 테이블이 발생한다.
또 어드레스 맵핑과정에서 3개의 메모리를 조회해야 한다는 단점이 있다. (PMT , SMT , main memory
)
해결 방안
해결방안으론 이전에 말한 TLB
를 이용하는 방법이 있을 것이다.