가상 메모리
가상 메모리는 물리 메모리의 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공하는 기술
가상 메모리 시스템의 모든 프로세스는 물리 메모리와 별개로 0번지 부터 시작하는 연속된 메모리 공간을 가짐
가상 메모리 시스템에서는 물리 메모리가 꽉 찼을 때 물리 메모리의 내용 중 일부를 스왑 영역으로 보내고(스왑 아웃), 프로세스가 작업을 마치면 스왑 영역에 있는 프로세스를 메모리로 가져옴(스왑 인)
따라서 가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리 메모리 크기 + 스왑 영역 크기
메모리 관리자는 물리 메모리와 스왑 영역을 합쳐서 프로세스가 사용하는 가상 주소를 실제 메모리의 물리 주소로 변환함(동적 주소 변환, DAT, Dynamic Address Translation)
- 가상 주소 공간 : 가상 메모리 기법으로 생성된 논리 주소 공간
가상 메모리 분할 방식
운영체제를 제외한 나머지 메모리 영역을 일정한 크기로 나누어 프로세스에 할당
가변 분할 방식을 이용한 메모리 관리 기법을 세그먼테이션, 고정 분할 방식을 이용한 메모리 관리 기법은 페이징이라고 함
세그먼테이션 기법은 가변 분할 방식의 단점인 외부 단편화 등의 문제 때문에 잘 사용되지 않고, 페이징 기법은 페이지 관리에 어려움이 있기 때문에 두 기법의 단점을 보완한 세그먼테이션-페이징 혼용 기법을 주로 사용
매핑 테이블
메모리 관리자는 가상 주소와 물리 주소를 일대일 매핑 테이블로 관리
페이징 기법에서 사용하는 매핑 테이블을 페이지 매핑 테이블 또는 페이지 테이블이라고 부르며 세그먼테이션 기법에서는 세그먼테이션 매핑 테이블 또는 세그먼테이션 테이블이라고 부름
페이징 기법
페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법
가상 주소의 분할된 각 영역은 페이지라고 부르며 물리 메모리의 각 영역은 프레임이라고 부름
페이지와 동일한 크기의 프레임 단위로 나눈 뒤 페이지를 프레임에 할당
페이지와 프레임의 크기는 같기 때문에 페이지는 어떤 프레임에도 배치될 수 있음
페이지와 프레임 크기를 같게 하는 이유는 페이지에 대응되는 프레임을 쉽게 찾기 위함
어떤 페이지가 어떤 프레임에 있는지에 대한 연결 정보는 페이지 테이블에 담겨 있음
여러 프로세스가 동일한 프로그램을 실행할 때 코드는 동일하므로 각 프로세스가 코드를 담은 페이지를 공유하여 메모리 낭비 방지
프로세스마다 각자의 페이지 테이블 정보를 보유
주소 변환
- 가상 주소가 어느 페이지에 있는지 찾음
- 페이지 테이블에서 페이지에 대응되는 프레임을 찾음
- 물리 메모리 프레임에 접근
페이지 테이블의 크기는 물리 메모리가 아닌 프로세스의 크기에 비례
페이지 테이블은 물리 메모리의 운영체제 영역에 존재하고, 실행하는 프로세스마다 존재하여 실행하는 프로세스의 수에 비례
물리 메모리의 크기가 작을 때는 프로세스 뿐만 아니라 페이지 테이블의 일부도 스왑 인/아웃 됨
페이지 테이블에 빨리 접근하기 위해 페이지 테이블의 시작 주소를 저장한 PTBR(Page Table Base Register)을 사용
- PTBR은 PCB에 저장되는 데이터
페이지 테이블 매핑 방식
- 직접 매핑 : 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식
페이지 테이블 전체가 메모리에 적재되므로 사용되는 메모리가 증가
모든 페이지를 물리 메모리에 가지고 있기 때문에 주소 변환 속도가 빠름 - 연관(associative) 매핑 : 페이지 테이블 전체를 스왑 영역에서 관리하여 메모리 절약, 물리 메모리의 여유 공간이 작을 때 사용, 페이지 테이블의 일부만 무작위로 가져오기 때문에 페이지 번호와 프레임 번호 둘 다 표시
원하는 프레임 번호를 가져올 때 페이지 테이블을 다 검색해야 하므로 주소 변환이 느림
프로세스의 페이지 테이블을 메모리에 둘 경우 메모리를 차지하고, 물리 메모리에 있는 페이지 테이블에 접근해야 하므로 접근 속도 저하
위 문제를 해결하기 위해 TLB와 계층적 페이징을 사용
메모리에 적재된 일부 페이지 테이블을 TLB(Translation Look-aside Buffer) 또는 연관 레지스터라고 부름
TLB에 원하는 페이지 번호가 있는 경우 TLB 히트, 없는 경우 TLB 미스라고 하며 스왑 영역에 저장된 직접 매핑 테이블을 사용하여 프레임 번호로 변환
TLB 미스가 빈번할 경우 시스템의 성능이 떨어짐
계층적 페이징(Hierachical Paging)
페이지 테이블을 계층적으로 구성하여 모든 페이지 테이블을 항상 메모리에 유지할 필요가 없고 Outer 페이지 테이블만 메모리에 유지하여 메모리 용량 줄임 - 페이지 테이블을 페이징하는 방식
- 집합-연관 매핑 : 모든 페이지 테이블을 스왑 영역에서 관리하고 일부만 메모리로 스왑 인 하는 것은 연관 매핑과 동일하고, 관련 있는 페이지 테이블을 일정한 집합으로 자르고 집합 단위로 스왑 인
물리 메모리의 모든 페이지 테이블을 검사할 필요가 없어 주소 변환 시간이 단축
집합 테이블이 메모리에 있는지 스왑 영역에 있는지를 표시하는 디렉터리 테이블을 새로 만듦
디렉터리 테이블을 확인하여 집합 테이블이 어디있는지 확인할 수 있으므로 바로 TLB 미스를 알 수 있음
PTBR이 디렉터리 테이블 시작 주소를 갖고 있음 - 역매핑 : 위 세 매핑 방식과 달리 프레임 번호를 기준으로 테이블을 구성
PID와 페이지로 구성됨
프로세스의 수와 상관없이 테이블이 하나만 존재하므로 테이블의 크기가 매우 작음
가상 메모리에 접근할 때 프로세스 아이디와 페이지 번호를 모두 찾아야 하므로 속도가 느림
세그먼테이션 기법
가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스의 크기에 따라 가변적으로 사용
세그먼테이션 (매핑) 테이블은 세그먼테이션 기법에서 사용하는 매핑 테이블
- 세그먼트의 크기를 나타내는 limit과 물리 메모리의 시작 주소를 나타내는 address가 있음
- 프로세스의 크기에 따라 메모리를 분할하기 때문에 세그먼트의 크기를 저장
- 각 세그먼트가 주어진 메모리 영역을 넘어가면 안되기 때문에 size 대신 limit을 사용
만약 Distance가 limit보다 크면 메모리 오류(트랩)를 출력하고 해당 프로세스를 강제 종료- 트랩 : 프로세스 영역을 벗어나는 주소에 접근하거나 숫자를 0으로 나누는 것과 같이 사용자가 의도치 않게 일으키는 인터럽트
물리 메모리가 부족할 때 스왑 영역을 사용
가변 분할 방식이 기본이기 때문에 가변 분할 방식의 장단점을 모두 갖고 있음
- 메모리를 프로세스 단위로 관리하기 때문에 페이지 테이블이 작고 단순
- 물리 메모리의 외부 단편화로 인해 물리 메모리 관리가 복잡
세그먼테이션-페이징 혼용 기법
메모리 접근 권한은 메모리의 특정 번지에 저장된 데이터를 사용할 수 있는 권한으로 읽기, 쓰기, 실행, 추가 권한이 있음
코드 영역은 읽기 및 실행 권한을 갖고, 데이터 영역은 일반적으로 읽기 및 쓰기 권한을 가지고 상수로 선언한 변수는 읽기 권한만 가짐
- 만약 읽기만 가능한 메모리에 쓰기를 하려고 하면 트랩 발생
페이지마다 접근 권한이 다르기 때문에 페이지 테이블의 모든 행에는 메모리 접근 권한과 관련된 권한 비트가 추가됨
인접한 페이지의 메모리 접근 권한이 같은 경우가 많으므로 페이지마다 권한 비트를 설정하는 것은 메모리 낭비가 됨
권한 비트 추가에 따른 페이지 테이블의 크기가 커지는 문제는 세그먼테이션 테이블을 이용
서로 관련 있는 영역을 하나의 세그먼트로 묶어 세그먼테이션 테이블로 관리하고, 각 세그먼트를 구성하는 페이지를 페이지 테이블로 관리하는 방식
- 권한 비트와 같이 중복되는 데이터를 세그먼테이션 테이블로 옮겨 페이지 테이블의 크기를 줄임
캐시 매핑 기법
캐시의 크기는 메모리의 크기보다 작기 때문에 항상 메모리의 일부 페이지만 가지고 있음
직접 매핑
블록은 메모리 프레임 수 N을 캐시의 페이지 수 M으로 나눈 개념
메모리의 블록이 항상 같은 위치에 올라오기 때문에 메모리의 어떤 블록에서 올라온 페이지인지만 확인하면 됨
따라서 캐시에 블록 번호를 명시하는데 이를 태그라고 함
또한, 태그만 확인하면 되기 때문에 캐시 히트나 캐시 미스를 빠르게 확인할 수 있음
그러나 페이지가 같은 위치에만 올라오기 때문에 같은 태그의 메모리를 연달아 필요한다면 캐시에 여유가 있어도 캐시 적중률이 떨어짐
연관 매핑
메모리 워드가 캐시의 어느 위치에도 자유롭게 올라갈 수 있으므로 캐시가 메모리 워드의 주소를 전부 가지고 있음
CPU에서 특정 주소를 필요로 할 때 캐시에서 검색하여 찾는 경우 캐시 히트, 못 찾는 경우 캐시 미스가 발생하여 메모리에서 원하는 데이터를 가져옴
캐시 메모리를 자유롭게 사용할 수 있다는 장점이 있지만 캐시 히트/미스인지 확인하기 위해 캐시의 모든 주소를 검색해야 하므로 연관 매핑보다 느림
집합-연관 매핑
캐시를 K개의 집합으로 나누고 각 집합에 직접 매핑을 사용
- 직접 매핑하는 캐시 메모리를 K개로 나눠 같은 끝자리를 가진 캐시 메모리가 K개가 되기 때문에 직접 매핑의 자리다툼 문제 완화
집합 내에서 직접 매핑을 사용하기 때문에 바로 캐시 히트 여부를 알 수 있음
'CS > 쉽게 배우는 운영체제' 카테고리의 다른 글
[쉽게 배우는 운영체제] 9장 가상 메모리 관리 (0) | 2025.04.03 |
---|---|
[쉽게 배우는 운영체제] 7장 물리 메모리 관리 (0) | 2025.03.20 |
[쉽게 배우는 운영체제] 6장 교착 상태 (0) | 2025.02.27 |
[쉽게 배우는 운영체제] 5장 프로세스 동기화 (0) | 2025.02.24 |
[쉽게 배우는 운영체제] 4장 CPU 스케줄링 (0) | 2025.02.19 |