말감로그

가상메모리(Virtual Memory)와 페이징&세그먼트 본문

이론/운영체제

가상메모리(Virtual Memory)와 페이징&세그먼트

habbn 2024. 2. 15. 13:00
728x90

 

가상 메모리를 보기 전에 물리적인 메모리, 논리적인 메모리가 뭔지 알아보고 가자.

💡물리적인 메모리 VS 논리적인 메모리

- 물리적인 메모리(Physical Memory 또는 RAM)  컴퓨터의 실제 하드웨어에서 사용되는 메모리를 의미한다. 이는 RAM이라고도 불리며, CPU가 직접 액세스하여 데이터를 읽고 쓸 수 있는 메모리.
물리적인 메모리는 주 기억장치로써 프로그램 실행 중에 데이터와 명령어를 저장하는 역할을 한다.

논리적인 메모리(Logical Memory 또는 Virtual Memory) :  프로그램이 실제로 사용하는 메모리 주소 공간을 나타낸다. 프로그램이 사용하는 메모리 주소는 가상의 주소로써, 프로그램이 실행될 때 논리적인 주소로 변환되어 물리적인 메모리와 매핑된다. 

 


📍가상메모리란?

주기억장치(RAM)의 부족한 물리적 저장공간을 보조기억장치(디스크)를 이용해서 가상으로 늘려주는 기술이다. 

메모리가 실제 메모리보다 많아 보이게 하는 기술로, 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다.

-> 결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것임.

 

가상 메모리 특징 

- 메모리 관리 : 운영체제는 프로그램이 별로 추상화된 가상 메모리에 대해 사용하지 않는다고 판단되는 메모리의 일부분을 압축하거나, 스왑해 실제 메모리의 공간을 확보하는 등의 관리를 할 수 있다.

 

- 보안성 및 안정성 : 프로그램은 메모리에 직접 접근하는 것이 아닌 간접 접근하며 기본적으로 프로그램간 메모리가 분리되며 필요한 경우에만 특정 메모리를 서로 공유해 메모리 접근에 대한 오류를 줄여 보안성 및 안정성이 증가한다.

 

가상 메모리가 필요한 이유

물리 메모리의 한계

  • 모든 프로그램 코드를 물리 메모리에 올릴 수가 없다. 그렇다고 프로그램을 교체하면서 올리면 메모리 교체 성능 문제가 발생한다.

장점

  • 프로그램 용량이 실제 물리 메모리보다 커도 된다.
  • 전체 프로그램이 물리 메모리에 올라와 있지 않아도 된다.
  • 더 많은 프로그램을 동시에 실행할 수 있다.

 

가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야 한다.

➡️ MMU(Memory Management Unit) !

  • MMU는 가상 주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행한다.
  • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행된다.
  • 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(Page, 페이지)로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다.
  • MMU는 TLB라는 캐시를 저장하고 있다. 가상주소가 물리 주소로 변환되어야 할 때, TLB에서 우선 검색된다.
  • 가상 주소를 갖고 물리 주소에 접근할 때 TLB -> page table -> disk 순으로 접근한다.

https://cstaleem.com/memory-management-unit-in-os

 

⚖️TLB vs page table

  • TLB는 최근 사용된 페이지를 저장하고 있는 cache이고 지역성과 시간성의 원리에 따라 TLB에서 참조된 페이지들은 곧 다시 사용될 가능성이 높다. 
  • 페이지 테이블 그 자체는 거대하기 때문에 필요한 페이지의 주소를 찾는데 더 오래 걸린다.
  • TLB에 사용되는 메모리는 associative memory로 비싼 대신에 더 빠르다.

-> TLB는 page table의 속도향상을 위해 사용된다.

 

 

가상 주소는 <page, offset> 과 같은 형태로 구성되는데, 이를 이용해 물리 주소로 변환해준다.

page VA =< P,O>  -> 페이지 테이블  -> frame PA = <F,O>

가상 주소를 물리 주소로 변환하는 전체 과정

 


📍가상 메모리 관리 기법

1. 페이징(Paging)

가상메모리 관리 기법 중 하나로, 물리적인 메모리와 가상 메모리를 페이지라고 불리는 고정 크기의 블록으로 나누어 관리하는 방식이다. 각 페이지는 동일한 크기를 갖고 있으며, 프로그램의 가상 주소 공간도 페이지로 나누어져 있다.

  • 페이지 :  고정 사이즈의 가상 메모리 내 프로세스 조각
  • 프레임 :  페이지 크기와 같은 주 기억장치의 메모리 조각

하나의 프로세스가 사용하는 메모리 공간이 연속적이야 한다는 제약을 없애는 메모리 관리 방법이다.

 

 

