operating system...
TRANSCRIPT
Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Operating System 9주차- IPC(InterProcess Communication) -
Real-Time Computing and Communications Lab.
Hanyang University
2Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 2Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Contents
About IPC
Shared Memory
Mutex
Semaphore
Quiz #1
과제 4
3Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 3Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
About IPC
프로세스간통신(Inter Process Communication, IPC)이란프로세스들사이에서로데이터를주고받는행위또는그에대한방법이나경로를뜻한다.
IPC를 통해프로세스들은다음이수행가능하다.
Data transmission
Data sharing
Event Alarm
Resource sharing
4Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 4Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
About IPC
Signal
Pipe
Shared Memory
Message Queue
5Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 5Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Memory Space
모든프로세스는동작에필요한자료를저장하기위한메모리공간을가지고있음
프로세스는동작시작시혹은실행중에이러한메모리공간을 Kernel에 요구하여공간을할당받아사용
6Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 6Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
프로세스들이공통으로접근, 사용할수있는메모리
메모리영역을공유해서사용함으로써프로세스간통신이가능
데이터가메모리에계속유지되어있기때문에, 여러번접근할수있다.
같은값에대해서여러프로세스가값을공유해야될때사용하면효과적이다.
Process 1 Process 2 Process n…
Shared
Memory
7Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 7Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
Shared Memory 구조 Shared memory 구조를관리하기위한자료구조
세그먼트의크기, creator 프로세스 ID, attach time 등과같은여러정보가저장된다.
include/uapi/linux/shm.h에 struct shmid_ds로정의되어있다.
8Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 8Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
Shared Memory 구조 struct shmid_ds
• shm_perm : 공유메모리퍼미션
• shm_segsz : 세그먼트의크기 (bytes)
• shm_atime : 마지막으로접근한시간
• shm_dtime : 마지막으로제거된시간
• shm_ctime : 마지막으로변경된시간
• shm_cpid : 공유메모리를만든프로세스 ID
• shm_lpid : 마지막으로작동한프로세스 ID
• shm_nattch : 현재접근한프로세스수
9Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 9Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
Shared Memory 리소스확인 Maximum number of segments
• $ cat /proc/sys/kernel/shmmni
Maximum size of a single shared memory segment
• $ cat /proc/sys/kernel/shmmax
The sum of all shared memory segments on the whole
system
• $ cat /proc/sys/kernel/shmall
10Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 10Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmget
공유메모리의 ID를반환하는함수
Def : int shmget(key_t key, int size, int shmflg)
Parameters
• key : 생성되는공유메모리를식별하기위한값
• size : 생성할공유메모리의크기
• shmflg : 공유메모리생성옵션으로 IPC_CREAT, 파일접근권한등…
11Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 11Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmget
Handler function (ipc/shm.c)
12Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 12Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmat
생성된공유메모리에물리적주소를자신의프로세스가할당하는가상메모리와연결시켜주는함수
Def : void *shmat(int shmid, const void *shmaddr, int shmflg);
Parameters
• shmid : shmget가반환하는값
• shmaddr : 프로세스의메모리주소로 0을넣으면커널이자동으로빈공간을찾아서할당해줌.
• shmflg : 공유메모리옵션으로 0을설정하면읽기/쓰기모드
13Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 13Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmat
Handler function (ipc/shm.c)
14Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 14Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmat
Handler function (ipc/shm.c)
15Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 15Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmdt
프로세스와공유메모리의연결을분리하는함수
Def : int shmdt (const void *shmaddr)
Parameter
• shmaddr : 분리할공유메모리주소
shmdt함수는 shmid_ds구조체의정보를갱신
• shm_dtime : detach time을 shmdt함수가호출된시간으로갱신
• shm_lpid : 호출한프로세스의 ID로 갱신
• shm_nattach : 1 감소 (0이되어 shmctl에의해삭제표시가되면공유메모리는삭제됨)
16Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 16Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmdt
Handler function (ipc/shm.c)
17Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 17Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmctl
공유메모리에대한정보를구하거나변경또는제거하는함수
Def : int shmctl(int shmid, int cmd, struct shmid_ds *buf)
Parameters
• shmid : 공유메모리번호 (shmget이반환하는값)
• cmd : 제어명령
IPC_STAT : 공유메모리 공간에 관한 정보를 가져옴
IPC_SET : 공유 메모리 공간에 대한사용자 권한 변경
IPC_RMID : 공유 메모리공간을 삭제 (shm_nattach가 0일 때까지 기다렸다가 삭제됨)
• buf : 공유메모리정보를구하기위한버퍼포인터
18Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 18Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory
함수 shmctl
Handler function (ipc/shm.c)
19Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 19Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory 실습 – server
20Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 20Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory 실습 - client
21Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 21Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Shared Memory 실습 -실행화면
두개의프로그램을각각의터미널에서실행시키면, 아래그림과같이메시지를번갈아가면서주고받는것을확인할수있습니다.
22Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 22Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
Quiz #1
Shared Memory를통한채팅프로그램구현 앞에서소개한공유메모리API와 pthread를통해구현
각각의프로세스들은공유메모리를통해자신이입력한값을서로주고받을수있어야함
프로세스는Reader thread와Writer thread를생성
• Reader thread : 공유메모리의내용을읽어사용자화면으로출력
똑같은 Data를 2번이상읽지않음.
같은프로세스내Writer thread가작성한 Data는읽지않는다.
• Writer thread : 공유메모리에사용자로부터입력받은내용을기록
동기화문제는발생하지않는다고가정한다.
• 11주차이후에다룰예정입니다.
23Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 23Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
과제 #4
1. 구현되어있는Message Queue커널코드를수정하여특정PID를검사하여출력하는Message Queue 함수를구현
Test Program
• Sender : 사용자로부터 Message를 보내고자 하는 Process ID를입력 받는 프로그램(Sender_PID), 일반적으로 보내는 프로그램 (Sender)로 구성
• Receiver : MessageQueue에서 데이터를 검사하는 도중 PID의값이 0보다 큰데이터를 찾을 경우 커널프린트를 사용하여 출력
Edited (or New) Functions
• msgsnd : ‘pid’ parameter를 추가, 새로운 시스템 콜로생성 혹은 수정
• msgrcv : 메시지 큐에서 pid값이 있는데이터를 받을 경우 커널프린트로 PID가존재하는 데이터를 찾았다는 메시지를 출력
24Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 24Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
과제 #4
Example
IPC Pid Insert Success : msgsnd에서 Insert 에성공했을 경우
Do_msgrcv success :
msgrcv에 접근이 성공할 경우
Find QueueMessage : Pid가 0이상인 데이터를 찾을 경우
PID Data is Not NULL !!:
PID 데이터가 NULL이 아닐 경우
Message queue success : msgrcv에서 메시지를 정상적으로 꺼내올 경우
25Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 25Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
과제 #4
Due : 2015/05/06 실습수업시간
보고서
• 표지
• 과제내용요약
• User 프로그램에서 Kernel 부분으로들어가서전체적으로어떻게흐름이돌아가는지간단하게설명
• Kernel Code 수정한부분에대한설명 (스크린샷첨부할것)
• 추가한시스템콜이있다면전체적인수정위치를스크린샷으로찍어첨부할것
• 최종결과스크린샷및분석
26Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 26Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
과제4
문의사항 이름 : 임정택
Tel : 010 - 4780 - 9294
E-Mail : [email protected]
이름 : 최윤식
Tel : 010 - 7970 - 0906
E-Mail : [email protected]
이름 : 박성현
Tel : 010 - 6612 - 8957
E-Mail : [email protected]
실습관련질문시제목을아래의양식에맞춰서메일을보내주세요
• ex> [운영체제] 학번_이름
지연제출에대해서는감점이있을수있음.
27Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr 27Real-Time Computing and Communications Lab., Hanyang University
http://rtcc.hanyang.ac.kr
과제4 -힌트
Linux-해당버전 / ipc / msg.c <- do_msgsnd_xxx 추가및 pid parameter 추가
Do_msgsnd에 있는코드를복사하여붙여넣기
System call ( 3 ~ 4장 ) 참고하여시스템콜추가
Linux-해당버전 / include / linux / msg.h의 msg_msg 구조에 pid 추가및위의함수추가
Msgrcv는 pid를검사하여스크린샷과같이나올수있도록수정만할것
기타문의사항은 [email protected]로 문의할것