일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- 백준 10000번
- 백준 9012번
- 백준 2812번
- 백준 21606번
- 위상 정렬(Topology Sort)
- BFS(Breadth First Search)
- 백준 2493번
- 동적 프로그래밍(Dynamic Programming)
- 분할 정복(Divide and Conquer)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 1948번
- 그리디 알고리즘(Greedy Algorithm)
- 그래프(Graph)
- 백준 17608번
- 큐(Queue)
- 백준 1707번
- 위상 정렬(Topological Sort)
- 스택(Stack)
- 백준 2261번
- 백준 2504번
- 트리(Tree)
- 알고리즘 개념
- 백준 18352번
- DFS & BFS
- 이분 그래프(Bipartite Graph)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- DFS
- DFS(Depth First Search)
- 이분 탐색(Binary Search)
- Today
- Total
Always Be Wise
Project_3 : Virtual Memory - Weekly I Learned 본문
이번 프로젝트를 통해 주요하게 학습한 내용은 메모리 가상화와 관련한 것이었다.
메모리 가상화란 프로그램이 자신의 전용 물리 메모리를 갖고 있다는 환상을 제공하는 것을 의미한다.
그런데 중요한 점은 이런 가상화가 시간과 공간 측면에서 효율적이어야 하며, 가상화를 통한 주소 공간이 서로 보호되어야 한다는 것이다.
다시 말해, 특정 프로세스가 다른 프로세스나 운영체제의 메모리 내용에 접근하거나 영향을 주어서는 안 되어야 한다.
메모리 가상화 시, 시간 측면에서의 효율을 위해 하드웨어로부터 도움을 받는다.
대표적으로 TLB(Translation Lookaside Buffer)를 학습하였다.
TLB는 MMU(Memory Management Unit)의 일부로, 자주 참조되는 가상 주소-실제 주소 변환 정보를 저장하는 하드웨어 캐시이다.
가상 주소를 실제 물리 메모리 주소로 변환 시, TLB에 원하는 변환 정보가 있는지 확인한다. 만약 있다면 변환을 빠르게 수행한다.
공간 측면에서의 효율을 위해 페이지 테이블이라는 자료 구조를 이용한다.
페이지 테이블은 페이징 기법에 기반하는 것으로, 페이징이란 가상 주소 공간을 동일한 크기의 조각으로 분할하는 것을 의미한다.
각각의 고정 크기 단위를 페이지라고 하며, 상응하여 물리 메모리도 페이지 프레임이라고 불리는 고정 크기 슬롯의 배열로 생각한다.
그런데 문제는 사용하지 않은 주소 공간까지 모두 고려하는 페이지 테이블의 경우 메모리 낭비가 심하다는 것이다.
이를 개선하기 위해 멀티 레벨 페이지 테이블의 개념을 고안하여 보다 작은 크기의 페이지 테이블로 주소 공간을 표현하였다.
또한, 공간 측면에서 실제 존재하는 물리 메모리의 크기보다 더 많은 메모리를 사용하기 위해 스왑 공간이라는 개념을 사용한다.
이를 위해서 메모리에 특정 페이지가 존재하는지 알기 위해 좀 더 복잡한 페이지 테이블 구조와 페이지 폴트의 개념을 학습하였다.
그리고 페이지를 교체하기 위한 여러 가지 정책들도 고민해볼 수 있었다.
이번 프로젝트를 진행하면서 정리한 내용들은 아래 링크에 담아두었다.
2022.01.11 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Introduction
2022.01.14 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Memory Management(1)
2022.01.19 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Memory Management(2)
2022.01.21 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Anonymous Page(1)
2022.01.22 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Anonymous Page(2)
2022.01.23 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Stack Growth(1)
2022.01.24 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Stack Growth(2)
2022.01.24 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Memory Mapped Files(1)
2022.01.24 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Memory Mapped Files(2)
2022.01.24 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Swap In/Out(1)
2022.01.24 - [프로젝트/Pintos] - Project_3 : Virtual Memory - Swap In/Out(2)
'카이스트 정글 - 프로젝트 > Pintos' 카테고리의 다른 글
Project_4 : File System - Indexed and Extensible Files (0) | 2022.01.29 |
---|---|
Project_4 : File System - Introduction (0) | 2022.01.29 |
Project_3 : Virtual Memory - Swap In/Out(2) (0) | 2022.01.24 |
Project_3 : Virtual Memory - Swap In/Out(1) (0) | 2022.01.24 |
Project_3 : Virtual Memory - Memory Mapped Files(2) (0) | 2022.01.24 |