[ CS ] 가상메모리와 스와핑

오세창·2024년 10월 8일

CS / 운영체제

목록 보기
3/4

가상메모리


가상메모리란

가상 메모리(virtual memory)는 OS에서 사용되는 메모리 관리 기법의 하나로 컴퓨터가
실제로 이용가능한 메모리 자원(실제주소, physical address)을 추상화하여 이를 사용하는
사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다.

가상메모리의 원리

  1. 프로세스가 실행될 때 운영체제는 해당 프로세스에게 가상 주소 공간을 제공한다.

  2. 32bit 운영체제 기준으로 가상 주소 공간은 최대 4GB 의 크기로 제공한다.

    이때 일반적으로 유저모드 프로세스에 2GB 커널모드 공간에 2GB 로 분할되며, 유저모드의 2GB 중에서 OS 가 점유하는 부분을 제외하면, 실질적으로 1.7 ~ 1.8 GB 정도된다.

  3. 프로세스 내의 가상 주고 공간은 페이지 단위로 나눠지고, 논리주소가 부여되며, stack 이나 heap, code 등이 해당 공간에 할당된다.

  4. 이때 사용되는 페이지만이 주 기억장치의 프레임과 매핑이 되며, 사용되지 않는 페이지는 보조기억장치에 저장된다.

  5. 이에 프로세스의 가상 주소 공간의 크기는 32bit 기준 4GB지만, 실제로 운용되는 것은 1mb ~ 2mb 이다. (예를 들어)


그림을 보면 가상 주소 공간의 논리 주소를 MMU 에서 관리하는 페이지 테이블이라는 공간이 실제 물리 주소와 매핑 시켜주는 것을 확인할 수 있다.

이때 속도 향상을 위해서 캐시 계층인 TLB 라는 녀석도 사용한다.

가상 주소에서 바로 페이지 테이블로 가는 것이 아니라, TLB 에 매핑된 물리 주소가 있는지 확인하고, 없으면 이후에 페이지 테이블로 향하는 것이다.

가상메모리 기법 사용 이유

프로세스의 크기가 4GB 일때, 불필요한 부분까지 RAM 위에 올라가 있다면 소수의 프로세스 밖에 운용하지 못할 것이다.

이에 가상 메모리 기법을 통해 프로세스의 필요한 부분만 RAM 에 올림으로써 자원의 낭비를 줄이고, 많은 프로세스를 운용하게 할 수 있는 것이다.

"가상 메모리는 실제 메모리보다 더 크게 보이게 하는 기술이다" 라는 말도 앞선 이유 때문이다.

또한 가장 큰 이유로써, 관리적 용이함 이 있다.

  1. 임의의 프로세스가 죽었을 때 OS 에서 이를 감지하여, 해당 프로세스의 페이지와 매핑된 프레임을 반환한다.
  2. 이를 통해 다른 프로세스는 반환된 공간을 사용할 수 있게 된다.
  3. ~~만일 가상메모리 기법이 존재하지 않는다면, 프로세스가 죽어도 RAM 위에서 자리를 차지할 것이며, 또 다른 프로세스들이 계속해서 죽어갈 때 끝내 RAM 에는 자리가 존재하지 않을 것이다. ~~

페이지 폴트와 스와핑


페이지 폴트란

메모리에 적재된 페이지중에 사용 페이지가 없을 때를 말한다.

