메인 메모리는 CPU가 직접 접근할 수 있는 기억장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리에 적재해두어야 함
→ 만약 프로그램 용량이 메인 메모리보다 크다면, 초창기 컴퓨터에서는 "메모리 부족" 오류에 의해 해당 애플리케이션을 실행할 수 없었음
이 문제를 해결하기 위해, 가상 메모리가 등장함
애플리케이션이 실행될 때, 실행에 필요한 일부분만 메인 메모리에 올라가며, 애플리케이션의 나머지는 보조 기억장치에 남게 됨
결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것 → 각 프로그램에는 실제 메모리 주소가 아닌 가상 메모리 주소를 제공함
메모리를 일정한 크기의 공간으로 나누어 관리하는 단위
프레임은 메인 메모리를 일정한 크기로 나눈 블록이고, 페이지/세그먼트는 가상 메모리를 일정한 크기로 나눈 블록임
❓ MMU란?
메모리 관리 장치(Memory Menagement Unit)CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품으로
가상 메모리 주소를 실제 메모리 주소로 변환함즉, 가상주소가 물리주소로 변환되어야 할 때, TLB라는 캐시에서 우선 검색되고, TLB에 없을 경우 페이지 테이블에서 매핑이 존재하는지 찾음
페이지 테이블에도 없으면 디스크에서 찾음
CPU에서 시행되지 않는 프로세스, 즉 ready 상태이거나 waiting 상태에 있는 프로세스들 중 일부를 메모리 안에 보관하지 않고 하드디스크 같은 저장장치에 보관하는 것
CPU가 해당 페이지를 요구할 때까지 그 페이지를 메모리에 올리지 않는 방식
즉, 한번도 접근되지 않는 페이지는 메인 메모리에 전혀 적재되지 않음
페이지 폴트는 인터럽트의 한 종류이며, 어떤 페이지가 메인 메모리에 없을 때 발생하는 인터럽트로 페이지 폴트가 발생하면 운영체제에서 해당 페이지를 메인 메모리에 올림
❓ 트랩이란
어떤 프로세스가 특정 시스템 기능을 사용하려고 할 때, 그 기능을 운영체제에게 요청하는 방법
트랩과 인터럽트의 개념은 유사하지만, 인터럽트는 하드웨어적인 용어이고 트랩은 소프트웨어적인 용어임
페이지 폴트가 많이 발생하여, CPU 이용률이 급격히 떨어지는 현상
-> CPU 이용률이 낮다는 것은, 메모리에 올라와 있는 프로세스의 수가 너무 적어 프로세스가 모두 I/O 작업을 함으로써 준비 큐가 비는 현상
-> CPU 이용률이 낮으면 운영체제는 메모리에 올라가는 프로세스의 수(MPD, 다중 프로그래밍의 정도)를 늘리게 됨
MPD를 적절히 조절하여 CPU 이용률을 높여 스레싱이 발생하는 것을 방지해야 함
1. 워킹셋 알고리즘
프로세스는 일정 시간 동안 집중적으로 특정 주소 영역을 참조하는 경향이 있는데, 이를 지역성 집합이라고 함
워킹셋 알고리즘은 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 알고리즘
-> 프로세스의 워킹셋(한꺼번에 메모리에 올라가야 하는 페이지들의 집합)을 구성하는 페이지들이 한꺼번에 올라갈 수 있을 메모리 공간이 있을 때만 동작함
공간이 없으면 기존 메모리에 존재하는 안쓰는 페이지를 디스크로 스왑 아웃 시켜 공간을 확보함)
2. 페이지 부재 빈도 알고리즘
각 프로세스의 페이지 폴트율을 주기적으로 조사하고 이 값에 근거해서 각 프로세스에 할당할 메모리 양을 동적으로 조절하는 알고리즘
시스템이 미리 정해 놓은 상한값을 넘어가거나 하한값 이하로 페이지 폴트율이 떨어지게 되면, 운영체제가 메모리에 올라가 있는 프로세스의 수를 조절하게 됨
https://velog.io/@kyungwoon/TIL-항해99-가상메모리가-뭐죠
https://ko.wikipedia.org/wiki/가상_메모리
https://marmelo12.tistory.com/371
https://luv-n-interest.tistory.com/478
https://about-myeong.tistory.com/35
https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%A9_(%EC%BB%B4%ED%93%A8%ED%8C%85)
https://zangzangs.tistory.com/144