[운영체제] Paging

Chloe Choi·2021년 2월 4일
0

운영체제

목록 보기
3/10

Paging

프로세스를 일정한 크기의 page로 잘라서 메모리에 적재하는 가상메모리와 물리메모리의 매핑 기술

배경

외부 단편화 해결 방법입니다. 논리적 주소를 동일한 크기로 자르고 물리적 주소도 동일한 크기로 잘라 자투리 공간(hole)이 발생하지 않도록 하는 기법입니다.

동작방식

가상기억장치를 모두 같은 크기의 블록으로 편성합니다(고정분할)! 이때 일정한 크기를 가진 블록이 페이지가 됩니다. 논리적 메모리의 나누어진 블록을 Page, 물리적 메모리의 나누어진 블록을 Frame이라고 합니다. (다른 의미가 있는게 아니라 어떤 대상이냐에 따라 구별하기 위해 명칭만 다릅니다) 이렇게 되면 hole이 프로세스 영역 외부에 생겨 발생하는 외부 단편화를 해결할 수 있겠죠?! 프로세스가 (page 크기)에 나누어 떨어지지 않을 경우 내부 단편화는 해결할 수 없습니다. 하지만 내부 단편화는 외부 단편화에 비해 낭비되는 메모리 공간은 무시할 정도로 작은 크기(page size - 1)입니다 ^-^

그럼 이렇게 조각난 프로세스들은 어떻게 실행할 수 있을까요? page, frame을 매핑해 마치 연속적인거처럼 연결해야할텐데요~ 바로 Page Mapping Table을 사용합니다!

Page Table

정상적으로 프로세스를 실행하기 위해 사용하는 MMU의 재배치 레지스터 여러개

논리주소는 페이지번호, 변위가져서 논리주소를 분리하고... 십진수로 바꿔서 페이지테이블의 페이지번호 알아내고.. 물리주소 알아내서 프레임 시작주소를 알아내고.. 이런 과정이 있는데 자세히는 다루지 않겠습니다.

결국 실질적으로 메모리에 위치한 변수에 접근하기 까지 (페이지 테이블) -> (참조) -> (논리주소 to 물리주소 변환) -> (접근!) 이런 depth가 있습니다. 이런건 페이징 성능에 큰 영향을 끼치게 되죠! 이를 TLB(Translation Lock aside Buffer)라는 페이지 테이블을 위한 소형의 하드웨어 캐시를 이용해 해소합니다~

특징

  • 주소변환은 MMU에서 알아서할게~ 연속된 논리주소 공간을 독립적으로 사용해 사용자/프로세스가 사용 시 편리합니다
  • 프레임 단위의 비연속적 메모리할당을 하기 때문에 동적할당도 외부단편화도 문제 없습니다!
  • 내부 단편화가 발생할 수 있습니다
  • 각 프로세스마다 페이지 테이블을 가집니다
  • 프로세스 교환 시 페이지 테이블 또한 재설정하기 때문에 context switching 시간이 증가합니다

✍️

profile
똑딱똑딱

0개의 댓글