[혼공컴운] Chap 14. 가상 메모리

반디·2023년 2월 19일
0

컴구/OS

목록 보기
9/9

연속 메모리 할당

프로세스에 연속적인 메모리 공간을 할당하는 방식

스와핑(swapping)

메모리에 적재된 프로세스들 중 현재 실행되지 않는 프로세스들을 임시로 보조기억장치로 내보내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
프로세스들이 요구하는 메모리 주소 공간의 크기 > 실제 메모리 크기인 경우에도 프로세스들을 동시 실행할 수 있음

https://www.geeksforgeeks.org/difference-between-paging-and-swapping-in-os/

  • 스왑 영역: 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
  • 스왑 아웃: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
  • 스왑 인: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것

단, 스왑 아웃되었던 프로세스가 다시 스왑 인 될 때는 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있음

메모리 할당

외부 단편화

https://www.geeksforgeeks.org/difference-between-internal-and-external-fragmentation/

프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상으로 연속 메모리 할당 환경에서 자주 발생

프로세스들이 메모리에 연속적으로 할당되는 환경에서는 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이 사이에 빈 공간들이 생김
이러한 빈 공간들보다 프로세스의 크기가 클 경우, 프로세스를 적재할 수 없으므로 메모리 낭비로 이어짐!
\Rightarrow 압축이나 가상 메모리 기법으로 해결!

압축

외부 단편화를 해결할 수 있는 대표적인 방안, 메모리 조각 모음
메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만듦

  • 단점
    • 압축을 수행하는 동안 시스템은 작업을 중지해야 함
    • 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기
    • 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어려움

가상 메모리 기법

페이징

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

https://data-flair.training/blogs/paging-vs-segmentation-in-operating-system/

  • 현대 대부분의 운영체제가 사용하는 기법
  • 물리 메모리보다 큰 프로세스를 실행할 수 있도록 함
  • 외부 단편화 문제 해결 가능
  • 페이징에서 스와핑을 사용하는 경우, 페이지 단위로 스왑 아웃(페이지 아웃)/스왑인(페이지인)

프로세스가 메모리에 불연속적으로 배치되어 있는 경우, CPU 입장에서는 '다음에 실행할 명령어 위치'를 찾기가 어려우므로 이를 순차적으로 실행할 수 없음
\rightarrow 페이지 테이블을 이용하여 해결!

페이지 테이블

https://velog.io/@jieuni/Paging-and-Page-Tables

CPU가 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 있도록 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표
\therefore 프로세스가 물리 주소에 불연속적으로 배치되더라도, (CPU가 바라보는) 논리 주소에는 연속적으로 배치될 수 있도록 지원

프로세스마다 각자의 프로세스 테이블을 가지고, 프로세스 테이블은 메모리에 적재

  • 페이지 테이블 베이스 레지스터(PTBR)
    CPU내에서 각 프로세스의 페이지 테이블이 적재된 주소를 가리킴
    ex) 프로세스 A가 실행 \rightarrow PTBR은 프로세스 A의 페이지 테이블을 가리킴 \rightarrow CPU는 프로세스 A의 페이지 테이블을 통해 프로세스 A의 페이지가 적재된 프레임을 알 수 있음

페이지 테이블을 메모리에 둠 \Rightarrow 메모리 접근 시간이 두 배로 늘어남 (메모리에 있는 페이지 테이블을 봄 + 그렇게 알게 된 프레임에 접근)

  • TLB (Translation Lookaside Buffer)
    페이지 테이블의 캐시 메모리, 페이지 테이블의 일부 내용을 저장
    참조 지역성에 근거, 주로 최근에 사용된 페이지 위주로 가져와 저장
    • TLB 히트: CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 \rightarrow 메모리 접근을 한 번만 하면 됨
    • TLB 미스: 페이지 번호가 TLB에 없을 경우, 페이지가 적재된 프레임을 알기 위해 메모리 내의 페이지 테이블에 접근하는 것

페이징에서의 주소 변환
하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있으므로 특정 주소에 접근하려면 다음 두 가지 정보가 필요

  • 어떤 페이지 혹은 프레임에 접근하고 싶은지
  • 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
    \therefore 페이징 시스템에서는 모든 논리 주소가 페이지 번호+변위로 구성
- 페이지번호: 접근하고자 하는 페이지 번호
- 변위: 접근하려는 주소가 프레임 시작 번지로부터 얼마만큼 떨어져 있는지

ex) CPU가 32비트 주소를 내보냈다면 이 중 N bit: 페이지번호, 32-N bit: 변위
CPU 페이지번호,변위\xrightarrow{페이지번호, 변위} 페이지 테이블 프레임번호,변위\xrightarrow{프레임번호, 변위} 메모리

페이지 테이블 엔트리
페이지 테이블의 각각의 행들, 페이지 번호, 프레임 번호, 유효 비트 등으로 구성

이름내용
유효 비트해당 페이지 현재 접근 가능 여부
보호 비트해당 페이지의 접근 권한(rwx)
참조 비트CPU가 이 페이지에 접근한 적이 있는지 여부
수정 비트 (더티 비트)해당 페이지에 데이터를 쓴 적이 있는지 여부

확인문제
p. 400
1번 메모리 할당 방식에 대한 설명으로 올바른 것을 다음 보기에서 찾아 써 보세요.
(1) 최초 적합: 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식
(2) 최악 적합: 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
(3) 최적 적합: 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

참고문헌
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=299014282&start=slayer

profile
꾸준히!

0개의 댓글