[CS 스터디] 운영체제 9일차 - 가상 메모리

강아람·2023년 1월 4일
0

운영체제

목록 보기
9/11
post-thumbnail

📚 가상 메모리

연속 메모리 할당

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

스와핑 (Swapping)

메모리에 적재된 프로세스 중 현재 실행되지 않는 프로세스를 보조기억장치의 스왑 영역(swap space)로 쫓아내고 만들어진 빈 메모리 공간에 또 다른 프로세스를 적재하여 실행하는 방식의 메모리 관리 기법

메모리에 한번에 다 적재될 수 없는 여러 개의 프로세스를 동시에 실행할 수 있음

스왑 영역 (swap space)

프로세스들이 쫓겨나는 보조기억장치의 일부 영역

스왑 아웃 (swap-out)

현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것

스왑 인 (swap-in)

스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
▶ 메모리에 다시 적재될 때 프로세스의 주소가 변경될 수 있음

메모리 할당

할당 방식

1) 최초 적합

운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식

프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식으로 검색을 최소화할 수 있고 결과적으로 빠른 할당이 가능

2) 최적 적합

운영체제가 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

3) 최악 적합

운영체제가 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식


외부 단편화

프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상

프로세스를 메모리에 연속적으로 배치하는 연속 메모리 할당은 실제로 메모리를 효율적으로 사용하는 방법이 아니다!

프로세스들이 메모리에 연속적으로 할당되는 환경에서는 프로세스의 실행과 종료 과정이 반복되면서 메모리 사이에 빈 공간이 생긴다. 이 빈 공간이 프로세스를 적재하기에 적합한 공간이면 다행이지만 빈 공간보다 큰 프로세스의 경우 적재하기 어려운 상황이 발생하고, 결국 메모리 낭비로 이어진다.

해결 방법 ▶ 메모리 압축

메모리 내에 저장된 프로세스를 재배치하여 흩어져있는 빈 공간들을 하나로 모으는 방식

단점

  • 빈 공간을 하나로 모으는 동안 시스템은 하던 일을 중지해야 함
  • 메모리에 있는 내용을 옮기는 과정에서 오버헤드 발생
  • 오버헤드를 최소화하며 재배치하는 방법을 찾기 어려움

이러한 문제를 해결하기 위해 페이징 기법이 등장



📚 페이징 기법 (Paging)

가상 메모리 (Virtual Memory)

실행하고자 하는 프로그램의 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술

가상 메모리 관리 기법에는 페이징과 세그멘테이션이 존재하며, 현재 대부분의 운영체제는 페이징 기법을 사용한다.


페이징 기법

메모리의 물리 주소 공간을 프레임 단위로 자르고, 프로세스의 논리 주소 공간을 페이지로 자른 뒤 각 페이지를 프레임 내에 할당하는 방법

한 프로세스를 실행하기 위해 프로세스 전체가 메모링 적재될 필요가 없다. 프로세스를 구성하는 페이지 중 실행에 필요한 일부 페이지만 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 적재하지 않음으로써 물리 메모리보다 더 큰 프로세스를 실행할 수 있다!

페이징에서의 스와핑

페이지 아웃 (Paging-out)

페이징 시스템에서의 스왑 아웃 (스왑 영역으로 쫓겨남)

페이지 인 (Paging-in)

페이징 시스템에서의 스왑 인 (스왑 영역에서 메모리로 불러옴)


프로세스가 페이지로 나뉘어 프레임에 할당되면 메모리에 불연속적으로 배치될 가능성이 있다. 이 경우 CPU 입장에서는 어떤 페이지가 어떤 프레임에 적재되어 있는지 모두 알 수 없다.
▶ CPU가 다음 실행할 명령어의 위치를 찾기 어려워진다. 😭


페이지 테이블

페이지 번호와 프레임 번호를 짝지어 주는 이정표 역할을 하는 테이블

페이징 시스템은 위의 문제를 해결하기 위해 프로세스가 비연속적인 물리 주소에 배치되더라도 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.

실제 메모리 내에는 불연속적으로 프로세스가 배치되더라도 페이지 테이블에 기록된 페이지 번호(CPU가 인식하는 논리 주소)를 통해 프레임 번호(적재된 물리 주소)를 알 수 있다.


내부 단편화 (Internal Fragmentation)

페이징 시스템에서 프로세스를 페이지 단위로 나누어 메모리에 적재할 때, 나누어 떨어지지 않으면 결국 단편화(fragmentation)가 발생하게 되는데 이를 내부 단편화라 한다.
따라서 메모리가 낭비되지 않도록 적절한 페이지 크기로 조정해야 한다.


PTBR (Page Table Base Register)

현재 실행되고 있는 프로세스의 페이지 테이블 주소를 저장하고 있는 레지스터