페이지 폴트의 원인

  1. Major Page Fault
    요청한 페이지가 페이지 테이블에는 존재하지만, 물리 주소에는 존재하지 않는 경우를 말한다.

    이는 최초에는 주 기억장치에 존재하던 페이지가 페이지 교체 알고리즘 에 의해 보조 기억장치(스왑 공간)로 Swap-out 됐을 것이고, 이후 프로세스가 해당 페이지에 다시 접근하려고 하는 것이 원인인 것이다.

    이로 인해 운영체제는 해당 페이지를 다시 Swap-in 하여 주 기억장치로 복원 시켜야 하며, 이때 Disk I/O가 발생하게 된다.

  2. Minor Page Fault
    요청한 페이지가 물리 메모리에는 로드되어 있지만 MMU에는 로드되지 않았다고 표시된 경우 이를 Minor page fault라고 한다.

    프로세스의 스레드1이 페이지 1를 사용하고 있다고 할 때, 같은 프로세스의 스레드2가 페이지 1을 요청하는 경우를 예시로 들 수 있다.

  3. Invalid Page Fault
    블루스크린 원인 중 하나이다.
    요청한 페이지가 스왑 영역의 범위를 초과하거나, 페이지를 쓰기 불가능한 영역에 쓰려고 할 때 발생하는 페이지 폴트이다. 이 경우에는 페이지 폴트 핸들러가 세그멘테이션 폴트(Segmentation Fault)를 발생시킨다. 결과는 보통 커널 패닉(블루스크린)으로 나타난다.

스와핑

Major Page Fault 가 발생하면 스와핑을 시도한다.

페이지 테이블에 존재하지만, RAM 에는 존재하지 않는 페이지를 하드 디스크의 스왑 영역에서 찾아와 RAM 으로 불러온다. 이를 Swap-in 이라고 한다.

그런데, RAM 에 빈 공간이 존재하지 않다면, 기존에 존재한 다른 페이지를 하드 디스크의 스왑 영역으로 빼내어 빈 공간을 창출한다. 이를 Swap-out 이라고 한다.

이러한 스와핑 과정은 페이지 교체 알고리즘 에 의해 동작한다.

페이지 교체 알고리즘

  1. FIFO (First In First Out)

    FIFO(First In First Out) 는 가장 먼저 온 페이지부터 교체하는 방법을 말한다.

    앞의 그림처럼 1, 3, 0 순서대로 바뀌는 것을 볼 수 있다.

  2. LRU (Least Recently Used)

    LRU(Least Recently Used) 는 최근에 사용되지 않은 페이지를 바꾸는 방법이다.

    예를 들어 7 0 1 2 0 3 0 4 로 페이지 요청이 들어온다고 가정하고 4개의 페이지만 담는다고 가정하면 다음과 같이된다.

  • 처음 7 0 1 2 를 담고 있고, 그 다음 0이 들어온다면 스와핑이 일어나지 않는다.
  • 이후에 3이 들어왔을 때 가장 참조가 오래된 페이지는 7이기 때문에 해당 페이지가 교체된다. 왜냐하면 7 -> 0 -> 1 -> 2 순으로 페이지가 들어왔기 때문이다.
  • 그리고 4가 들어왔을 때는 가장 오래된 1이 교체가 되는 것이다.
  1. NUR (Not Used recently)

    clock 알고리즘이라고 부르기도 하는데, 0은 참조되지 않았음을 1은 최근에 참조됐음을 의미한다.

    한 바퀴를 돌 동안 참조가 되지 않은 부분은 0으로 바뀌게되고, 참조가 된 부분은 1로 바뀌게 되는 알고리즘이다.

  2. LFU (Least Frequently Used)

    LFU(Least Frequently Used) 알고리즘은 가장 참조 횟수가 적은 페이지를 교체하는 알고리즘이다.

    만약에 0 -> 1 -> 2 -> 0 -> 0 -> 1 -> 2 -> 3 으로 요청이 들어온다고 해보자.

    표에서 보는 거 처럼 먼저 0, 1, 2 가 쌓일 것이다.

    이후

  • 0 이 참조된다. 0 참조 횟수 : 2
  • 0 이 참조된다. 0 참조 횟수 : 3
  • 1 이 참조된다. 1 참조 횟수 : 2
  • 2 가 참조된다. 2 참조 횟수 : 2
  • 3 이 참조된다. 1 과 2 가 횟수가 동일하므로 가장 먼저 들어왔었던 1 과 스와핑된다.

참고자료


https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95/dashboard

https://hooni-playground.com/939/

https://www.youtube.com/watch?v=_SyFgWccEs8&t=181s

https://youtu.be/-jlzaslp-w4?t=1339

0개의 댓글