시스템 V IPC 기초[1] 시스템 V IPC 공통 요소 키 생성

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
제14장 동적 메모리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Task 통신 및 동기화 : Message Queue, Semaphore Shared Memory
제 9 장 구조체와 공용체.
9 파이프.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
공유 메모리[1] 공유 메모리 공유 메모리 생성: shmget(2) 같은 메모리 공간을 두 개 이상의 프로세스가 공유하는 것
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
6 프로세스 생성과 실행.
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
Linux System Programming
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
10 시스템V의 프로세스간 통신.
10 시스템V의 프로세스간 통신.
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
파이프와 exec 시스템 호출 (ls | wc)
8 메모리 매핑.
Linux/UNIX Programming APUE (Interprocess Communication)
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
임베디드 실습 # LED, 7’Segment 제어
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
13장 고급 입출력 함수 박사 4학기 최 성자.
파일 접근권한 제어 stat 구조체의 st_mode 항목에 파일의 종류와 접근권한 정보저장 st_mode 값의 구조.
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
Department of Computer Engineering
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
리눅스 커널의 이해 중에서 18장. 프로세스 통신 김상국 네트워크 실험실.
24장. 파일 입출력.
Analog to Digital Converter
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Operating System 10주차 - IPC(InterProcess Communication) -
School of Electronics and Information. Kyung Hee University.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Signal & Inter-Process Communication
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
데이터 동적 할당 Collection class.
시스템 인터페이스 Lab#5 쉡 실습.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Flow Diagram IV While.
3. 모듈 (5장. 모듈).
JSP Programming with a Workbook
구조체(struct)와 공용체(union)
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
9 파이프.
Department of Computer Engineering
06. 디바이스의 등록과 해제 김진홍
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Docker Study 6~7.
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

시스템 V IPC 기초[1] 시스템 V IPC 공통 요소 키 생성 메시지 큐, 공유 메모리, 세마포어 공통 요소 시스템 V IPC를 사용하기 위해서는 IPC 객체를 생성해야함. IPC 객체를 생성하기 위해 공통적으로 사용하는 기본 요소는 키와 식별자 키 생성 키로 IPC_PRIVATE 지정 ftok 함수로 키 생성 인자로 파일시스템에 이미 존재하는 임의의 파일의 경로명과 1~255사이의 번호 지정 키의 구조에서 id(8비트)에 인자로 지정한 번호 저장. 번호에 0은 지정하지 않는다. /* 각자 현재 directory로 수정할 것 */ #include <sys/ipc.h> key_t ftok(const char *path, int id);

시스템 V IPC 기초[2] IPC 공통 구조체 IPC객체를 생성하면 IPC 공통 구조체가 정의된다. struct ipc_perm { uid_t uid; gid_t gid; uid_t cuid; gid_t cgid; mode_t mode; uint_t seq; key_t key; int pad[4]; }; uid, gid : 구조체 소유자ID 및 소유그룹ID cuid, cgid : 구조체를 생성한 사용자ID, 그룹ID mode : 구조체에 대한 접근 권한 seq : 슬롯의 일련번호 key : 키값 pad : 향후 사용을 위해 예약된 영역

시스템 V IPC 관련 명령[1] 시스템 V IPC 정보 검색: ipcs 명령 -m : 공유 메모리에 관한 정보만 검색 -q : 메시지 큐에 관한 정보만 검색 -s : 세마포어에 관한 정보만 검색 -a : -b, -c, -o, -p, -t 옵션으로 검색하는 항목 모두 출력 -A : 전체 항목을 모드 검색 -b : 각 방법의 최댓값 검색 -c : IPC 객체를 생성한 사용자의 로그인명과 그룹명 검색 -D mtype : 메시지 큐에서 mtype으로 지정한 메시지만 검색 -i : 공유 메모리 세그먼트에 연결된 ISM의 개수 출력 -J : IPC 객체 생성자의 프로젝트명 출력 -o : 현재 사용되고 있는 정보 출력 -p : PID 정보 출력 -t : 시간 정보 출력 ipcs [-aAbciJmopqstZ] [-D mtype]

시스템 V IPC 관련 명령[2] IPCS 명령 사용 예 현재 동작중인 IPC 객체가 하나도 없는 경우 -A 옵션 지정시 : 모든 항목 출력 # ipcs IPC status from <running system> as of 2009년 2월 18일 수요일 오전 09시 36분 41초 T ID KEY MODE OWNER GROUP Message Queues: Shared Memory: Semaphores: # ipcs -A IPC status from <running system> as of 2009년 2월 18일 수요일 오전 10시 36분 41초 T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME PROJECT Message Queues: T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME ISMATTCH PROJECT Shared Memory: T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME PROJECT Semaphores:

시스템 V IPC 관련 명령[3] 시스템 V IPC 정보 삭제: ipcrm -m shmid : 공유 메모리 삭제 -q msqid : 메시지 큐 삭제 -s semid : 세마포어 삭제 -M shmkey : shmkey로 지정한 공유 메모리 삭제 -Q msgkey : msgkey로 지정한 공유 메모리 삭제 -S semkey : semkey로 지정한 공유 메모리 삭제 ipcrm [-m shmid] [-q msqid] [-s semid] [-M shmkey] [-Q msgkey] [-S emkey]

