외부단편화 해결방식
1. 메모리 압축
- 여기 저기 흩어져 있는 빈 공간들을 하나로 모으는 방식이다.
- 프로세스를 적당시 재배치 시켜 흩어져있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법
단점: 합치고 재배치하는 과정에서 많은 오버헤드를 야기하며, 프로세스들은 자신이 할 일을 제대로 할 수가 없다.
2번 3번은 가상메모리 관리기법이다.
2. 페이징
- 외부단편화의 근본적인 문제를 해결하는 방식이다. (근본문제점: 프로세스들이 각기 다른 크리를 가졌기 때문에, 빈공간에 아무것이나 넣을수가 없다.)
- 따라서 페이징은 프로세스를 일정 크기로 자르고, 이를 메모리에 불연속적으로 할당하는것이다.
1) 페이징 : 프로세스의 논리주소공간을 페이지(page)라는 단위로 자르고, 메모리의 물리주소공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른뒤, 페이지를 프레임에 할당하는 가상 메모리 관리기법
2) 페이징의 스와핑 : 페이지 단위의 스왑인, 스왑아웃 / 프로세스를 실행하는데 필요한 페이지는 스왑인하여 메모리에 할당, 필요 없는 페이지는 스왑아웃하여 보조기억장치에 할당
-> 불연속적으로 페이지가 적재되어있으므로 어떤 프로세스가 어느위치에 흩어져있는지 알기 어렵다.
따라서 페이지 테이블이 존재한다.
3) 페이지 테이블
- 실제 메모리 내의 물리주소에 불연속적으로 배치되더라도, CPU가 바라보는 주소인 논리주소에는 연속적으로 배치되도록 하는 방법이다.
- 페이지 번호와 프레임 번호를 짝지어 주는 이정표, 프로세스마다 페이지 테이블이 있다.
단점: 내부 단편화가 생길 수 있다. (하나의 페이지 크기보다 작은 단위로 발생하는 단편화)
참고) 페이지의 크기는 다 같은가? 그것은 아니다. 대형페이지도 일부 허용되는 경우가 있다.(큰 프로세스를 위해 예외적으로 할당)
PTBR (각 프로세스의 페이지 테이블이 적재된 주소를 가리키는 레지스터)
- 각 페이지 테이블은 CPU내의 프로세스 테이블 베이스 레지스터 (PTBR)가 가리킨다.
- 페이지 테이블이 메모리에 있을경우 메모리 접근시간이 두배가 된다. (페이지 테이블 참조하기 위해 한번, 페이지 참조하기 위해 두번)
TLB (CPU 곁의 페이지 테이블의 캐시 메모리)
- 페이지 테이블의 일부를 가져와 저장하는 특별한 캐시메모리
- 자주 참고하고있는 테이블이 있다면 TLB를 통해 페이지와 프레임을 확인하고 메모리에 접근한다.
- 캐시히트, 캐시 미스라는 개념처럼 TLB 히트, TLB 미스도 있다.
페이징에서의 주소 변환
- <페이지 번호, 변위> 로 이루어진 논리주소는
- 페이지 테이블을 거쳐
- <프레임 번호, 변위> 로 변환된다.
페이지 테이블 엔트리
1) 페이지 테이블의 각각의 행 : 페이지 테이블 엔트리 (PTE)
- 현재까지 설명된 PTE : 페이지 번호, 프레임 번호
- 추가적인 다양한 정보들이 있다. (운영체제 마다 차이가 있음)
2) 대표적인 다양한 정보들
- 유효 비트 : 현재 해당 페이지에 접긍니 가능한지 여부를 알려준다. (즉, 메모리에 적재되있는지, 스왑영역(보조기억장치)로 쫒겨나있는지 체크)
- 보호 비트 : 페이지 보호 기능을 위해 존재하는 비트 (읽기 전용 페이지나 읽기 쓰기가 가능한 페이지인지 쓰기만 가능한지 알 수 있다.)
- 참조 비트 : CPU가 한번이라도 접근한적이 있는지 여부를 알 수 있다. (한번이라도 참조 : 1 / 없다면 : 0)
- 수정 비트 : dirty bit라고도 한다. CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부, 스와핑과 연관이 있다. 데이터를 쓴 페이지가 메모리에서 사라질때, 보조기억장치에 쓰기작업을 해줘야하는지 판단하기 위해 존재한다. (수정된 페이지는 스왑 아웃될때 보조기억장치에도 쓰기 작업을 거쳐야한다.)