02-Processes


CPU Virtualization

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled.png

Running single CPU

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%201.png

Running Multiple process 방법들

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%202.png

Interleaving Multiple processes

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%203.png

Virtualizing the CPU

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%204.png

Process의 정의

  • 실행중인 program의 instance
  • protection의 기본 단위
  • process가 process ID(PID)로 식별됨
  • process는 아래 것들을 포함하고 있음 ⇒ CPU context(registers) = program counter, instruction pointer .. ⇒ OS resources(address space, open files, etc..) ⇒ other information (PID ,state, owner, etc..)

Program에서 Process로

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%205.png

Process creation

  1. Load program code into memory, into the address space of the process ⇒ Program은 처음에 executable format으로 disk에 reside하고있음 ⇒ OS는 process loading을 lazily하게 수행함 ( 한번에 필요한 코드를 다 불러오는 것이 아닌, 필요한 것만 그때그때 불러옴)
  2. Program’s run-time stack is allocated ⇒ stack은 local variables, function parameters, return address를 관리 ⇒ main()의 argc, argv array로 stack를 초기화함
  3. Program’s heap is created ⇒ dynamically allocated data를 관리함 ⇒ program은 such space를 malloc으로 요청하고 free로 해제함
  4. OS는 다른 initialization task를 수행함 ⇒ I/O setup (each process 는 default로 stdin, stdout, stderr 세개의 file descriptors를 가짐
  5. Program running 을 main()이라는 entry point에서 시작함 ⇒ OS는 CPU 제어권을 새로 생성된 process로 넘김

Process states

  • Running : process가 processor위에서 실행중임
  • Ready : process가 run할 준비는 되었지만 어떠한 이유로 OS가 run 할 process로 아직 선택하지 않았음
  • Blocked : process가 어떤 operation을 수행중임 ⇒ Process가 disk로 I/O request를 요청하면 blocked되고 이제 다른 process들이 processor를 사용할 수 있음

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%206.png

Process state tracing (CPU Only)

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%207.png

Process state tracing (CPU and I/O task)

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%208.png

Process termination

  • Normal exit (voluntary)
  • Error exit (voluntary) ⇒ error로 인해 exit(0)
  • Fatal error (involuntary) ⇒ segmentation fault (illegal memory access) ⇒ protection fault ⇒ exceed allocated resources, etc..
  • Killed by another porcess (involuntary) ⇒ signal을 받아서 (ex : Ctrl + C)
  • Zombie process : terminated but not removed

Implementing process

PCB(Process Control Block) or Process descriptor

  • Process에 대한 모든 information을 포함하고 있음 ⇒ CPU registers(processor context) ⇒ PID, PPID, process group … ⇒ CPU scheduling information ⇒ Memory management information ⇒ Accounting information ⇒ File management information ⇒ I/O status information ⇒ Credentials
  • Linux에서의 PCB는 task_struct 구조체

XV6의 proc structure

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%209.png

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%2010.png

Process state Queues

OS는 system의 모든 process들의 state에 대한 collection of queues를 관리

  • Ready queue (or run queue) ⇒ [PCB] → [PCB] → [PCB]
  • Wait queue : event type마다 queue한개씩

각 PCB는 current state에 따라 state queue에 queueing됨

  • process의 state가 바뀌면, 그 process의 PCB는 다른 queue로 이주함

Context switch

CPU를 한 process에서 다른 process로 switch하는 행동

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%2011.png

Administrative overhead

  • register와 memory map을 save & restore
  • memory cache를 flushing & reloading
  • 다양한 table과 list updating

Overhead는 hardware support에 의존함

  • Multiple register sets
  • Advanced memory management techniques은 context switching을 위해 extra data를 요구함

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%2012.png

Linux에서의 process creation

fork()

  • parent process를 cloning하여 새로운 process를 생성함 ⇒ parent는 대부분의 resource와 previleges를 상속함(open files, UID,..) ⇒ Child는 parent의 address space를 복제함
  • parent는 wait()으로 child가 끝나기를 기다리거나 parallel하게 실행가능
  • Shell 또는 GUI가 이런 system call을 내부적으로 수행함

exec()

  • 현재 process image를 새로운 program으로 교체함
  • Window의 CreateProcess()는 fork()와 exec()의 조합

fork()

  • create & initialize new PCB
  • create & initialize new address space
  • address space를 parent의 address space의 전체 내용을 copy하여 초기화함
  • parent가 쓰는 resources를 가리키는 kernel resources 초기화(open files)
  • PCB를 ready queue에 배치시킴
  • parent에게는 child의 PID를, child process에는 0을 return 함

exec()

  • 현재 process를 멈춤
  • 새 program을 불러와 현재 process의 address space를 덮어씀
  • hardware context와 “args”를 새로운 program의 것으로 초기화함
  • PCB를 ready queue에 넣음
  • exec()은 새로운 process를 만들지는 않음
  • exec()은 return하지 않음.

Process hierarchy

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%2013.png

Parent-child relationship

  • process 하나가 다른 process를 만들어 낼 수 있음
  • Unix는 hierarchy를 “process group” 이라고 부름
  • Windows는 process hierarchy에 대한 conecpt이 없음

Simplified Shell

https://snowapril.github.io/assets/img/post_img/02-Processes%2062fbe7e5d1f346d98651d7251293d5e6/Untitled%2014.png

Policy와 Mechanism

Policy

  • What should be done?
  • 모든 resource 할당과 sceduling problems를 위해 Policy 결정을 해야함
  • ex : 다음에 수행할 process를 선택할 때

Mechanism

  • How to do something
  • The tool for implementing a set of policies
  • ex : 어떻게 여러 process를 한번에 수행하게 구현할까?

example for CPU virtualizing

  • Policy : 다음에 수행할 process는 어떻게 정할까?
  • Mechanism : 어떻게 구현할까?

Mechanism으로부터 Policy를 분리

  • operating system design의 핵심 원리임
  • Policy는 workloads에 따라 바뀜
  • general mechanism은 policy에서 분리되고 좀더 바람직함
  • 좀더 modular OS를 만들 수 있게 함





© 2020.11. by snowapril

Powered by snowapril