오늘은 Demand Paging의 부작용으로 발생하는 Trashing에 대해서 알아보겠습니다.
Trashing
Demand Paging을 사용하면 메모리에 많은 프로세스를 올릴 수 있다는 장점이 있습니다. 하지만 메모리에 공간이 없으면 페이지를 swap하는 과정이 필요하였고, 이 과정에서 불필요하다고 판단되는 페이지는 swap out되는 것을 알고 있습니다.
만약, 이러한 page replacement 과정으로 인해서 다음 단계에 필요한 페이지가 page fault를 일으켰다면 다시 page를 load해야할 것이고, 이 과정에서 CPU는 I/O device에게 load 명령을 내린 뒤 다른 작업을 처리할 것입니다. 하지만 너무도 많은 프로세스들이 I/O에 의해서 load되는 과정에 있다면 결국 CPU는 맡겨진 일이 없어 아무것도 하지 않게 될 것입니다.
즉, CPU의 utilization이 떨어지게 됩니다.
여기서 degree of multiprogramming은 메인 메모리에 load된 프로세스의 수를 의미합니다. 그래프에서 보면 알 수 있듯이 메모리에 로드된 프로세스의 수가 많아질 수록 어느정도는 CPU의 성능이 올라갑니다. 하ㅣ만 너무 과도한 프로세스 적재는 page fault의 횟수 증가로 야기되고, 이는 CPU의 성능을 저하하는 요소로 작용합니다.
이러한 이슈가 바로 Thrashing입니다.
이 그림에서 타원은 각 프로세스의 locality에 해당하는 부분입니다. 반복적인 실행이 진행되는 부분이죠. 좌측에서는 Locality에 해당하는 부분이 겹치지 않아서 page fault가 발생하지 않을 것입니다. 하지만 우측에서와 같이 Locality가 겹치게 된다면 page fault의 횟수는 계속해서 증가할 것입니다.
그래서 OS는 메모리에 로드된 프로세스 중에서 몇몇 프로세스를 suspened 상태로 전환합니다. 즉, 메모리에 로드할 수 있는 프로세스의 수를 적당히 제한해주는 것이죠. 어떠한 프로세스를 suspension할 지는 각 OS의 정책마다 다르며, 각기 장단점이 존재하므로 다루지 않습니다.
지금까지 Trashing에 대해서 다뤄봤습니다. 감사합니다.
'CS > OS' 카테고리의 다른 글
[운영체제] 스케줄링 알고리즘 : Priority, FCFS, RR (1) | 2023.12.10 |
---|---|
[운영체제] 프로세스 스케줄링 (0) | 2023.12.10 |
[운영체제] 페이지 교체 (0) | 2023.12.09 |
[운영체제] TLB(Translation Lookaside Buffer) (1) | 2023.12.09 |
[운영체제] 다계층 페이지 테이블 (0) | 2023.12.09 |