1. 가상 메모리 개요
가상 메모리 시스템이란 물리 메모리의 크기와 상관 없이 프로세스에 커다란 메모리 공간을 제공하는 기술을 의미한다. 가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리 메모리와 저장장치(주로 하드디스크)의 스왑 영역이다. 한편 가상 메모리의 메모리 분할 방식에는 가변 분할 방식에 기반한 세그먼테이션 기법과 고정 분할 방식에 기반한 페이징 기법이 존재한다. 전자에서는 절대주소와 상대주소를 사용하는데, 후자의 경우 가상 주소라는 독특한 방식을 사용한다.
2. 페이징 기법
1) 개요
페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간을 같은 크기로 나누어서 사용한다. 가상 주소의 분할된 영역은 페이지, 물리 메모리의 각 영역은 프레임이라고 부른다. 각 페이지와 프레임은 번호를 매겨 관리하며, 페이지와 프레임마다 데이터가 저장되어 있다. 이때 페이지와 프레임의 크기는 같다. 페이지 테이블은 하나의 열로 구성되어 있으며 모든 페이지의 내용들이 몇 번 프레임에 저장되어 있는지에 대한 정보를 가지고 있다.
따라서 페이징 기법에서 프로세스가 가상 주소를 물리 주소로 변환하려고 할 때는 페이지 테이블에서 특정 페이지의 데이터를 읽기 위해 몇 번 프레임으로 가야 하는지 찾아야 한다. 이때 페이지 테이블의 'invalid'는 해당 페이지가 스왑 영역에 있다는 것을 의미한다.
2) 페이징 기법의 주소 변환
페이징 기법에서는 가상주소를 VA=<P,D>로 표현한다. VA는 virtual address의 약자이며 P와 D는 page와 distance인데, 여기서 D는 페이지의 처음 위치에서 해당 주소까지의 거리를 의미한다. 페이지 내부에서도 공간이 나뉘기 때문에 페이지 안에서도 몇 번째 위치에 데이터가 있는지를 표시해주어야 한다. 한편 물리주소는 PA=<F,D>로 표현하며 PA는 physical adress, F와 D는 각각 frame과 distance를 의미한다. 프레임도 페이지와 마찬가지로 프레임 내부에서도 공간이 나뉘므로 프레임 안에서 몇 번째 위치에 데이터가 있는지를 표시해야 하므로 distance를 사용한다.
프로세스가 가상주소 37번지의 데이터를 찾는다고 가정하자. (37번지는 페이지 3번의 7번째 공간을 의미한다.) 가상주소 37번지는 VA=<3,7>로 표현할 수 있다. 이후 페이지 테이블로 가서 가상주소 페이지 3이 몇 번째 프레임과 매칭되는지를 알아봐야 한다. 페이지 3은 프레임 1과 매칭되므로 프레임 1로 가서 프레임 1의 7번째 공간을 탐색한다. 프레임 1의 7번째 공간은 PA=<1,7>로 표현할 수 있다.
물론 현실에서는 시스템에 하나의 프로세스만 있는 것이 아니다. 수 많은 프로세스들이 있고 프로세스마다 하나의 페이지 테이블이 있으므로 전체 페이지 테이블의 크기는 프로세스 수에 비례하여 커진다. 페이지 테이블의 크기가 결코 작지 않기 때문에, 페이지 테이블 때문에 정작 프로세스가 사용할 수 있는 용량이 부족한 현상이 나타나기도 한다. 이 경우 페이지 테이블도 스왑 영역으로 옮겨지기도 한다.
cf) 페이지 테이블 기준 레지스터
프로세스에는 페이지 테이블 기준 레지스터 (Page Table Base Register)가 존재한다. 페이지 테이블 기준 레지스터의 목적은 페이지 테이블에 빠르게 접근하기 위함이며, 여기에는 각 페이지 테이블의 시작 주소가 저장된다. 페이지 테이블 기준 레지스터는 각 프로세스의 프로세스 제어 블록에 존재한다.
3) 페이지 테이블 매핑 방식
① 직접 매핑
위에서 설명한 것과 같은 방식이 직접 매핑이다. 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하며 별다른 부가 작업 없이 바로 주소 변환이 가능하다. 직접 매핑은 페이지가 0부터 끝 번호까지 순서대로 나열되어 있으며 각각 프레임 몇 번과 매칭되는지에 대한 정보를 제공한다.
②연관 매핑
연관 매핑의 경우 페이지 테이블을 스왑 영역에 둔다. 그리고 페이지 테이블의 일부만 메모리에 가져오는데, 이를 변환 색인 버퍼라고 부른다. 변환 색인 버퍼의 경우 직접 매핑 테이블처럼 페이지 번호 순서대로 정렬 되어 있지 않다는 특징이 있다. 연관 매핑에서는 가상 주소를 물리 주소로 변환하기 위해 우선적으로 변환 색인 버퍼를 탐색하고, 변환 색인 버퍼에 원하는 페이지 번호가 존재하지 않는다면 스왑 영역의 직접 매핑 테이블을 탐색한 뒤 지정된 프레임으로 간다.이때 변환 색인 버퍼에서 바로 원하는 페이지 번호를 찾는데 성공하면 이를 TLB히트라고 하며, 찾지 못하고 스왑 영역으로 가게 되면 이를 TLB 미스라고 한다. 연관 매핑 방식은 전체 페이지 테이블을 물리 메모리에 보관할 필요가 없으므로 메모리를 절약할 수 있다는 장점이 있으나 TLB 미스가 빈번하게 발생하면 시스템 성능이 떨어질 수 있다. 특히 변환 색인 버퍼는 페이지 순서를 무작위로 가지고 있기 때문에 페이지 번호가 변환 색인 버퍼에 있는지 확인하기 위해서는 변환 색인 버퍼의 모든 부분을 찾아봐야 하므로 시간이 상당히 오래 걸린다.
③ 집합 - 연관 매핑
집합 - 연관 매핑은 연관 매핑과 마찬가지로 페이지 테이블을 스왑 영역에 두고 일부만 메모리로 가져온다. 다만 연관 매핑처럼 무작위로 가져오는게 아니라 페이지 테이블을 일정 집합으로 잘라 가져온다. 또한 디렉토리 테이블이라는 새로운 테이블이 추가되었다. 디렉토리 테이블은 일정하게 자른 페이지 테이블이 메모리에 있는지 스왑 영역에 있는지를 나타낸다. 새로운 테이블이 추가되었으므로, 가상주소 역시 VA=<P1,P2,D>로 바뀌었다.
집합 - 연관 매핑이 어떻게 작동하는지 알아보자. 우선 P1에는 디렉토리의 위치가 들어가고, P2에는 페이지 테이블의 위치, D에는 페이지 내부에서의 위치가 들어간다. 예를 들어 VA=<0,3,2>라면 디렉토리 테이블에서 0을 찾아 테이블 위치가 메모리인지 스왑 영역인지 알아본다, invalid면 스왑 영역으로 가서 페이지를 찾는데, 0이 있으므로 스왑 영역까지 갈 필요가 없다. 디렉토리 테이블 0번에서 필요한 페이지 테이블의 시작 주소를 찾는다. 그리고 필요한 테이블 위치로 가서 P2 값을 이용하여 원하는 프레임 번호를 얻고, Distance번째 공간에 가서 데이터를 가져오면 된다.
3. 세그먼테이션 기법
1) 개요
세그먼테이션 기법은 가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다. 세그먼테이션 기법에서도 매핑 테이블을 사용하는데, 이를 세그먼테이션 테이블이라 한다. 세그먼테이션 테이블에는 세그먼트의 크기를 나타내는 Limit과 물리 메모리상의 시작 주소를 나타내는 Address가 있다. 예를 들어 세그먼트 0은 물리 메모리의 120번지에서 시작하여 280만큼의 크기를 사용하므로 Address와 Limit이 각각 120, 280이 된다. 세그먼트 0이 끝나는 지점은 120에 280을 더한 400번지이다. (세그먼트 변호는 테이블 윗쪽부터 순서대로 매칭되므로 생략한다.)
3) 세그먼테이션 기법의 주소 변환
세그먼테이션 기법에서는 가상 주소를 VA=<S,D>로 표현한다. S는 segment를 의미하고 나머지는 페이징 기법과 같다. 가상 주소를 부여받으면 세그먼테이션 테이블에 가서 Address를 확인한다. 그리고 Address에 Distance 값을 더해서 물리 주소를 찾는다. 이때 만약 Address+Distance 값이 Limit을 넘어간다면 주소 오류이다.
'운영체제' 카테고리의 다른 글
pipex (2) | 2023.07.08 |
---|---|
[가상머신] 파티션, sudo 설정, ufw, ssh, 비밀번호 정책설정, cron (0) | 2023.07.02 |
7. 메모리 관리 기법 - 절대주소와 상대주소/메모리 오버레이와 스왑/가변분할방식과 고정분할방식 (0) | 2022.06.08 |
5. 프로세스 동기화 - 프로세스 간 통신/공유자원/임계구역/피터슨&데커 알고리즘 (0) | 2022.06.07 |
4. CPU 스케줄링 - 개요/우선순위/종류 (0) | 2022.06.04 |