메시지 큐[1] 메시지 큐 메시지 큐 생성: msgget(2) 파이프와 유사하나 파이프는 스트림 기반으로 동작하고 메시지 큐는 메시지 단위로 동작 각 메시지의 최대 크기는 제한되어 있음 각 메시지에는 메시지 유형이 있어 수신 프로세스는 어떤 유형의 메시지를 받을 것인지 선택 가능 메시지 큐 생성: msgget(2) key : IPC_PRIVATE 또는 ftok로 생성한 키값 msgflg : 플래그와 접근 권한 지정 IPC_CREAT : 새로운 키면 식별자를 새로 생성 IPC_EXCL : 이미 존재하는 키면 오류 발생 메시지 큐 식별자를 리턴(msqid_ds 구조체) #include <sys/msg.h> int msgget(key_t key, int msgflg);

메시지 큐[2] msqid_ds 구조체 struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; msglen_t msg_cbytes; msgqnum_t msg_qnum; msglen_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; time_t msg_stime; int32_t msg_pad1; time_t msg_rtime; int32_t msg_pad2; time_t msg_ctime; int32_t msg_pad3; short msg_cv; short msg_qnum_cv; long msg_pad4[3]; }; msg_perm: IPC공통 구조체 msg_first: 첫번째 메시지에 대한 포인터 msg_last: 마지막 메시지에 대한 포인터 msg_cbytes: 현재 메시지큐에 있는 총 바이트수 msg_qnum: 메시지 큐에 있는 메시지 개수 msg_qbytes: 메시지 큐의 최대 크기 msg_lspid: 마지막으로 메시지를 보낸 프로세스ID msg_lrpid: 마지막으로 메시지를 읽은 프로세스ID msg_stime: 마지막으로 메시지를 보낸 시각 msg_rtime: 마지막으로 메시지를 읽은 시각 msg_ctime: 마지막으로 메시지 큐의 권한변경시각 msg_pad1,2,3: 예비공간

메시지 큐[3] 메시지 전송: msgsnd(2) #include <sys/msg.h> msqid : 메시지 큐 식별자 msgp : 메시지 버퍼 주소 msgsz : 메시지 버퍼 크기 msgflg : 블록모드(0)/비블록 모드(IPC_NOWAIT) 메시지 버퍼 구조체 mtype : 메시지 유형으로 양수를 지정 mtext : 메시지 내용 저장 #include <sys/msg.h> int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); struct msqbuf { long mtype; char mtext[1]; };

[예제 10-1] 메시지 큐 생성 및 메시지 전송하기(client.c) ... 06 struct mymsgbuf { 07 long mtype; 08 char mtext[80]; 09 }; 10 11 int main(void) { 12 key_t key; 13 int msgid; 14 struct mymsgbuf mesg; 15 16 key = ftok("keyfile", 1); 17 msgid = msgget(key, IPC_CREAT|0644); 18 if (msgid == -1) { 19 perror("msgget"); 20 exit(1); 21 } 22 메시지 버퍼 정의 키 값 생성 메시지 큐 생성

[예제 10-1] 메시지 큐 생성 및 메시지 전송하기 23 mesg.mtype = 1; 24 strcpy(mesg.mtext, "Message Q Test\n"); 25 26 if (msgsnd(msgid, (void *)&mesg, 80, IPC_NOWAIT) == -1) { 27 perror("msgsnd"); 28 exit(1); 29 } 30 31 return 0; 32 } 보낼 메시지 만들기 메시지 전송 # ex10_1.out # ipcs -qo IPC status from <running system> as of 2009년 2월 18일 수요일 오후 2시 01분 14초 T ID KEY MODE OWNER GROUP CBYTES QNUM Message Queues: q 1 0x100719c --rw-r--r-- root other 80 1

메시지 큐[4] 메시지 수신: msgrcv(2) #include <sys/msg.h> msqid : 메시지 큐 식별자 msgp : 메시지 버퍼 주소 msgsz : 메시지 버퍼 크기 msgtyp : 읽어올 메시지 유형 msgflg : 블록모드(0)/비블록모드(IPC_NOWAIT) msgtyp에 지정할 값 0 : 메시지 큐의 다음 메시지를 읽어온다. 양수 : 메시지 큐에서 msgtyp로 지정한 유형과 같은 메시지를 읽어온다. 음수 : 메시지의 유형이 msgtyp로 지정한 값의 절대값과 같거나 작은 메시지를 읽어온다. #include <sys/msg.h> ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg);

[예제 10-2] 메시지 수신하기(server.c) ... 05 struct mymsgbuf { 06 long mtype; 07 char mtext[80]; 08 }; 09 10 int main(void) { 11 struct mymsgbuf inmsg; 12 key_t key; 13 int msgid, len; 14 15 key = ftok("keyfile", 1); 16 if ((msgid = msgget(key, 0)) < 0) { 17 perror("msgget"); 18 exit(1); 19 } 20 21 len = msgrcv(msgid, &inmsg, 80, 0, 0); 22 printf("Received Msg = %s, Len=%d\n", inmsg.mtext, len); 23 24 return 0; 25 } 메시지 버퍼 정의 송신측과 같은 키값 생성 메시지 수신 # ex10_2.out Received Msg = Message Q Test, Len=80 # ipcs -qo IPC status from <running system> as of 2009년 2월 18일 수요일 오후 2시 03분 48초 T ID KEY MODE OWNER GROUP CBYTES QNUM Message Queues: q 1 0x100719c --rw-r--r-- root other 0 0

실습 Client로부터 보내는 여러 개의 메시지를 server에서 mtype의 순번으로 받을 수 있는 프로그램을 작성하라 자식이 표준 입력한 내용을 mtype=1로 부모에게 전달한다. 더 이상의 내용이 없을 때 자식은 mtype=2를 전달한다. 부모는 mtype=1이면 받은 내용을 표준 출력하고, mtype=2이면 종료하는 프로그램을 작성하라