Department of Computer Science and Engineering

Slides:



Advertisements
Similar presentations
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Advertisements

9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
컴퓨터 프로그래밍 기초 [Final] 기말고사
Signal & Inter-Process Communication
Department of Computer Engineering
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
Multi-thread Programming
6 프로세스 생성과 실행.
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
Multi-thread Programming
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Multi-thread Programming
Chapter 06 프로세스와 예약작업 관리 Solaris 1. 프로세스 관리
Department of Computer Engineering
Multi-thread Programming
Signal & Inter-Process Communication
Term Project Team Member
Department of Computer Engineering
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
파이프와 exec 시스템 호출 (ls | wc)
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Sungkyunkwan University OS Project Dongkun Shin
Department of Computer Science and Engineering
TCP/IP Socket Programming…
Socket Address Structure and Byte Ordering Functions
11장. 1차원 배열.
Department of Computer Engineering
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Signal & Inter-Process Communication
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
24장. 파일 입출력.
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
School of Electronics and Information. Kyung Hee University.
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Department of Computer Engineering
TCP / IP 소켓 프로그래밍 4주차 ( Ch.15 ~ Ch.18 + α ).
Department of Computer Engineering
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Signal & Inter-Process Communication
Department of Computer Engineering
다중처리 기술 School of Electronics and Information. Kyung Hee University.
Canary value 스택 가드(Stack Guard).
Multi-thread Programming
구조체(struct)와 공용체(union)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Department of Computer Engineering
06. 디바이스의 등록과 해제 김진홍
Signal & Inter-Process Communication
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
CODE INJECTION 시스템B 김한슬.
Signal & Inter-Process Communication
Presentation transcript:

Department of Computer Science and Engineering Unix Process Department of Computer Science and Engineering Kyung Hee University. Choong Seon Hong

유닉스 기반 다중 서버 구현 방법 클라이언트들이 동시에 접속할 수 있는 서버 서비스를 동시에 처리할 수 있는 서버 프로세스 생성을 통한 멀티태스킹 (Multitasking) 서버의 구현 select 함수에 의한 멀티플렉싱 (Multiplexing) 서버의 구현 쓰레드를 기반으로 하는 멀티쓰레딩 (Multithreading) 서버의 구현

Process의 정의 Program 이란 Process 란 hard disk main memory read Program 1 C, C++, Java와 같은 프로그램 언어로 작성된 소스코드 Process 란 Running program 생성된 프로세스는 운영체제의 의해 할당된 고유한 ID를 지닌다. (ps –u) 하나의 프로그램 내에서 여러 개의 프로세스가 동시에 실행 될 수 있다. 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의 모드 Process는 User mode 또는 Kernel mode에서 실행 사용자 모드 커널 모드 사용자의 권한으로 명령이 실행 커널 모드 커널의 권한으로 실행 하드디스크를 읽기 위한 read() 함수 void main() { char buf[512]; int n = read(0, buf, 512}; n++; exit(0); } User mode에서 실행 Kernel mode에서 실행 User mode에서 실행 Kernel mode에서 실행

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

Process의 메모리 배치 프로세스는 일정한 메모리를 배정 받아 사용 (프로세스 이미지) C 프로그램과 이미지의 내용 프로그램 실행에 필요한 어셈블러 코드, 변수가 저장 원칙적으로 한 프로세스는 다른 프로세스의 메모리 영역에 접근 불가 C 프로그램과 이미지의 내용 #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; } 메모리 영역 메모리 내용 및 변수들 환경변수와 명령행 인자 영역 *environ 내용 stack argc, argv, auto_var, reg_var, auto_ptr heap malloc()이 할당한 10 byte 데이터 영역 초기화 안 된 영역 unint_global_var, static_var 초기화 된 영역 init_global_var = 3 코드영역 어셈블된 프로그램 코드

