일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오블완
- 티스토리챌린지
- Unity
- 4기
- 추상클래스와인터페이스
- 크래프톤정글
- 크래프톤정글4기
- TiL
- 파이썬
- 다익스트라
- 유니티
- 백준
- 크래프톤 정글 4기
- BFS
- 핀토스
- C
- 네트워크
- anonymous page
- project3
- c#
- KRAFTON JUNGLE
- 알고리즘
- 전쟁-전투
- 알고리즘수업-너비우선탐색2
- pintos
- kraftonjungle
- 이벤트 함수 실행 순서
- 연결리스트
- User Stack
- 크래프톤 정글
- Today
- Total
말감로그
24.08.13 운영체제 - 가상 메모리, 페이지 교체 정책, 메모리 관리 본문
가상 메모리 (Virtual Memory)
가상 메모리란?
가상 메모리란 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이며, 프로그램 용량이 실제 물리 메모리보다 커도 된다는 주요 장점이 있다.
왜 가상 메모리가 필요한가?
물리적 공간의 제한을 극복하기 위해
가상 메모리가 나오게 된 이유?
실행되는 코드의 전부를 물리 메모리에 존재시켜야 했고, 메모리 용량보다 큰 프로그램은 실행시킬 수 없었다. 또한 멀티 프로세스상에서 여러 프로그램을 동시에 메모리에 올리기에는 용량의 한계와 페이지 교체 등의 성능 이슈가 발생했기 때문에 이를 해결하기 위해 가상 메모리 기법이 나오게 되었다.
가상 메모리를 통해서 우리는 어떤 장점을 얻을 수 있는가?
가상 메모리를 통해 프로그램의 일부분만 물리 메모리에 올릴 수 있게 되었고 이를 통해 물리 메모리 크기에 제약을 받지 않게 되었다. 결국 더 많은 프로그램을 동시에 실행할 수 있게 되었고, swap에 필요한 입출력이 줄었기 때문에 프로그램들이 빠르게 실행되어지는 효과를 얻을 수 있다.
가상주소공간(Virtual Adrress Space)이란?
가상주소공간이란 각 프로세스 당 주어지는 논리적 공간이다. 가상 주소 공간의 크기는 물리 메모리의 크기와는 독립적이며, 레지스터 크기에 종속적이다.
TLB(Translation Lookaside Buffer)란?
TLB는 가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시로, 최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장해 둔다.
CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때 우선 TLB에 접근하여 가상 주소에 해당하는 물리 주소를 찾고, 만약 TLB에 매핑이 존재하지 않는다면 MMU가 페이지 테이블에서 해당되는 물리 주소로 변환한 후 메모리에 접근하게 된다.
MMU(Memory Management Unit)란?
MMU는 가상 주소를 물리 주소로 변환하고, 메모리를 보호하는 기능을 수행한다.
요구 페이징(Demand Paging)이란?
요구 페이징은 CPU가 요청할 때 프로세스의 데이터를 메모리에 올리는 것을 의미한다.
페이지 폴트(Page Faults)란?
페이지 폴트란 어떤 페이지에 접근하려고 했을 때 해당 페이지가 실제 물리 메모리에 존재하지 않을 때 뜨는 인터럽트이며, 페이지 폴트가 발생하면 운영체제가 이를 해결한 뒤 다시 동일한 명령을 수행하는 식으로 동작한다.
페이지 교체 정책이란?
페이지 교체 정책은 물리 메모리가 가득 찼을 때, 새로운 페이지를 로드하기 위해 어떤 페이지를 내보낼지 결정하는 정책이다.
이 정책은 페이지 폴트를 최소화하여 시스템 성능을 최적화한다.
페이지 교체 알고리즘 종류
1. FIFO (First - In First - Out)
메모리에 들어온 순서대로 페이지를 교체한다.
* 벨라디의 모순 : 페이지 프레임 수를 늘리면 메모리에 적재할 수 있는 페이지 수가 늘어나 페이지 폴트 발생 확률이 감소해야 한다. 그러나 FIFO에서는 오래된 페이지를 교체하기 때문에, 프레임 수를 늘려도 오히려 페이지 폴트가 더 많이 발생하는 현상.
2. OPT (Optimal Replacement Policy, 최적 교체 정책)
메모리에서 가장 나중에 접근될 페이지를 교체한다.
3. LRU (Least Recently Used)
메모리에서 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다.
4. LFU (Least Frequently Used)
메모리에서 가장 참조되지 않은 페이지를 선택하여 교체한다.
5. MFU (Most Frequently Used)
메모리에서 가장 많이 참조되는 페이지를 선택하여 교체한다.
6.Clock Algorithm
모든 page가 순환 리스트를 이루고 특정 page를 시계바늘 돌듯이 가리킨다고 가정할 때, 현재 가리키고 있는 임의의 페이지를 가리키는 clock hand로 페이지를 교체할 시점에 어느 페이지를 선택할지 결정한다.
clock hand가 가리키는 page의 referned bit가 1인 경우, 0으로 바꾸고 clock hand가 다음 페이지를 가리키도록 한다.
이 과정을 반복하다가 reference bit가 0인 페이지를 만나면 최근에 사용되지 않은 페이지이므로 해당 페이지를 교체한다.
Memory Management (메모리 관리)
페이징(Paging)이란?
물리 메모리는 고정 크기의 프레임으로, 가상 메모리는 고정 크기의 페이지로 분리하는 기법이다. 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장된다. 즉, 모든 프로세스는 하나의 페이징 테이블을 가지고 있으며, 여기에는 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소가 있다.
페이징 기법에서 문제점이 있나요?
메모리 내부 단편화 문제가 발생한다. (프로세스를 페이지 단위로 쪼개다보면 페이지 안에 안 쓰는 공간이 남게 된다. )
하지만 외부 단편화 문제는 발생하지 않는다.(프로세스를 페이지 단위로 나누기 때문에 메모리를 할당하지 못해서 나오는 외부 단편화 문제는 발생 x)
세그멘테이션(Segmentation)이란?
가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것을 의미한다. 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식이다.
* 돼지를 도축할 때 페이징은 돼지를 같은 크기로 잘라서 보관하는 것이라면, 세그멘테이션은 부위별로 잘라서 보관한다고 이해하면 된다.
세그멘테이션 기법의 문제점이 있나요?
외부 단편화 문제가 발생한다. (세그먼트가 너무 커서 특정 공간에 할당 못할 수도 있다.)
하지만 내부 단편화 문제는 발생하지 않는다. (필요한 만큼만 메모리를 할당받기 때문이다.)
Swapping이란?
Swapping이란 CPU 할당 시간이 끝난 프로세스의 메모리를 디스크로 보내고 다른 프로세스를 메모리로 불러들이는 것을 의미한다. 프로세스를 디스크에서 메모리로 불러오는 과정을 Swap - in, 보조 기억장치로 내보내는 과정을 Swap - out이라고 한다.
Swapping을 하면서 발생할 수 있는 문제점?
Swapping을 하면서 발생할 수 있는 대표적인 문제는 단편화이다.
단편화란 프로세스들이 메모리에 적재되고 제거되는 일이 반복되면서 메모리 사이사이에 사용하지 못할 만큼의 작은 자유 공간들을 의미한다.
단편화는 어떻게 나눌 수 있을까?
단편화 종류는 크게 외부 단편화와 내부 단편화로 나눌 수 있다.
외부 단편화란 메모리에서 프로세스와 프로세스 사이에 남는 공간들을 의미하는 것이고,
내부 단편화란 프로세스가 사용하는 메모리 공간 내부에서 사용하지 않고 남는 공간들을 의미한다.
'TIL' 카테고리의 다른 글
24.08.19 Unity_C# - 생명주기(Awake vs Start, Update 등 ) (0) | 2024.08.19 |
---|---|
24.08.14 알고리즘 - 이진 탐색(Binary search) (0) | 2024.08.14 |
24.08.12 운영체제 - 프로세스 동기화(경쟁 상태, 임계구역, 뮤텍스, 세마포어, 데드락) (0) | 2024.08.12 |
24.08.06 운영체제 - CPU의 작업 처리방식, CPU 스케줄링 (1) | 2024.08.06 |
24.08.05 운영체제 - 프로세스와 스레드 , 리틀/빅 앤디언 (0) | 2024.08.05 |