본문 바로가기
Computer Science/OS (운영체제)

[OS] 운영체제 메모리 관리와 가상메모리

by SIXXXX_ 2022. 3. 27.
728x90

운영체제의 메모리 관리

  • 프로그램이 CPU에서 실행되려면 실행에 필요한 부분이 메모리에 올라와 있어야 한다.
  • 동시에 여러프로그램이 수행되는 환경에서는 한정된 메모리 공간을 여러 프로그램이 조금씩 나눠 사용하는데
    OS가 적절히 프로세스에 메모리를 할당해야 한다.
  • 메모리 할당 방법
    • 균등 할당 : 프로세스마다 동일한 메모리를 할당하는 방식
    • 비례 할당 : 프로세스의 크기에 비례하게 메모리를 할당하는 방식
    • 우선 순위 할당 : 우선순위가 높은 프로세스에게 더 많은 메모리를 할당하는 방식
  • 운영체제는 CPU에서 당장 수행해야 하는 부분만 디스크에 올리고 나머지는 디스크의 swap영역으로 놓았다가 다시 필요해지면 기존에 메모리에 있었던 부분과 교체하는 방식을 사용한다.
  • 이처럼 메모리의 연장공간으로 디스크의 swap영역을 사용하게 된다면 물리적 메모리 크기에 대한 제약을 고려할 필요가 없어진다.

 

가상메모리

  • 프로그램이 자기 자신만의 가상 메모리를 사용하는 것처럼 가정해 프로그램 하는 것을 지원한다.
  • 가상 메모리 주소 공간은 논리적 주소로서 모든 프로그램마다 0부터 시작
  • 프로세스마다 논리적 주소 공간을 가지고 이 주소공간의 일부는 물리적 메모리에 적재되고 일부 swap영역에 존재

 

가상메모리의 장점

  • 메모리 사용량 감소 (프로세스 일부만 올리니까)
  • 입출력 오버헤드 감소 ( 일부만 디스크 → 메모리 입출력 하니까)
  • 시스템이 더 많은 프로세스를 수용할 수 있다.
  • 프로그램이 물리적 메모리의 용량 제약에서 자유롭다 (메모리보다 큰 프로그램 실행 가능)

 

가상메모리의 종류

  • 가상메모리 기법은 프로세스의 주소공간을 적재하는 단위에 따라
  • 요구 페이징 기법과 요구 세그멘테이션 기법 두개로 나눌 수 있다.
  • 대부분 요구페이징 기법을 사용

 

 

 

*페이징(Paging) : 페이지 단위의 논리-물리 주소 관리 기법

  • 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 깨는 메모리 관리방법
  • 외부 단편화가 발생하지 않으며 별도의 압축이 필요하지 않고 다양한 크기의 메모리들을 공간에 맞춰야 하는 문제를 해결해준다.
  • 프로세스는 Page라 불리는 고정 크기로 분할되고
  • 메모리는 Frame이라는 고정 크기로 분할된다.

*세그멘테이션(Segmentation) : 프로세스를 세그먼트의 집합이라 생각

  • 페이징과 비슷하게 세그먼트 테이블을 갖고 있다.
  • 세그먼트의 크기는 동일하지 않다.
  • 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치한다.
  • 세그먼트의 크기는 일정하지 않기 때문에 테이블에 limit 정보가 추가로 들어간다.
  • 만약 세그먼트의 크기를 초과하는 주소가 들어오면 인터럽트가 발생해 해당 프로세스는 강제종료가 된다.

 

1. 요구페이징(Demand Paging)

  • 프로그램 실행시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만 올리는 방식.
  • 프로세스의 주소공간을 메모리로 적재하는 기법
  • 특정 페이지에 대해 CPU 요청이 들어온 후에 해당 페이지를 메모리에 적재
  • 어떤 페이지가 메모리에 존재하고 안하는지 구별해야 한다.**없을시 Page-fault
  • 요구 페이징에서는 valid-invalid bit (유효-무효비트)를 사용하여 각 페이지가 메모리에 존재하는지 표시
  • CPU가 참조하려는 페이지가 현재 메모리에 올라와 있지 않아서 유효-무효 비트가 무효로 세팅되어 있는 경우를 페이지 부재라고 한다.

 

Page-Fault(페이지 부재)

  • CPU가 접근하려는 페이지가 메모리에 없는 상황
  • 페이지 테이블의 유효-무효 비트가 0인 상태(무효인 상태)
  • 페이지 부재 발생 시 페이지를 디스크에서 읽어봐야 하는데 이 과정에서 막대한 오버헤드가 발생한다.
  • 따라서 요구 페이징 기법은 페이지 부재 발생률이 성능에 큰 영향을 끼친다.

 