물리 메모리는 고정 크기의 프레임으로, 가상 메모리는 고정 크기의 페이지로 분리되어 있다. 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장된다.

즉, 모든 프로세스는 하나의 페이징 테이블을 가지고 있으며, 여기에는 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소가 있다. 이를 통해 하나의 프로세스를 나눈 가상 메모리 페이지들이 각각 실제 메인 메모리의 어디 프레임에 적재되어 있는지 알아낼 수 있다.

 

페이지 테이블은 가상 주소와 물리 메모리의 실제 주소를 연결시켜주는 테이블이다.

가상 메모리(프로세스) 간 주소가 같다해도 물리 메모리 상의 주소는 같지 않다!

 

프로세스마다 자신만의 페이지 테이블을 가지고 있다. (유저 메모리)

물론 운영체제도 자신만의 페이지 테이블을 가지고 있다. (커널 메모리) 

 

페이지 폴트(Page Fault)

프로세스가 가상 주소에 접근하게 되어 MMU가 페이지 테이블을 참조한 뒤 페이지를 확인해보는데 유효하지 않을 경우 페이지 폴트라는 트립을 발생시킨다. 페이지 폴트를 감지한 운영체제는 CPU의 동작을 잠시 중단시킨 뒤 해당 페이지를 페이징 파일에서 가져와서 물리 메모리의 비어있는 공간에 적재시키고 페이지 테이블을 최신화시킨 뒤 CPU의 동작을 재개시킨다.

Swapping

CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억 장치를 내보내고(swap-out) 다른 프로세스의 메모리를 불러오는(swap-in) 작업을 Swap이라고 한다. 이러한 Swap 작업에는 디스크 전송 시간이 들기 때문에 메모리 공간이 부족할 때 이루어진다.

 

페이징의 장단점

장점

  • 가상메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에 외부 단편화가 생기지 않는다.

단점

  • 내부 단편화 문제가 발생할 수 있다. 페이지 단위를 작게하면 해결할 수 있지만, 페이지 매핑 과정이 복잡해져 오히려 비효율적이다.( 페이지 크기가 작아진다는 말은 페이지 수가 늘어난다는 의미이고, 페이지 테이블의 크기가 늘어나 유지 비용이 많이 들 수 있다.)

 


2. 세그멘테이션(Segmentation)

세그멘테이션은 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것을 의미한다. 세그맨테이션은 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식이다.

 

돼지를 도축할 때 페이징은 돼지를 같은 크기로 잘라서 보관하는 것이라면 세그맨테이션은 부위 별로 잘라서 보관한다고 이해하면 된다. 

 

세그먼트 테이블

분할 방식을 제외하면, 페이징과 세그멘테이션이 동일하기 때문에 매핑 테이블의 동작 방식도 동일하다.

다만 논리 주소의 앞 비트들은 페이징 번호가 아니라 세그먼트 번호가 될 것이다. 즉, <segment, offer>

 

 

세그멘테이션의 장단점

장점

  • 내부 단편화 문제가 해소된다.
  • 보호와 공유 기능을 수행할 수 있다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고, 같은 코드 영역은 한 번에 저장할 수 있다.

단점

  • 외부 단편화 문제가 생길 수 있다.

 

⚖️Paging vs Segmetation

  • Paging은 고정 크기를 가짐
  • Segmentation은 가변 크기를 가짐
  • Paging은 내부 단편화 발생 가능, Segmetation은 외부 단편화 발생 가능

단편화(Fragmentation)

기억장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상이다. 프로세스들이 메모리에 적재되고 제거되는 일이 반복되면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 자유 공간이 늘어나게 된다. 

 

내부 단편화

프로세스가 사용하는 메모리 공간에 남는 부분

프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생하며, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미한다.

외부 단편화

메모리 공간 중 사용하지 못하게 되는 부분

메모리 할당 및 해제 작업의 반복으로 작은 메모리가 중간 중간 존재할 수 있다. 이렇게 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황이다.

외부 단편화를 해결하기 위해 압축을 이용하여 프로세스가 사용하는 공간을 한쪽으로 몰 수 있지만, 작업 효율이 좋지는 않다.

 

 

 

 

 


참조

 

[운영체제] 페이징과 세그멘테이션

cs-study에서 스터디를 진행하고 있습니다. 메모리 메인 메모리 (Main Memory, Physical Memory, 주기억장치) CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리

steady-coding.tistory.com

 

 

[운영체제] 가상 메모리(Virtual Memory System)

들어가기 전.. 메모리(memory)란? 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치임. 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치

ahnanne.tistory.com

 

728x90