Study/CS 기초

운영체제 - 가상 메모리 관리

김 도경 2024. 10. 21. 17:43

[2024.10.21] 필수 온라인 강의 Part2 운영체제 CH05 가상 메모리 관리

페이징과 페이지 테이블

 

  • 스와핑(swapping) : 프로세스를 보조기억장치의 일부 영역으로 쫓아내고 당장 필요한 프로세스를 적재하는 메모리 관리 기법 
               - swap : cpu는 실행중인 메모리내에서 코드를 가져와서 사용: 현재 사용되지 않는 프로세스 중에서 굳이 메모리에 필요없는게 있을 수도 있음 : 일부 영역으로 당장 사용되지 않는 프로세스들을 내쫓을 수 있음
       - 스왑 아웃(swap-out) : 프로세스를 보조기억장치의 일부 영역으로 쫓아내는 것
       - 스왑 인(swap-in) : 스왑 아웃된 프로세스를 메모리에 적재하는 것
       - 스왑 영역 : 스왑 아웃된 프로세스가 적재되는 보조기억장치 영역
  • 장점 : 메모리의 크기보다 더 많은 프로세스들을 적재 가능!!!!!
     - A+B+C+D > 메모리 이어도, 스와핑을 사용하면 전부를 동시에 사용가능.


    - 연속 메모리 할당: 프로세스를 메모리에 연속적으로 배치하는 방식
    연속 메모리 할당 프로세스 B, D 실행 종료,
    남아있는 공간은 50MB
    남은 공간 50MB에 새로운 50MB가
    필요한 프로세스 적재 불가 : 파편화 되어있음
           - 실제로는 사용하지 않음
           - 외부 단편화 : 프로세스들이 실행되고 종료되길 반복하며 빈 공간이 생기는 메모리 낭비 현상
              - 용량이 낭비된다.

  • 페이징
    - 물리 메모리를 프레임(frame)이라는 일정한 크기로 나누고
    - 프로세스를 페이지(page)라는 일정한 크기로 나눈 뒤
    - 페이지를 프레임에 매핑하는 메모리 관리 방식

    - 메모리와 프로세스를 일정 단위로 자르고, 잘라진 공간에 프로세스를 할당 : 외부 단편화 발생X
       - 메모리가 잘린 단위 : frame
       - 프로세스가 잘린 단위 : page
     : page를 frame에 할당함
       -> frame과 page의 크기는 같음 ( 단, huge page 제외)

    - 페이지 아웃 / 페이지 아웃 : 스왑 기능을 사용 가능하다. 

    - 페이징이 가상메모리 관리 기법 중 하나 - 필요할 때마다 페이지인/페이지아웃 가능
    - 가상 메모리 (virtual memory)의 페이징 사용법
          - 프로세스의 일부만을 적재하여 실제 물리 메모리보다 큰 프로세스를 실행하는 기술
          - 페이징은 현대 운영체제에서 가장 대중적으로 사용되는 가상 메모리 관리 기법

    - 세그멘테이션
         - 의미있는 단위로 자름(코드단위 등등 , 크기가 균일하지 않음 : 외부단편화가 생길 수 있음)
          <> 페이징 : 동일한 크기의 페이지로 자름

    - 외부 단편화는 없지만, 내부단편화가 생길 수 있다. 
        페이지로 나눌 때, 마지막 페이지가 절대 페이지랑 똑 떨어지지 않는다 : 그만큼 남는문제가 있음
          (단, 하나의 페이지 크기보다 작다.)

    - 페이징 단점 : cpu입장에서는 순차적으로 읽어와서 실행을 하는데, 다음으로 실행해야하는 프로세스가 어디에 적재되어있는지 모름
       -> 이를 해결해주는 게 페이지 테이블
  • 페이지 테이블 : 일종의 일정표이다.
    - 프레임과 페이지의 매핑 정보를 담고 있는 표 형태의 데이터
    - 페이지테이블을 이용하면 물리메모리내에 불연속적으로 배치된 페이지에도 cpu 접근 가능
    - 프로세스마다 페이지 테이블을 가지고 있다

    - 페이지 테이블 베이스 레지스터(PTBR)
         - 각 프로세스의 페이지 테이블 위치를 가리키는 레지스터

    - 페이지 테이블이 메모리에 적재 되어 있으면 메모리 접근 시간 두 배 소요
       - 페이지 테이블에 접근 + 페이지에 접근 이렇게 2번 실행
       - 메모리접근시간이 캐시메모리/레지스터접근보다 훨씬 느림
    -> 페이지 테이블의 캐시메모리를 따로 둠 : TLB(Translation Look-aside Buffer)

     - TLB(Translation Look-aside Buffer) : 페이지 테이블의 캐시 메모리
          - 페이지테이블 접근을 위해, 메모리 접근을 할 필요 없음
          - 내가 접근하고자 하는 페이지가 TLB에 있으면 TLB hit
          - TLB에 없으면 TLB miss : 메모리 접근 시간이 2배가 됨(메모리 두번 접근해야함)

    -  유효 비트(valid bit)
          - (페이지 테이블 내 정보) 접근하고자 하는 페이지가 보조기억장치에 있는지, 메모리에 있는지 나타냄
              - 메모리 적재 (유효비트 1) , 메모리에 적재되지 않음 (유효비트 0)

             - 페이지 폴트(page fault) : 접근하려는 페이지가 보조기억장치에 있을 경우
                (메모리에 적재되지 않을경우, 유효비트가 0인 경우)
                - 페이지 폴트는 interrupt의 일종 ***인터럽트는 반드시 이해해야할 걔념이다***
                - 내가 접근하려는 페이지를 보조기억장치로부터 가지고 와야함. : 페이지를 보조기억장치->메모리로 적재
                : 페이지 폴트 처리 루틴
                       - 작업 내역 백업
                       -  페이지 폴트 루틴 실행 - 접근하려는 페이지 적재
                       -  유효 비트 1로 변경
                       -  접근하려는 페이지 접근

    보호 비트(protection bit)
          - (페이지 테이블 내 정보)  접근하려는 페이지의 권한
             - 읽기(가능 r1, 불가능 r0) , 쓰기(가능 w1, 불가능 w0) , 실행(가능 x1, 불가능 x0) 

    - 참조 비트(reference bit)
         - (페이지 테이블 내 정보) 접근한 적 있는 페이지 : 한번이라도 접근한 적이 있는지! 없는지
             (접근한 적이 있으면 1, 접근한 적이 없으면 0)

    - 수정 비트(modify bit / dirty bit)
         - (페이지 테이블 내 정보) 한번이라도 쓰기 작업을 한 적 있는 페이지인지?
         - 쓰기 과정/조작이 이루어진 경우를 dirty라고 표현하는 경우가 많음.
         - 존재 이유 : 보조기억장치에 저장을 해야하는지 안해야하는지 알려줘야함
                      - 작업은 cpu와 메모리사이에서 되고, 메모리는 전원차단시 모든 걸 종료 : 기억은 보조기억장치가 함
                      - 보조기억장치에서 가지고 온 자료를 수정해서 다시 저장해야하는지 아닌지 그걸 알려줘야함.
                       ( 필요 없는 디스크 쓰기를 줄일 수 있음)

  • 계층적 페이징: 페이지 테이블 크기 줄이기
    - 페이지 테이블을 페이징 한다고 생각하면 됨!!
