Linux/UNIX Programming APUE (Process Control)

Slides:



Advertisements
Similar presentations
Term Project Hints Topics Keep-alive CGI Multi-thread Multi-process Event-based.
Advertisements

Signal Handling ( 금 ) 한 민 규
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제1장 시작하기 *.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Basic of Buffer Over Flow
Project #2-2. Pintos User Program
SYSTEM CALL (Syscall) CSLAB SEWON PARK.
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
Department of Computer Engineering
System Call Linux Kernel 수업 3번째.
인공지능실험실 석사 2학기 김승겸 TCP/IP Socket Programming… 제 10장 멀티태스킹 기반의 서버구현 인공지능실험실 석사 2학기 김승겸
Signal & Inter-Process Communication
공유 메모리[1] 공유 메모리 공유 메모리 생성: shmget(2) 같은 메모리 공간을 두 개 이상의 프로세스가 공유하는 것
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
Department of Computer Engineering
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
Multi-thread Programming
6 프로세스 생성과 실행.
6 프로세스 생성과 실행.
Linux System Programming
10장 메모리 관리.
Department of Computer Engineering
2장 운영 체제의 개요 운영체제의 개념 운영체제의 유형 운영체제의 발전 과정 운영체제의 구성 운영체제 서비스 시스템 구조
Department of Computer Engineering
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
멀티쓰레드 기반의 서버구현 School of Electronics and Information.
파일 및 디렉토리(1) 여러 함수들 chdir(“category”) || die “cannot cd to temp”;
Computer Architecture
링크 파일 생성[1] 링크 하드링크 생성 : link(2) 이미 있는 파일이나 디렉토리에 접근할 수 있는 새로운 이름
Linux/UNIX Programming APUE (Files & Directories)
Term Project Team Member
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
Lecture #3 프로세스(Process).
DataStage 운영자 지침서 Operator’s Guide
Geek-OS Project 정영진
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
Linux/UNIX Programming APUE (Process Environment)
Xen and the Art of Virtualization
Department of Computer Engineering
Linux/UNIX Programming APUE (The Environment of a Linux/Unix Process)
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
5 프로세스 정보.
adopted from KNK C Programming : A Modern Approach
Signal & Inter-Process Communication
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
Memory & Data Management.
운영체제 (Operating Systems) (Memory Management Strategies)
Operating System 10주차 - IPC(InterProcess Communication) -
Linux/UNIX Programming
Linux/UNIX Programming APUE (Thread Programming)
Stepper Motor 디바이스 드라이버
Operating System Multiple Access Chatting Program using Multithread
23. Unix 시스템 커널. 개요 커널의 기본 서비스 커널의 특징 참고서적 프로세스 관리 장치 관리 파일 관리 가상 메모리
Department of Computer Engineering
이산수학(Discrete Mathematics)
8. 리눅스의 내부 군자삼락 [君子三樂] 청출어람이청어람 [ 靑出於藍而靑於藍 ] Why Linux ?
Execution with Unnecessary Privileges
창 병 모 숙명여대 전산학과 자바 언어를 위한 CFA 창 병 모 숙명여대 전산학과
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
제4장 유닉스 쉘 숙명여대 창병모
제5장 디버깅과 추적 문봉근.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
argc, argv 의 사용방법 #include <stdio.h>
Signal & Inter-Process Communication
Linux/UNIX Programming
3장 파일 다루기 한빛미디어(주).
Chapter 7: Deadlocks.
가상 기억장치 (Virtual Memory)
Presentation transcript:

Linux/UNIX Programming APUE (Process Control) 문양세 강원대학교 IT대학 컴퓨터과학전공

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

Process Identifiers APUE (Process Control) Every process has a unique process ID, a nonnegative integer. (모든 프로세스는 양수의 유일한 식별자(PID)를 가짐) System Processes: 0(or 1) ~ 10000번 이하 System Process 예제 swapper: scheduler process (it controls time slots for processes) init: invoked by the kernel at the end of the bootstrap procedure pagedaemon: supports the paging of the virtual memory system Linux/Unix 버전에 따라 System Process 종류가 상이함

