●Process

 ▷실행중인 프로그램

 

 ▶Abstraction (추상화)

  ▶Logical Control Flow

   ▷각 프로그램이 각자의 CPU를 가지고 있는 것 처럼 행동함.

   ▷Context Switching에 의해 구현

 

  ▶Private Address Space

   ▷각 프로그램이 독립된 메모리 공간을 가지는 것 처럼 행동함

   ▷Virtual Memory에 의해 구현

 

 

 ▶Reality 

  ▶Traditional

   ▷하나의 Processor가 여러개의 프로세스를 번갈아가며 동시에 실행

   ▷레지스터를 Saved registers에 저장하고, 다음 Process를 실행

 

  ▶Modern

   ▷Multicore Processors (여러 CPU가 하나의 Chip에 있음, 여러 Process 동시 실행 가능)

 

 

 ▶Context Switching

  ▷각 프로세스는 각자의 control flow를 가진다.

  ▷만약 프로세스들의 flow가 겹치면, 이는 Concurrently하게 진행된다.

  ▷그렇지 않으면 Sequential하게 진행된다.

 

  ▶Kernal

   ▷프로세스는 메모리 상주 시스템 OS인 kernal에 의해 관리됨.

   ▷Context switch를 일으킴.

 

 

 ▶Process Groups

  ▷하나의 부모 (foreground process)에 대해 여러 개의 자식(background process)가 존재

  ▷getpgrp() : 현재 프로세스의 Group

  ▷setpgid() : 프로세스의 Group을 바꾼다.

 

○Process Control

 ▶Process ID 얻기

  ▷pid_t getpid(void) : 현재 process의 PID 반환

 

  ▷pid_t getppid(void) : 부모 process의 PID 반환

 

 

 ▶프로세스 종료

  ▷행동이 terminate인 signal을 받음.

 

  ▷main routine에서 return

 

  ▶void exit(int status)

   ▷exit status를 status로 설정하고, 종료시킴

   ▷0이면 종료 성공, 아니면 에러

   ▷단 한번만 호출되며, 리턴되지 않음.

 

 

 ▶프로세스 생성 (Child process)

  ▶int fork(void)

   ▷Child 프로세스를 생성함.

   ▷Child에는 0을, Parent에는 Child의 PID를 return함.

   ▷Child는 Parent와 거의 유사함. (Parent의 Virtual Address Space, Open File Descriptor를 복사함 (하지만 메모리를 공유하지는 않음))

   ▷Child는 Parent와 Concurrent하게 진행됨.

   ▷한번 호출되면, 2번 return됨 (Parent, Child)

 

  ▶Process Graph

   ▷Vertex : Statement의 실행

   ▷Edge a->b : a다음에 b가 일어남

   ▷Edge에 현재 변수를 기록 가능

   ▷printf Vertex는 출력을 기록 가능

   ▷Inedge가 없는 vertex에서 시작 (Start vertex)

   ▷topological sort :  모든 Vertices의 순서가 왼쪽에서 오른쪽으로 감. -> feasible (발생가능)

 

  ▶Reaping/Waiting Child process

   ▷Zombie 상태의 Child process를 제거

    ▷zombie : 종료되었지만, 시스템 리소스를 차지하는 상황

   ▷Parent가 kernal에 exit status information을 전달하면, Kernal에서 이를 제거

   ▷Parent가 먼저 종료되면, init 프로세스가 대신 제거

 

  ▶Synchronizing Child

   ▶int wait(int *child_status)

    ▷Child 프로세스가 종료할 때 까지 Parent 프로세스가 대기한다.

    ▷Child process PID return

    ▶child_status!=NULL 이라면 MACRO를 통해 status 확인 가능

     ▷WIFEXITED : 정상적인 종료라면 true

     ▷WEXITSTATUS : 정상적으로 종료된 child의 status

 

   ▶int waitpid(pid_t pid, int& status, int options)

    ▷특정 Child에 대해 wait 가능

    ▷옵션 설정 가능

 

  ▶int execve(char *filename, char *argv[], char *envp[])

   ▷동시에 다른 프로그램 시행 가능

   ▷파일 : obj, 스크립트, 실행 파일...

   ▷env : 환경 변수

   ▷Parent에서 복사한 Code, Data, Stack을 Overwrite한다. (PID는 유지)

   ▷return

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Signal  (0) 2020.12.12
Shell  (0) 2020.12.12
Exception Control  (0) 2020.12.03
Library  (0) 2020.12.01
Linking  (0) 2020.12.01

+ Recent posts