CH14-2) 가상 메모리 - 2

Jobmania·2023년 8월 6일
0

운영체제

목록 보기
12/13
post-thumbnail

페이징을 통한 가상 메모리 관리

연속 메모리 할당의 문제점!

외부 단편화
물리 메모리보다 큰 프로세스 실행은 불가능하다!

가상 메모리(Virtual Memory)란

  • 실행하고자 하는 프로그램을 일부만 물리 메모리 적재하여 실제보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다.
  • 가상 메모리 관리 기법에는 페이징 과 세그멘테이션 기법이 있다.
  • 현대 운영체제는 주로 페이징 기법을 사용한다.

1. 페이징(Paging) 이란?

  • 외부 단편화가 발생했던 근본적인 문제는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문에 발생함.

적재되는 대상이 모두 크기가 똑같다면?? 그리고 이를 메모리에 불연속적으로 할당할 수 있다면 ??

예로 들어서 모두 10MB 단위로 자르고, 불연속으로 적재한다면 외부 단편화는 발생하지 않는다.

이것이 페이징이다.

  • 프로세스의 논리 주소 공간을 페이지(page)라는 일정한 단위로 자르고
  • 메모리 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른 뒤
  • 페이지를 프레임에 할당하는 가상 메모리 관리 기법

페이징에서의 스와핑

  • 프로세스 단위의 스왑 인, 스왑 아웃이 아닌 페이지 단위의 스왑 인(페이지 인), 스왑 아웃(페이지 아웃)
  • 메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 스왑 아웃

즉 어떤 프로세스를 실행할 때 모든 페이지가 필요는 없다는 경우를 말한다.

  • 어떤 부분은 메모리에 어떤 부분은 보조기억장치에 적재된다.
  • 물리 메모리보다 큰 프로세스도 실행될 수 있다.

불연속적으로 할당되어 있는데 CPU는 어떻게 프로세스를 실행하는가???

  • 프로세스를 이루는 페이지가 어느 프레임에 적재되어있는지 CPU는 알기 어려움
  • 불연속 배치로인해 CPU는 순차적으로 실행할 수 없음.
  • CPU 입장에서는 다음 실행할 명령어 위치를 찾기 어려워짐.

그래서

2. 페이지 테이블

  • (실제 메모리 내의 주소인) 물리 주소에 불연속적으로 배치되더라도
  • (CPU가 바라보는 주소인) 논리주소에는 연속적으로 배치되도록 하는 방법
  • 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표

페이지 테이블을 통해 현재 어떤 페이지가 어떤 프레임에 할당되어있는지 알 수 있음

  • 프로세스 마다 페이지 테이블이 있다.
  • CPU는 페이지 테이블을 보고 특정 프레임에 접근한다.

  • 실제적으로는 분산하게 저장되어 있더라도, CPU는 연속적으로 실행할 수 있는 이유이다.

내부 단편화

  • 페이징은 외부 단편화 문제는 해결할 수 있지만,
  • 내부 단편화라는 새로운 문제를 야기할 수 있다.

페이지 크기가 10KB, 프로세스 크기가 108KB
그렇다면, 마지막 2KB의 메모리 낭비 내부 단편화가 발생함

  • 하나의 페이지 크기가보다 작은 크기로 발생

    그렇지만 외부단편화보다 메모리 낭비가 작은 경우가 많다.
  • 그래서 페이지 크기를 작게 한다면 그만큼 메모리 낭비는 작겠지만, 페이지 테이블 크기가 커져 차지하는 공간이 낭비가 된다.

대형페이지(HUGE PAGE)

꼭 모든 페이지가 다 같은 경우는 없다
큰 프로세스를 할당하기 위해서 예외적으로 할당하는 경우도 있다.

페이지 테이블 베이스 레지스터 ( PTBR )

  • 프로세스마다 페이지 테이블이 있고,
  • 각 페이지 테이블은 CPU내의 프로세스 테이블 베이스 레지스터를 가리킨다.

  • 각 프로세스의 페이지 테이블의 주소를 가지고 있다.

페이지 테이블이 전부 메모리에 있다면, 메모리 접근 시간이 두배로 걸린다.

  • 페이지 테이블 참조하기 위해 한번
  • 페이지 참조하기 위해 한번

TLB ( Translation Lookaside Buffer )

  • CPU 곁에 페이지 테이블의 캐시 메모리
  • 자주 참고하는 페이지 테이블이 있다면 일부는 저장한다..

  • CPU가 접근하려는 논리주소가 TLB에 있다면 TLB 히트 -> 메모리 한번 접근.
  • CPU가 TLB에 없다면 TLB 미스, -> 메모리에 두번 접근을 한다.

2. 페이징에서의 주소 변환.

특정 주소에 접근하고자 한다면 어떤 정보가 필요할까?

  • 어떤 페이지 혹은 프레임이 접근하고 싶은지.
  • 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지

페이징시스템의 논리 주소


그래서 페이징 시스템에서는 모든 논리 주소가 2가지로 구성되어 있다.

  • 페이지번호
  • 변위
    예로 CPU가 32 비트의 주소를 보냈다면, N비트는 페이지 번호, 32-N비트는 변위.

주소변환 과정

  • 페이지 번호, 변위 로 이루어진 논리 주소는 페이지 테이블을 통해
  • 프레임 번호, 변위로 변환된다.
  • 논리 주소의 변위와 물리 주소의 변위 값은 같다.

논리주소(<페이지 번호, 변위>)가 <5,2>인 곳에 접근

-> 물리주소의 10번지

3. 페이지 테이블 엔트리(PTE)

  • 페이지 테이블의 행
  • 페이지 테이블에는 페이지번호, 프레임 번호 말고도 다양한 정보가 담김.

1. 유효비트

  • 현재 해당 페이지에 접근 가능한지 여부

    0은 즉 보조기억장치 스왑영역에 있다는 말
    그래서 유효비트 0에 접근하려한다면 페이지 폴트(Page fault)라는 인터럽트가 발생
  1. cpu는 기존 작업 내역을 백업
  2. 페이지 폴트 처리 루틴 실행
  3. 페이치 처리 루틴이 원하는 페이지를 메모리로 가져온 후 유효 비트를 1로 변경
  4. 페이지 폴트를 처리했"다면 cpu는 이제 해당 페이지에 접근 할 수 있게 됨.

2. 보호비트

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


읽기 전용으로 나누기 위해, 1 이라는 읽고 쓰기가 전부 가능.
위 그림 처럼 보호비트를 세 개의 비트로 다양하게 기능별로 나눌 수 도 있다.

3. 참조비트

  • CPU가 이 페이지에 접근한 적이 있는지 여부

4. 수정비트 ( = dirty bit)

  • CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부

    1 은 수정이 된 페이지를 의미

    수정 비트의 존재 이유

    메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야되는지에 대한 여부를 판단하기 위해 존재한다.
    즉, 수정비트가 1 이라면 보조기억장치에 쓰기작업을 할 것이다.

profile
HelloWorld에서 RealWorld로

0개의 댓글