System Security/Theory

Chapter 11. Shared Memory

The_j.n 2015. 8. 18. 05:13

Chapter 11. Shared Memory
1. Shared Memory
 - IPC(Inter Process Communication)
  · Process와 Process가 통신하는 방법을 말한다.
  · IPC의 종류
  ◦ Signal
  ◦ Piped
  ◦ Message Queue
  ◦ Shared Memory
  ◦ Mail Box
 - Shared Memory
  · IPC(Inter Process Communication)를 Data 공유 방법으로 System V 즉, UNIX 기반 System에서 사용되는 방법이다.
  · 32Bit System은 각 Process에 제공되는 연속적인 4GB의 Virtual Memory를 사용하는데 Virtual Memory중 절반은 사용자(Stack, Heap)가 사용하고 나머지 절반은 Kernel(운영체제가 관리)이 사용한다.
  · Shared Memory는 Virtual Memory에서 Kernel이 사용하는 절반을 활용해 Process간에 통신하는 것을 이용한 기법이다.
  · Process 간의 통신을 하기 위한 것이기 때문에 여러 Process가 한 Memory 영역에 동시에 접근하는 기법이다.
  · 과다한 복사를 방지하고 해당 Process 간의 통신을 위해 고안되었다.
  · Shared Memory의 사용

  ◦ 일반적인 Process는 각각의 독립적인 Memory 영역을 사용하지만 Shared Memory를 사용하는 Process들은 Memory 공간을 공유해 사용한다.
  ◦ Process 간의 Memory 공유 덕분에 Data의 복사와 같은 불필요한 자원소모가 필요가 없어지며 처리속도가 빠르게 된다.
  ◦ 문제점
   ▹ 여러 개의 Process가 한 Memory 영역에 접근하기 때문에 Cache Coherence(일관성)에서 문제가 발생하는데 Cache가 잠시 Data 값을 저장한 후 Cache 값과 일치해야하는 Shared Memory 영역의 값과 비교했을 시 값이 서로 달라 문제가 발생할 수 있기 때문에 이러한 Data 불일치 문제를 해결해줘야 한다.
   ▹ 하나의 기계 내에서만 사용가능하기 때문에 Network를 이용해 다른 기계와 Memory를 공유하는 것이 불가능하다.
   ▹ 한 Memory 영역을 공유하는 점으로 볼 때 같은 영역의 한 사용자의 권한을 악용해 Shared Memory의 영역을 빼내면 다른 사용자의 Memory 정보 또한 같기 때문에 동시에 두 사용자의 정보를 빼올 수 있다.


2. Shared Memory 관련 함수
 - shmget
  · Shared Memory를 생성하거나 생성되어 있는 Shared Memory의 ID 값 반환
  · Header File 및 기본 형태

1
2
3
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
cs

  ◦ 매개변수
   ▹ key : Shared Memory를 읽기 위한 Key 변수
   ▹ size : Shared Memory Size
   ▹ shmflg : Shared Memory의 생성 또는 사용 Option 지정(IPC_CREAT : 생성 | 0666 : Memory 사용 권한 etc.)
 - shmat
  · 생성된 Shared Memory를 Process에 연결
  · Header File 및 기본 형태

1
2
3
#include <sys/types.h>
#include <sys/shm.h>
void xshmat(int shmid, const void xshmaddr, int shmflg);
cs

  ◦ 매개변수
   ▹ shmid : Shared Memory를 생성할 때 만들어진 Shared Memory의 ID
   ▹ xshmaddr : Shared Memory가 할당된 주소
   ▹ shmflg : Shared Memory 사용 Option 지정(SHM_RND : Process에 Shared Memory 주소 알맞게 할당 | SHM_RDONLY : Shared Memory를 읽기 전용으로 설정)
 - shmdt

  · Process에 연결된 Shared Memory 연결해제
  · Header File 및 기본 형태

  ◦ 매개변수

1
2
3
#include <sys/types.h>
#include <sys/shm.h>
void xshmat(const void xshmaddr);
cs

   ▹ xshamaddr : Shared Memory가 할당된 주소