Term Project Team Member

Slides:



Advertisements
Similar presentations
Linux System Programming
Advertisements

Basic of Buffer Over Flow
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Activation Records & Recursion
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Linux/UNIX Programming APUE (Process Control)
제 8 장  파서 생성기 YACC 사용하기.
C 프로그래밍.
Department of Computer Engineering
인공지능실험실 석사 2학기 김승겸 TCP/IP Socket Programming… 제 10장 멀티태스킹 기반의 서버구현 인공지능실험실 석사 2학기 김승겸
Signal & Inter-Process Communication
공유 메모리[1] 공유 메모리 공유 메모리 생성: shmget(2) 같은 메모리 공간을 두 개 이상의 프로세스가 공유하는 것
Department of Computer Engineering
Department of Computer Science and Engineering
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
Multi-thread Programming
C언어: 배열 (Arrays).
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
6장. printf와 scanf 함수에 대한 고찰
6 프로세스 생성과 실행.
6 프로세스 생성과 실행.
Linux System Programming
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
제 12장 I/O멀티플렉싱(Multiplexing)
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Department of Computer Engineering
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
Department of Computer Engineering
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
Linux System Programming
멀티쓰레드 기반의 서버구현 School of Electronics and Information.
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
Signal & Inter-Process Communication
Department of Computer Engineering
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
Socket Address Structure and Byte Ordering Functions
Advanced Socket Programming
Department of Computer Engineering
5 프로세스 정보.
13. 포인터와 배열! 함께 이해하기.
Signal & Inter-Process Communication
TCP / IP 소켓 프로그래밍 3주차 ( Ch.10 ~ Ch.14 ).
네트워크 프로그래밍의 이해 School of Electronics and Information.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Department of Computer Engineering
Department of Computer Engineering
Signal & Inter-Process Communication
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
Department of Computer Engineering
18장. 다차원 배열 그리고 포인터.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
argc, argv 의 사용방법 #include <stdio.h>
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Signal & Inter-Process Communication
Linux/UNIX Programming
C.
Signal & Inter-Process Communication
배열, 포인터, 함수 Review & 과제 1, 2.
한국 휴렛팩커드/고객지원사업본부/IT 기술사업부 박기영
Presentation transcript:

Term Project Team Member 2005200021 권용일 2006200030 김나연 2006200089 김나영 1조 2006200031 김다영 2003200039 김범석 2004200055 김석영 2조 2003200066 김영호 2004200081 김재면 2003200079 김지수 3조 2004210014 김지훈 2004200116 김현준 2002200129 남대영 4조 2002200139 문규호 2003210014 박세진 2004200170 박해민 5조 2005200160 박효선 2005200171 서영연 2004200186 석민걸 6조 2002200201 손완기 2003200183 신상배 2003200211 유시현 7조 20031794 이민우 2004200274 이성종 2005200269 이승진 8조 2002200301 이종민A 2004200298 이종민B 2003200303 장경훈 9조

2006200310 장성만 2003200309 장한솔 2003200311 전광현 10조 200032627 정경민 2003200323 정승옥 2006200346 조무형 11조 2005200382 최천사 2004200404 탁우영 2002200410 허영수 2003200408 황현준 12조

Unix Process School of Electronics and Information. Kyung Hee University. Dae Sun Kim <dskim@networking.khu.ac.kr>

다중 접속 서버의 구현 방법들 프로세스 생성을 통한 멀티태스킹(Multitasking) 서버의 구현. select 함수에 의한 멀티플렉싱(Multiplexing) 서버의 구현. 쓰레드를 기반으로 하는 멀티쓰레딩(Multithreading) 서버의 구현

프로세스에 대한 이해 프로세스란 실행되고 있는 프로그램의 기본 단위이다. 생성된 프로세스는 운영체제의 의해 할당된 고유한 ID를 지닌다. 하나의 프로그램 내에서 여러 개의 프로세스가 동시에 실행 될 수 있다.

Process의 정의 Program 이란 Process 란 C, C++, Java와 같은 프로그램 언어로 작성된 소스코드 Running program hard disk main memory read Program 1 Process 1 read Process 2 Program 2 CPU read Process 3 Program 3 read Process 4 Program 4

Process는 User mode 또는 Kernel mode에서 실행 void main() { char buf[512]; int n = read(0, buf, 512}; n++; exit(0); } User mode에서 실행 Kernel mode에서 실행 User mode에서 실행 Kernel mode에서 실행 running state waiting state zombie state stop state

Running state Waiting state Stop state Zombie state 프로세스가 CPU 서비스를 받을 수 있는 상태 Waiting state 입출력 처리와 같은 어떤 조건을 기다리는 상태 Stop state 특정 시그널을 커널로 부터 받아 프로세스의 동작이 정지된 상태 Zombie state 프로세스의 실행은 끝났으나 여전히 메모리에 존재하는 상태

프로세스에 대한 이해

