Operating System 10주차 - IPC(InterProcess Communication) -

Slides:



Advertisements
Similar presentations
C 언어 Sun Moon University 1 of 25 C 언어 : 강의소개 강의실 : 산 211 담당교수 : 고경철 ( 정보통신공학과 ) 사무실 : 산학협력관 105B 면담시간 : 수업후 1 시간
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
CDMA SW 구조 AIITQC 서울본원교육장 양 종 윤.
Ubiquitous Computing Lab NS-3 Basic 박성진
NS–2 (Network Simulator)
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Mar OSEK/VDK Woo Dong Kyun.
Basic of Buffer Over Flow
Project #2-2. Pintos User Program
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Operating System 14주차 - Linux OOM Killer -
Understanding of Socket and File I/O
SAP QUERY SAP R/3 4.6C.
Internet Computing KUT Youn-Hee Han
USER’S MANUAL 모델명: CCR-201 코드시스템(주)
변화 하는 세계 무역 환경 (p.144~147) 5303김민영.
System Call Linux Kernel 수업 3번째.
Signal & Inter-Process Communication
Internet Computing KUT Youn-Hee Han
6장 단일 프로세서 스케줄링.
컴퓨터 과학 개론 √ 원리를 알면 IT가 맛있다 컴퓨터 과학도를 위한 첫 전공서 ehanbit.net.
Department of Computer Engineering
임베디드 운영체제 (리눅스 중심) Lecture #2.
구조체 struct 구조체와 함수 구조체의 배열, sizeof 연산자 열거형 enum 형 정의 typedef
Computer Science & Engineering
Linux System Programming
VHDL Package and Sub program
head data link data link data link NULL a b c
UNIX Unbounded A Beginning Approach
Embedded System Porting (2)
Department of Computer Engineering
[INA240] Data Structures and Practice
2장 운영 체제의 개요 운영체제의 개념 운영체제의 유형 운영체제의 발전 과정 운영체제의 구성 운영체제 서비스 시스템 구조
시스템 V IPC 기초[1] 시스템 V IPC 공통 요소 키 생성
10 시스템V의 프로세스간 통신.
Socket Address Structure and Byte Ordering Functions
Ch 13. Windows 관리 기구.
Socket Address Structure and Byte Ordering Functions
Operating System 5주차 - System Call Analysis -
운영체제 (Operating Systems) (Multi-Thread Programming)
Linux/UNIX Programming APUE (Interprocess Communication)
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Next Radio System Lab 소개
파일 시스템 인터페이스(File System Interface)
임베디드 하드웨어 Report.
5주차: Functions in C.
제2장 프로세스 이나현.
하나샵 리뉴얼 오픈 이벤트 V3.0 B2C팀 이혜원.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
Signal & Inter-Process Communication
응급의학과 설명회 국내 응급의학의 역사, 현황 및 전망
자료구조(SCSC) Data Structures
2018 봄학기 Pusan National University School of CSE
컴퓨터III-인터넷 발표 일시 : (수) 발표자 : 김광호
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Analog to Digital Converter
운영체제 (Operating Systems) (Memory Management Strategies)
임베디드 하드웨어 Report.
네트워크 프로그래밍의 이해 School of Electronics and Information.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
Operating System Multiple Access Chatting Program using Multithread
23. Unix 시스템 커널. 개요 커널의 기본 서비스 커널의 특징 참고서적 프로세스 관리 장치 관리 파일 관리 가상 메모리
Department of Computer Engineering
■ 2016년 벤처천억기업 트로피 수상 7월21일 서울 논현 임패리얼팰리스 서울호텔에서 ‘2016 벤처천억기업 기념식’ 행사가 개최되었다. 이날 행사에는 주영섭 중소기업청장을 비롯해 지난해 1000억 이상의 매출을 올린 로보스타, 더블유게임즈, 디엠티, 손오공, 솔루엠.
8. 리눅스의 내부 군자삼락 [君子三樂] 청출어람이청어람 [ 靑出於藍而靑於藍 ] Why Linux ?
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
1. 데이터베이스 환경.
Signal & Inter-Process Communication
房思琪的初恋乐园 ‘팡쓰치’로 보는 문학의 힘 정은비.
Presentation transcript:

Operating System 10주차 - IPC(InterProcess Communication) - Real-Time Computing and Communications Lab. Hanyang University yjuly0708@hanyang.ac.kr rooterby@gmail.com

