두 프로세스간에 메모리를 공유하고 싶습니다.
mmap()
뒤에 주소가 mapStart
인 경우 mapStart
에 오프셋을 추가하고 mapAddr
을 얻고 mapAddr
이 매핑 된 PAGE_SIZE를 초과하지 않도록하십시오.
내가mmap() 후 반환 된 주소에 쓰기는 정상이지만 시스템 충돌을 일으킬 수 있습니다. 이유는 무엇입니까?
memcpy((void *)mapAddr, data, size);
모두에 의해 mapAddr
에 쓸 때 확인합니다.
하지만
memcpy(&data, (void *)mapAddr, size);`
것이다 경우 시스템 충돌
에 의해mapAddr
에서 읽을 때.
누가 알 수 있습니까? The similar problem is here
일부 정보 추가 @Tony Delroy을, @ J-16 SDiZ
의 mmap 기능은 다음과 같습니다
mapStart = (void volatile *)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, memfd, pa_base);
시스템 충돌 : 더 어떤 OS 오류 메시지가없는, 콘솔은 일부 MCA
정보를 인쇄
세부 사항은에서 설명합니다 here
여기 미친 아이디어가 있습니다. 왜 'mmap()'에 대한 인수를 준비하는 코드를 보여주지 않습니까? 모든 경우에 보호 플래그에'PROT_READ'가 없지만 어떻게 알 수 있습니까? –
어떤 종류의 "시스템 충돌"입니까? sigfault? 커널 패닉? 오류 메시지를 제공하십시오. –
다른 게시물에서 IA64에 대해 언급했는데, 같은 아치입니까? –