02-Processes
in Computer Science on OperatingSystem, Os, Computer-science
CPU Virtualization
Running single CPU
Running Multiple process 방법들
Interleaving Multiple processes
Virtualizing the CPU
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로
Process creation
- Load program code into memory, into the address space of the process ⇒ Program은 처음에 executable format으로 disk에 reside하고있음 ⇒ OS는 process loading을 lazily하게 수행함 ( 한번에 필요한 코드를 다 불러오는 것이 아닌, 필요한 것만 그때그때 불러옴)
- Program’s run-time stack is allocated ⇒ stack은 local variables, function parameters, return address를 관리 ⇒ main()의 argc, argv array로 stack를 초기화함
- Program’s heap is created ⇒ dynamically allocated data를 관리함 ⇒ program은 such space를 malloc으로 요청하고 free로 해제함
- OS는 다른 initialization task를 수행함 ⇒ I/O setup (each process 는 default로 stdin, stdout, stderr 세개의 file descriptors를 가짐
- 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를 사용할 수 있음
Process state tracing (CPU Only)
Process state tracing (CPU and I/O task)
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
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하는 행동
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를 요구함
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
Parent-child relationship
- process 하나가 다른 process를 만들어 낼 수 있음
- Unix는 hierarchy를 “process group” 이라고 부름
- Windows는 process hierarchy에 대한 conecpt이 없음
Simplified Shell
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를 만들 수 있게 함