간단하다. sequential locality 때문에 한번에 읽을 때 근처의 다른 데이터도 같이 읽어 메모리에 올려 놓는다. 리눅스에서는 read ahead의 양이 동적으로 변화 한다. 12kb~128kb 로 변화하는데 이를 read ahead window로 구현해 놓았다.
2. write back
write back이 발생하는 시점은 두가지 이다.
- 메모리가 부족하거나
- dirty page의 age가 너무 오래되었을때
이다. 모든 경우에 pdflush 라는 thread가 생겨나서 작업을 진행한다. (bdflush 시절에는 한번에 한 block device 만 진행할 수 있었음)
Write back에서 사용하는 버퍼는 커널의 buffer_head 구조체를 통해 구현되어 있다. 근데 이 버퍼가 사실은 dirty 정보 뿐만 아니라 실제 data에 대한 pointer도 가지고 있다.
그래서 2.4 커널 이후에서는 page cache와 buffer cache가 통합되었다.
No comments:
Post a Comment