[OS] Frame allocation

프레임 할당

Thrashing

너무 많은 프로세스로 인해(CPU 이용률 증가) disk I/O가 많이 일어나서(page fault로 인한 메모리와 하드디스크 사이의 I/O) CPU 활용도가 급격하게 떨어지는 것을 쓰레싱이라고 한다.

thrashing으로 인한 문제 극복은 Global replacement보다는 Local replacement를 쓰는 것이다.(프로세스당 충분한 수의 메모리 할당을 해주는 것)

동적 프레임 할당

working set

locality를 포함할 수 있는 만큼의 프레임을 할당하도록 한다.

working set 이란, 과거에 어떤 시간대에 어떤 페이지를 사용했었는지를 기억해서 미래의 어느 시간대에 어떤 페이지가 사용될 것인지를 예측하도록 하는 것이다. 이것을 통해 working set 크기로 프레임 할당을 한다.

window set window 란, 시간대가 지남으로써 과거부터 새로 예측해야할 데이터들의 범위를 말한다.

page fault frequency

page fault frequency 란, page fault가 일어나는 비율과 CPU 프레임 할당해주는 횟수의 관련성을 말한다. 이 page fault frequency를 통해서 최대 상한선과 최소 하한선을 OS에서 정해놓고, 최대상한선과 최소하한선으로 page fault를 판단하여 적당히 조절하도록 한다.

페이지 크기

페이지를 어떤 기준으로 자르는 것이 좋을까?

페이지 크기는 일반적으로 4kb ~ 4mb 범위 내이다. 그리고 세월이 지나면서 점차 커지고 있는 경향을 나타낸다. 그 이유는 하나의 프로세스 크기가 매우 커지고 있기 때문이다.

  • 페이지 크기는 큰 것이 좋을까? 작은 것이 좋을까?

내부단편화를 고려하였을 때, 페이지 크기는 작은 것이 더 좋다! 반대로 page fault I/O 시간을 고려하였을 때엔, 페이지 크기는 큰 것이 더 좋다. 페이지 크기가 작을 수록, page fault 하는 시간이 점점 많이 걸리기 때문에 시간이 오래 걸릴 수 있다.

페이지 테이블의 크기는 SRAM entry 개수로 정해지는데, entry 개수가 많을 수록 비용은 커지고, 작을 수록 작아진다. 그렇게 따지면, 페이지 크기는 클 수록 entry 개수가 작아질 수 있으므로 페이지 사이즈는 작은 것이 더 좋다.

Memory resolution(필요없는 page가 메모리에 없을 수록 좋은 것을 의미한다. -> 정밀도) page fault가 일어났을 때, locality를 따지면 주변의 페이지까지 다 끌고 오게 되므로 Memory resolution이 안좋은 것이다. 그래서 Memory resolution이 좋을려면, 페이지 크기가 작을 수록 더 좋다. page size가 크면, 메모리상에서 지금 당장 필요없는 부분도 같이 올라가기 때문이다.

page fault 발생 확률은 적을 수록 더 좋은데, page fault 발생 확률이 적으려면 페이지의 크기는 클수록 더 좋다. 페이지 크기가 커야 그만큼 메모리에 오래 머무르게 되므로 page fault가 적게 일어난다.

  • 페이지 테이블

페이지 테이블은 CPU에 넣는 것과, 메모리에 넣는 것은 모두 극단적으로 장단점을 가지고 있어, 그 중간 방법인 별도의 chip으로 만들어서 작동이 되도록 한다.

CPU와 메모리 사이에는 캐시 메모리도 존재하는데, 이는 과거엔 별도의 chip으로 존재하였지만, 현재는 반도체 기술 발달로 인해 CPU 안에 심어넣어 캐시 메모리를 CPU 안에서 돌아가도록 한다.(TLB chip)