요구 페이징, 스래싱

 

  • 요구 페이징
    처음부터 모든 페이지를 적재하지 않고 페이지 폴트가 발생하면 그 때 페이지를 적재한다
       - 페이징이 필요할 때만 페이징을 한다는 의미

     - 순수 요구 페이징
          - 아무 페이지를 적재하지 않고 실행 
          - 첫 명령어 실행부터 페이지 폴트 발생
          - 적당한 페이지가 적재된 이후부터 페이지 폴트 감소

    : 페이지 폴트는 적게 발생할수록 좋다

  • 페이지 폴트 최소화 방법
    : 사실 물리 메모리가 크면 근본적으로 해결된다
        - 프레임이 무한히 많은 메모리의 경우 ← 무한히 많은 페이지 적재 가능   : 현실적으로 힘듬
        - 프레임이 한 개 있는 메모리의 경우 ← 페이지 접근할 때마다 페이지 폴트

  • 스래싱 : 페이징폴트가 너무 많이 발생하여 성능이 저하되는 문제
    - 프로세스 실행 시간보다 페이징에 더 많은 시간이 소요되는 문제 : 페이징이 너무 많이 발생
    - 지나친 페이지 폴트로 인해 페이지 교체에 너무 많은 시간을 소요하여 성능이 저하되는 문제
    - 동시 실행되는 프로세스 수(멀티프로그래밍의 정도림)를 늘린다고 해서 반드시 CPU 이용률이 비례하여 높아지는 것은 아닌 이유 : 스레싱이 발생함.

  • 많은 물리 메모리(프레임)를 확보할 수 없다면 페이지 폴트 횟수를 줄일 수 없는 걸까?
      -> 페이지 교체 알고리즘!!!!! 보조기억장치로 내보낼 페이지(페이지아웃시킬 페이지) / 메모리에 적재할 페이지(페이지 인 할 페이지)를 잘 선별하면 된다
            - 진짜 쓸 페이지만을 남기면 된다! 어떤 페이지가 필요한지 잘 판단만 하면 된다.

  • meminfo에서 명시된 내용에 대해서 공부하기
