메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관

Similar documents
Chap06(Interprocess Communication).PDF

운영체제 실습 - Introduction -

고급 IPC 설비

Microsoft PowerPoint - UnixNetProg3rd_08_완.ppt [호환 모드]

Abstract View of System Components

2009년 상반기 사업계획

<4D F736F F F696E74202D FBDC3BDBAC5DB56C0C720C7C1B7CEBCBCBDBAB0A320C5EBBDC5205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

6주차.key

chap7.key

10.

휠세미나3 ver0.4

고급 IPC 설비

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>


Chapter #01 Subject

Chapter 4. LISTS

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint APUE(Intro).ppt

SRC PLUS 제어기 MANUAL

11장 포인터

untitled

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

13주-14주proc.PDF

Microsoft PowerPoint APUE(File InO).pptx

untitled

03장.스택.key

The Pocket Guide to TCP/IP Sockets: C Version

강의10

untitled

Something that can be seen, touched or otherwise sensed

PowerPoint 프레젠테이션

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

본 강의에 들어가기 전

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

hd1300_k_v1r2_Final_.PDF


3ÆÄÆ®-11

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft Word - Network Programming_NewVersion_01_.docx

Embeddedsystem(8).PDF

T100MD+

untitled

The Pocket Guide to TCP/IP Sockets: C Version

歯9장.PDF

SMB_ICMP_UDP(huichang).PDF

슬라이드 1

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

Microsoft PowerPoint - 08-chap06-Queue.ppt

/chroot/lib/ /chroot/etc/

Deok9_Exploit Technique

Sena Technologies, Inc. HelloDevice Super 1.1.0

1217 WebTrafMon II

