| [ CnUnix ] in KIDS 글 쓴 이(By): sang (Grid) 날 짜 (Date): 2003년 1월 31일 금요일 오전 03시 51분 01초 제 목(Title): Re: [Q] mmap and page lock 먼저 질문을 조금 더 자세하게 해야겠네요. Software DSM을 구현하는 과정에서 특정 메모리 영역을 새로운 메모리 영역으로 mapping 해야하는 요구가 발생했습니다. 즉, user virtual address ADDR1이 어느 시점에 필요에 따라 user virtual address ADDR2로 mapping이 되고, 그 이후부터 user process는 ADDR2를 통해서 그 메모리 영역을 access하게 해야 합니다. (ADDR2의 page protection을 다양하게 변화시켜 SEGV signal handler를 이용한 DSM protocol을 구현하는 것이 주목적입니다.) 그런데, 성능 향상을 위해 일반적인 send/recv 대신 remote DMA를 사용하고 있고, 이러한 기능은 특별한 NIC에서 제공해주고 있으며, 이 기능을 사용하기 위해서는 destination memory가 lock down되어 있어야 합니다. (swop out되어 있는 page에 대해서는 적용 불가) 문제는 page->flags의 PG_lock bit을 set해서 page를 lock down시키게 되면 2번째 mmap(ADDR2를 위한 mapping)이후 user process가 뻗어버립니다. 디버거의 접근조차도 불가능한 것으로 봐서 kernel mode에서 동작하다가 뻗어버리는 것으로 추정됩니다. 그런데 신기한 것은 page->count를 증가시켜 그 페이지를 shared memory로 위장시키면(shared memory도 swap out되지 않음) 아무 문제없이 잘 동작한다는 것입니다. mmap의 argument인 MAP_SHARED와 어떤 연관성이 있지 않나 의심해보는데... 여기까지가 제 한계인지라... ^^; 많은 코멘트, 질문 및 조언 부탁드립니다. P.S. 실제로 mmap하는 메모리 영역이 다른 user process들과 공유되지는 않지만, MAP_PRIVATE을 사용하게 되면 COW 때문에 ADDR1과 ADDR2가 가리키는 메모리 영역의 physical address가 달라지기 때문에, MAP_PRIVATE은 사용할 수 없습니다. |