강좌 & 팁
글 수 2,412
2012.01.14 19:32:17 (*.138.143.204)
42085
http://kernelnewbies.org/
커널 3.2 소식입니다.
3.2에서 추가된 기능중에 메모리 관련된 추가가 있었습니다.
Cross memory attach
Cross memory attach adds two syscalls -process_vm_readv, process_vm_writev- which allow to read/write
from/to another processes' address space.
The basic idea behind cross memory attach is to allow MPI programs doing intra-node communication
to do a single copy of the message rather than a double copy of the message via shared memory
두개의 시스템 콜이 추가되었는데 process_vm_readv / process_vm_writev 라고 합니다.
이것은 서로 다른 프로세스의 어드레드 공간으로의 읽기와 쓰기를 할수 있는 것이라고 합니다.
이전에는 몇몇 제한적인 목적으로 다른 프로세스 공간의 데이타를 읽는 함수가 있었던 것으로 아는데
이것이 병렬프로그램에서 인트라 노드 통신(? 정확히 모릅니다)에서 쉐어드 메모리를 통한
메세지의 이중 복사 대신에 한번의 복사로 통신하기 위해서 라고 합니다.
어떻게 구현이 된 것인지 궁금해서 한번 코드를 보았는데요.
너무 복잡한 구조를 갖고 있습니다;;;
process_vm_readv / process_vm_writev
-> process_vm_rw -> process_vm_rw_core
-> process_vm_rw_single_vec
-> process_vm_rw_pages
-> copy_from_user / copy_to_user
와 같이 결국에는 copy_from_user 와 copy_to_user 를 사용하는 것으로 보입니다.
유저공간과 커널공간의 데이타를 교환하기 위한 함수로 사용되는 위의 함수를 이용해서 복사를 하는 군요.
또 이기능에서 task->mm 이 없는 것들... 즉 커널 쓰레드에서는 사용할수가 없도록 되어 있습니다.
그럼 다음에 또 소식을 전하겠습니다.