UNIX/Linux에서 system call로 제공하는 shared memory, semaphore 기능을 이용한 producer-consumer 프로그램
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

UNIX/Linux에서 system call로 제공하는 shared memory, semaphore 기능을 이용한 producer-consumer 프로그램에 대한 보고서 자료입니다.

목차

UNIX/Linux에서 system call로 제공하는 shared memory, semaphore 기능을 이용한 producer-consumer 프로그램

1 ) Source Code
2) 위 프로그램 설명과 ipc에 대하여..
3) 실행결과 (제가 과제를 수행한 환경은 한컴 리눅스 3.0의 문서편집기이며 출력도 이 응용프로그램을 이용하여 하였습니다.)

본문내용

능하다.
IPC 는 'InterProcess Communication' 의 준말이다. 우리말로 해석하면 '프로세스
간 통신' 정도의 뜻인데, IPC 를 이용하면 프로세스간에 편지를 주고 받을 수도 있고, 일정한 메모리를 공유하여 시스템의 리소스를 절약하거나 대용량의 데이터를
교환할 수도 있으며, 프로세스끼리 협력하여 어떠한 일을 처리 할 수도 있다.
다중 프로세스, 다중 사용자 환경에서의 프로그래밍상 에서 발생할 수 있는 프로세스 동기화 같은 문제점을 해결하거나 프로세스 사이 의 통신에 주로 사용된다.
가. IPC 의 장점
ㄱ. 다중 프로세스 환경에서 필요한 프로세스 동기화 문제를 손쉽게 해결할 수 있다. 어떤 하나의 파일에 동시에 두개의 프로세스가 파일의 끝부분에 내용을 추가하기 위해 접근을 한다고 가정하고, 두개의 프로세스를 P1, P2 라고 하고, 기존의 파일의 내용을 F0, P1 이 추가하려는 내용을 F1, P2 가 추가하려는 내용을 F2라 고 가정한다. 동시에 쓰기를 시도하지 않는다면, P1 이 먼저 쓰기를 했을 경우에는 정상적인 결과가 나올 것이다. 그러나 동시에 쓰기를 시도할 때에는, 원치 않는 결과가 나올 수도 있다. P1 이 파일을 열어서 쓰기 직전에 P2가 파일을 열었다면, 현재 P1, P2 가 가지고 있는 파일의 이미지는 꼭 같은 것이 될 것이다. 이 경우에 P1은 F1 을 F0 뒤에 추가하고 파일을 닫는다. 그리고 P2도 F0 뒤에 F2 를 추가시키고 파일을 닫을 것이다. 이렇게 된다면 F1, F2 가 차례로 파일의 뒷부분에 추가되는 것이 아니라 F1, F2 의 내용이 뒤섞이게 되어서 데이터가 엉망으로 될 것이다. 이 경우를 보통 데이터가 '크럽' 된다라고 이야기한다. 실제 사용을 목적으로 하는 응용 프로그램에 이런 결점이 있어서는 안될 것이다. 여기서 파일을 열어서 닫는 부분까지가 '임계영역'이라고 한다. 이 임계영역은 한번에 하나의 프로세스만이 수행되도록 해야 하는데, 이러한 프로세스의 동기화 문제를 해결하는 데 IPC 설비를 사용하면 아주 유용하다.
ㄴ. 프로세스 사이의 데이터 교환에 있어서 아주 소규모에서 대규모까지 효율적으로 처리 할 수 있다. 흔히 'fifo' 라고 부르는 '명명된 파이프'(파이프가 객관화 되어 이름이 붙여진 것도 프로세스 간의 통신에 사용될 수 있지만 데이터 교환에는 그 용량에 한계가 있다.) 비교적 자그마한 데이터 일 경우에는 손쉬운 '메시지 큐'를 사용 할 수 있고, 수메가에 이르는 아주 큰 데이터 일 경우에는 '공유메모리'를 사용하여 효율적으로 처리할 수 있다.
ㄷ. IPC 함수들은 하나하나가 아주 잘 설계되어 있으며, 각 설비마다의 일관적인 인터페이스를 사용하고 있으며 사용방법 또한 손쉽다. 시스템 V IPC 의 또다른 장점은 해당 함수들이 하나하나가 강력한 기능을 가지고 있으며, IPC 설비별로 마련된 함수들이 아주 유사하게 동작한다는 것이다.
ㄹ. 프로그램 상의 코드를 간략화 할 수 있다.
다른 설비를 사용하는 것보다 신경 쓸 부분이 줄어들며, 함수의 갯수도 적어질 것
이며, 소스의 코드 또한 간결하게 만들 수 있다.
나. IPC 의 원리
파이프나 여타의 인터페이스와는 조금 색다른 방법을 사용한다. 즉, 프로세스간 통신을 위해 IPC 설비를 필요로하는 프로세스는 시스템 전역에 걸쳐 사용할 수 있는 해당 설비를 만들 수 있다. 기존의 설비들이 지역적으로 유효하거나, 시스템 호출을 사용하여 커널에 요청하는 것과 같은 간접적인 방식을 사용해왔다면, IPC 설비는 좀 더 사용자가 직접적으로 손쉽게 접근할 수 있는 인터페이스를 제공한다고 볼 수 있다. 이러한 점 때문에 처음에 IPC 가 등장했을 때, IPC 를 UNIX 에 있어서 아주 이색적인 것으로 생각하는 사람이 많았다. 프로세스간에 직접적으로 통신을 하는 것이 아니고, 시스템 내부에 있는 IPC 설비들을 통하여 데이터를 주고 받는 것이다. 이러한 설비들은 어떠한 프로세스라도 만들 수 있으며, 없애는 것은 권한을 가진 프로세스라면 가능하다. 마치 파일의 접근권한과 유사하게 해당 IPC 설비들도 접근권한이 있으며 권한을 변경하는 것도 가능하다. 그리고 숫자는 각 설비안의 하나의 객체의 식별자(또는 아이디)이다. 마치 우리가 보통 살고 있는 집을 주소로 참조하듯이 하나의 설비를 고유한 숫자로 참조하는 것이다.
다. IPC 인터페이스
IPC 에 이렇게 서로다른 세마포어, 공유메모리, 메시지 큐가 있지만, 서로 접근하는
방법은 비슷하다.
ㄱ. IPC 설비 생성과 식별자 얻기
semget, shmget, msgget 함수가 세마포어, 공유메모리, 메시지 큐에서 각각 해당 설비를 생성하고 식별자를 얻는 함수이다. 이들 함수에서 매개변수에 IPC_CREAT 를설정하면 관련 설비를 생성할 수 있으며, 접근권한도 동시에 파일접근권한과 마찬가지로 '666' 등과 같이 설정할 수 있다. 이들 함수가 돌려주는 값은, 일반적으로 해당 IPC 설비의 식별자다.
ㄴ. IPC 제어하기
semctl, shmctl, msgctl 함수가 세마포어, 공유메모리, 메시지 큐에서 각각 해당 설
비의 권한을 설정하거나 하는 등의 제어를 수행한다.
ㄷ. 해당 IPC 설비에 따른 인터페이스
세마포어에서는 semop 를 사용하여 세마포어 변수의 값을 변경시키며, 공유메모리에서는 shmat 을 사용하여 공유메모리를 해당 프로세스의 주소영역에 덧붙여 사용가능하게 만들며, shmdt 를 사용하여 공유메모리를 해당 프로세스의 주소영역에서 떼어내어 사용하지 못하도록 하며, 메시지 큐에서는 msgsnd 와 msgrcv 를 사용하여 메시지를 주고 받는다.
ㄹ. IPC 제거하기
IPC 를 제거하는 방법은 semctl, shmctl, msgctl 을 사용하여 해당 매개변수의 플래그를 IPC_RMID 로 설정함으로써 없앨 수 있다. 여기에서 semget, shmget, msgget 함수에서 얻은 해당 설비의 식별자를 다른 함수에서 사용한다.
3) 실행결과 (제가 과제를 수행한 환경은 한컴 리눅스 3.0의 문서편집기이며 출력도 이 응용프로그램을 이용하여 하였습니다.)
IPC 제어
IPC 제거
  • 가격5,000
  • 페이지수10페이지
  • 등록일2013.07.30
  • 저작시기2013.7
  • 파일형식한글(hwp)
  • 자료번호#867648
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니