페이지 교체 알고리즘

- 페이지 교체 알고리즘에 따라서도 성능이 달라질 수 있다.

  • 페이지 교체 알고리즘
    - 메모리에 적재된 페이지 중 페이지-아웃시킬 페이지를 선정하는 방법
    - 좋은 페이지 교체 알고리즘 페이지 폴트를 적게 일으키는 알고리즘

  • 좋은 페이지 교체 알고리즘을 확인하는 방법 : 페이지 폴트를 적게 일으킨다는 것을 확인 방법
     - 페이지 참조열: CPU가 참조하는 페이지 중 연속된 페이지를 생략한 페이지열
           - 참조한 페이지: 2 2 2 3 5 5 5 3 3 7 -> 페이지 참조열: 2 3 5 3 7

대표적인 페이지 교체 알고리즘 종류

  • FIFO 페이지 교체 알고리즘 
     - 가장 먼저 메모리에 적재된 페이지부터 페이지-아웃
    - 문제점 : 초기에 적재된 페이지 중 프로그램 실행 내내 유지할 데이터가 있을 수 있음
           - 먼저 적재된 페이지도 계속 유지해야하는 페이지가 있을 수도 있음.

  • 2차 기회 FIFO 페이지 교체 알고리즘 ( FIFO 페이지 교체 알고리즘의 변형) 
    - 기본적으로 가장 오래 메모리에 머물렀던 페이지부터 페이지-아웃
    - 다만 참조 비트(reference bit, cpu가 접근한적이 있1없0)가 1일 경우, 이를 0으로 변경 후 한번 더 기회 부여
         - 참조비트=1, cpu가 자주 접근 할 수도 있는 페이지일수도 있다라는 의미가 될 수 있음
    - 참조 비트= 0일 경우 페이지-아웃 (한번도 접근이 된 적이 없음)
  • 최적 페이지 교체 알고리즘
    - 단순하게 생각했을 때, 메모리에서 페이지-아웃되어야 할 페이지는 앞으로 쓸 일이 잘 없는 페이지!
    - 앞으로의 사용 빈도가 가장 낮은 페이지부터 교체하는 알고리즘

    - 가장 낮은 페이지 폴트 빈도율을 보장하는 알고리즘 : 이상적(비현실적)인 알고리즘
    - 하지만 앞으로 CPU가 어떤 페이지를 얼마나 참조할지 예측하기란 매우 어려움
    - 이론적으로 페이지 교체 알고리즘의 성능을 평가할 때 주로 사용되는 알고리즘

  • LRU 페이지 교체 알고리즘 (LRU 페이지 교체에 굉장히 많은 변형이 있다.)
    - 가장 적게 참조할 페이지는 예측하기 어려워도
    - 가장 적게 참조한 페이지는 계산하기 쉽다
    - 최근에 사용되지 않은 페이지를 페이지-아웃
copy on write 걔념

- 페이징 기법을 사용하면 얻을 수 있는 이점

- 여러개의 독립적인 프로세스의 메모리 낭비를 방지할 수 있음

  • copy on write 기법
    프로세스끼리 자원 공유를 안 하면서, 별도의 메모리공간에 중복적재하지 않는 방법

    - 프로세스를 fork하면 동일한 프로세스 두 개가 메모리에 복제하면 메모리 공간 낭비, 프로세스 생성 시간 낭비가 됨

    - fork를 해서 자식 프로세스를 생성
       - 부모와 자식프로세스 모두 쓰기 작업이 없고 읽기작업만 하면, 별도의 메모리 공간을 할당할 필요가 없음
       - 쓰기 작업이 있을 경우 : 해당프로세스에 페이지에 해당하는 복제본이 새로 할당됨

'Study > CS 기초' 카테고리의 다른 글

네트워크 거시적으로 보기  (6) 2024.10.21
운영체제 - 파일 시스템  (4) 2024.10.21
운영체제 - 동기화와 교착상태  (2) 2024.10.21
운영체제 - CPU 스케줄링  (2) 2024.10.19
운영체제 - 프로세스와 스레드  (5) 2024.10.19