#include<stdio.h> #include<stdlib.h> extern char **environ; //extern 변수 int init_global_var = 3; //초기화된 global 변수 int unint_global_var; //초기화되지 않은 global 변수 int main(int argc, char **argv) { int auto_var; //자동 변수 static int static_var; //static 변수 register int reg_var; //register 변수 char *auto_ptr; //자동 변수 auto_ptr = malloc(10); //메모리 10byte 할당 return 0; } 메모리 영역 메모리 내용 및 변수들 환경변수와 명령해 인자 영역 *envirron 내용 stack argc, argv, auto_var, reg_var, auto_ptr heap malloc()이 할당한 10 byte 데이터 영역 초기화 안 된 영역 unint_global_var, static_var 초기화 된 영역 init_global_var = 3 코드영역 어셈블된 프로그램 코드

Error Stack func() 호출 process int main() { char *ptr; ptr = func(); } char *func() { char arr[10]; return arr; Error 10 byte 배열 할당 Address return Stack 영역

heap func() 호출 process int main() { free(ptr) 호출 char *ptr; ptr = func(); free(ptr) } char *func() { char *arr; arr = malloc(10); return arr; free(ptr) 호출 10 byte 배열 할당 Address return heap 영역

fork 함수 호출을 통한 프로세스의 생성 fork 함수 호출을 통한 프로세스의 생성은 복사에 의한 생성이다. #include <sys/types.h> #include <unistd.h> pid_t fork(void);

fork 함수 호출을 통한 프로세스의 생성 복사본 프로세스 a=10 a=10 pid=1133 b=20 pid=0 b=20 int a=10; int main() { pid_t pid; int b=20; pid = fork(); ……. } int a=10; int main() { pid_t pid; int b=20; pid = fork(); ……. } a=10 a=10 Data 영역 Data 영역 pid=1133 b=20 pid=0 b=20 Stack 영역 Stack 영역 복사본 프로세스 원본 프로세스

Parent process PID = 100 *. 자기 자신을 복제 *. 메모리 영역은 독립 *. PID 는 다름 *. 완전히 복제된 두 개의 Process 가 돌게 된다. Fork() Child process PID = 101 Return 값 = 0 Parent process PID = 100 Return 값 = 101

PID = fork(); If (PID == 0) child_work(); // child process에서 처리 Else parent_work(); // parent process에서 처리

프로세스의 종료 종료 조건 main() 함수에서 return 되는 경우 exit() 함수를 호출할 경우 프로세스 종료 signal을 받은 경우

예제 확인 #1 #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(int argc, char **argv) { pid_t pid; int data=10; pid=fork(); if(pid==-1) printf("fork 실패, 프로세스 id : %d \n", pid); printf("fork 성공, 프로세스 id : %d \n", pid); if(pid==0) /* 자식 프로세스라면 */ data+=10; else /* 부모 프로세스라면 */ data-=10; printf("data : %d \n", data); return 0; }

예제 확인 #1 실행 화일 fork.c 실행 결과

예제 확인 #2 int global_var = 0; // 전역 변수 선언 int main(void) { pid_t pid; int local_var = 0; // 지역 변수 선언 if((pid = fork()) < 0) { printf("fork error\n"); exit(0); // 자식 프로세스 } else if (pid == 0) { global_var++; local_var++; printf("CHILD - my pid is %d and parent's pid is %d\n", getpid(), getppid());} else { // 부모 프로세스 sleep(2); // 2초 쉰다 global_var += 5; local_var += 5; printf("PARENT - my pid is %d, child's pid is %d\n", getpid(), pid);} printf("\t global var : %d\n", global_var); printf("\t local var : %d\n", local_var);

예제 확인 #2 실행 파일 pid_t getpid(void) //자신의 PID를 얻음 fork_test.c pid_t getpid(void) //자신의 PID를 얻음 pid_t getppid(void) //부모 프로세스의 PID를 얻음

예제 확인 #3 파일명 프로그램 설명 tcp_talkserv.c tcp_talkcli.c 토크서버에서는 먼저 listen()을 호출하고 accept()를 호출하여 클라이언트와 연결하고 연결이 이루어지면 fork()를 호출 부모 프로세스는 사용자의 키보드 입력을 받아 클라이언트에게 전송 자식 프로세는 클라이언트가 보내온 메시지를 화면에 출력 strstr(검색당할문자열, 검색할문자열); 리턴값: 검색당할문자열에서 검색할문자열중에 일치하는 문자가 발견된 포인터.

예제 확인 #3 char string[100] = "이문자열은 3을 포함함.\n"; char * result; result = strstr( string, "0123456789" ); printf( "%s\n", result); /* 출력 */ 3을 포함함.

실습과제 새로운 프로세스를 생성하고 이 프로세스에서 10초 간격으로 현재의 시간을 클라이언트에게 전송 하는 프로그램 작성 TCP 이용 UDP 이용