Virtual memory
개요
가상 메모리는 프로세스가 어디에 위치하든 0번부터 시작되는 메모리 공간을 가진다.
- 논리 주소와 차이점은 실제 물리 메모리에 비례하지 않는다는 점이다.
가상 메모리는 각 프로세스마다 자신이 모든 메모리를 점유하는 것처럼 만든다.
- 이론적으로는 무한이지만 물리 메모리의 최대 크기로 한정된다.
프로세스마다 메모리를 모두 점유하여 사용하면 메모리 공간이 많이 필요하다.
- 즉 4GB 메모리에서는 ( 프로세스 수 x 4 GB )의 공간이 필요하다.
- 이를 가상 메모리에서는 스왑을 이용하여 해결한다.
프로세스마다 가상 주소를 가지고 있고, 이는 실제 메모리에 연결되어야 한다.
- 이런 작업을 동적 주소 변환 (DAT)이라 부른다.
- 메모리 관리자가 물리 메모리를 나누고 프로세스들을 배치하는 작업등을 한다.
메모리 분할 방식
구분 | 가상 메모리 | 물리 메모리 |
---|---|---|
최대 메모리 크기 | cpu 비트 값에 의존 | cpu 비트 값에 의존 |
메모리 분할 방식 | 세그멘테이션 | 가변 분할 방식 |
페이징 | 고정 분할 방식 | |
세그멘테이션 페이징 혼용 | ||
주소 지정 방식 | 가상 주소 | 절대, 상대 주소 |
Table
- 메모리 관리자는 가상 메모리와 물리 메모리를 매핑 테이블을 이용해 관리한다.
- 물리 메모리의 분할 방식에 따라 이름이 나뉜다.
- page mapping table
- segmentation mapping table
Paging
구현
- 고정 분할 방식을 이용한 방법이다.
- 단위는 페이지와 프레임으로 구분된다.
- 이때 페이지와 프레임의 크기는 같다.
invalid는 페이지가 스왑 영역에 있다는 것이다.
주소 변환 과정
개념
가상 주소를 VA = <P, D> 로 표현한다.
- page : 페이지 번호
- distance : 페이지의 처음 주소부터 해당 위치까지 거리
- offset이라 정의하기도 한다.
물리 주소를 PA = <F, D>로 표현한다.
- frame
이때 주소 변환을 다음과 같이 정의한다.
- 페이지 테이블의 한 줄을 PTE라고 부른다.
- page table entry
16 bit CPU
컴퓨터는 이진법을 사용하므로 페이지의 크기는 2의 n승이 된다.
P, D 값을 정의해보자.
- P = 가상 주소 / 한 페이지의 크기
- D = 가상 주소 % 한 페이지의 크기
16 비트 cpu에서 한 페이지의 크기가 일 때를 생각하자.
- 가상 주소는 0~65535 만큼의 공간을 가진다.
- 이때 페이지는 개
- 페이지 하나의 번지 수는 개가 존재한다.
페이지 테이블 관리
여러 프로세스들은 각자의 페이지 테이블을 가지고 있다.
- 고로 페이지 테이블의 크기는 프로세스 수에 비례한다.
문제는 테이블의 크기가 작지 않다는 것이다.
- 만약 32bit, 512B 페이지 시스템이라면 테이블의 최대 크기는 24.11MB이다.
- 프로세스가 40개만 올라와도 1GB 정도가 된다.
페이지 테이블은 메모리의 운영체제 영역에 존재한다.
- 페이지 테이블의 일부도 스왑 영역으로 옮겨 사용하기도 한다.
페이지 테이블은 자주 접근해야 하는 자료구조이다.
- 이에 레지스터를 이용해 페이지의 시작 주소(물리 주소)를 보관한다.
- Page Table Base Register : PTBR
페이지 테이블 매핑 방식
- 직접 매핑
- 연관 매핑
- 집합-연관 매핑
- 역매핑 ( 찾아보자 )
- 각 방법마다 가상 주소를 물리 주소로 변환하는 방법이 다르며, 테이블을 저장하는 방법도 다르다.
직접 매핑
- 테이블 전체가 물리 메모리에 올라와 있는 상태이다.
- 바로 주소 변환이 가능하다.
연관 매핑
- 테이블 전체를 스왑 영역에서 관리한다.
- 여유 공간이 작을 때 사용
- 일부만 물리 메모리에 가지고 있는다.
- 일부의 테이블을 다음과 같이 부른다.
- 변환 색인 버퍼 / Translation look-aside buffer
- 연관 레지스터 / associate register
- 원하는 페이지가 물리 주소에 있다면 TLB 히트
- 찾지 못한다면 TLB 미스라고 부른다.
- 미스가 많이 발생하면 주소 변환이 느려진다.
집합-연관 매핑
TLB 미스의 단점을 개선하기 위한 방법이다.
한 개의 테이블을 추가로 사용한다.
가상 주소를 나타내는 방법은 다음과 같다.
1번 테이블을 디렉터리 테이블이라 부르며 테이블이 스왑 영역에 있는지 확인 할 수 있다.
- 스왑 영역에 없다면 P2 값을 이용해 메모리에 접근한다.
디렉토리 테이블 만들기
- 기존에 있던 페이지를 일정 개수만큼 묶는다.
- 이후 디렉토리 테이블에 연결 시킨다.
- 예를 들면 5 묶음으로 페이지 테이블을 나누면 P<7,D> 는 P<1, 2, D>로 사용하게 된다.
Segmentaion
- 가변 분할 방식을 이용한 가상 메모리 관리 기법이다.
- 페이징 방법과 같이 매핑 테이블을 사용한다.
- 이를 Segmentation mapping table 이라 부른다.
- 세그멘테이션 기법도 메모리가 부족하면 스왑 영역을 사용한다.
- 세그멘테이션 테이블에는 limit가 있다.
- 이는 가변적인 프로세스 크기를 다루기 위함이다.
- 주어진 메모리 영역을 넘어가지 못하도록 제한한다.
- 만약 사용자가 프로세스 A에 주어진 공간을 벗어나는 주소에 접근하려하면 Trap 인터럽트를 발생시킨다.
- Trap이 발생하면 OS는 segmentation fault 메시지를 사용자에게 보낸다.
시그널로 프로세스를 중지시키는 것은 사용자가 의도한 인터럽트이다. ( ctrl+c)
- 주소 변환 과정은 동일하다.
- 기존의 가변 분할 방식의 장, 단점을 모두 가진다.
장점
- 프로세스 단위로 메모리를 관리해서 페이지 테이블이 작고 간단하다.
단점
- 외부 단편화로 인한 메모리 관리 복잡성
segmentation-paging 혼용 기법
paged segmentation 에 관한 이야기이다.
두 기법은 장단점이 있다.
- 이를 부분적으로 취한 기법이다.
메모리 접근 권한 개념이 추가된다.
페이지 테이블에 권한 비트까지 추가되면 페이지 테이블의 크기가 커진다.
- 반복되는 권한 비트 제거를 위해 세그멘테이션 테이블을 이용한다.
- 이외에도 반복되는 정보를 세그멘테이션 테이블에서 관리할 수 있다.
- 주소 변환 과정을 알아보자
혼용 기법에서는 다음과 같이 주소를 나타낸다.
- S : 세그먼트 번호
- P : 페이지 번호
- D : 페이지 처음 위치부터 거리
변환 과정을 순서대로 알아보자.
1 . 가상 주소를 구한다.
2. 세그멘테이션 테이블에서 권한과 메모리 영역을 검사한다.
3. 페이지 테이블에서 페이지가 어느 프레임에 연결되었는지 찾는다.
4. 메모리에 있다면 접근한다.
5. 없다면 스왑 영역에서 해당 페이지를 물리 메모리로 가져온다.
6. D 만큼 떨어진 곳에 접근하여 데이터를 사용한다.