System Process 예제 (1/2) APUE (Process Control)

System Process 예제 (2/2) APUE (Process Control)

PID 관련 함수 None of these functions has an error return. APUE (Process Control) #include <sys/types.h> #include <unistd.h> pid_t getpid(void); // returns process ID pid_t getppid(void); // returns parent process ID uid_t getuid(void); // returns real user ID uid_t geteuid(void); // returns effective user ID gid_t getgid(void); // returns real group ID gid_t getegid(void); // returns effective group ID None of these functions has an error return.

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

fork() (1/3) APUE (Process Control) #include <sys/types.h> #include <unistd.h> pid_t fork(void); fork() is the ONLY way to create a process in Linux/Unix kernel. Child process is the new process created by fork(). fork() is called once, but returns twice! returns 0 in child process. returns the child process ID in parent process.

fork() (2/3) Child gets a copy of parent’s data space, heap, and stack APUE (Process Control) Child gets a copy of parent’s data space, heap, and stack Often, read-only text segment is shared Parent and child continue executing instructions following the fork() call Often, fork() is followed by exec().

fork() (3/3) APUE (Process Control)

예제: fork.c (1/2) APUE (Process Control)

예제: fork.c (2/2) APUE (Process Control) 실행 결과

Properties Inherited to the Child APUE (Process Control) real user and group ID, effective user and group ID supplementary group IDs process group ID, session ID set-user-ID and set-group ID flags current working directory root directory file mode creation mask signal mask and dispositions the close-on-exec flag for any open file descriptors environment attached shared memory segments resource limits

Properties NOT Inherited to the Child APUE (Process Control) the return value from fork() the process IDs are different file locks pending alarms are cleared for the child the set of pending signals for the child is set to the empty set

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

exit() – Process Termination APUE (Process Control) A process can terminate in 5 ways: Normal Termination return from main() exit()  w/ cleanup procedure _exit()  w/o cleanup procedure Abnormal Termination calling abort() (generates SIGABRT signal) process receives signals

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

Race Conditions (1/2) Multiple processes share some data. APUE (Process Control) Multiple processes share some data. Outcome depends on the order of their execution (i.e. RACE) (Process A) x = 20; (Process B) x += 10; After fork(), we cannot predict if the parent or the child runs first! The order of execution depends on: System Load Kernel’s Scheduling Algorithm

Race Conditions (2/2) For parent to wait for child, APUE (Process Control) For parent to wait for child, Call wait(), waitpid(), wait3(), wait4() Use signals or other IPC methods For child to wait for parent, while(getppid() != 1) sleep(1); // Parent가 죽을 때까지 기다림

예제: race.c (1/2) #include <stdio.h> // race.c APUE (Process Control) #include <stdio.h> // race.c #include <sys/types.h> err_sys(char *p) { perror(p); exit(-1); } int main(void) { pid_t pid; if ((pid = fork()) < 0) err_sys("fork error"); else if (pid == 0) charatatime("output from child\n"); else charatatime("output from parent\n"); exit(0); } charatatime(char *str) { char *ptr; int c; for (ptr = str; c = *ptr++; ) { putc(c, stdout); fflush(stdout); usleep(1);

예제: race.c (2/2) APUE (Process Control) 실행 결과

How to Avoid Race Condition? APUE (Process Control) #include <stdio.h> #include <sys/types.h> int main(void) { pid_t pid; TELL_WAIT(); if ((pid = fork()) < 0) err_sys("fork error"); else if (pid == 0) { WAIT_PARENT(); // parent goes first charatatime("output from child\n"); } else { charatatime("output from parent\n"); TELL_CHILD(pid); } exit(0); How to implement TELL_WAIT(), WAIT_PARENT(), and TELL_CHILD()? Use signals (강의노트 15) Use IPC methods (강의노트 16)

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

