struct page 와 struct inode 에 대해서 질문이 있습니다.
글쓴이: younghyun / 작성시간: 화, 2013/05/21 - 10:08오후
안녕하세요.
현재 페이지 캐시가 가지고 있는 블록의 정보에 접근하기 위해
리눅스 3.2.43 기준으로 소스를 보고 있는데요.
struct page 와 struct inode 에 대해서 질문이 있습니다.
먼저 struct page의 member 중
union {
pg_off_t index;
void *freelist;
};
의 유니온이 있는데 이 중 index 가 정확히 어떤 일을 하는 것인지, 어떤 정보를 담고 있는지 궁금합니다.
address_space의 radix_tree로 페이지 캐시(버퍼)를 검색할 때 인덱스로 들어가는 것 같은데,
그 전에 어떤 정보를 저장하고 있는 것인지 궁금합니다.
그리고 struct inode에서 unsigned int i_blkbits; 가 어떤 정보를 가지게 되는 것인가요?
fs 관련된 소스에서 주로 shift 에 이용되는 것 같은데 관련된 내용을 찾아보기 힘드네요.
아시는 분이 계신다면 답변 주신다면 정말 감사하겠습니다.
혹시 정확하지 않더라도 의견이 있으시면 감사히 참고하겠습니다.
감사합니다.
Forums:
struct page의 index는 데이타
struct page의 index는 데이타 타입(s/pg_off_t/pgoff_t)을 보아하니 해당 페이지의 페이지 프레임 번호가 아닌가 싶네요. page_to_pfn() 매크로가 있지만 편의성과 효율성등 감안해서 추가한 멤버인 것 같습니다.
struct inode의 i_blkbits는 블록 크기(비트 단위)라고 하는군요. 실제로 사용하는 곳을 살펴보시면 1 << inode->i_blkbits 와 같이 쉬프트 연산으로 아이노드의 블록 크기를 가져옵니다.
Just do it!
글쓴이입니다.
답변 잘 보았습니다.
완벽하게 알려면 좀 더 봐야될 것 같은데 태훈님이 말씀해주신 방향이 맞는 것 같습니다.
(음, 그런데 page index는 제가 생각을 좀 더 해봐야 될 것 같네요..ㅎㅎ)
도움이 많이 되었어요. 정말 감사합니다~