가상 메모리 (Virtual Memory)

lsjoon·2024년 2월 16일
0

CS & PROGRAMMING

목록 보기
6/15
post-thumbnail

가상메모리


주 기억장치의 부족한 물리적 공간을 보조 기억장치를 이용해서 확장시킨 것처럼 사용하는 기술

  • 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능케 함
    - 실행에 필요한 부분만 메모리에 올라옴
  • CPU는 MMUTLB를 사용하여 가상 메모리 주소에 접근
    - MMU가 실제 메모리에서 유효한 페이지를 찾지 못할 경우 Page Fault 발생
  • Paging, Segmentation, Memory Pool 등을 사용

MMU (Memory Management Unit)
- 가상 주소를 물리 주소로 변환하는 하드웨어 디바이스
- OS를 통해 페이지(세그먼트) 테이블에 접근하고, MMU가 변환 작업을 진행
- 일반적으로 CPU 내에 존재
- 메모리의 실제 배열과 상관없이, 연속된 메모리로 취급할 수 있게 함

TLB (Translation Lookaside Buffer)
- 자주 참조되는 Page Table Entry를 저장하는 하드웨어 캐시
- MMU 내부 (CPU 내부)에 존재
- 크기가 작아, 검색 시간이 짧음

장점

  • 메모리 크기의 제약에서 자유로워짐
  • 프로그램이 실행에 필요한 최소 크기의 메모리만을 요구하기 때문에, 더 많은 프로그램을 동시 실행 가능해짐
  • 각 프로세스에 메모리에 대해 제한된 엑세스 권한을 부여함으로써 메모리를 보호
    - 각 프로세스는 서로 독립적인 메모리 공간을 가짐

페이징 (Paging)


물리 메모리를 서로 일정한 크기Frame으로 나눔
가상 메모리를 Frame과 동일한 크기Page로 나눔
= 이후 필요한 Page를 Frame에 적재하고 실행

특징

  • 각 Page는 연속적이지 않은 공간에 존재 가능
  • 각 프로세스는 독자적인 Page Table을 가짐
  • 외부 단편화가 발생하지 않지만, 내부 단편화가 발생할 수 있다.

Page size 크기에 따른 차이

  • Page size가 작을 때
    -> 프로세스 당 Page 수가 증가
    -> Page Table 크기가 증가
    -> 더 많은 메모리 공간을 차지

  • Page size가 클 때
    -> 내부 단편화 발생 확률이 증가 (사용하지 않는 부분도 메모리에 적재될 수 있음 )
    -> Page Fault 발생 확률 증가

페이지 폴트 (Page Fault)

- 발생이유

  1. 페이지가 물리 메모리에 없는 경우
  2. 페이지 교체 ( 물리 메모리에 여유 공간이 부족할 때 )
  3. 읽기 전용 페이지에 쓰기 시도

- 해결과정

  1. CPU에서 특정 데이터에 대한 가상 주소를 요청
  2. MMU에서 해당 가상 주소를 기반으로 TLB를 조회
    - 조회 결과, 데이터가 있으면 바로 해당 데이터 반환
  3. TLB에 데이터가 없으면 메인 메모리의 Page Table에 접근하여 해당 가상 주소의 물리 주소 검색
  4. 해당 물리 주소가 메모리에 적재되어 있는지 확인
    - 해당 물리 주소가 메모리에 적재되어 있으면 데이터를 CPU에 반환
  5. 해당 물리 주소가 메모리에 적재되어 있지 않으면, Page Fault가 발생하여 운영체제에 전달
  6. 운영체제는 Pafe Fault를 전달받고 해당 페이지를 갖고있는 프로세스에 접근하여 해당 페이지를 물리 메모리에 적재
    - 물리 메모리에 비어있는 프레임이 없다면, 희생 프레임을 선택해야함 ( 페이지 교체 알고리즘 활용 )
  7. 적재된 페이지에 대한 정보를 Page Table에 업데이트
  8. 이후 CPU는 가상 주소를 재요청

페이지 폴트가 자주 발생 시, 위의 과정을 거쳐야 하기 때문에 프로그램의 실행 속도가 저하될 수 있음


세그멘테이션 (Segmentation)


페이징 프로세스를 물리적으로 일정한 크기로 나누어 메모리에 할당
세그멘테이션 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 할당

세그멘테이션은 프로세스를 세그먼트의 집합으로 표현
세그먼트의 논리 단위에 해당되는 것

  • main program
  • procedure
  • function
  • method
  • object
  • stack
  • local variable
  • global variable
  • etc...

메모리 풀 (Memory Pool)


profile
중요한 것은 꺾여도 그냥 하는 마음

0개의 댓글