예를 들어, /os/test.cpp
와 같이, 루트 디렉토리에 속한 os 디렉토리 아래의 test.cpp라는 파일을 찾고자 한다면,
위의 표에서 일단 루트 디렉토리에 속한 모든 파일(디렉토리 파일)들을 살펴보며 os라는 디렉토리 파일을 찾아야하고, 그 os라는 디렉토리에 속한 모든 파일을 찾아보며 다시 test.cpp라는 파일을 찾아야한다.
cf)
사실 루트 디렉토리도 파일이기 때문에 inode를 가지는데, 이 inode의 inode#는 default가 2번이다.
이와 같은 과정을 Directory Traverse
라고 한다. 그런데 이런 directory traverse가 매번 반복된다면 속도가 매우 느려질 수밖에 없다.
그래서 사용하는 것이 바로 d-cache
(d-entry cache)이다. 이 d-cache는 최근에 open한 디렉토리의 inode#를 캐싱하는 곳이다. (디렉토리 이름과 inode번호를 쌍으로 저장한다.)
d-entry cache는 다른 말로 name cache
라고 한다. 즉 파일(디렉토리) 이름(path name)을 이용해 inode를 찾아낼 수 있도록 해주는 캐시이다.
한편, 하드웨어 캐싱이든 소프트웨어 캐싱이든, 캐시는 원래 자리보다 크기가 작기 때문에 어떤 데이터를 먼저 내보낼지에 대한 매커니즘이 필요하다.
그리고 그 중 가장 대표적으로 사용되는 것이 LRU
(Least Recently Used) 방식이다. LRU는 가장 사용한지 오래된 것을 먼저 내보내는 방식이다.