공유메로리 질문!!
글쓴이: vilinux / 작성시간: 목, 2004/05/13 - 7:58오후
공유 메로리에 대해 잘모르겠습니다.
지금 fork 생성해서 부모하고 자식하고 따로 프로그램을 돌리거든요.
근데 전역 변수로 선언하고도 각각 프로세서간에 공유가 안되네요.
공유 메로를 써서 부모에서쓰면 자식에서 그걸 참조 하는형식의
간단한 Test프로그램이라도 좀 부탁합니다.
이런 게시판에 이렇게 올리면 안되지만 초짜라서 책을 봐도 이해가 안가네요!
너무 힘들당.......
짧은 지식이라도 좀....부탁드려용~~~~^^;
Forums:
전역 변수라는건 각각의 '프로세스'가 가지고 있는 것이므로 공유가 안됩니
전역 변수라는건 각각의 '프로세스'가 가지고 있는 것이므로 공유가 안됩니다. 단지 하나의 소스 파일 안에서 함수로 넘기지 않으면서 쓸 수 있다는 것일 뿐입니다.
공유 메모리 쓰는건 간단합니다.
shm_open으로 열어서 mmap으로 매핑하고, shm_unlink로 닫으면 됩니다.
일반 파일 가지고 놀듯이 read, write 콜로 읽고 쓰면 끝입니다.
(각 함수에 관한 설명은 man 페이지를 읽어보세요)
^^ 닫는 거는 close,
^^ 닫는 거는 close, 메모리 객체를 삭제하는게 shm_unlink일 겁니다.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
fork해서 사용하려면
fork해서 사용하려면 굳이 shm 쓸 필요 없이 /dev/zero를 mmap해서 사용하시면 편합니다. (이렇게 하면 부모-자식 사이에 메모리 영역을 공유할 수 있습니다.)
자세한 것은 man mmap이나 Stevens의 Advanced Programming in the Unix Environment를 참조하세요.
혹시 지금 만들어
혹시 지금 만들어 놓은 풀그림 크기가 작다면
fork를 쓰는 다중 프로세스를
pthread를 쓰는 다중 쓰레드로 바꾸는 건 어떠세요?
다중 쓰레드는 메모리 영역을 공유하기 때문에
따로 공유 메모리 객체를 만들 필요가 없습니다.
지금 말씀하시는
지금 말씀하시는 공유메모리가 system V에서 말하는 IPC에 대한 내용을 말씀하시는건지 아니면 단지 변수들에 대한 공유를 말씀하시는건지 모르겠습니다. 암튼 우선 system V에서 말하는 IPC는 어떠한 부분의 메모리를 공유메모리로 설정을 해서 process들간에 메모리 공유를 하여서 통신을 하도록 해놓은 매커니즘입니다. 만약 이게 아니라 단순히 변수들에 대한 공유는 fork를 사용하시면 안되고, thread 구조로 가셔야만 확인하실 수 있습니다. 왜냐하면 fork는 모든 process context를 복사를 하는것이지 공유를 하는 구조가 아닙니다. 즉 forking된 child process의 전역변수와 parent process의 전역변수의 메모리는 서로 틀린 곳이라는 겁니다. 하지만, thread에서는 서로 틀린 곳이 아니라 동일 메모리 영역을 access하기 때문에 공유한다라고 하는 겁니다. 그래서 multi thread 프로그래밍 할 경우에는 전역변수 등과 같이 공유되는 메모리는 locking을 사용해서 공유 메모리에 대해서 memory coherency를 보장하도록 프로그램 알고리즘을 짜야 합니다. 또는 가급적 local 변수를 사용해서 공유하지 않는 방식으로 구성하는게 좋습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
댓글 달기