동작과정

Demand Paging

1. 찾으려는 페이지가 TLB(페이지 테이블의 캐시)에 없는 경우,

해당 페이지가 메모리에 있는지 페이지 테이블에서 유효-무효 비트를 확인한다.

 

2. 유효-무효 비트가 0이라면 **MMU(Memory Management Unit)**가

페이지 부재 트랩(소프트웨어 인터럽트)을 발생시킨다.

  • 이때 CPU 의 제어권이 커널모드로 전환되고 운영체제의 페이지 부재 처리 루틴이 호출되어 페이지 부재를 처리하게 된다.
  • *MMU(Memory Management Unit)를 통해 논리주소와 물리 주소를 나누어 사용함으로써 CPU를 속이게 된다.

3~4. 페이지 부재 처리 실행

  • 운영체제는 해당 페이지에 대한 접근이 문제가 없는지 확인(부재 페이지의 보호비트를 참조해서 접근 가능 체크)
  • 사용되지 않은 주소 영역에 속한 페이지를 접근하려 했거나 해당 페이지가 접근 위반일 경우에는 해당 프로세스를 종료한다.
  • 해당 페이지에 대한 접근이 허용 가능하다면, 물리적 메모리에서 비어 있는 프레임을 할당받아 그 공간에 페이지를 읽어온다. → 허용가능할때 페이지를 읽어오는 동안 프로세스 wait상태
  • 만약 비어 있는 프레임이 없다면 기존 메모리에 올라와 있는 페이지 중 하나를 디스크의 swap영역으로 쫓아낸다. → 이처럼 이미 메모리에 있는 페이지 중 하나를 다시 backing store (swap device라는 하드웨어의 일부분인데 디스크라고 생각해도 무방하며, 페이지를 임시로 보관하는 장소)에 보내는 것을 page-out, 새로운 페이지를 메모리에 올리는 것을 page-in이라고 한다.
  • (= 만약 비어 있는 프레임이 없다면 페이지 교체 알고리즘을 통해 물리적 메모리에 있는 프레임 하나를 스왑 영역으로 쫓아내 비어 있는 프레임을 만든 후 적재한다. 이때, 디스크 스왑 영역에 있던 페이지를 물리 메모리에 적재하기 위해서는 시간이 많이 걸리므로, 해당 프로세스는 CPU 제어권을 빼앗기고 현재까지의 수행 상태를 CPU 레지스터 상태 및 프로그램 카운터 값을 PCB에 저장해 준다.

5. 디스크 입출력이 완료되어 인터럽트가 발생하면, 페이지 테이블에서 해당 페이지의 유효-무효 비트를 유효 비트로 설정하고, 봉쇄되었던 프로세스를 Ready-Queue로 이동시킨다.

 

6. CPU를 할당 받았을 때, PCB에 있던 값을 복원하여 중단되었던 명령을 수행한다.

 

 

 

swap out 과 swap in

Swap out : swap 영역으로 데이터를 내보내는 경우

Swap in : swap 영역에서 메모리로 데이터를 가져오는 경우

 

Q. 페이지 부재 발생시 메모리에 해당 페이지 적재해야하는데 이때 메모리가 꽉찼다면?

가장 쓸모없는 것을 swap영역으로 쫓아내고 그 자리에 페이지 부재된 페이지를 적재해야 하는데

이러한 과정을 페이지 교체라 한다.

교체 대상이 될 프레임의 범위에 따라 전역교체와 지역교체로 나눈다.

  • 전역교체 방법은 모든 페이지 프레임이 교체 대상이 될 수 있는 방법이다.
  • 지역 교체 방법은 현재 수행중인 프로세스에게 할당된 페이지 프레임 내에서만 페이지 교환을 하는 방법이다.

 

2. 요구 세그멘테이션 기법(Demand Segmentation)

  • 선형적인 실제 물리 메모리를 논리적으로 나누어져 보이게 하는 기법이 세그멘테이션
  • Paged Segmentation을 사용하는 경우
  • 즉, 세부적인 구현에서는 demand paging만 사용된다고 볼 수 있음.

 

Paged Segmentation

  • 페이징과 세그멘테이션 둘 다 합치는 방법
  • 세그먼트를 페이징 기법으로 나눈다
  • 세그멘테이션을 먼저 수행하고 각 세그먼트 별로 페이징을 수행한다.
  • 세그먼트와 페이지가 동시에 존재하기 때문에 주소 변환도 두번 해야한다는 단점이 존재한다.