오래 못 할 짓 하지 않기

[ 운영체제 ] 13. 페이징을 통한 가상 메모리 관리 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 13. 페이징을 통한 가상 메모리 관리

쫑알bot 2024. 1. 18. 20:34
728x90

연속 메모리 할당의 문제점

 

 

1. 외부 단편화

 

 

2. 물리 메모리보다 큰 프로세스 실행 X

 


가상 메모리

: 물리 메모리보다 훨씬 큰 프로세스를 실행할 수 있게 하는 기술

 

1. Paging

2. Segmentation

 

우린 페이징을 배울 거시다

 



 

페이징

외부 단편화의 이유

: 각기 다른 크기의 프로세스메모리에 연속적으로 할당되어서

 

  ▶ 모든 크기가 같았으면 발생하지 않음

       

= 그럼 같게 해주자

 

● 프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위 자르고                                   [ 프로세스 공간 → 페이지 ]

● 메모리의 물리 주소 공간을 프레임이(frame)라는 페이지와 동일,일정한 단위로 자른 뒤     [  메모리의 공간 → 프레임 ]

● 그렇게 나온 페이지를 프레임에 할당하는 가상 메모리 관리 기법

 

+ 논리 주소 공간 = CPU에서 직접 mem을 누르기 귀찮으니까, '그거' 라고 하면서 지칭하는 공간

+ 물리 주소 공간 = 진짜 mem에서 조작되는 공간

 

페이지의 크기 단위 = 프레임의 크기 단위

이렇게 하면 크기가 안 맞아서 외부 단편화가 생기는 일이 없다.

 

 

 

이렇게 페이지도 스왑 In,Out이 가능하다.

모든 페이지가 메모리에 항상 들어와 있을 필요가 없다.

  = 일부 페이지는 보조기억 장치에 있는 스왑 영역에 있어도 된다.

  = 물리 메모리보다 큰 프로세스 실행 가능

 

 

만약 아래와 같이 

같은 크기로 있지만 불연속적으로 할당할 수 있을 땐 어떻게 할까?

 

 

프로세스를 구성하고있는 페이지가 어느 프레임에 적재되어 있는지 CPU가 하나하나 알긴 어렵다.

만약, 메모리가 불연속적으로 배치되어 있다면 CPU는 이를 순차적으로 실행할 수도 없다.

 

이러한 문제점으로 인해 만들어진 것이 페이지 테이블이다.

 



페이지 테이블

 

 : 물리 주소에 불연속적으로 배치되어도

   논리 주소에서는 연속적으로 배치되도록 도와주는 

   [ 페이지 번호 → 프레임 번호 ] 를 짝지어주는 이정표 역할을한다. 

 

 

 

- 프로세스마다 페이지 테이블을 갖고있다.

 

 

물리 주소로는 분산되어 보여도

논리 주소는 연속적으로 보이도록 한다.

 

따라서 CPU는 논리 주소를 가지고 순차적으로 실행하면 된다.

 

대신 내부 단편화라는 문제가 생긴다.

 

● 내부 단편화

: 하나의 크기보다 작은 크기의 페이지가 발생할 때 

 

 

하지만 낭비되는 크기는 [ 외부 단편화 > 내부 단편화 ]

 

 



PTBR

( 프로세스 테이블 베이스 레지스터 )

 

: 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.

 

 

[ 단점 ] 

1. 메모리에 접근하는 시간이 2배가 된다.

   - 페이지 테이블 참조용 메모리 접근 

   > 페이지 참조용 메모리 접근 

 

 

 



TLB

 

 

자주 참고하는 페이지 테이블을 TLB라는 캐시 메모리를 통해 불필요한 메모리 접근 X

 

◆ CPU가 접근하려는 논리 주소가 TLB에 있다? → TLB 히트

- TLB를 통해 메모리 접근 (1번)

 

◆ CPU가 접근하려는 논리 주소가 TLB에 없다? → TLB 미스

- 메모리에 페이지 테이블 접근 > 프레임을 보기 위해 메모리 접근 (2번)

 

 



페이징에서의 주소 변환

 

어떻게 [ 논리 주소 → 물리 주소 ] 로 변환되는지

 

 

● 특정 주소에 접근하기 위해서 필요한 정보

- 1. 어디에 접근할건지

- 2. 접근하려는 곳이 현재 페이지/프레임으로부터 얼마나 떨어져 있는지

 

 

● 페이징 시스템에서의 논리 주소

= 페이지 번호 (page number) + 변위(offset) 으로 이루어져있다.

 

 

 

 

논리 주소 [ = 페이지 번호 , 변위 ] ▶  :: 페이지 테이블 ::    ▶  물리 주소  [ = 프레임 번호 , 변위 ] 

 

 

 

※ [ 논리 주소에서의 변위 = 물리 주소에서의 변위 ] 이다.

 

예)

 

5번 페이지 → 1번 프레임으로 할당 → 1번 프레임 주소 = 8번지 +2 = 10번지

● 변위는 마지막 물리 주소에서 사용한다.

 

 


PTE

페이지 테이블 엔트리

 

테이블 안에  [ 페이지 번호 , 프레임 번호 ] 외에 담기는 것들

 

● 유효 비트 : 해당 페이지에 접근이 가능한지 여부

                      = 현재 swap 영역에 있는지 / 메모리에 적재되어 있는지

 


● 보호 비트 : 페이지 보호 기능을 위해 존재하는 비트

 

 


● 참조 비트 : CPU가 이 페이지에 접근한 적이 있는지 여부

 


 

● 수정 비트 ( = Dirty bit ) : CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부

   목적 : 메모리에 있다가 보조기억장치로 swap될 때

             해당 페이지가 수정됐으면 보조기억장치에 업데이트 해줘야해서

 

 

(출처)

유튜브 한빛미디어