프로세스 A가 실행되는 상태에서 PTBR은 프로세스 A의 페이지 테이블 주소를 저장하고 있다.

현재 실행되고 있는 프로세스의 페이지 테이블을 메모리에 모두 적재하고 있으면 CPU가 프로세스를 실행하기 위해 메모리에 두 번 접근해야 한다는 단점이 있다.

  • 페이지 테이블을 통해 논리 주소를 물리 주소로 변환할 때
  • 알게 된 물리 주소(프레임)에 접근할 때

TLB (Translation Lookaside Buffer)

페이지 테이블의 캐시 메모리로, 페이지 테이블의 일부 내용을 저장한다. 참조 지역성 원리에 근거하여 최근 사용된 페이지 위주로 저장하고 있다.

TLB 히트 (TLB hit)

CPU가 접근하려는 페이지 번호가 TLB에 있을 경우

CPU의 메모리 접근은 한 번만 수행

TLB 미스 (TLB miss)

CPU가 접근하려는 페이지 번호가 TLB에 없을 경우

CPU의 메모리 접근 두 번 필요


페이징 주소 변환

페이징 시스템의 논리 주소 : 페이지 번호 (Page Number) + 변위 (Offset)

페이지 테이블

  • 페이지 번호 5번에 대한 프레임 번호 1
  • 1번 프레임의 물리 주소 10번지


    만약 CPU가 5번 페이지, 변위 2라는 논리 주소 (5, 2)에 접근하려 한다면,
  • 페이지 테이블에서 5번 페이지에 대한 프레임 번호를 찾는다.
    ▶ 5번 페이지 -> 1번 프레임
  • CPU는 1번 프레임, 변위 2에 접근한다.
    ▶ 1번 프레임의 물리 주소 10번지 + 변위 2 = 12번지

페이지 테이블 엔트리 (Page Table Entry, PTE)

유효 비트 (Valid Bit)

현재 해당 페이지에 접근 가능한지 여부, 즉 해당 페이지가 메모리에 적재되어 있는지 여부를 나타내는 비트

  • 1 : 메모리에 적재됨
  • 0 : 메모리에 적재되어 있지 않음

    페이지 폴트 (Page Fault) : 메모리에 적재되어 있지 않을 때 CPU가 접근 시도를 하는 예외 상황
    ▶ CPU가 기존 작업을 백업한 후, 원하는 페이지를 메모리로 가져와 유효 비트를 1로 변경하여 접근

보호 비트 (Protection Bit)

페이지 보호 기능을 위해 존재하는 비트
페이지에 접근할 권한을 제한하여 페이지를 보호하는 비트
해당 페이지가 읽고 쓰기 모두 가능한 페이지인지 여부를 나타내는 비트

  • 1 : 읽고 쓰기가 모두 가능
  • 0 : 읽기만 가능

참조 비트 (Reference Bit)

CPU가 해당 페이지에 접근한 적이 있는지 여부를 나타내는 비트

  • 1 : 메모리 적재 이후 CPU가 읽거나 쓴 페이지
  • 0 : 메모리 적재 이후 한 번도 읽거나 쓴 적 없는 페이지

수정 비트 (Modified Bit) = 더티 비트

해당 페이지에 데이터 수정 여부를 나타내는 비트

  • 1 : 변경된 내역이 있는 페이지
  • 0 : 변경된 적 없는 페이지

페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지 판단하기 위해 존재하는 비트이다.

CPU가 메모리에 적재된 페이지를 수정하면 보조기억장치에 저장된 페이지의 내용과 서로 다른 값을 갖는다. 이 페이지가 스왑 아웃될 경우 벼녁ㅇ된 값을 보조기억장치에 기록하는 작업이 필요하다.


질문 1

내부 단편화와 외부 단편화에 대해 설명하세요.

외부 단편화는 프로세스를 메모리에 연속 할당할 경우에 발생하는 현상으로, 프로세스의 실행과 종료를 반복하는 과정에서 프로세스를 할당할 수 없는 작은 공간들로 인해 메모리가 낭비되는 것입니다.
내부 단편화는 프로세스를 페이지 단위로 나누어 프레임에 할당할 경우에 발생하는 현상으로, 프로세스의 크기가 페이지 단위로 나누어 떨어지지 않아 메모리가 낭비되는 것입니다.

질문 2

가상 메모리 기술이란 무엇이고, 이를 활용한 페이징 기법에 대해 설명하세요.

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

페이징 기법이란 메모리의 물리 주소 공간을 프레임 단위로 자르고, 프로세스의 논리 주소 공간을 페이지로 자른 뒤 각 페이지를 프레임 내에 할당하는 방법입니다.

0개의 댓글