프로세스 매니지먼트에서는 CPU 스케줄링, 프로세스 동기화가 중요하다,
메인메모리 매니지먼트에서는 페이징, 가상주소(요구페이징, 요구 세그먼트 페이징이 있다)가 중요하다.
요구페이징을 하다보면 언젠가는 페이지가 가득차는데 어떤 페이지를 희생자로 택할것인가를 페이지 리플레이스먼트 알고리즘이다. 여기서 FIFO, Optimal 알고리즘이 있다. Optimal은 비현실적이여서 LRU가 많이 사용된다.
지금은 Allocation of Frames를 배운다. 어느프로세스에게 얼마만큼의 프레임을 줄것인가에 대한것.
페이징은 프로세스를 페이징 단위로 잘라서 메모리에 올린다. 이를 디맨딩 페이지라 한다.
다시말해 Allocation of Frames는 3개의 프로세스가 있고 페이지가 100개가 있을 때 각각 얼마씩 나눠줄까에 대한것.
정적할당 동적할당이 있는데 동적할당은 프로그램이 더 크면 크게줄 경우 이를 비례할당이라 하고 그냥 33개씩 동등하게 나눠주는것을 균등할당이라 한다.
하지만 균등할당은 말이 안되고 비례할당 또한 말이 안된다. 프로그램이 크다고 해서 우리가 해당프로그램의 모든 기능을 다 쓰는것은 아니기 때문에… 즉 실행해봐야 얼마나 필요한지 알수있는데 이를 동적할당이라 한다.
동적프레임 할당
동적프레임 할당 1.Working set model
시간대별로 이용하는 페이지들을 나열해 봤을 때 특정 시간에 이용하는 프레임들을 봤을 때 이용되는 프레임들의 셋을 Locality라고 한다. locality들을 기반으로 어떤 페이지들이 사용되었는지 예측하는것이 좋은데 과거의 것들을 working set이라고 한다. 또한 과거의 어느정도까지 볼것인가에 대한 것을 Working set window이라 하는데 이는 OS만드는 사람이 결정한다. 결국 Working set window가 3ms 라 했을때 현재시점부터 과거 3ms까지의 locality들의 집합이 working set이며 이를 기반으로 프레임을 할당한다.
동적프레임 할당 2.Page-Fault Frequency (PFF)
Working set model보다 간단한 방법으로 가로축이 할당된 프로세스의 갯수 세로축이 page fault rate라 했을 때 반비례 그래프가 나온다. OS는 Page fault 발생 비율의 상한/하한선을 기억해두고 페이지 폴트가 상한선 초과 프로세스인 경우에 더 많은 프레임 할당하고 하한선 이하인경우 프로세스의 프레임은 회수한다.
페이지 크기
디멘드 페이징이나 페이징할때 페이지는 어떤 크기로 자를까???
일반적 크기: 4KB ~ 4MB
페이지의 크기는 커지는중.. 프로세스의 크기도 커지고있으므로
페이지 사이즈는 큰게 좋을까 작은게 좋을까????
-내부단편화 측면에서는 페이지 사이즈는 작은게 좋다.
-페이지 폴트가 발생했을 때 페이지 인 아웃의 시간이 오래걸리는데 이때 페이지 크기는 큰것이 유리하다. 백킹스토어에서 헤더가 움직이고 데이터를 읽어오는것은 꽤 많은 시간이 들기 때문에…
-CPU가 내는 주소를 변환하기 위해 존재하는 페이지 테이블의 크기가 작으면 SRAM의 비용이 덜 들어가고 이를 위해서는페이지의 크기가 커야한다.
-Memory resolution입장에서는 우리가 필요한것만 위치하게 되는데 이를 위해 페이지 크기가 작은게 좋다. 페이지 크기가 필요없는것도 왕창 들어있을테니까.
-페이지 폴트가 적게 일어나기 위해서는 페이지의 크기가 클 수 록 좋다. CPU가 100번지를 읽으면 그다음에는 104번지,108번지 읽는데 넓게 갖고오면 당분간은 페이지 폴트가 발생하지 않는데 이를 위해 처음부터 크게 갖고오는것이 좋다.
즉 관점에 따라 메모리 크기는 큰게 좋을 수도 작은게 좋을 수도 있다.
일반적으로는 메모리, 프로그램의 크기는 점차 크지므로 점점 커지고 있다.
페이지 테이블의 위치
페이지 테이블은 CPU도 아니고 메모리에도 넣지 않고 TLB캐시라는곳에 넣고 있다.
하지만 최근은 반도체가 좋아지다 보니까 별도의 칩으로 하지않고 TLB 그리고 여러 캐시 메모리가 CPU안에 들어가게 되었다.