1일 1개념정리 24.08.09.금 ~
큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.
무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#60. Virtual Memory
버츄얼 메모리.... 라는 가상 기억 장치를 자주 들었을 것이다. 뭔지 몰라도 학부 때 한번쯤 접하는 이 용어에 대해서 알아보자.
Virtual Memory
보통 한글보단 Virtual Memory라는 이름으로 자주 접하는 이것은 실제 물리메모리보다 더 많은 메모리를 사용할 수 있도록 해주는 OS의 기술이다. 프로그램이 실행될 때 모든 데이터를 한번에 메모리에 로드하지 않고 필요한 부분을 일부씩 메모리에 로드하고, 나머지는 보조기억장치(HDD)에 저장하는 방식이다. 보통 다음과 같을 때 유용하다.
- 메모리가 부족할 때 : 컴퓨터의 실제 물리적 메모리가 부족할 때 가상 기억 장치를 사용하면 하드 디스크의 일부 공간을 메모리처럼 사용할 수 있다.
- 다중 작업 처리 : 여러 프로그램을 동시에 실행할 때 각 프로그램이 자신만의 메모리 공간을 가지고 있는 것처럼 보이게 하여 프로그램 간의 충돌을 방지할 수 있다.
Ex) 프로그램이 1GB의 메모리가 필요한데, 컴퓨터에는 512MB만 있다면 가상 기억 장치를 사용해 더 많은 데이터를 처리할 수 있습니다.
Virtual Memory 동작 방식
한마디로, 프로그램 실행할 때 일부는 RAM에, 일부는 HDD에 둔다는 것이다. 실제로 접근하는 데이터만 RAM에 올리고 아직 필요없는 부분이나 잘 안쓰는 데이터는 HDD에 저장한다. 근데 만약에 갑자기 HDD에 있는 부분이 필요하다면 ??? RAM에는 현재 안올라가있으니깐 오류가 발생하고, 이를 "페이지 폴트(Page Fault)"라고 한다. 그럼 이를 HDD에서 RAM으로 가져온다. 흐름은 다음과 같다.
- 가상 주소 공간 : 각 프로그램은 OS로부터 자신만의 가상 주소 공간을 할당받는다. 이 공간은 프로그램이 사용하는 RAM과는 상관없이 매우 크다. 예를 들어, 프로그램이 4GB의 메모리가 필요하고 내 RAM이 3GB라 해도 프로그램이 마치 4GB의 메모리를 사용할 수 있는 것처럼 보인다.
- 페이지 단위 관리 : 가상 기억 장치는 데이터를 Page 단위로 관리한다. 이는 보통 4kb정도이다.
- Page Fault : 프로그램이 RAM에 없는 데이터를 접근하려고 할 때 페이지 폴트가 발생함. 그럼 OS는 이때 요청한 데이터를 HDD에서 가져와 RAM에 로드한다.
- 페이지 교체(Page Replacement) : RAM의 크기가 제한되어 있기 때문에 더 이상 새로운 페이지를 로드할 수 없을 때, OS는 특정 알고리즘에(제일 적게 쓰인, 제일 시간이 짧은 등) 따라 Page를 HDD로 내리고, 새로운 페이지를 RAM에 로드하는 "페이지 교체"를 실행한다.
용어 설명
- Page : 물리적 메모리와 가상 메모리를 고정된 크기의 블록으로 나누는 단위이다. (보통 4kb 정도) 실제 메모리, 가상 메모리를 서로 매핑해야하므로 서로 같은 크기로 블록을 나눠야한다.
- Segment : 메모리를 논리적으로 나누는 단위이다. 세그먼트는 프로그램 필요에 따라 크기가 달라질 수 있다.
- Page Table : 가상 메모리 주소와 실제 물리적 메모리 주소를 매핑하는 테이블이다.
- Segment Table : 각 세그먼트의 시작 주소와 크기를 저장하는 테이블이다.
- Page Fault(중요★) : 프로그램이 요청한 페이지가 물리메모리에 없을 때 발생하는 오류이다. 이럴 땐 OS가 요청한 페이지를 HDD에서 RAM으로 가져온다.
Page와 Segment 비교하기
Page | Segment | |
기능 | 물리적 메모리를 고정 크기로 나누는 단위 | 논리적 메모리를 가변 크기로 나누는 단위 |
크기 | 고정된 크기 (예: 4KB, 8KB 등) | 가변적인 크기 |
단위 | 물리적 메모리와 가상 메모리 관리에 사용 | 프로그램의 논리적 구분에 따라 나뉘어짐 |
테이블 | 페이지 테이블로 관리 | 세그먼트 테이블로 관리 |
사용 목적 | 메모리 관리의 효율성 및 메모리 파편화 해결 | 프로그램의 논리적 단위로 메모리를 구분 |
질문. HDD랑 RAM의 속도차이는 클텐데, 어떻게 Virtual Memory 역할을 HDD가 해준다는 거지 ???
A. 내 쓰다보니 문득 이런 질문이 생각나더라 ..... 대체 어떻게 이게 가능한거지 ?? 알아보니 약간의 우회(?)전략이 있더라니.... 한마디로.... Page Fault 최소화 !! 였다. 즉, 속도 차이를 진짜 극복할 순 없으니 Page Fault가 나서 HDD에 접근할 일 자체를 적게 만들라는 것이다 ..... 어이가없네
- 캐싱 : 자주 사용하는 데이터를 우선 RAM에 배치하고 유지한다. 이를 메모리 캐싱이라고 하는데, 만약 프로그램이 자주 사용하는 데이터가 RAM에 있다면, 속도 문제는 거의 발생하지 않는다. 따라서 OS는 최근에 사용된 페이지나 자주 참조되는 페이지를 RAM에 유지하고, 잘 안쓰는 페이지를 HDD로 내리는 방식으로 성능을 최적화한다.
- Page Fault 최소화 : 페이지 폴트 최소화도 캐싱과 같은 맥락인데, 한가지 추가된 게 있다면 "Pre-fetching"이라는 기법이다. 이는 OS가 앞으로 필요할 데이터를 미리 예측해서 RAM으로 미리 올려주는 방식이다.
- SSD 사용 : HDD보다 빠른 SSD를 쓰면 보조기억장치에서 데이터를 가져올 때도 전보다 빠르게 가져올 수 있다. 둘간의 속도 차이가 꽤 크다고 한다. 최소 2배고 기준에 따라 30배 빠르다고 하기도 하고 ........ 기준에 따라 빠르다고 하는 정도가 다 달라서 이건 직접 보는 게 좋을듯 하다. 기준이 random이냐 continuous냐에 따라서도 다르고 .... 그렇다 !
→ 속도 차이로 인해 발생하는 실제 문제를 "쓰레싱" 이라고 한다.
프로그램 일부를 HDD로 내리고, 또 일부를 RAM으로 로드하는 과정을 "스와핑"이라고 한다. 스와핑이 너무 자주 발생하면 디스크의 I/O가 과도하게 발생하여 프로그램 성능이 급격하게 저하된다. 이렇게 급격한 성능 저하 문제를 "쓰래싱(Thrashing)" 이라고 한다. 이것이 발생하면 CPU는 대부분의 시간을 겨우 데이터를 디스크에서 RAM으로 불러오는 데 쓰게 돼서 다른 일을 처리하지 못하게 되고, 결과적으로 프로그램 실행 속도가 매우 느려진다.
'1일 1개념정리 (24년 8월~) > 운영체제' 카테고리의 다른 글
1일1개 (62) - 싸울때) 너가먼저 놔라 vs 너 놓을 때 까지 나도 안놓는다 (0) | 2024.10.16 |
---|---|
1일1개 (27) - 동시성 문제 (2) | 2024.09.06 |
1일1개 (22) - 동기 vs 비동기 (0) | 2024.08.31 |
1일1개 (3) - 멀티 프로세스 (0) | 2024.08.11 |
1일1개 (2) - 멀티 쓰레드 & spring 동시 요청 처리 (1) | 2024.08.10 |