ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level10
    war game Write up/ FTZ 2018. 10. 9. 17:40

    음,, 이 문제를 접하면서 공유 메모리라는 것을 공부하게 되었다.


    공유 메모리 즉 shared memory 는 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리

    과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안됨

    환경에 따라 프로그램은 하나의 프로세서에서 여러 개의 프로세서에서 실행 가능함.


    공유 메모리 즉 shared memory 는 여러 IPC 중에서 가장 빠른 수행 속도를 보여준다고 한다.

    IPC 란 Inter-Process Communication 의 약자로 프로세스 간 통신이라고 하며 프로세스들 사이에 서로 데이터를 주고 받는 행위 또는 그에 대한 방법이나 경로를 뜻한다. 



    CPU1        CPU2        CPU3         I/O


    ↓               ↓            ↓         ↙


    System Bus or crossbar switch 


    ↓                ↓


    MEMORY


    --> (3개의 프로세서의 공유 메모리 시스템 그림)


    먼저 문제의 힌트는 다음과 같다. 

    key_t = 7530

    대화방은 공유 메모리를 이용해서 만들어짐.


    <sys/ipc.h>  http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysipc.h.html

    <sys/shm.c> http://pubs.opengroup.org/onlinepubs/009695299/basedefs/sys/shm.h.html

    https://www.joinc.co.kr/w/man/2/shmget

    를 참고하길 바란다.


    간단하게 코드를 분석해보자면 int shmid=shmget(key_t key, size_t size, int shmflg);

    즉 메모리 영역을 할당한다는 의미이다.

    IPC_CREAT 는 새로운 영역을 할당하는 의미로 만약 이 값이 사용이 안되면 shmget()은 key로 이미 생성된 접근 가능한 공유 메모리 영역이 있는지 확인하고 이에 대한 식별자를 리턴할 것이다.


    long shared_memor=shmat(int shmid, const void *shmaddr, int shmflg);

    즉 공유 메모리 관련 연산을 한다는 의미이다.

    shmat()는 공유메로리 식별자인 shmid에 공유 메모리 세그먼트를 붙이기 위해 사용한다. 붙이는 영역은 shmaddr로 결정

    SHM_RDONLY가 만약 shmflg에 지정 되었다면 세그먼트는 읽기 전용이 되며 공유메모리 영역에 접근하고자 하는 프로세스는 읽기 전용허가 접근권을 가져야 한다.


    반환값으론 성공하면 attach된 shared memory segment를 반환하고 실패하면 -1을 반환한다.

    아래는 성공한 attach 된 shared memory segment를 반환 한 값이다.




    'war game Write up > FTZ' 카테고리의 다른 글

    leve12  (0) 2018.11.01
    level11  (0) 2018.10.28
    level9  (0) 2018.10.07
    level8  (0) 2018.10.07
    level7  (0) 2018.10.06
Designed by Tistory.