가상메모리
연속 메모리 할당
프로세스에 연속적인 메모리 공간을 할당하는 방식 → 외부 단편화
스와핑
입출력 작업으로 대기 상태인 프로세스나, 장시간 사용되지 않은 프로세스들은 일부 영역으로 쫓아내고, 쫓아내고 생긴 빈 공간에 새 프로세스를 적재하여 실행하는 걸 스와핑이라 한다.
쫓겨나는 보조영역의 일부영역을 스왑영역, 스왑 영역으로 올겨지는걸 스왑 아웃, 새로 적재되는 걸 스왑 인이라 한다.
메모리 할당
최초 적합, 최적적합, 최악적합 최초 적합은 맨 처음 발견하는 빈공간, 최적 적합은 프로세스가 적재될 수 있는 가장 작은 공간, 최악 적합은 가장 큰 공간에 할당되는 할당 방식
외부 단편화
이렇게 연속적으로 메모리 할당을 하다보면, 중간에 실행을 마치고 종료되는 프로세스들이 생김 → 구멍이 생김, 이걸 외부 단편화라 한다. → 메모리 상으로는 50MB가 남아도 외부단편화로 인해 50MB 인 프로세스를 적재하지 못함, 메모리 낭비
압축 을 사용하면 외부 단편화를 해결할 수 있는데, 압축 시 생기는 오버헤드가 너무 크고, 근본적인 해결책이 되지 못함
따라서 연속 할당 기법의 대표적인 두가지 문제점은 외부단편화, 그리고 물리메모리보다 큰 프로세스를 실행시킬수 없음
페이징 기법
프로세스의 논리주소 공간을 페이지 라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤, 페이지를 프레임에 할당하는 방식 → 페이지 단위로도 스와핑이 가능한데 이 경우 페이지 인, 페이지 아웃이라함
연속할당 기법의 두가지 문제점을 모두 극복한 가상메모리 관리 방식인 페이징 → 내부 단편화, 페이지, 프레임을 일정 크기로 자르다 보니, 프로세스 규격과 정확히 맞지 않아 생기는 남는 공간 발생
세그멘테이션도 있지만, 외부단편화가 발생하고, 현대 OS는 페이징만 사용한다고 함
페이지 들 또한 물리 주소에서 불연속 적으로 배치 될 수 있는데, 이를 논리 주소에서 연속적으로 배치되도록 페이지 테이블 을 사용

프로세스 마다 페이지 테이블을 가지고 있고, CPU 내의 페이지 테이블 베이스 레지스터(Page Table Base Register, PTBR) 에는 각 프로세스의 페이지 테이블이 적재된 주소를 가르키고 있다. → 이 때 주소가 메모리에 적재되어 있으면, 메모리를 두번 씩 확인해야한다는 문제점이 발생한다. → TLB(Translation Lookaside Buffer)라는 페이지 테이블의 캐시 메모리를 둔다. 페이지 테이블의 일부 내용을 저장 CPU가 발생한 논리주소에 대한 페이지 번호가 TLB에 있을 시 TLB 히트, 없을 시 TLB 미스
페이징에서의 주소 변환
모든 논리 주소가 기본적으로 페이지 번호, 변위 로 이루어져 있다.
페이지 번호로 프레임에 접근해서, 시작 번지로 부터 변위만큼 떨어진 주소를 찾는다.

페이지 테이블 엔트리
유효 비트: 메모리에 적재되어 있는지 보호비트: 읽기, 쓰기, 실행 권한의 조합을 나타낸다 (rwx) 참조비트: CPU가 이 페이지에 접근한적 있는지 수정비트: 해당 페이지가 데이터를 쓴적이 있는지 없는지 → 수정되었으면 페이지 아웃 같은 경우 보조기억장치에 반영을 시키고 페이지 아웃이 되어야함.
쓰기시 복사 (페이징의 이점)
부모가 자식프로세스를 생성 시 보통 두 프로세스는 고유의 메모리 공간을 갖게 되는데, 페이징을 사용할 경우 초기에 동일한 프레임을 가르킨다. (페이지 테이블은 서로 고유하게 가짐), 그리고 둘 주 어느 누구라도 쓰기 작업을 하면 쓰기 작업을 한 페이지 공간만 복사하여 가르키가 된다. → 프로세스 생성시간 절약 및 메모리 공간 절약
계층적 페이지 테이블
가상 주소공간이 커지면 페이지 테이블 공간도 매우 커질 수 있다. 이를 해결하기 위해 페이지 테이블을 여러 단계로 나누는 계층적 페이지 테이블 사용 전체 페이지 테이블을 한 번에 만들지 않고, 실제로 사용되는 주소 영역에 대해서만 하위 페이지 테이블을 생성할 수 있다. → 무슨 말이냐면, 가장 바깥 페이지 테이블은 대략적인 정보를 포함하고, 해당 페이지 테이블을 사용하는 경우에 대해서만 하위 테이블을 생성해 저장한다는 뜻 → 메모리 공간 절약

