HP-UX

shared memory 는 어디에 존재하나요??

 
곽수희
조언자

shared memory 는 어디에 존재하나요??

shared memory 는 어디에 존재하나요??

3 응답 3
이명우
정기 조언자

shared memory 는 어디에 존재하나요??

IPC (Inter Process Communication) Resource중에 하나인

Shared Memory는 실재로 Memory 존재하고 있습니다.

용어에서도 나타나 있지만 Memory를 공유하기 위한 Resource 입니다.



Process 간에 공유해야 할 Data들을 처리하기 위해 Shared Memory라는

영역으로 Memory 에 일정공간 할당을 하게 되어 있습니다.



일반적으로 Process 가 실행될 때 실행에 필요한 Code가 Memory로

Load가 되며 각각의 Process가 가지고 있는 Memory Region을 VAS

(Virtual Address Space)라고 합니다. Process가 Shared Memory를

사용할 때는 Shared Memory Key 및 ID를 참고하게 됩니다.



그리고 Shared Memory 영역을 사용할 때는 할당되어진 Shared Memory

영역만큼 VAS에 가상으로 Attach 되게 되어 있습니다.



그래서 Kernel Parameter 중에 Shared Memory 영역에 관한 것들을

Setting 하게 되어 있습니다.



Shared Memory 를 사용하는 가장 근본적인 이유는 IPC를 하기 위해

가장 고효용성(Access Time)을 가지고 있기 때문입니다.



그리고 대부분의 Owner는 root, DB User, Middle User들이 사용을

하고 있을 것입니다. Application Programmer들은 별도의

System Call을 사용하여 Shared Memory를 사용하게 되는데 Program에

편의성이 증가됨으로 직접 System Call을 사용하시는 경우는 많지

않을 것입니다.

부족하지만 도움이 되셨으면 합니다.



좋은 하루 되시길...
곽수희
조언자

shared memory 는 어디에 존재하나요??

그렇다면.



A와 B가 서로 통신하는 IPC 프로그램에서

20M 만큼의 shared memory를 잡아둔다고하면,



A와 B가 서로 통신을 할때

A는 자신의 process memory 영역(ex:10M) + 20M

B는 자신의 process memory 영역(ex:10M) + 20M



이런식으로 잡아두고 IPC를 하게 되나요?

그러면 총 memory 사용량은 10M*2 + 20M*2가 되나요??



그리고 답변중에 "가상으로 Attach한다"라는 말이 있는데..

어떤 뜻인가요? 실제로 memory 할당되지 않는 다는 말인가요?

그렇다면 위처럼 되지는 않을 것같은데..

이명우
정기 조언자

shared memory 는 어디에 존재하나요??

예. 가상으로 Attath 한다는 말씀은 실재로 Memory 영역을 잡는

것은 아니고 Address Space 안에 Shared Memory 의 Index를 가지고

있습니다.

그래서 Process가 Shared Memory를 사용한다고 해서 Shared Memory

만큼의 사용량이 증가하는 것은 아닙니다.

ipcs -am 을 보시면 NATTCH Field가 있습니다. 이 Field가 해당

Shared Memory를 Attatch 하여 사용하고 있는 Process 의 갯수

입니다.

Shared Memory를 사용하면 Process마다 다 할당을 한다고 하면

아무리 많은 Memory를 가지고 있다고 해도 감당하기 힘들 것입니다.



말씀드렸듯이 Index만을 가지고 있는것이며 Shared Memory를 사용

할때는 각각의 Process 마다 Locking Mechanism을 가지면서 유기적

으로 작용을 합니다.

저도 System Call을 직접 다루지 않아 Locking Mechanism을 설명

드리기는 어려울것 같네요.