-
[운영체제] 가상 메모리(Virtual Memory)와 페이징, 세그멘테이션Study/컴퓨터 구조 & 운영체제 2022. 10. 11. 18:27
메모리란?
- 메모리는 프로세스 실행에 필요한 데이터 및 코드를 저장하는 장치
- 메모리는 크게 내부 기억장치인 주 기억장치, 외부 기억장치인 보조 기억장치로 나눈다.
- 내부 기억장치는 보통 CPU의 Cache, Register, 또는 RAM이다.
- 보조 기억장치는 HDD, SDD이다.
- 내부 기억장치의 읽기/쓰기 속도가 보조 기억장치보다 훨씬 빠름
- 당연히 내부 기억장치에서 모든 것을 처리하면 좋겠지만, 내부 기억장치는 용량이 작고 휘발성이므로 보조 기억장치를 사용한다.
가상 메모리
- 가상 메모리는 왜 쓰는가?
- 실제 메모리 크기보다 요구 메모리가 큰 프로그램(프로세스)를 실행하기 위해서
- 보통 사용하는 RAM의 전체 용량은 16GB정도가 보통이다. 그런데 용량이 50GB나 되는 게임들을 어떻게 실행할 수 있을까? -> 가상 메모리가 있으니까
- 실제 메모리 크기보다 요구 메모리가 큰 프로그램(프로세스)를 실행하기 위해서
- 가상 메모리의 핵심 아이디어
- 모든 데이터를 주 기억장치에 올리지 않고, 필요한 것들만 올려서 사용한다.
- 그럼 남은 것들은? 보조 기억장치(HDD, SDD)에 존재
- 필요할 때 보조 기억장치에서 주 기억장치로 옮겨서 사용하자
- 가상 메모리의 주소와 실제 메모리의 주소는 일치하지 않는다.
- 가상 메모리의 주소와 실제 메모리 주소를 1:1 대응 시켜야 함.
- 이를 해결해주는 것이 MMU(Memory Managment Unit)이다.
- MMU는 가상 메모리 주소를 -> 실제 메모리 주소로 변환시켜주는 하드웨어.
- 하지만, 모든 메모리 주소를 MMU를 거쳐 변환하는 것은 오버헤드가 크다.
- 따라서, MMU는 메모리를 일정 단위로 쪼개서 관리한다.
- 쪼개는 방법에 따라 페이징 기법, 세그멘테이션 기법이 나뉜다.
- 가상 메모리의 주소와 실제 메모리 주소를 1:1 대응 시켜야 함.
요구 페이징 (Demand Paging)
- CPU가 요청할 때, 프로세스의 데이터를 RAM에 올리는 것을 말한다.
- 즉, 프로세스의 모든 데이터를 메모리에 올리지 않는다.
가상 메모리 관리 기법 (Paging, Segmentation)
페이징과 세그멘테이션은 [메모리 단편화 문제]를 해결하기 위해 제시되었다.
메모리 단편화?
메모리 단편화란 할당된 메모리 사이에 빈 공간이 생기는 현상이다.
메모리 단편화가 일어나면, 새로 메모리를 할당하려고 할 때, 남은 메모리 공간이 충분한데도 할당하지 못하는 일이 발생할 수 있다.
왜냐면, 메모리 할당은 연속적인 공간에서만 이뤄질 수 있기 때문이다.
메모리 단편화는 2가지 현상으로 나뉜다.
프로세스 "내부" 메모리 할당 때문에 발생하는 내부 단편화와, 프로세스 "외부"의 전체 메모리 공간 상에서 발생하는 외부 단편화로 나뉜다.
내부 단편화
- 메모리 할당 시, 프로세스가 필요로 하는 양보다 더 큰 메모리가 할당되어 메모리 공간을 낭비하게 되는 상황
내부 단편화가 일어났을 때 메모리 상태 외부 단편화
- 메모리가 할당되고 해제되는 작업이 반복되어, 메모리 공간 사이에 사용되지 않는 불연속적인 빈 공간이 존재하게 되는 상황
실제 공간은 100mb가 남는데도 70mb의 프로세스가 할당되지 못한다. 단편화를 해결하기 위한 방식으로 압축, 통합 등이 있지만 보통 비효율적이기에 페이징, 세그멘테이션 기법을 활용한다.
페이징
페이징은, 가상 메모리의 공간을 일정 단위의 Page로 나누고, 1:1 대응되는 물리 메모리 공간을 Frame으로 나눈다.
그리고, Page Table을 통해 Page->Frame을 1:1 매핑시켜 실제 메모리에 접근하는 방식이다.앞서 외부 단편화는 프로세스 할당/해제가 반복되며 메모리에 불연속적인 빈 공간이 발생한다고 했다.
페이징의 의의는, 실제 메모리 공간은 불연속적으로 사용하면서, 마치 연속적인 공간인 것 처럼 사용할 수 있어, 외부 단편화를 해결할 수 있다는 것이다.
가상 메모리 공간을 Page단위로 나누고(보통 Windows에서 4KB), 물리 메모리 공간도 고정 크기의 Frame단위로 나눈다.
여기서, Fame은 특수한 경우가 아니면 Page단위와 같다.
이렇게 생성된 Page와 Frame을, Page Table을 통해 물리 메모리 공간에 1:1 매핑시킨다.
글로는 설명이 어려우니 사진을 보자.
프로세스 A의 가상 메모리는 연속적인 공간이다. 하지만 물리 메모리는 연속적이지 않게 배치될 수 있다.
페이지 테이블(Page Table)
페이지 테이블은 가상 메모리 주소와 물리 메모리 주소가 1:1매핑되어 있는 테이블이다.
페이지 테이블의 내용은 페이지 번호와, 해당 페이지가 적재되어 있는 프레임의 시작 주소로 이루어져 있다.
만약 해당 페이지가 적재되어 있는 프레임이 없는 경우(물리 메모리에 올라와 있지 않은 경우)는 Invalid 값이 들어간다.
사실 정확히는, 페이지 테이블은 1. 페이지 번호, 2. 플래그 비트, 3. 프레임 번호(offset혹은 distance로 표현) 로 이루어져 있다고 한다.
플래그 비트는 접근 비트, 변경 비트, 유효 비트, 읽기 비트, 쓰기 비트, 실행 비트 등으로 이루어져 있다.
- 접근 비트: 페이지가 메모리에 올라온 후 사용한 적이 있는지 알려주는 비트
- 변경 비트: 페이지가 메모리에 올라온 후 데이터의 변경이 있었는지 알려주는 비트
- 유효 비트: 페이지가 물리 메모리에 있는지를 나타내는 비트
- 읽기, 쓰기, 실행 비트: 페이지에 대한 읽기, 쓰기, 실행 권한을 나타내는 비트 (접근을 차단하는 데 사용)위 사진은, Process P1과 P2가 실행되고 있을 때, 각 프로세스의 Page Table과 Memory Frame구조를 보여준다.
물리 메모리의 공간은 P1, P2의 관점에서 봤을 때 불연속점임을 볼 수 있다.
페이지 폴트 (Page Fault)
가상 메모리 기법에서는 모든 데이터가 메인 메모리로 올라오지 않는다고 했는데, 그럼 찾고자 하는 페이지가 지금 메인 메모리에 없다면 어떻게 되는가?
위 문제를 정리하면, 어떤 프로세스가 자신의 가상 메모리 공간에는 존재하지만, RAM에는 현재 없는 데이터에 접근하려는 문제라고 볼 수 있다.
이런 현상을 페이지 폴트라고 부른다.
페이지 폴트를 처리하는 방식을 알기 위해, 가상 주소를 물리 주소로 변환하는 전체 과정이 담긴 그림을 보자.
일단 TLB라는 것에 대한 설명은 나중에 하도록 하고, 페이지 폴트에서 이어지는 화살표를 보자.
보조 기억장치로 접근해, 페이지를 주 기억 장치에 적재하는 식으로 작동함을 볼 수 있다.
이를 통해 Page Fault를 해결할 수 있다.
그러나, 보조기억장치는 읽기/쓰기가 매우 느리다고 했다. 또한, SDD에서 RAM으로 데이터를 적재하는 과정 자체도 오버헤드가 크다.
즉, 페이지 폴트가 많이 일어날수록 성능이 저하된다고 할 수 있다.
그래서 페이지 폴트를 최소화하기 위해 최대한 필요한 페이지를 RAM에 올려놓을 수 있도록 구상한 알고리즘들이 있다.
메모리가 꽉 차 있는 상태에서 Page Fault가 일어난다면 기존 Page중 하나를 보조 기억장치로 내려야 할 것 아닌가?
그 과정을 위한 알고리즘을 Page Replacement Policy라고 한다.
TLB (Translation Lookaside Buffer) : 페이지 정보 캐시란?
위 그림에서 페이지 테이블에 접근하기 앞서 TLB라는 것에 먼저 접근하는 것을 볼 수 있다.
TLB란, 쉽게 말해 인터넷 브라우저의 "최근 방문한 페이지" 와 같다고 볼 수 있다.
즉, 최근에 일어난 가상 메모리 -> 물리 주소의 변환 테이블을 저장해두고, 프레임 접근 요청이 들어왔을 때, 그 기록들에서 먼저 찾는 것이다.
TLB는 캐시 메모리이다. 캐시 메모리는 엄청나게 빠른 접근 속도를 보장하므로, TLB에 적중한다면 페이지 테이블에 접근하는 것보다 훨씬 빠른 속도로 물리 메모리에 접근할 수 있다.
가상 메모리 페이징의 장점
- 외부 단편화를 해결할 수 있다. -> 불연속적 메모리 공간을 활용하기 때문에!
가상 메모리 페이징의 단점
- 내부 단편화 문제는 해결하지 못한다.
- 페이지 단위를 작게 하는 것으로 해결할 수 있지만, 페이지 매핑 과정이 복잡해지는 경우 오히려 비효율적이다.
세그멘테이션
페이징 기법에서는 메모리 공간을 일정한 크기의 Page와 Frame으로 나눈다고 했다.
불연속적 메모리 공간의 활용이 가능해졌지만, 페이징 기법에서는 내부 단편화 문제가 발생할 수 있다고 했다.
이는 당연한 것이, Frame단위보다 적은 메모리 공간을 활용하고 있다면 당연히 빈 공간은 쓰지 않는 공간이 되는 것이다.
세그멘테이션 기법에서는 일정 크기의 Page가 아니라, 서로 크기가 다른 논리적 단위인 Segment로 메모리를 나눈다.
세그멘테이션 기법도 가상 메모리와 물리 메모리를 테이블로 매핑하는 방식은 같다.
단지, 페이지 테이블의 페이지 번호가 세그먼트 번호가 되는 것 뿐이다.
가상 메모리 세그먼트 방식의 장점
- 내부 단편화 문제를 해결할 수 있다.
- 보호와 공유가 가능하다.
가상 메모리 세그먼트 방식의 단점
- 외부 단편화 문제가 생길 수 있다. -> 세그먼트 크기는 가변적이다. 크기가 다른 메모리 단편들이 할당/해제가 반복되므로 메모리 내부에 공간이 생길 수밖에 없다.
[운영체제] 페이징과 세그멘테이션
cs-study에서 스터디를 진행하고 있습니다. 메모리 메인 메모리 (Main Memory, Physical Memory, 주기억장치) CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리
steady-coding.tistory.com
[운영체제] 가상 메모리(Virtual Memory System)
들어가기 전.. 메모리(memory)란? 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치임. 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치
ahnanne.tistory.com
[운영체제 OS] 메모리 관리기법 - 페이징 (paging)이란? 내부 단편화(Internal Fragmentatoin)에 대해 알아
[운영체제 완전정복 링크 모음] 안녕하세요 양햄찌 블로그 입니당. 오늘은 드디어 운영체제에서 중요한 한 섹션을 차지하고 있는 페이징(paging)에 대해 살펴보려고 해요. 오늘 진행하려는 포스팅
jhnyang.tistory.com
세그멘테이션(Segmentation)와 외부단편화 그리고 Paged segmentation
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다. 경성대학교 양희재 교수님 수업 영상을 듣고 정리하였습니다. 세그멘테이션(Segmentation) 프로세스를 논리적 내
velog.io
'Study > 컴퓨터 구조 & 운영체제' 카테고리의 다른 글
ASCII와 Unicode, UTF-8 (0) 2022.09.21 [뇌자극 시스템 프로그래밍] 01. 컴퓨터 구조에 대한 간략한 이해 (0) 2022.09.17 프로그램이 실행되는 과정 (CPU와 Register, RAM의 작동방식) (0) 2022.09.12