운영체제 - Virtual Memory

Jocy·2022년 6월 10일
0
post-thumbnail

리눅스가 메모리 관리하는 방법

  1. 현대에는 메모리를 효율적으로 사용 하기 위해페이징이라는 방법으로 메모리를 사용
  2. 필요한 데이터만 메모리에 올리고 당장 사용하지 않는 데이터는 디스크영역Swap area에 저장
  3. MMU, TLB와 같은 하드웨어의 지원을 받아 메모리영역Page Table을 통해 메모리를 참조

가상 메모리에서 운영체제의 역할

  1. 가상 메모리로 사용자 프로세스 속이기
  2. I/O 장치 관리

논리 주소와 물리주소

논리 주소는 cpu가 보는 주소로 각 프로세스마다 독립적으로 갖는 주소 공간
물리 주소는 메모리에 실제로 올라가는 위치

주소 변환

주소 변환은 아래의 과정으로 진행하고
Symbolic Address -> (Compiler) -> Logical Address -> (MMU) -> Physical Address
프로그램이 물리 메모리에 어디에 올릴지 결정 하기 위해서 주소 바인딩을 하게 되는데
주소 바인딩은 3가지 종류로 Complie, Load,Execution(Run) 타임 바인딩이 있다.
이 중에 논리주소를 물리주소로 변환하는 부분에 해당하는게 주소 바인딩이다.

MMU

논리주소를 물리주소로 변환 시켜주는 장치
MMU는 프로그램의 시작 주소를 가진 Base register,
마지막 주소를 가진 Limit register간단한 산술연산기로 구성
Limit register보다 큰 물리주소가 나오게 되면
레지스터가 제어권을 CPU에게 넘겨서 확인 후 문제 프로세스를 종료

페이징

프로그램마다 필요한 메모리의 크기가 다르다.
이러한 여러 프로그램을 연속할당 방식으로 하게되면 외부 단편화 문제를 발생시킨다.
프로그램을 Page(4KB)라는 동일한 크기로 잘라서 물리 메모리에 올리는 방법을 말한다.
물리메모리를 Page에 크기와 동일하게 사용하기 위해 Frame 이라는 단위로 메모리를 적재한다.

Page Table

동일한 크기로 자른 Page들을 메모리에 적재 할때 연속적이지가 않게 된다.
이러한 Page들을 순차적으로 실행하기 메모리에 적재된 Page Table이 필요하게 된다.

TLB

모든 메모리의 접근 연산에는 2번의 memory access 필요(page table 접근 1번, data/instruction 접근 1번)
이렇게 메모리를 사용하게 되면 속도가 2배로 늦어지게 되는데 이것을 개선하기 위해 추가적인 하드웨어 사용이 필요하게 되는데 이것이 TLB이다.

TLB는 주소 변환의 속도 향상을 위해 사용하는 캐시메모리이며 페이지 테이블의 일부를 담고 있다.
TLB는 일부를 담고 있기 때문에 page numberframe number를 가지고 있어야 한다.
TLB의 전체를 탐색 해야되기 때문에 소프트웨어로 하면 overhead가 커질 수 있으나
TLB의 내부의 내용을 병렬로 탐색하기 위해 고속 lookup hardware cache를 사용

Shared Page

메모리를 더 효율적으로 사용하기위 프로세스마다 공통적으로 사용하는 것을 모아놓은 Page를 Shared Page

Swapping

메모리가 부족하여서 프로그램을 올릴 수 없는 경우에는
관리의 중요도에 따라서 메모리디스크의 Swap Area 사이에 데이터를 넣고 빼고 하게되는데
이것을 Swap in, Swap out 이라고 한다.

Page Fault

  1. 프로그램이 invaild page에 접근하면 MMU가 trap을 발생시킨다. 이것을 Page Fault라고 한다.
  2. 페이지 폴트가 났을 때 잘못된 주소를 참조했다면 프로세스를 종료시키고
  3. 제대로 된 주소라면 해당 페이지를 disk의 Swap area에서 memory로 읽어온다.
  4. 다 읽어오면 page table entry에 valid/invalid bit에 valid로 표시
  5. 다시 프로세스 CPU를 잡고 중단된 instruction을 재개

Page replacement

메모리 공간이 부족해서 Swap in/out을 하게 되는데 이것을 Page replacement라고 한다.
그리고 이 정책은 운영체제가 관리한다. Clock 알고리즘을 사용하여 replacement 대상을 정한다.
이에 관한 내용도 Page table에 기록한다. out하는 page에 변경사항이 있다면 변경사항을 swap area에도 반영해줘야한다.

Thrashing

메모리가 고갈되면 프로세스의 원활한 수행에 필요한 최소한의 page frame수를 할당 받지 못한 경우 발생하고 페이지 폴트 비율이 매우 높아지고, CPU 이용률이 낮아진다.
CPU는 이용률이 낮아지니 프로세스를 추가하게 되고 쓰레싱이 발생한다.
쓰레싱이 해소되지 않을 경우 Out of Memory 상태로 판단 중요도가 낮은 프로세스를 찾아 강제 종료한다.

Working set

쓰레싱 문제를 해결하기 위해 Working set 알고리즘을 사용한다.
일정 시간 동안 원활하게 수행되기 위해 한꺼번에 메모리에 올라와 있어야 하는 Page들의 집합이다
그렇지 않을 경우에는 모든 frame을 반납하고 swap out 한다.

메모리 고갈 상황과 CPU 사용률을 체크하는 이유

특정 시점만 체크한 경우 CPU 사용률이 높아보일 수 있음
연속 체크시 CPU 사용률이 급격하게 떨어지는 구간 발견 가능
메모리 적재량을 함께 체크하면서 쓰레싱 유무 확인
추가적인 서버자원을 배치하는 등 해결방안 마련

출처
반효경 교수 운영체제 강의(KOCW)

profile
Software Engineer

0개의 댓글