각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근 할 수 없다.
Swapping : 메모리의 관리를 위해서 사용되는 기법이다.
표준 swapping 방식으로는 rr 스케쥴링이 있으며, CPU할당시간이 끝난 프로세스를 보조기억장치(ex. 하드디스크)로 보내고 다른 프로세스의 메모리를 불러올 수 있다.
위와 같이 프로세스들이 메모리에 적재되고 제거되는 일이 반복되면, 프로세스들 이 차지하는 메모리 틈 사이에 사용하지 못한 자유공간이 생기는데 이것을 단편화라고 한다. 단편화의 종류에는 두 가지가 있다.
외부 단편화 : 메모리 공간 중 사용되지 못한 부분. 즉 각각의 프로세스가 적재된 메모리 공간 사이의 자유 공간을 의미한다.
내부 단편화 : 프로세스가 적재된 메모리 공간 안에서 사용되지 못한 부분이다.
외부 단편화를 해소하기 위해 프로세스가 사용하는 공간을 한쪽으로 몰아 압축하는 방식이지만 작업 효율이 좋지 않다.
프로그램이 실행되면 보조기억장치(hhd 등)에서 주기억장치(RAM)에 올라가서 실행된다. 하지만 여기서 당장 필요한 부분만 주기억장치에 넣어 실행시키고 나머지 부분은 보조기억장치에 두어 필요할때마다 갈아끼우는 형식으로 사용하는 것이 가상메모리이다. 가상적으로 주어진 주소를 가상 주소 또는 논리 주소라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소 또는 실주소라고 한다.
논리적 메모리공간은 Page라는 단위로, 물리적 메모리공간은 Frame 단위로 나누어 적재하는 방식이다. 아래 그림과 같이 물리적 공간에 적재가 연속적일 필요없다. 이때 위에서 말한 외부 단편화 문제가 해결된다. 하지만 내부 단편화는 아직 존재한다!
세그멘테이션 기법은 논리적 주소를 서로다른 크기의 논리적 단위로 분할 한 것을 의미한다. 세그멘테이션은 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식이다. 이 기법에서 외부단편화는 아직 존재한다!
Paging은 고정 크기를 가진다.
Segmentation은 가변 크기를 가진다.
Paging은 내부 단편화 발생 가능하고, Segmentation은 외부 단편화 발생 가능하다.
요구 페이징은 프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만을 올리는 방식이다.
페이지 부재(Page Fault)는 가상메모리 시스템에서 페이지를 참조할 때 해당 페이지가 주기억장치에 없는 상태를 말한다. 즉, 프로세스가 메모리에 접근할 때 요청한 페이지가 주기억장치에 존재하지 않는 경우에 발생한다.
가장 간단한 페이지 교체 알고리즘으로 FIFO(first-in first-out)의 흐름을 가진다. 즉, 먼저 물리 메모리에 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 된다는 것이다.
• 장점
이해하기도 쉽고, 프로그램하기도 쉽다.
• 단점
오래된 페이지가 항상 불필요하지 않은 정보를 포함하지 않을 수 있다(초기 변수 등)
처음부터 활발하게 사용되는 페이지를 교체해서 페이지 부재율을 높이는 부작용을 초래할 수 있다.
Belady의 모순: 페이지를 저장할 수 있는 페이지 프레임의 갯수를 늘려도 되려 페이지 부재가 더 많이 발생하는 모순이 존재한다.
이 알고리즘의 핵심은 앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체하는 것이다. 주로 비교 연구 목적을 위해 사용한다.
최적 알고리즘의 근사 알고리즘으로, 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다. 대체적으로 FIFO 알고리즘보다 우수하고, OPT알고리즘보다는 그렇지 못한 모습을 보인다.
참조 횟수가 가장 적은 페이지를 교체하는 방법이다. 활발하게 사용되는 페이지는 참조 횟수가 많아질 거라는 가정에서 만들어진 알고리즘이다.
어떤 프로세스가 특정 페이지를 집중적으로 사용하다, 다른 기능을 사용하게되면 더 이상 사용하지 않아도 계속 메모리에 머물게 되어 초기 가정에 어긋나는 시점이 발생할 수 있다
최적(OPT) 페이지 교체를 제대로 근사하지 못하기 때문에, 잘 쓰이지 않는다.
참조 회수가 가장 작은 페이지가 최근에 메모리에 올라왔고, 앞으로 계속 사용될 것이라는 가정에 기반한다.