프로세스를 구성하는 페이지 중에 당장  사용될 페이지만을 올리는 방식

특정 페이지에 대해 CPU의 요청이 들어온 후에야 해당 페이지를 메모리에 적재

 

요구 페이징 기법의 이점

+ 메모리 사용량 감소

+ 입출력 오버헤드 줄어듬

+ 시스템이 더 많은 프로세스를 수용 가능

+ 프로그램이 물리적 메모리의 용량 제약을 벗어나는 것이 가능

 

유효-무효 비트 (valid-invalid bit)

가상 메모리 기법에서 프로세스가 실행되는 동안
페이지들이 물리적 메모리와 스왑영역에 존재하는데

어떤 페이지가 물리적 메모리에 존재하는지 구별이 필요

=> 요구 페이징 기법에서는 유효-무효 비트를 페이지 테이블의 각 항목별로 저장

  • 유효(v)
    메모리에 해당 페이지가 적재되어 있는 경우
  • 무효 (i)
    해당 페이지가 스왑영역에 있는 경우,
    현재 메모리에 없는 경우,
    페이지가 속한 영역을 프로세스가 사용하지 않는 경우

1) 요구 페이징의 페이지 부재 처리

페이지 부재(page-falut)

CPU가 참조하려는 페이지가 현재 메모리에 올라와 있지 않아 유효-무효비트가 무효로 세팅되어 있는 경우

 

페이지 부재를 처리하는 과정

<책 그림 8-2> 페이지 부재를 처리하는 과정

CPU가 무효 페이지에 접근
       -> MMU(주소 변환을 담당하는 하드웨어)가 페이지 부재 트랩 발생
       -> 운영체제의 페이지 부재 처리 루틴 호출
               -> 페이지에 대한 접근이 부 적법 (사용되지 않는 영역에 속한 페이지에 접근 / 해당 페이지에 대한 접근 권한 위반)
                       -> 프로세스 종료

               

               -> 페이지에 대한 접근이 적법
                       -> 물리적 메모리에 있는 빈 프레임을 할당받아 페이지를 읽어 해당 공간에 적재 

                       -> 빈 프레임이 없는 경우

                             -> 물리적 메모리에 올라와 있는 페이지 중 하나를 디스크에 내려 놓음 (스왑 아웃) 

 

즉, 부재 상태의 페이지를 메모리에 적재하기에  앞서 운영체제가 해당 페이지에 대한 접근이 적법한지 체크하는 과정

 

페이지 부재를 발생 시킨 프로세스 -> 봉쇄상태(디스크에서 파일을 다 읽어올때 까지 CPU를 반환)

   (이유) 해당 페이지를 디스크에서 물리적 메모리에 적재하기까지 시간이 오랜시간 소요 - CPU 가 필요없음, 오버헤드 발생

 

디스크에 요청한 입출력 작업이 완료-> 인터럽트 발생 -> 해당 페이지 테이블에서 유효 비트로 설정 -> 준비 큐에서 대기

 

2) 요구 페이징의 성능

요구 페이징의 성능에 가장 큰 영향을 미치는 것은 페이지 부재의 발생 수

(이유) 디스크에서 메모리에 적재하는 과정(스왑아웃 -> 스왑인 -> 문맥교환) 에서 오버헤드 발생

 

유효 접근시간이 짧을 수록 ( 페이지 부재의 발생수가 적을 수록) 
 -> 요구 페이징 기법의 성능은 향상

 

성능 평가 방법

  • 유효 접근시간(effective access time)
    = (1- P) × 메모리 접근시간
         + P × ( 페이지 부재 발생 처리 오버헤드
                       + 메모리에 빈 프레임이 없는 경우 스왑 아웃 오버헤드
                       + 요청된 페이지의 스왑 인 오버헤드
                       + 프로세스의 재시작 오버헤드)
    • (1 - P) : 페이지 부재가 일어나지 않는 비율
  • 페이지 부재 발생비율(page fault rate)   0 ≤ P  1
    P = 0 : 페이지 부재가 한 번도 일어나지 않은 경우  
    P = 1 :  모든 참조 요청에서 페이지 부재가 발생한 경우

 

' > 운영체제와 정보기술의 원리' 카테고리의 다른 글