Program Execution: exec() (1/2) APUE (Process Control) When a process calls one of the exec() functions that process is completely replaced by the new program (새로운 프로그램으로 대체) (text, data, heap, and stack segments) and the new program starts at its main function 함수 exec()를 호출하여 완전히 다른 프로그램으로 실행된다.

Program Execution: exec() (2/2) APUE (Process Control)

exec() Functions exec? (p, l, v, e) p: filename (not pathname) APUE (Process Control) #include <unistd.h> int execl(const char *pathname, const char *arg0, … , (char *)0); int execv(const char *pathname, const char *argv[]); int execle(const char *pathname, const char *arg0, … /* (char*) 0, char *const envp[] */); int execve(const char *pathname, const char *argv[],char *const envp[]); int execlp(const char *filename, const char *arg0, … , (char *)0); int execvp(const char *filename, const char *argv[]); All six return: -1 on error, no return on success exec? (p, l, v, e) p: filename (not pathname) l: takes a list of arguments (the last argument should be a null pointer) v: takes argv[] vector e: takes envp[] array without ‘e’, the environment variables of the calling process are copied

Properties inherited to the new program APUE (Process Control) same ID process ID, parent process ID, real user ID, real group ID, supplementary group IDs, process group ID, session ID controlling terminal time left until alarm clock current working directory root directory file mode creation mask file locks process signal mask pending signals resource limits, …

예제: nexec.c, echoall.c (1/5) APUE (Process Control)

예제: nexec.c, echoall.c (2/5) APUE (Process Control)

예제: nexec.c, echoall.c (3/5) APUE (Process Control)

예제: nexec.c, echoall.c (4/5) APUE (Process Control)

예제: nexec.c, echoall.c (5/5) APUE (Process Control) 실행 결과

강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control) 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타

system() 주어진 스트링(cmdstring)을 Shell 상에서 수행시킨다. APUE (Process Control) #include <stdlib.h> int system(const char *cmdstring); 주어진 스트링(cmdstring)을 Shell 상에서 수행시킨다. e.g.) system(“date > file”); system() is implemented by calling fork, exec, and waitpid. Return values: -1 with errno: fork or waitpid fails 127: exec fails Termination status of shell: all 3 functions succeed

예제: myls.c (1/2) #include <stdio.h> // myls.c APUE (Process Control) #include <stdio.h> // myls.c main(int ac, char *av[]) { int i; char cmdstr[1024]; strcpy(cmdstr, "/bin/ls "); for(i=1;i < ac;i++) { strcat(cmdstr, av[i]); strcat(cmdstr, " "); } fprintf(stdout, "cmdstr = \"%s\"\n", cmdstr); system(cmdstr); exit(0);

예제: myls.c (2/2) APUE (Process Control) 실행 결과

Process Times APUE (Process Control) #include <sys/times.h> clock_t times(struct tms *buf); Returns: elapsed wall clock time in clock ticks if OK, -1 on error struct tms ( clock_t tms_utime; /* user cpu time */ clock_t tms_stime; /* system cpu time */ clock_t tms_cutime; /* child user cpu time */ clock_t tms_cstime; /* child system cpu time */ } Wall clock time: the amount of time the process takes to run and depends on the system loads. (실제 수행된 시간) User CPU time: attributed to user instructions (사용자 코드에 의해 CPU를 점유한 시간) System CPU time: attributed to the kernel, when it executes on behalf of the process (시스템 코드에 의해 CPU를 점유한 시간)

예제: cmd_time.c (1/4) APUE (Process Control) 소스 코드

예제: cmd_time.c (2/4) APUE (Process Control) 소스 코드

예제: cmd_time.c (3/4) APUE (Process Control) 소스 코드

예제: cmd_time.c (4/4) APUE (Process Control) 실행 결과

Homework #10 APUE (Process Control)