[CS] 가상 메모리

·2024년 3월 13일
0

CS

목록 보기
22/23

가상 메모리를 이해하기 위한 배경지식을 알아보고 가상 메모리를 알아보자.

배경지식 4가지

  1. 컴퓨터 구조
  2. 프로그램이 실행되는 것이란?
  3. 주소 바인딩
  4. 스왑 영역

1. 컴퓨터 구조

  • CPU : 메모리 연산
    • RAM까지의 값만 참조할 수 있기 때문에, 보조 기억 장치(외부 저장 장치, DISK)의 값을 참조하려면 OS의 도움을 받아 입출력 작업을 진행한다.

2. 프로그램이 실행되는 것

  • 프로그램이 실행된다는 것은, CPU가 일을 하는 것이다.
  • 위에서 말했듯이 CPU는 메인 메모리의 값만 참조 가능하다.
  • 즉 CPU가 일을 하기 위해서는 프로그램의 정보가 프로세스 형태로 메모리에 올라와 있어야

  • 일반적으로 프로그램은 디스크에 이진 실행 파일 형식으로 존재한다.

  • 실행 파일을 실행하면,

  1. fork() 요청으로 새 프로세스를 생성하고,
  2. exec() 요청으로 로더를 호출한다.

    로더 : 새로 생성된 프로세스의 주소 공간을 사용하여 지정된 실행 파일을 메모리에 올림

  • 프로그램을 실행하면 디스크에 존재하던 실행파일이 메모리에 올라오고 CPU가 해당 정보를 참조할 수 있게 되는 것이다.

3. 주소 바인딩

논리 주소와 물리 주소

  • CPU는 실행 파일을 실행하면 0번부터 시작하는 프로세스마다 독자적인 주소 공간을 생성한다.
  • 그리고 이 주소를 바라보는데 이것을 논리주소 라고 한다.
  • CPU가 일을 하기 위해서는 논리 주소가 메인 메모리에 올라와 있어야 한다.
  • 논리 주소(logical address, 가상 주소) : 각 프로세스에게 CPU가 할당하는 주소
  • 물리 주소(physical address) : 메모리가 취급하는 주소
  • 논리 주소가 물리적 메모리의 특정 위치로 맵핑 되는데 이 작업을 주소 바인딩이라고 한다.

바인딩 방식

  • 바인딩 방식 (물리적 메모리 주소가 결정되는 시기에 따라)

    1. 컴파일 타임 바인딩
    2. 로드 타임 바인딩
    3. 실행 시간 바인딩
  • 가상 메모리를 사용하기 위해서는 실행 시간 바인딩이 지원되어야 한다.

  • 이 기법을 사용하면, 논리 주소와 물리 주소의 값이 달라지게 된다.

  • 실행 시간 바인딩을 위해선 하드웨어적인 지원이 필요하다.

  • CPU가 메모리에 접근을 할 때 주소값 기반으로 참조를 하게 되는데, 이때 매번 주소 매핑 테이블을 이용해 바인딩을 점검한다.

  • 그러기 위해서는 기준 레지스터, 한계 레지스터를 포함하여 MMU라는 하드웨어의 지원이 필요하다.

    MMU : CPU가 메모리에 접근을 관리하는 하드웨어 부품(논리 주소를 물리 주소로 맵핑해주는 하드웨어 장치)

MMU 기법

  • 기준 레지스터에는 현재 프로세스의 물리적 메모리의 시작 주소가 저장되어 있어 논리 주소 + 기준 레지스터 값으로 물리적 주소의 위치를 찾는다.
  • 프로세스는 자기 자신만의 고유한 주소 공간을 가지기 때문에, 동일한 논리주소 값이라도 각 프로세스마다 서로 다른 내용을 담고 있다.

시분할 방식

  • CPU는 지금까지 설명했던 과정을 통해 프로세스를 실행시킨다.
  • CPU를 하나라고 가정했으니 일할 수 있는 자원은 1개
  • 그러나 우리는 여러 프로그램을 동시에 실행하는 것처럼 사용
  • 이는 사실 동시에 실행하는 것이 아니라 cpu가 짧은 시간 단위로 프로세스를 바꿔가며 사용하는 것
  • 이를 시분할 방식이라고 함