8장 페이지 프레임의 할당  (0) 2023.12.25
8장 2 페이지 교체  (0) 2023.12.24
8장 가상메모리  (1) 2023.12.23
7장 6. 페이지드 세그먼테이션  (1) 2023.12.21
7장 4. 페이징 기법  (0) 2023.12.21

프로그램이 CPU에서 실행이 되려면 실행에 당장 필요한 부분이 메모리에 올라와 있어야 함

하지만 메모리는 한정적이므로 프로그램이 나누어서 사용

따라서, 운영체제는 어느 프로그램에게 어느정도의 메모리를 할당할 것인가 하는 문제를 처리

 

  • 운영체제의 메모리 할당 방식
    메모리는 몇몇 프로그램에게 집중적으로 메모리를 할당
    -> 메모리 회수 -> 다른 프로그램에게 집중적으로 할당

이유는 프로세스의 빠른 수행을 위해 확보해야하는  메모리의 크기가 존재하기 때문

 

  • 운영체제가 물리적 메모리의 연장공간으로 사용하는 요소
    • swap area
      운영체제는 CPU에서 당장 수행해야 할 부분만을 메모리에 올리고
      나머지는 swap area에 내려놓는 방식으로 swap area를 메모리의 연장 공간으로 사용
    • 가상메모리 (virtual memory)
      운영체제가 프로그램이 자기 자신만의 메모리를 사용하는 것처럼 가정해 프로그램하는 것을 지원
      -> 프로그램은 0번지부터시작하는 자기자신만의 메모리 주소공간을 가정

가상메모리는 프로세스마다 각각 0번지부터 주소공간을 가지고,

이들 공간 중 일부는 물리적 메모리에 적재, 일부는 swap area에 존재

 

프로세스의 주소 공간을 메모리로 적재하는 단위에 따라 

가상메모리 기법은 다음과 같다.

  • 요구 페이징(demand paging) 방식
  • 요구 세그먼테이션(demand segmentation) 방식

 

 

 

공식문서

https://prettier.io/docs/en/

 

웹스톰에 설치하는법

https://prettier.io/docs/en/webstorm

 

커스텀 가능한 옵션들

https://prettier.io/docs/en/options

 

커스텀한 파일 만들고 작성하고 적용하는법

https://prettier.io/docs/en/configuration

 

페이징 기법과 세그먼트 기법의 장점만 취하는 주소 변환 기법

 

  • 프로그램을 의미 단위의 세그먼트로 나눈다.
  • 메모리에 적재하는 단위는 페이지 단위
  • 주소변환을 위해 외위의 세그먼트 테이블 과 내부의 페이지 테이블 이용
         - > 2단계 페이지 테이블과 유사한 구조
    • < 세그먼트 번호, 오프셋> 으로 구성된 논리적 주소를 물리적주소로 변환
      • 세그먼트 번호를 이용하여 세그먼트 테이블의 해당 항목에 접근
      • 항목에 있는 세그먼트 길이와 세그먼트의 페이지 시작 주소 를 획득
      • 세그먼트의 길이를 넘어서는 메모리접근 시도인지 확인
      • 오프셋 값이 큰지 여부 확인
      • 테이블의 시작위치에서 페이지 번호만큼 떨어진 곳이 물리적 메모리의 페이지 프레임 위치
      • 페이지의 프레임 위치에서 오프셋의 하위 비트값인 페이지 내 변위만큼 떨어진 곳이 물리적 메모리 주소

 

페이징 ?

프로세스의 주소 공간을 미리 동일한 크기의 페이지 단위로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식

 

  • 장점: 메모리에 올리는 단위가 동일한 크기의 페이지 단위여서  빈 프레임이 있으면 어떤 위치이든 사용될 수 있다.

1) 주소 변환 기법

모든 프로세스가 각각의 주소 변환을 위한 페이지 테이블(page table)을 가진다.

논리적 주소를 페이지 번호(p) 와 페이지오프셋(d)로 나누어 주소변환에 사용

기존 주소값에 변위르 더함으로써 요청된 논리적 주소에 대응하는 물리적 수소를 만들 수 있다.

 

2) 페이지 테이블의 구현

주소 변환을 하기 위한 자료구조

