Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Linux/UNIX Programming APUE (Process Control) 문양세 강원대학교 IT 대학 컴퓨터과학전공."— Presentation transcript:

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

2 UNIX System Programming by Yang-Sae Moon Page 2 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

3 UNIX System Programming by Yang-Sae Moon Page 3 Process Identifiers 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 종류가 상이함 APUE (Process Control)

4 UNIX System Programming by Yang-Sae Moon Page 4 System Process 예제 (1/2) APUE (Process Control)

5 UNIX System Programming by Yang-Sae Moon Page 5 System Process 예제 (2/2) APUE (Process Control)

6 UNIX System Programming by Yang-Sae Moon Page 6 PID 관련 함수 None of these functions has an error return. APUE (Process Control) #include 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

7 UNIX System Programming by Yang-Sae Moon Page 7 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

8 UNIX System Programming by Yang-Sae Moon Page 8 fork() (1/3) APUE (Process Control) #include pid_t fork(void); fork() is the ONLY way to create a process in 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.

9 UNIX System Programming by Yang-Sae Moon Page 9 fork() (2/3) 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().

10 UNIX System Programming by Yang-Sae Moon Page 10 fork() (3/3) APUE (Process Control)

11 UNIX System Programming by Yang-Sae Moon Page 11 예제 : fork.c (1/2) APUE (Process Control)

12 UNIX System Programming by Yang-Sae Moon Page 12 예제 : fork.c (2/2) APUE (Process Control) 실행 결과

13 UNIX System Programming by Yang-Sae Moon Page 13 Properties Inherited to the Child 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 APUE (Process Control)

14 UNIX System Programming by Yang-Sae Moon Page 14 Properties NOT Inherited to the Child 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 APUE (Process Control)

15 UNIX System Programming by Yang-Sae Moon Page 15 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

16 UNIX System Programming by Yang-Sae Moon Page 16 exit() – Process Termination 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 APUE (Process Control)

17 UNIX System Programming by Yang-Sae Moon Page 17 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

18 UNIX System Programming by Yang-Sae Moon Page 18 Race Conditions (1/2) 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 APUE (Process Control)

19 UNIX System Programming by Yang-Sae Moon Page 19 Race Conditions (2/2) 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 가 죽을 때까지 기다림 Use signals or other IPC methods APUE (Process Control)

20 UNIX System Programming by Yang-Sae Moon Page 20 예제 : race.c (1/2) #include // race.c #include 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); } APUE (Process Control)

21 UNIX System Programming by Yang-Sae Moon Page 21 예제 : race.c (2/2) APUE (Process Control) 실행 결과

22 UNIX System Programming by Yang-Sae Moon Page 22 How to Avoid Race Condition? APUE (Process Control) #include 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)

23 UNIX System Programming by Yang-Sae Moon Page 23 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

24 UNIX System Programming by Yang-Sae Moon Page 24 Program Execution: exec() (1/2) 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() 를 호출하여 완전히 다른 프로그램으로 실행된다. APUE (Process Control)

25 UNIX System Programming by Yang-Sae Moon Page 25 Program Execution: exec() (2/2) APUE (Process Control)

26 UNIX System Programming by Yang-Sae Moon Page 26 exec() Functions APUE (Process Control) #include 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

27 UNIX System Programming by Yang-Sae Moon Page 27 Properties inherited to the new program 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, … APUE (Process Control)

28 UNIX System Programming by Yang-Sae Moon Page 28 예제 : nexec.c, echoall.c (1/4) APUE (Process Control)

29 UNIX System Programming by Yang-Sae Moon Page 29 예제 : nexec.c, echoall.c (2/4) APUE (Process Control)

30 UNIX System Programming by Yang-Sae Moon Page 30 예제 : nexec.c, echoall.c (3/4) APUE (Process Control)

31 UNIX System Programming by Yang-Sae Moon Page 31 APUE (Process Control) 실행 결과 예제 : nexec.c, echoall.c (4/4)

32 UNIX System Programming by Yang-Sae Moon Page 32 강의 내용 프로세스 ID 프로세스 생성 프로세스 종료 레이스 컨디션 프로그램 실행 기타 APUE (Process Control)

33 UNIX System Programming by Yang-Sae Moon Page 33 system() APUE (Process Control) #include 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

34 UNIX System Programming by Yang-Sae Moon Page 34 예제 : myls.c (1/2) #include // 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); } APUE (Process Control)

35 UNIX System Programming by Yang-Sae Moon Page 35 예제 : myls.c (2/2) APUE (Process Control) 실행 결과

36 UNIX System Programming by Yang-Sae Moon Page 36 Process Times APUE (Process Control) #include 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 를 점유한 시간 )

37 UNIX System Programming by Yang-Sae Moon Page 37 예제 : cmd_time.c (1/4) APUE (Process Control) 소스 코드

38 UNIX System Programming by Yang-Sae Moon Page 38 예제 : cmd_time.c (2/4) APUE (Process Control) 소스 코드

39 UNIX System Programming by Yang-Sae Moon Page 39 예제 : cmd_time.c (3/4) APUE (Process Control) 소스 코드

40 UNIX System Programming by Yang-Sae Moon Page 40 예제 : cmd_time.c (4/4) APUE (Process Control) 실행 결과


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

Similar presentations


Ads by Google