CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): sang (Grid)
날 짜 (Date): 2003년 1월 30일 목요일 오전 10시 38분 12초
제 목(Title): [Q] mmap and page lock 



linux kernel 2.2.x 에서 특정 file에 대한 ADDR=mmap(a,size,MAP_SHARED,FD,0)
을 수행한 후(file 전체 크기에 대해서... 일단 4KB라고 가정해도 무방) addr을 
physical memory에 lock down시켰습니다.(제가 만든 device driver의 특정 ioctl() 
콜을 통해서 해당 user process의 virtual address ADDR에 대항하는 page를 찾은 
다음, page->flags에 PG_lock을 set시키는 방식을 채택했습니다.)

위와 같이 open file -> mmap -> page lock down 의 순서를 거친후 
동일한 file의 일부분에 대해 다시 ADDR2 = mmap(a2,size2,MAP_SHARED,FD,0)을
수행하였습니다. 

이 경우 ADDR1을 통한 access나 ADDR2를 통한 access 모두 동일한 메모리 영역을 
touch할 것이라는 예상이 빗나갔습니다. 원인을 찾다보니.. PG_lock을 set하지 
않으면 원하는대로 동작하는 것을 확인할 수 있었습니다. 

현재로서는 page->count를 증가시켜서 shared memory인것처럼 kernel을 
속이는 방법으로 해결하고 있습니다만... 이런 현상이 발생하는 정확한 원인도
모르겠고, 좀 더 깔끔한 해결책이 있으면 좋겠습니다.

P.S. 저기 위쪽에 구르미님이 올린 질문 내용과 동일한 context입니다. 아마도 
     서로 다른 그룹이 동일한 일을 하는 와중에 동일한 문제점에 봉착한거 같은데
     어떻게 해결하는 것이 가장 나이스한 것인지 조언을 구합니다. 
     도와주세요 구르미니임~ ^^


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.