연속 메모리 할당 - 프로세스에 연속적으로 메모리 공간을 할당하는 것
스왑핑 - 현재 사용되지 않는 프로세스들을 보조 기억장치의 영역인 스왑영역으로 쫓아내고(swap out), 이 과정에서 생긴 빈 자리에 새로운 프로세스를 적재하는 것(swap in)
프로세스가 실행되기 위해서는 메모리의 빈 공간에 적재되어야 한다. 연속 메모리 할당에서는 어떠한 방식을 따르냐에 따라서 3가지 방식으로 나뉜다.
하지만, 이렇게 메모리에 프로세스를 ‘연속적으로’ 할당하는 방식은 메모리를 효율적으로 사용하는 방법이 아니다. 외부 단편화(external fragmentation)을 유발할 수 있기 때문이다.
해결방안
외부 단편화의 근본적인 문제 → ‘각기 다른 크기’의 프로세스들이 메모리에 연속적으로 할당되었기 때문. 만약 모든 프로세스들의 크기가 동일했다면, 외부 단편화는 일어나지 않았을 것이다.
페이징이란?
페이지 테이블
PTBR
TLB
Paging에서의 주소변환
PTE
페이지 번호
프레임 번호
유효비트(Valid Bit) - 현재 페이지에 접근 가능한지. 만약 유효비트가 0이라면, page fault발생. 원하는 페이지를 메모리로 가져온 뒤, 유효비트를 1로 변경해준다.
보호비트 - 읽기, 쓰기, 실행가능 여부
참조비트 - CPU가 페이지에 접근한 적이 있는지
수정비트 - CPU가 이 페이지에 데이터를 쓴 적이 있는지
디맨드 페이징
페이지 교체 알고리즘
디맨드 페이징 기법으로 페이지를 적재하다보면, 언젠가는 메모리의 용량이 가득 차게 될 것이다. 당장 필요한 페이지를 적재하기 위해서는 사용하지 않는 페이지를 보조 기억장치로 내보내야한다.
좋은 페이지 교체 알고리즘이란? → page fault가 적게 발생하는 것. page fault가 많이 발생한다면 보조기억장치에 접근을 자주해야하기 때문에, 성능이 저하된다.
가장 단순한 방식
메모리에 가장 먼저 올라온 페이지부터 방출하는 것
자주 사용되는 페이지도 방출될 우려가 있다.
FIFO 페이지 교체 알고리즘의 보완책
참조비트를 참고하여, CPU가 현재 방출하려는 페이지를 참조한 적이 있으면, 이를 0으로 설정.
말 그대로 기회를 한번 더 주는 것
CPU에 의해서 참조되는 횟수를 고려한 것
메모리에 오래 남아있어야 할 페이지는 자주 사용될 페이지이다
앞으로의 사용빈도가 가장 낮은 페이지를 고체하는 알고리즘
page fault가 가장 적게 일어나지만, 앞으로의 행동을 예측하는것이 불가능하기 때문에 구현이 어렵다.
가장 오랫동안 사용되지 않은 페이지를 교체하는 것
가장 단순한 방식
모든 프로세스들에게 균등하게 프레임을 할당하는 방식
프로세스의 크기에 비례하여 프레임 할당
CPU가 특정 시간동안 주로 참조한 페이지 갯수만큼만 프레임을 할당
프로세스가 일정기간 동안 참조한 페이지 집합을 기억하여, 빈번한 페이지 교체를 방지하는 것
프로세스가 실행하는 과정에서 페이지 할당을 결정
page fault율에 상한선과 하한선을 정하고, 그 내부 범위 안에서만 프레임을 할당하는 방식