디스크에서 데이터를 가져올 때에는 1byte만 필요하더라도 무조건 4kb 단위로 가져온다. 이때 이 가져온 4kb의 데이터를 저장해두는(캐싱하는) 위치가 바로 페이지 캐시
이다.
따라서 Disk I/O가 필요한 경우에는 늘 페이지 캐시에서 먼저 찾아본 후 없으면 그때 I/O를 한다.
그리고 캐시에 있는 데이터를 수정해야할 때에는 그때그때 Disk I/O를 하는 것이 아니라 우선 캐시에 쓰고 나중에 이를 디스크와 동기하는데, 이를 delayed-write
라고 한다. 아직 디스크에 옮겨지지 못한 수정본을 dirty block이라고 하고, 이 데이터들을 sync 명령어 등을 통해 디스크에 갖다쓰도록 명령할 수 있다.
cf.
file sync(동기화-dirty block을 디스크에 옮겨쓰는 것), swap(메모리가 부족해서 쫓아내는 것)과 같은 periodic system job들은 커널이 주기적으로 해줘야할 일이다.
이런 주기적인 작업들을 수행하기 위해 clock interrupt가 주기적으로 일어나는데(1/1000초..), 인터럽트 핸들링의 대원칙은 늘 빨리 끝나야한다는 것이다(인터럽트 핸들링은 이미 급하게 처리해야할 일이므로 도중에 잘릴 수 없다). 그런데 위의 두 작업과 같은 경우에는 시간이 소요되는 작업이기 때문에 유저 프로세스가 아닌 커널 프로세스에서 처리하며, 시스템이 부팅해서 종료될 때까지 백그라운드에서 돌아가게 된다.
(같은 클락 인터럽트라도 빨리 처리될 수 있는 작업들은 빨리 끝내고, 컨텍스트 스위칭을 통해 원래 위치로 돌아간다.)