오래 못 할 짓 하지 않기

[ 운영체제 ] 22. Page / Frame 본문

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

[ 운영체제 ] 22. Page / Frame

쫑알bot 2024. 5. 21. 20:10
728x90

외부 단편화의 이유

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

 

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

       

= 그럼 같게 해주자

 

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

 

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

페이지와 프레임 사이에서 매핑하는 걸 도와주는 Page Table이 있다.

 

 

: Physical address의 공간이 연속적이지 않아도 되고, frame은 모두 같은 크기이므로

● 효과 : 외부 단편화 문제를 해결한다!

 

 


 

page = logical address 

p는 logical address를 나타내기 위해서 몇 비트가 필요한지.

d 는 하나의 p 블럭에서 얼마나 많은 칸들이 있는지

 

 

- Page number

: 책으로 치면 몇 번째 책인지

 

정확히 말하면 여기에는 Page의 값이 들어가고

page table에 의해 매핑되는 Frame에 값으로 바꿔서

 

▼ 밑에 있는 offset과 함께 메모리로 들어가는 것이다!


- Page offset

: 책으로 치면 몇 번째 페이지인지

 

p(age)를 통해서 page table로 가서 frame을 찾는다.

그럼 그 frame으로 바꿔서 offset과 함께 physical memory 주소를 찾아간다.

 

예1)

 

 

예2) 2^n의 page가 있고, 하나의 page는 2^m 개수만큼 자리가 있다.

 

 

 

Free Frames

 

Process 가 시스템에 실행되려고 들어왔을 때

여유로운(사용 가능한) frame list를 받은 뒤에.

해당 frame에 process가 들어가는 page에 맞게 들어간다.

 

(사실 위에 있었던 내용들이랑 다 같은 내용임)

 


 


 

 

PTBR 

Page Table Base Register

[ 배경 ]

프로그램의 규모가 커진다 →  페이지 테이블도 같이 커진다.

그럼 내가 원하는 페이지 테이블도 찾기가 힘들어진다.

 

더군다나 Context switch가 일어날 때마다 Page table도 계속 변하기 때문에

참조하려면 너무 복잡해진다. 

 

[ 해결 방법 ]

메모리에서 페이지 테이블의 시작 번지 주소를 가리키는 Register를 둔다.

= PTBR : Page Table Base Regiser

 

 

 

  [ 단점 ]

- Memory 에 두 번 Access해야한다.

   1. 페이지 테이블

   2. data/instruction 

 

메모리에 있는 페이지 테이블에 접근해서 몇 번 Frame에 데이터가 있는지 확인한다.

       ▶ 해당 Frame으로 접근해서 데이터를 가져온다. 


TLB

Translation Look-aside Buffer

 

 

 

TLB는 Hardware Access(+Cache) 라서 그나마 더 빠름

 

Table에 접근해서 매핑해야 하는 것들을

다 매핑해놓은 Buffer로 대체한다.

 

- TLB Hit

  = 접근하고자 하는 page가 TLB에 있는 경우

 

 

- TLB Miss

  = 접근하고자 하는 page가 TLB에 없는 경우

 

- Hit ratio

= TLB에 우리가 찾고자 하는 게 있을 확률

 

 

Effective Access Time

 

데이터 TLB에 있으면 = 10ns

                       없         = 20ns

 

- Hit ratio가 80%라면 EAT는?

 -                 90%                   ?

 

 


Memory protection

 

Memory가 제대로 쓰이는지 확인하기 위해서 Valid/Invail를 확인하는 bit를 하나 추가한다.

 

- Valid하다면, 해당 page는 logical address에 있다고 한다.

- Invalid하다면 , 해당 page는 logical address에 있지 않다.

 

 

 

page #가 memory에 access하려고 page table로 갔는데

6,7번쪽으로 access해서 가려면 invalid하므로 memory 접근이 되지 않는다.

 

이렇게 해서 Memory를 정해진 page table에서만 접근하게 하여 Protection한다.

 

 


 

Shared Pages

C코드에서 Lib파일같은 경우에는 여러 process들이 접근할 수 있고

실행 시간동안은 변할 일이 절대 없다는 특징이 있다. = Reentrant code

 

이러한 코드들을 Shared page로 두는데, 

 

각 프로세스들의 Page table Entry를 보면

모두가 가리키는 게 같다.

 

Physical memory에는 한 번만 저장하고

Logical address로 Copy하여 여러 프로세스에서 가지고 있는 것이다.

 (= page )

 

 

(출처)

한동대학교 고윤민교수님 - 운영체제