Stack and Heap Stack Heap 현재 호출되어 실행중인 함수의 코드와 환경 정보를 저장 main()에서 printf()를 호출하였다면 main()이 차지하는 영역위에 printf()를 처리하기 위한 메모리가 할당되고 printf()가 수행 printf()가 리턴되면 printf()와 관련된 영역은 삭제되고 프로세스의 수행은 main()으로 돌아감 함수 내부에서 임시로 사용되는 자동 변수도 스택 영역에 할당 Heap 스택은 사용하던 메모리가 함수의 종료와 함께 사라짐 이 문제를 해결하기 위해 리턴 되어도 사라지지 않도록 한 영역이 힙 malloc() 함수를 사용한 영역은 힙에 저장

Stack Error 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()를 호출한 프로세스의 이미지를 복사하여 새로운 프로세스를 생성 원본 프로세스의 모든 메모리 공간 (데이터 영역, heap, stack)을 그대로 복사 부모/자식 프로세스 부모 프로세스 : fork()를 호출한 프로세스 fork()의 리턴값 : 자식프로세스의 PID 자식 프로세스 : fork()에 의해 새로 생성된 프로세스 fork()의 리턴값 : 0 프로세스의 공유 부모와 자식 프로세스는 변수를 서로 공유하지 않음 개설한 파일이나 소켓은 프로세스 이미지 외부에 존재하므로 공유

fork() 부모/자식 프로세스의 실행과 리턴값 Parent process PID = 100 *자기 자신을 복제 *메모리 영역은 독립 *PID 는 다름 *완전히 복제된 두 개의 Process 가 실행 된다. fork() Child process PID = 101 return 값 = 0 Parent process PID = 100 return 값 = 101

fork 함수 호출을 통한 프로세스의 생성 fork 함수 호출을 통한 프로세스의 생성은 복사에 의한 생성이다. 1…….. 2…….. 3. pid=fork() 4……. 5……. Fork에 의한 복사 원본 프로세스 복사본 프로세스 리턴 값은 복사본 프로세스 ID 리턴 값은 0 #include <sys/types.h> #include <unistd.h> pid_t fork(void); PID = fork(); if (PID == 0) child_work(); // child process에서 처리 else parent_work(); // parent process에서 처리

fork 함수 호출을 통한 프로세스의 생성 복사본 프로세스 원본 프로세스 a=10 a=10 pid=1133 b=20 pid=0 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 영역 복사본 프로세스 원본 프로세스

Process의 종료 종료 조건 exit() main() 함수에서 return 되는 경우 exit() 함수를 호출할 경우 프로세스 종료 signal을 받은 경우 exit() 프로세스가 자신을 종료시키는데 사용 열려 있던 모든 파일을 닫기 위해 자동으로 close() 함수를 호출

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

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

예제 확인 #3 파일명 프로그램 설명 tcp_talkserv.c tcp_talkcli.c 토크서버에서는 먼저 listen()을 호출하고 accept()를 호출하여 클라이언트와 연결하고 연결이 이루어지면 fork()를 호출 부모 프로세스는 사용자의 키보드 입력을 받아 클라이언트에게 전송 자식 프로세스는 클라이언트가 보내온 메시지를 화면에 출력 strstr 문자열 안에 특정 문자열이 존재하는지 여부를 체크하는 함수이다. char * strstr(const char * string, const char * strCharSet);  string에서 strCharSet을 검색해 해당 문자열 위치를 포인터로 리턴한다.

예제 확인 #3

Fork()를 사용하여 다중 사용자가 접속가능한 TCP 기반의 에코 프로그램을 작성하시오. 실습 Fork()를 사용하여 다중 사용자가 접속가능한 TCP 기반의 에코 프로그램을 작성하시오. main()에서 무한 루프를 돌며 클라이언트를 accept() 해줌 accept()이 리턴될 때마다 fork()를 호출하여 자식 프로세스가 새로운 클라이언트의 접속을 수락하여 데이터를 수신 자식 프로세스는 하나의 클라이언트가 보내온 메시지를 해당 클라이언트에게 그대로 전송 해줌 반드시 3개 이상의 클라이언트가 접속되는지 확인할 것!!