Contents About IPC Message Queue Quiz #1 과제 #5

About IPC 프로세스 간 통신(Inter Process Communication, IPC)이란 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다. IPC를 통해 프로세스들은 다음이 수행 가능하다. Data transmission Data sharing Event Alarm Resource sharing

About IPC Signal Pipe Shared Memory Message Queue

Message Queue 메시지 큐란 IPC에서 “메시지 단위”의 송수신을 가능하게 해주는 큐 이다. Linux Kernel에서 전역적으로 관리되며, 모든 프로세스에서 접근이 가능하도록 구현되어있다.

Message Queue 프로세스가 생성한 메시지는 IPC 메시지 큐에 저장되고, 다른 프로세스가 메시지를 읽으면 큐에서 제거된다.

Message Queue Message Queue 구조 Message : 메시지 큐에서 메시지는 고정된 크기의 헤더(Header)와 가변적인 크기를 가지는 Text로 이루어진다. 메시지의 헤더(Header) 부분에는 메시지 유형(type)을 나타내는 값이 붙을 수 있다. 이 값을 이용해 선택적으로 메시지를 읽는 것이 가능하다. include/linux/msg.h에 struct msg_msg로 정의되어 있다.

Message Queue Message Queue 구조 Message Queue : 시스템에서 각각의 메시지 큐는 msg_queue라는 structure를 가지게 된다. msg_queue structure는 permission 정보 외에 현재 큐의 bytes 수, message의 개수, 큐의 최대 bytes 수 등의 정보를 가지고 있다. include/linux/msg.h에 struct msg_queue로 정의되어 있다.

Message Queue Message Queue 구조 struct msg_queue는 각각의 메시지와 linked list의 구조로 연결되어 있다. msg_queue의 q_messages는 메시지 큐의 가장 앞쪽의 메시지와 연결이 되고, 각각의 메시지는 m_list를 통해 연결을 이룬다.

Message Queue Message Queue 구조 마지막으로 송수신한 프로세스 ID, 송수신 시간, 큐의 최대 바이트 수 등 여러 정보가 저장된다. include/uapi/linux/msg.h에 struct msqid_ds로 정의되어 있다.

Message Queue msgget function 메시지 큐를 생성하거나 기존의 메시지 큐를 참조하는 함수 Def : int msgget(key_t key, int msgflg) Parameters key : 메시지 큐를 구분하기 위한 고유 키 msgflg : 메시지 큐를 생성할 때 옵션을 지정

Message Queue msgsnd function 메시지 큐에 해당 데이터를 전송하는 함수 Def : int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg) Parameters msqid : 메시지 큐 ID msgbuf structure 데이터 전송 시 사용되는 메시지 구조 msgbuf의 첫 4 bytes는 반드시 long 타 입이어야 하며, 값은 1 이상이어야 함 mtext는 문자열이나 binary 등 임의의 데이터로 사용이 가능함 msgflg : 메시지 전송의 옵션을 지정

Message Queue msgrcv function 메시지 큐로부터 데이터를 수신하는 함수 Def : ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtype, int msgflg) Paramters msqid : 메시지 큐 ID msgp : 메시지 큐에서 읽은 메시지를 저장하는 공간 msgsz : 메시지 저장 공간의 크기 msgflg : 메시지가 없는 경우의 옵션을 지정

Message Queue msgrcv function Parameters msgtyp : 메시지 큐에 있는 자료 중 어떤 자료를 읽을지에 대한 옵션을 지정

Message Queue msgctl function 메시지 큐의 현재 상태 정보를 보거나 변경, 삭제 등을 수행하는 함수 Def : int msgctl(int msqid, int cmd, struct msqid_ds *buf) Parameters msqid : 메시지 큐의 ID cmd : 메시지 큐에 대한 제어 명령 buf : cmd 명령에 따라 동작하는 메시지 큐 객체 structure

Message Queue Message Queue 리소스 확인 IPC 메시지 큐의 자원 수 $ cat /proc/sys/kernel/msgmni 각 메시지의 크기 (Default : 8192) $ cat /proc/sys/kernel/msgmax 큐에 있는 메시지의 총 크기 (Default : 16,384) $ cat /proc/sys/kernel/msgmnb

Message Queue 실습 - sender

Message Queue 실습 - receiver

