2014-10-31 1 views
2

32 비트와 64 비트 프로세스에서 모두 액세스 할 수있는 공유 메모리 세그먼트를 만들 수 있습니까? flag'TPF_IPC64 '주소 64 비트를 지원하는이 32 비트 리눅스 프로세스에서 액세스 할 수32 비트와 64 비트 프로세스간에 공유되는 공유 메모리 세그먼트

shmget(key,100,IPC_CREAT|TPF_IPC64); 

다음과 같이인가?

편집 : 'TPF_IPC64'플래그가 shmget에 대한 일반적인 Linux OS 호출에서 지원되지 않는 것처럼 보입니다. IBM이 독점적이라고 생각합니다. 나는이 링크에서했다

http://pic.dhe.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtpc2%2Fcpp_shmget.html

답변

3

사람이하는 shmget (2) IPC_CREAT는 는 같은 실행 파일 형태의 프로세스에 의해 공유 될 수 생성 된 공유 메모리 세그먼트를 shmflg 비트에 설정되어있는 경우

. 즉, 응용 프로그램을 32 비트 프로세스로 컴파일하면 같은 메모리 세그먼트를 다른 32 비트 프로세스와 공유 할 수 있으며 응용 프로그램 은 64 비트 프로세스로 컴파일되어 동일한 메모리를 공유 할 수 있습니다 다른 64 비트 프로세스와 세그먼트. 64 비트 프로세스가 프로세스와 32 비트의 프로세스와 공유 할 수있는 공유 메모리 세그먼트를 생성하려는 경우 shmflg의 IPC_CREAT 외에도 64 비트 프로세스가 IPC_SHARE32를 지정해야합니다. 32 비트 프로세스는 IPC_SHARE32를 지정하지 않아도됩니다. Itanium (R) 기반 플랫폼의 경우 적응 형 주소 공간 기능이 사용되고 있으면 추가 규칙이 적용될 수 있습니다. Adaptive Address Space에 대해서는 아래 섹션을 참조하십시오.

+0

내 shmget man 페이지에이 내용이 표시되지 않습니다. 또한 IPC_SHARE32가 인식되지 않습니다. HP 설명서에서이 내용을 찾을 수 있습니다. 그것을 사용하는 방법에 대해 더 자세히 설명해 주시겠습니까? – Nuetrino

+0

http://man7.org/linux/manage/man2/shmget.2.html –

+0

제공된 링크에서 IPC_SHARE32를 볼 수 없습니다 – Nuetrino

0

TPF_IPC64 Specifies that 64-bit addressing is supported. If you specify this flag, 64-bit system heap is used to satisfy the request if there is enough heap available. If there is no 64-bit system heap space available, 31-bit system heap will be used. Specify this flag only if all the users of this shared memory area can support 64-bit addresses.

문서 IBM's에서 마지막 문장은 모든 프로세스가 64 비트 주소를 지원해야한다는 것을 언급하고있다. 따라서 32 비트 주소로 프로세스를 액세스 할 수 없습니다.

그러나 32 비트 프로세스로 액세스하려고하면 어떤 동작을하지 않습니다.

관련 문제