프로그래밍/컴퓨터구조 및 운영체제

외부단편화 해결방식

gameObject 2023. 11. 23. 13:54
728x90

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가 이 페이지에 데이터를 쓴 적이 있는지 여부, 스와핑과 연관이 있다. 데이터를 쓴 페이지가 메모리에서 사라질때, 보조기억장치에 쓰기작업을 해줘야하는지 판단하기 위해 존재한다. (수정된 페이지는 스왑 아웃될때 보조기억장치에도 쓰기 작업을 거쳐야한다.)

728x90