Microsoft PowerPoint - IOControl [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

untitled

제1장 Unix란 무엇인가?

03_queue

PowerPoint 프레젠테이션

ABC 11장

5.스택(강의자료).key

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft Word - ASG AT90CAN128 모듈.doc

DDX4038BT DDX4038BTM DDX4038 DDX4038M 2010 Kenwood Corporation All Rights Reserved. LVT A (MN)

Computer Programming (2008 Fall)

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

chap 5: Trees

C++-¿Ïº®Çؼ³10Àå

제12장 파일 입출력

0목차원고

chap01_time_complexity.key

hlogin7

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

슬라이드 1

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint 프레젠테이션


K&R2 Reference Manual 번역본

제1장 Unix란 무엇인가?

SIGPLwinterschool2012

Solaris Express Developer Edition

PowerPoint 프레젠테이션

Microsoft PowerPoint - 알고리즘_4주차_1차시.pptx

12-file.key

Microsoft PowerPoint - chap12 [호환 모드]

PowerPoint 프레젠테이션

slide2

Transcription:

[ R E P O R T ] 정보통신공학전공 200301582 김성태

메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관리프로그램과 sms 메시지전송에뮬레이션프로그램을활용하여 sms 전송프로그램을작성하고동작을확인해본다. 1 Linux 2 GCC 2. 필요환경 3. 과제수행내역 1 메시지큐에대한 STUDY 2 epda 프로그램구현 4. 과제수행 1 메시지큐에대한 STUDY 메세지버퍼 (Message buffer) /* message buffer for msgsnd and msgrcv calls */ /* msgsnd 와 msgrcv 호출을위한메세지버퍼 */ struct msgbuf { long mtype; /* type of message 메세지타입 */ char mtext[1]; /* message text 메세지내용 */ ; 커널 msg 구조 (Kernel msg structure) /* 시스템상에서각큐에대한 msqid 구조 */ struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; /* first message on queue 큐의처음메세지 */ struct msg *msg_last; /* last message in queue 큐의마지막메세지 */ time_t msg_stime; /* last msgsnd time 마지막으로 msgsnd 가수행된시간 */ time_t msg_rtime; /* last msgrcv time 마지막으로 msgrcv 가수행된시간 */ time_t msg_ctime; /* last change time 마지막으로 change 가수행된시간 */ struct wait_queue *wwait;

; struct wait_queue *rwait; ushort msg_cbytes; ushort msg_qnum; ushort msg_qbytes; /* max number of bytes on queue 큐의최대바이트수 */ ushort msg_lspid; /* pid of last msgsnd 마지막으로 msgsnd 를수행한 pid*/ ushort msg_lrpid; /* last receive pid 마지막으로받은 pid*/ 커널 ipc perm 구조 (Kernel ipc perm structure) struct ipc_perm { key_t key; ushort uid; /* owner euid and egid */ ushort gid; ushort cuid; /* creator euid and egid */ ushort cgid; ushort mode; /* access modes see mode flags below */ ushort seq; /* slot usage sequence number */ ; 시스템호출 :msgget() (SYSTEM CALL:msgget()) SYSTEM CALL: msgget(); PROTOTYPE: int msgget ( key_t key, int msgflg ); RETURNS: 성공시메세지큐의확인자 (message queue identifier) -1 on error: errno = EACCESS ( 접근권한이없음 ) EEXIST ( 큐가이미존재하여만들수없음 ) EIDRM ( 큐에삭제표시가되어있음 ) ENOENT ( 큐가존재하지않음 ) ENOMEM ( 큐를만들기에메모리가부족함 ) ENOSPC ( 최대큐의갯수를초과함 ) NOTES: 시스템호출 :msgsnd() (SYSTEM CALL:msgsnd()) SYSTEM CALL: msgsnd(); PROTOTYPE: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg ); RETURNS: 0 on success -1 on error: errno = EAGAIN (queue is full, and IPC_NOWAIT was asserted) EACCES (permission denied, no write permission) EFAULT (msgp address isn't accessable - invalid) EIDRM (The message queue has been removed) EINTR (Received a signal while waiting to write) EINVAL (Invalid message queue identifier, nonpositive message type, or invalid message size) ENOMEM (Not enough memory to copy message

buffer) NOTES: 시스템호출 :msgctl() (SYSTEM CALL:msgctl()) SYSTEM CALL: msgctl(); PROTOTYPE: int msgctl ( int msgqid, int cmd, struct msqid_ds *buf ); RETURNS: 0 on success -1 on error: errno = EACCES (No read permission and cmd is IPC_STAT) EFAULT (Address pointed to by buf is invalid with IPC_SET and IPC_STAT commands) EIDRM (Queue was removed during retrieval) EINVAL (msgqid invalid, or msgsz less than 0) EPERM (IPC_SET or IPC_RMID command was issued, but calling process does not have write (alter) access to the queue) NOTES:0) 2 epda 구현 사진 1: 전체실행화면

사진 2: SMS task 사진 3: PBOOK task 사진 4: SMS.log file 3 소스파일 PBOOK.c if(rtext->sourcetasknumber == SMS && rtext->code == REQUEST) { // send the recipient's telephone number request message to pbook task smessage.type = SMS; stext.sourcetasknumber = PBOOK; stext.code = RESPONSE; strcpy(stext.recipientname, rtext->recipientname); // strcpy(mbuf, rtext->data); // StructCopy(smessage.text, &stext, BUFSIZ); // pbook task

for(i=0;i<max_num;i++) { //initialize phone book with null string strcpy(pbook[i].num, "\0"); strcpy(pbook[i].name, "\0"); strcpy(pbook[max_num-1].num, "01065772607"); //insert the tjkim record at the end of the pbook strcpy(pbook[max_num-1].name, "stkim"); //which is to emulate the pbook task if((i = get_phone_number(stext.recipientname)) == -1) { strcpy(stext.recipientnumber, "There is no number!\0"); strcpy(stext.recipientnumber, pbook[i].num); strcpy(stext.data, rtext->data); StructCopy(smessage.text, &stext, BUFSIZ); SMS.c // Send the prepared message if(msgsnd(mqid, (void *)&smessage, BUFSIZ, 0) == -1) { fprintf(stderr, "Fail to send message!!"); exit(1); MessageLog(flog, "TX", smessage); nsmessage++; // if there is no message to recive, return if(msgrcv(mqid, (void *)&rmessage, BUFSIZ, SMS, IPC_NOWAIT) == -1) return; MessageLog(flog, "RX", rmessage); nrmessage++; rtext = (struct SMSTextFormat *) rmessage.text; // if receives the sms sending request from main task, request the number translation service to pbook task

if(rtext->sourcetasknumber == MAIN && rtext->code == REQUEST) { // send the recipient's telephone number request message to pbook task smessage.type = PBOOK; stext.sourcetasknumber = SMS; stext.code = REQUEST; strcpy(stext.recipientname, rtext->recipientname); strcpy(mbuf, rtext->data); StructCopy(smessage.text, &stext, BUFSIZ); // Send the prepared message if(msgsnd(mqid, (void *)&smessage, BUFSIZ, 0) == -1) { fprintf(stderr, "Fail to send message!!"); exit(1); MessageLog(flog, "TX", smessage); nsmessage++; if(rtext->sourcetasknumber == PBOOK && rtext->code == RESPONSE) { // emulate the SMS message sending by transmitting it into sms.log file instead of radio channel fprintf(flog, "%s", asctime(&t)); // write calendar time in front of message. fprintf(flog, "Recipient Name = %s: ", rtext->recipientname); fprintf(flog, "Recipient Number = %s: ", rtext->recipientnumber); fprintf(flog, "message = %s\n", mbuf); fflush(flog); 5. 느낀점 그동안알고있던부분을다시공부하는격이었는데... 이번의과제는당시공부를했을때대충한부분이어 서조금힘들었습니다. 하지만그동안잊고있던개념들을다시금생각해보는좋은계기가되었으며, 제자 신의부족한부분을돌이켜보는기회가되었습니다. 6. 본인역할 1 책을참고하여스스로작성하였음.

1 없음. 7. 참고사이트