Kernel’s Linked List 일반적인 Linked List 보통 Generic한 linked list는 구현하고자 하는 구조체에 해당 구조체를 가리키는 포인터 변수를 삽입하여 구현 하지만 이런 방식으로 구현할 경우 여러 구조체에 대해 해당되는 linked list를 동적으로 생성해야 한다는 번거로움이 존재

Kernel’s Linked List Linux Kernel에서는 일반적인 방식 대신 생각을 전환하여 반대로 구현 linked list node를 Data 안에 넣는 방식으로 구현 include/linux/list.h 에 해당 매크로들이 선언되어 있음

Quiz #1 1. 현재 구현되어 있는 Message Queue의 의미구조를 파악하고 커널 코드를 수정하여 Priority 기반의 새로운 Message Queue를 구현한다. Priority는 해당 task의 Priority를 참조 Message structure에 Priority 개념을 추가하여, 우선순위가 높은 task가 보낸 메시지가 큐의 앞쪽에 배치되도록 변경 Test Program : 총 3개의 프로그램을 통해 테스트 Normal sender : nice value = 0의 우선순위를 가지고 메시지 큐에 메시지를 보내는 프로그램 Priority sender : 0이 아닌 다른 nice value를 가지고 메시지 큐에 메시지를 보내는 프로그램 Receiver : 메시지 큐의 전체 메시지를 모두 출력하는 프로그램 (모든 메시지는 같은 메시지 타입을 가지고 있다고 가정) 2. Test 두 개의 terminal에서 Normal sender와 Priority sender가 1초의 간격을 가지고 각각 메시지 큐에 메시지를 보낸다. 전송이 모두 끝나면 Receiver를 통해 메시지 큐의 전체 메시지를 모두 출력

Quiz #1 Hint1 : ipc/msg.c를 참조하여 기존 msgsnd, msgrcv 함수의 동작을 파악 Hint2 : Kernel에서 사용되는 연결 리스트인 struct list_head 의 구조와 동작을 참조 Hint3 : 메시지 데이터 구조는 실습 예제의 구조를 참조하며, 메시지 데이터의 순서와 우선순위에 따른 메시지의 구별이 이루어져야 함

Quiz #1 Example (Normal sender, Priority sender)

Quiz #1 Example (기존의 Message Queue)

Quiz #1 Example (Priority Message Queue)

과제 #5 1. 구현되어 있는 Message Queue 커널 코드를 수정하여 Signal 기반의 Message Queue 함수를 구현 사용자로부터 보내고자 하는 Process ID를 Parameter로 받음 Message structure에 PID 개념을 추가하여, 해당 Message를 Signal을 통해 Direct로 주고 받을 수 있게 구현 Test Program Sender : 사용자로부터 Message를 보내고자 하는 Process의 ID를 받으면, 해당 Message를 Queue에 삽입하고 Process로 Signal을 보냄 Receiver : 다른 일을 하고 있다가, Signal을 받으면 Message Queue에 접근하여 Signal을 보낸 프로세스의 Message를 읽음 Edited (or New) Functions msgsnd : ‘pid’ parameter를 추가, pid >= 0 이면 Message Queue에 사용자로부터 받은 Message를 넣고 pid로 Signal을 보냄 msgrcv : ‘pid’ parameter를 추가, Message Queue에서 해당 pid 값을 가지고 있는 Message 검색

과제 #5 2. Test 첫 번째 terminal에서는 Receiver Program을 실행하여 일반적인 task( Reading messages, Calculating matrix 등)를 수행, 두 번째 terminal에서는 사용자로부터 PID 값을 입력 받아 Signal msgsnd 함수 수행 Receiver Program에서 Signal handling을 통해 해당 Message를 제대로 읽는지 확인 5/22 실습 수업시간 조교들이 프로그램 동작 유무 직접 확인

과제 #5 Example

과제 #5 Example

과제 #5 Due : 2015/05/22 실습 수업 시간 5/22 실습 보고서 출력해서 수업시간에 제출 보고서 표지 과제 내용 요약 Kernel Code 수정한 부분에 대한 설명 (스크린샷 첨부할 것) 추가한 시스템 콜이 있다면 핸들러 함수부분만 스크린샷 첨부하고 설명 Example의 나온 receiver, sender처럼, Signal을 이용하여 어떻게 동기적으로 구현하였는지 Kernel Code 수정한 부분과 연관 지어 설명 최종 결과 스크린샷 및 분석