Programming/Computer Science

[혼공학습단 9기] 혼.공.컴.운. - 14. 가상 메모리(필수미션 포함)

리버김 2023. 2. 20.
운영체제의 가장 핵심적인 두 역할: 프로세스 관리와 메모리 관리.지금까지 프로세스 관리 기법에 대해 알아봤으니 이제 메모리 관리 기법에 대해 알아보자. 

기본 미션

문제

1. 메모리 할당 방식에 대한 설명으로 올바른 것을 다음 보기에서 찾아써 보세요.

보기:최초 적합, 최적 적합, 최악 적합

  • (1): 최초로 발견한 적재 가능한 빈 공간에 츠로세스를 배치하는 방식
  • (2):프로세스가 적재되룻 있는 가장 큰 공간에프로세스를 배치하는 방식
  • (3): 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

 

정답

  1. 최초 적합
  2. 최악 적합
  3. 최적 적합

 

14-1 연속 메모리 할당

연속 메모리 할당: 프로세스에 연속적인 메모리 주소를 할당하는 것

스와핑

스와핑(swapping): 메모리에 적재된 프로세스들 중 현재 실행되지 않는 프로세스들을 임시로 보조기억장치 일부영역으로 쫓아내고, 그렇게 해서생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식. 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리보다 큰 경우에도 프로세스를 동시 실행할 수 있도록 해준다.

스왑 영역(swap space): 프로세스들이 쫓겨나는 보조기억장치의 일부 영역

스왑 아웃(swap-out): 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것

스왑 인(swap-in): 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것(스왑 아웃 되기 전의 물리주소와는 다른 주소에 적재될 수 있다.)

 

메모리 할당

최초 적합: 운영체제가 메모리 내의 빈 공간을 순서대로검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식. 검색을 최소화하고 빠른 할당이 가능하다. 

 

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

 

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

 

외부 단편화

연속 메모리 할당은 메모리를 효율적으로 사용하는 방법이 아니다. 왜냐하면 외부 단편화(external fragmentation)라는 문제를 가지고 있기 때문이다.

 

프로세스들이 메모리에 연속적으로 할당되는 환경에서는 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이 사이에 빈 공간들이 생긴다. 이는 그 공간보다 큰 프로세스를 적재하기 어렵기 때문에 메모리 낭비로 이어진다. 이런 현상이 외부 단편화이다.

 

압축(compaction): 메모리 조각 모음이라고도 부른다. 메모리 내에 저장된 프로세스를 적당히 재배치해 여기저기 흩어진 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법이다. 외부 단편화를 해결할 수 있는 대표적인 방안이다. 그러나 압축 방식에는 여러 단점이 있다. 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고, 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기하며, 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어렵다. 이를 해결하는 방안이 다음 장에서 살펴볼 '페이징'이다.

 

 

14-4 페이징을 이용한 가상 메모리 관리

 

프로세스를 메모리에 연속적으로 할당하는 방식은 두 가지 문제를 내포하고 있다. 한 가지는 앞선 절에서 다루었던 외부 단편화이고, 또 하나는 물리 메모리보다 큰 프로세스를 실행할 수 없다는 것이다.

가상 메모리(virtual memory): 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다.

페이징: 현대 대부분의 운영체제가 사용하는 가상 메모리 관리 기법. 물리 메모리보다 큰 프로세스를 실행할 수 있을 뿐만 아니라 외부 단편화 문제도 해결할 수 있다.

 

페이징이란

 

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

 

페이징을 사용하는 시스템에서는 스와핑을 할 때 페이지 단위로 스왑 아웃/스왑 인 된다. 메모리에 적재될 필요 없는 페이지들은 보조기억장치로 스왑 아웃되고, 실행에 필요한 페이지들은 메모리로 스왑 인 된다. 페이징 시스템에서는 페이지 아웃, 페이지 인 이라고 부르기도 한다.

 

프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재해 물리 메모리보다 더 큰 프로세스를 실행할 수 있도록 한다.

 

페이지 테이블

 

프로세스가 비록 물리 주소에 불연속적으로 배치되더라도 CPU가 바라보는 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다. 이를 통해 CPU가 순차적으로 명령어를 실행할 수 있도록 한다. 현제 어떤 페이지가 어떤 프레임에 할당되었는지를 알려준다.

 

프로세스마다 각각의 프로세스 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다.

 

내부 단편화

 

모든 프로세스 크기가 페이지 크기의 배수는 아니기 때문에 메모리 낭비가 발생할 수 있는데, 이를 페이징 시스템에 발생하는 내부 단편화라고 한다. 내부 단편화를 적당히 방지하면서 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요하다.

 

 

 

페이지 테이블 베이스 레지스터(PTBR: Page Table Base Register): 

반응형

댓글