물리적 메모리에 위치

  • 페이지 테이블 기준 레지스터 (page-table base register) - 메모리내에서의 페이지 테이블의 시작 위치를 저장
  • 페이지 테이블 \길이 레지스터 (page-table length register) - 페이지 테이블의 크기를 저장
  • 메모리 접근 연산 : (총 2번) 페이지 테이블에 접근 -> 변환된 주소에서 실제 데이터로 접근 
        -> 오버헤드가 뒤따른다.
    • 대안? TLB(translation Look-aside Buffer) 라는 고속의 주소 변환용 하드웨어 캐시 사용
      • 테이블 접근 오버헤드 줄이고 메모리의 접근 속도 향상
      • 가격적인 이유로 빈번하게 참조되는 페이지에대한 주소 변환 정보만 담음
      • 구현 - 병렬탐색이 가능한  연관 레지스터(associative register) 사용
        • 평균적인 메모리 접근 시간 (EAT),
          • EAT  = (1 + ε)α + (2 + ε )( 1- α) = 2 + ε - 2α
          • ε = 레지스터 접근시간, α = 요청된 페이지에 대한 정보가 레지스터에 있을 확률  

3)계층적 페이징

4GB의 메모리가 있다고 하면 대부분의 프로그램은 4GB 중 극히 일부만 사용

이를 위해 페이지 테이블을 위한 메모리 사용은 공간낭비

-> 페이지 테이블에 사용되는 메모리 공간의 낭비를 줄이기 위해 2단계 페이징(two-level paging)기법을 사용

  • 2단계 페이징 기법
    • 방식: 외부 / 내부 페이지 테이블의 두 단계에 걸친 페이지 테이블 사용
      • 사용되지 않는 주소 공간 -> 외부 페이지 테이블을 NULL로 설정, 내부 페이지 테이블을 생성 안함
    • 장점 : 페이지 테이블을 위해사용되는 메모리 공간 감소 -> 공간적인 이득
    • 단점 : 주소변환을 위해 접근해야 하는 테이블 수가 증가 -> 시간적인 손해
  • 위와 같이 다단계(계층적) 페이징은 메모리 공간을 감소를 통해 공간적인 이득을 가질수 있지만, 단계가 늘어날 수록 접근해야하는 테이블수가 증가하므로 시간적 손해가 커진다.

4) 역 페이지 테이블

메모리 공간의 낭비가 심한 이유
=> 모든 프로세스의 모든 페이지에 대해 페이지 테이블 항목을 다 구성해야 하기 때문
=> 논리적 주소에 다 구성

 

역 페이지 테이블은? 

  • 프로세스마다 페이지 테이블을 두지 않고, 시스템 전체(system-wide)에 페이지 테이블을 하나만 생성
  • 물리적 주소에 대해 페이지 테이블을 생성
  • 주소 변환 작업이 물리적 주소로부 논리적 주소를 얻는 구조
    • 비효율적 : 주소 변환 요청이 들어왔을 때 물리적 메모리에 존재하는지 여부를 알기 위해 페이지 전체를 탐색해야함

5) 공유 페이지

공유코드를 담고 있는 페이지 ->  물리적 메모리에 하나만 적재되어 메모리사용이 효율적

공유코드?  여러 프로세스에 의해 공통으로 사용되는 코드

 - 재 진입 가능 코드 (re-enterant code)
-  순수 코드(pure code)

 

특징

  • 그 페이지를 공유하는 모든 프로세스의 주소 공간에서 동일한 페이지번호를 가져야 함
  • 예시 그림

 

6) 메모리 보호

  • 보호비트(protection bit) : 각 페이지에 대한 접근 권한의 내용 저장
    • 누가가 아니가 어떠한 접근을 허용하는지의 정보가 저장
    • 각 페이지에 대하 읽기-쓰기 / 읽기전용 등의 접권권한을 설정하는데 사용
  • 유효-무효 비트 (valid-invalid bit) : 해당 페이지의 유효한지에 대한 내용 저장
    • 유효 : 해당 메모리 프레임에  그 페이지가 존재 -> 접근 허용
    • 무효 : 프로세스가  그 주소 부분을 사용하지 않거나 해당 페이지가 물리적 메모리에 올라와 있지 않음 -> 접근 불가

+ Recent posts