가상 메모리 : 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술
현재 메모리 관리의 가장 큰 특징
⇨ 물리 메모리의 크기와 프로세스가 올라갈 메모리의 위치를 신경쓰지 않고 프로그래밍이 가능
가상메모리 시스템
: 물리메모리의 크기와 상관없이 프로세스에 커다란 공간을 제공
⇨ 가상 메모리의 모든 프로세스는 메모리의 어느 위치에 있든 0번지부터 시작하는 연속된 메모리 공간을 가진다.
논리주소랑 가상메모리의 차이점
"프로세스"가 바라보는 메모리 영역
"메모리 관리자:가 바라보는 메모리 영역
○ 이론적으로 가상메모리의 공간은 무한대이지만 실제로는 물리메모리의 최대치로 한정된다. (CPU bit)
○ 이 무족한 메모리 공간을 스왑영역으로 보충한다.
○가상메모리에서 메모리관리자가 사용할 수 있는 메모리의 크기는
가상메모리 시스템에서는 "운영체제 영역"을 제외한 나머지 영역을 일정하게 나누어 "일반프로세스"에 할당한다.
메모리 분할 방식
세그먼테이션 기법 (가변 분할 방식)
페이징 기법 (고정 분할 방식)
세그먼테이션 - 페이징 혼용 기법
메모리를 관리할 때 매핑 테이블을 작성하여 원할하게 관리한다.
가상 주소는 물리 주소나 스왑 영역 중 한 곳에 위치한다.
메모리 관리자는 가상 주소와 물리 주소를 일대일 매핑 테이블로 관리한다.
1) 페이징 기법에서 사용하는 매핑 테이블은 페이지 매핑 테이블, 또는 페이지 테이블이라 하고
2) 세그먼테이션 기법에서 사용하는 매핑 테이블은 세그먼테이션 매핑 테이블, 또는 세그먼테이션 테이블이라 한다.
⇨ 가상주소의 분할된 각 영역은 "페이지"라고 한다.
(페이지는 0번부터 차례데로 번호를 매긴다.)
페이지 : 가상주소의 영역의 한 단위
프레임 : 물리메모리 영역의 한 단위
(특징)
페이지와 프레임의 크기가 같기 때문에 페이지는 어느 프레임에나 들어갈 수 있다. (그 위치는 페이지 테이블에 기록된다.)
페이지 테이블은 하나의 열이다.
(페이지는 0부터 차례대로 번호가 매겨지기 때문에 프레임 위치만 알면 되기 때문이다.)
invalid = 스왑영역
가. 과정
가상 주소 30번지가 어느 페이지에 있는지 찾음 -> 페이지 3의 0번째 위치
페이지 테이블의 페이지 3으로 가, 해당 페이지가 프레임 1에 있음을 알아냄
물리 메모리 프레임 1의 0번째 위치에 접근 -> 가상 주소 30번지의 물리 주소
가상 주소 18번지가 어느 페이지에 있는지 찾음 -> 페이지 1의 8번째 위치
페이지 테이블의 페이지 1로 가, 해당 페이지가 프레임 3에 있음을 알아냄
프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장
나. 정형화된 주소변환
페이징 기법에서는 가상 주소를 VA=<P,D>로 표현
(가상주소 = <페이지, 거리(distance)>)
VA: 가상 주소, P: 페이지, PA: 물리 주소, F: 프레임, D: 페이지의 처음 위치부터 해당 주소까지의 거리
예) 가상 주소 30번지: VA = <3, 0>, 가상 주소 18번지: VA = <1, 8>
.
페이지 테이블은 페이징 번호, 프레임 번호로 구성되어 있으며 페이지 테이블 엔트리의 집합이라 한다,
페이지 테이블 엔트리는 프레임 번호만 가지는데, 테이블에 페이지 번호가 0부터 순서대로 정리되어 있기 때문
=> 이러한 페이지 테이블을 이요하면, 간단하게 주소변환 가능
페이징 기법의 주소 변환 과정
페이지 테이블 전체가 운영체제 영역에 있는 경우
특징
1) 모든 페이지 테이블이 물리주소에 있다. (가장 단순)
2) 변환속도가 빠르다.
3) 페이지 테이블의 시작주소는 페이지테이블 기준 레지스터(PTBR)가 가지고 있다.
연관 매핑
페이지 테이블 전부를 스왑영역에서 관리하는 경우
특징
1) 전체 페이지 테이블을 스왑영역에 둔다.
2) 일부 테이블만 무작위로 물리메모리에 가져오는 방식
3) 변환색인버퍼(Translation Look-aside Buffer - TLB) 에 가져온 데이터가 저장되어 있다.
4) 캐시시스템과 매우 유사하며, 캐시히트, 캐시 미스 와 같은
TLB히트(바로 물리주소로 변환), TLB 미스 (스왑영역으로가 직접매핑) 가 존재한다.
5) 메모리를 절약할 수 있다.
6) 모든 변환색인버퍼를 검색한 후에 TLB히트 여부가 판단이 가능하다, 고로 속도가 느리다.
연관 매핑과 비슷하지만, 페이지 테이블을 하나 더 생성한다.
특징
1) 연관매핑의 단점을 개선한 방법
2) 일정한 묶음으로 모아놓아 디렉터리 매핑이라고도 한다.
3) 전체 테이블은 스오바영역에 존재한다.
4) 일부 테이블은(디렉터리 테이블) 묶음 단위로 메모리에 존제한다.
5)디렉토리 테이블을 보면 전체 테이블을 찾아보지 않아도 TLB 미스 판단여부를 알수있다.
-> 디렉터리 테이블의 시작주소는 "페이지 테이블 기준 레지스터"에 존재
앞의 3가지(페이지 번호 기준) 매핑과 반대로
페이지 테이블을(프레임 번호 기준) 구성
프레임을 기준으로 "프로세스 아이디(PID)"와 "페이지 번호"로 구성
물리 메모리상의 프레임수와 테이블의 열 수가 같다.
1) 테이블이 하나만 존재한다. (프레임이 기준이기 떄문에 -> 크기가 작음)
2) 가상 메모리에 접근할 때 모든 페이지 번호와 프로세스 아이디를 찾아야한다.
(단점) - 속도가 아주 느리다.
특징
1) 페이지기준이 아닌 프레임 기준의 매핑 테이블
2) 물리메모리에 존재하는 프레임번호 기준
3) 실제 프레임의 수와 행의 수가 같다.
4) 테이블의 크기가 매우 작다. (프로세스의 수와 상관없이 일정크기 유지)
5) 주소변환을 할 때 PID와 페이지번호가 물리메모리에 있는지 확인 후 스왑검색 => 속도 DOWN
세그먼테이션 매핑 테이블 이용
프로세스의 크기에 따라 메모리 분할 크기정보가(Limit) 필요
외부 단편화 (물리메모리에))
가상주소 : VA = <S, D>
가상 메모리에서 사용자에게 보이는 메모리는 항상 0부터 시작하므로 D는 사용자가 지정한 주소 그 자체
물리주소 = 시작주소 + D
물리주소 > limit 넘어가면 , 에러가 발생(트랩) : 사용자가 의도치 않게 일으키는 인터럽트
시그널 : 사용자가 의도한 인터럽트
메모리 접근 권한
: 메모리의 특정번지에 저장된 데이터를 사용할 수 있는 권한
⇨ 추가, 실행, 쓰기, 일기
프로세스는 코드 영역, 데이터 영역, 스택 영역과 프로세스 제어 블록으로 구성
· 코드 영역: 자기 자신을 수정하는 프로그램은 없기 때문에 일기 및 실행 권한을 가짐
· 데이터 영역: 읽거나 쓸 수 있는 데이터와 읽기만 가능한 데이터로 나눌 수 있음
메모리 접근 권한 특징
1) 메모리 접근권한은 가상중소에서 물리주소로 변환이 일어날 때 마다 검사한다.
2) 유용한 접근이 아니라면 오류 발생 (트랩)
페이징 기법에서 메모리 접근까지 고려한 테이블
과정
권한비트가 추가되면서 페이지 테이블의 크기 UP
테이블이 커지는 문제를 세그먼테이션 테이블을 이용
페이지로 분할된 가상 공간에서 "서로 관계있는 영역을 묶음"
하나의 세그먼트가 됨
세그먼트 테이블로 관리
각 세그먼트를 구성하는 페이지를 테이블로 관리
세그먼트 테이블은 연결된 페이지 테이블의 시작주소를 가짐
권한비트와 같은 중복 데이터를 세그먼트 테이블에서 관리, 테이블 크기 Down
.
사용자 입장 [ 세그먼테이션 기법 이용 ]
메모리 관리자 입장 [ 페이징 기법 이용 ]
⇨ VA = <S, P, D>
S : 세그먼테이션 테이블 번호
과정
1) 사용자 데이터 요청
2) 해당 주소가 몆 번째 세그먼트의 /몆 번째 테이블의 / 얼마나 떨어져 있는지 확인
3) 세그먼테이션 테이블에서 영역을 벗어나는지, 권한에 안 벗어나는지를 체크(권한비트)
⇨ 벗어나면 트랩(강제 종료)
4) 연결된 페이지 테이블로 이동
5) 페이지 테이블의 해당 페이제에 물리주소의 프레임을 찾음
6) 물리메모리에 프레임이 있다면 바로 접근
7) 없으면, 스왑영역에서 검색
8) 물리 메모리에 있는 프레임의 첫 위치에서 "D"만큼 떨어진 곳에 접근
⇨ 세그먼테이션 테이블 (페이지 테이블 시작주소를 가짐)