4. 스왑 영역

  • CPU가 프로세스를 실행하려면 메모리에 올라와 있어야 하는데 여러 프로그램이 메모리에 올라오면 메모리 공간이 부족할 수 있다.
  • 그래서 메모리 공간의 확장 영역으로 스왑 영역을 사용한다.
  • 스왑 공간은 외부 저장 장치에 존재하지만 물리 메모리의 확장 개념이다.

  • 물리 메모리에 공간이 부족하기 때문에 실행중인 프로세스의 주소 공간을 일시적으로 메모리에서 디스크로 내려놓는 것
  • 스왑 영역은 디스크에 존재하지만 파일 시스템과는 별도로 존재
  • 파일 시스템은 비휘발성이지만, 스왑 영역은 메모리 공간의 확장으로 사용하기 때문에 프로세스가 수행중인 동안에만 일시적으로 저장
  • 메모리에서 스왑 영역으로의 이동을 swap in, swap out이라고 함
  • 스왑 영역도 외부 저장 장치에 존재하기 때문에 OS에 의해 I/O 작업이 일어남

그래서 가상 메모리가 뭔데🤔

  • 실행되고 있는 프로세스의 정보는 모두 물리 메모리에 올라와 있어야 한다.
  • 여러 프로그램을 실행하는 환경에서는 물리 메모리를 나눠서 사용한다.
  • 여러 개를 사용할수록, 각 프로그램에 할당될 수 있는 물리 메모리의 크기가 줄어든다.
  • 다른 프로세스를 올려야 해서 공간이 부족해진다면 기존 프로세스를 스왑으로 내쫓고 꼭 필요한 프로세스가 물리 메모리에 올라와야 한다.
  • 이렇게 된다면 빈번하게 스왑 영역과 I/O가 발생할 것이다.
  • 물리 메모리의 크기를 벗어나는 프로세스라면 실행조차 불가능하다.
    -> 이런 불편함 때문에 가상 메모리의 개념이 필요하다.
  • 가상 메모리는 실제의 물리 메모리 기능과 개발자의 논리 메모리 개념을 분리
  • 가상 메모리를 사용하면, 프로세스 전체의 내용을 메모리에 올릴 필요 없이 필요한 부분만 메모리에 올려 실행할 수 있다.
  • 어떻게 필요한 정보만 올려둘까? -> 요구 페이징 기법을 통해서~

페이징 기법

  • 프로세스마다 페이지 테이블 존재
  • 페이지 단위 크기 == 프레임 단위 크기
  • 페이지 테이블 : 프레임과 페이지의 맵핑 정보를 가지고 있음

요구 페이징 기법

  • 필요한 페이지만 RAM에 적재하는 방법
  • 유무효비트를 사용하여 특정 페이지가 물리 메모리에 올라와 있는지 아닌지를 알 수 있다.
  • valid : 해당 페이지가 메모리에 올라와 있음
  • invalid : 해당 페이지가 메모리에 없음

Page Fault

Page Fault : 메모리에 없는 페이지를 참조할 때 발생.
MMU가 trap을 발생하여 운영체제에게 알리고, 운영 체제는 CPU의 동작을 잠시 멈춘다.

참조하려는 페이지의 valid bit가 0일 때

  • 물리 주소가 RAM이 아닌 하드 디스크의 swap 영역에 존재하는 것
  • RAM의 빈 공간을 찾아(없으면 page replacement 알고리즘) 해당 물리 주소를 swap in하고 페이지 테이블에 정보를 업데이트 한다.
  • CPU 다시 실행

이렇게 필요한 페이지만 물리 메모리에 사용하는 기법을 요구 페이징 기법이라고 한다.

상대적으로 큰 저장 공간인 swap 영역을 활용하여 프로세스마다 가상의 주소 공간을 확보하고, 필요한 페이지만 물리 메모리에 올려 사용함으로써 더 효과적으로 물리 메모리를 사용할 수 있게 된다.

정리

가상 메모리 : 메모리 관리 기법 중 하나로, 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

가상 메모리의 장점

1. 사용자 프로그램이 물리 메모리의 제약에서 벗어난다.

  • 사용자 프로그램이 물리 메모리보다 커져도 된다.
  • 프로그래머는 물리 메모리 크기를 신경쓰지 않아도 되기 때문에 실제 해결하고자 하는 문제에 집중할 수 있다.

2. 각 프로그램이 더 작은 메모리를 차지하기 때문에 더 많은 프로그램을 동시에 수행 가능하다.

  • 프로세스 당 메모리 사용량이 감소하고, 더 많은 프로세스를 수용할 수 있다.
  • 응답시간(response time, around time)은 늘지 않으면서 CPU 이용률과 처리률이 높아진다.

3. 프로그램을 메모리에 올리고 swap 하는데 필요한 IO 횟수가 줄어든다.

  • IO가 적게 일어나므로 더 빨리 실행이 가능하다.

참고

https://www.youtube.com/watch?v=5pEDL6c--_k
https://www.youtube.com/watch?v=_SyFgWccEs8

0개의 댓글