OS) Chapter 3. Processes

Chapter 3. Processes

Process Concept

-       Operating System program의 종류들을 실행시킨다. (Batch system – jobs, Time-shared systems – user programs or tasks)

-       Process – 실행중인 program을 말함. (Systemloadprogram)

-       Multiple parts
n  Text Section: Program code (Program Counter를 포함한 현재 activity, processor registers)
n  Stack: Containing temporary data (Function parameters, return addresses, local variables)
n  Data Section: Containing global variables
n  Heap: Containing memory dynamically allocated during run time




Process State

-       new: Process가 생성됨
-       running: Instruction이 진행중임
-       waiting: eventI/O occurrence를 기다리는 중임
-       ready: processorassign되는 데에 있어 기다리는 중임
-       terminated: processexecution을 끝냄

Process Control Block (PCB) : Process들의 정보들의 집합체이다.
-       Process state – running, waiting, etc
-       Program Counter – location of instruction to next execute
-       CPU registers – contents of all process-centric registers
-       Etc..

CPU Switch from Process to Process


Threads: Process has a single thread of execution
-       만약 각 process마다 복수의 program counter를 갖고 있다면, 한 번에 다양한 location이 실행 가능하다.

Process Scheduling

-       CPU 사용을 극대화하여, time sharing을 위해 CPU상의 processes들을 빠르게 switch하여야 한다.

-       Process scheduler는 사용 가능한 process들 중에서 CPU에서 다음 execution에 사용될 process를 선택한다.

-       Processscheduling queue를 유지한다.
n  Job queue – 시스템의 모든 process들을 설정한다.
n  Ready queue – 실행되길 기다리는 main memory에 남아있는 모든 process들을 설정한다.
n  Device queue – I/O device를 기다리는 process들을 설정한다.

위의 그림에서 ready queuemain memory에서 실행되는 것을 기다리는 process들의 집합체이고, 나머지는 device queue로써 I/O device의 요청을 기다리는 process들을 말한다.
이들을 합쳐 Job Queue라고 부른다.

Representation of Process Scheduling: ready queue, device queue로 대표된다.

-       새로운 process는 초기적으로 ready queue에 들어간다. 그 후 그것이 execution이 되거나 dispatch(준비 리스트의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것, ready -> running)가 될 때까지 queue에서 기다린다.

-       프로세스가 CPU에 할당되어 실행이 될 때 몇 가지 event들이 발생할 수 있다.
n  ProcessI/O 요청을 하여 I/O queue로 배정될 수 있다.
n  Process가 새로운 child process를 만들어 childtermination의 종결을 기다릴 수 있다.
n  Processinterrupt 결과와 같이 CPU로부터 강제적으로 제거될 수 있는데, 이 때, Ready queue로 다시 돌아간다.


Schedulers
-       Short-term scheduler (or CPU scheduler): 다음에 실행될 process를 선택하고 CPU에 할당한다.
n  가끔 system에서 존재하는 유일한 scheduler이다.
n  Short-term schedulermillisecond 단위로 매우 빠르게 호출되어야 한다.

-       Long-term scheduler (or Job(시간에 따른 process 일괄 처리) scheduler): 어떠한 process들을 ready queue로 가져올지 결정해야만 한다.
n  Long-term scheduler는 즉시 불러오지 않아도 된다.
n  Long-term schedulermultiprogrammingdegree를 제어한다.

-       Medium-term scheduler: multiprogrammingdegree를 줄여야 할 필요가 있으면 medium-term scheduler가 더해지기도 한다: memory로부터 process를 제거하고, disk에 저장하고 연속적인 실행을 위해 disk로 돌아가기도 한다 (Swapping)

Context Switch

-       CPU가 또 다른 process로 넘어갈 때, context switch를 통해 old process의 상태를 저장하고, 새로운 process의 저장된 상태를 불러들인다.

-       PCB에서 표현된 process: Context

-       Context-switch timeoverhead이기 때문에 switch하는 동안 유용한 일을 하지 않는다. (보다 복잡한 OSPCB에서 보다 긴 context switch가 사용된다.)

-       Hardware support에 시간 의존적이다.

Operations on Processes

Process Creation
-       Parent processprocess tree를 형성하며 다른 process로 전환하는 children process를 생성한다.

-       보통 processprocess identifier에 의하여 identify되고 관리된다.

-       Resource sharing option
n  부모와 자식은 같은 resource를 공유할 수 있다.
n  자식은 부모 resource의 일부만 공유할 수도 있다.
n  자식과 부모간에 공유하는 resource가 존재하지 않을 수도 있다.

-       Execution options
n  부모와 자식은 병렬적으로 실행될 수 있다.
n  자식이 종결될 때까지 부모가 기다릴 수 있다.


Process Termination
-       Processlast statement를 실행시키고, OSexit() system call을 이용하여 그것을 삭제할 것인지 묻는다.
n  자식으로부터 부모에게 상태 datareturn한다.
n  ProcessresourcesOS에 의해 해제시킨다.

-       Parentabort() system call을 이용하여 자식 process의 실행을 종결시킨다. 실행이 종결되는 경우는 다음과 같다:
n  자식이 할당받은 resource를 초과할 때
n  자식에게 assigntask가 더 이상 필요하지 않을 때
n  OS가 부모가 종결되더라도 자식에게 계속 실행되라고 하지 않을 때, 부모가 종결될 경우

-       몇몇 OS는 부모가 종결되더라도 자식이 존재하는 것을 허락하지 않는다. Process가 종결되더라도 그 자식들은 또한 무조건 종결되어야 한다.
n  Cascading termination: All children, grandchildren, etc. are terminated.
n  OS에 의해 종결이 시행된다.

-       부모 processwait() system call을 이용하는 것으로 자식 process의 종결을 기다린다. call은 상태 정보와 종결된 processpidreturn한다.

-       만약 기다리는 부모 process가 없다면 zombie라고 부르고, wait 호출 없이 부모가 종결되면 orphan이라 부른다.

-       Zombie process: 자식이 종결될 때의 상태를 부모가 받아야 하는데, 부모가 wait() 호출이 없을 경우 그 자식 process는 상태를 전달할 때까지 잠시 떠도는 데, processzombie process라 한다.

-       Orphan(고아) process: 자식이 종결되기 전에 부모가 먼저 종결되어 상태를 전달할 곳이 없는 process. 부모가 종결될 경우 PID1(init)로 변경되기 때문에 시스템에서 추적을 하여 종결시키기 때문에 성능저하를 불러들이킬 수 있음

-       pid = wait(&status)와 같은 wait() system call 함수를 사용하여야 memory 상에서 남아있는 child process state information을 삭제할 수 있지만, zombie process같은 경우 pid = 1도 아니고 wait() 함수를 불러들이지도 않기 때문에 memory 상에 잔여 찌꺼기가 남아있음.

Interprocess Communication (IPC)
-       System내에서의 processindependent하거나 cooperating한다.

-       Cooperating process들은 공유 데이터를 포함하여 다른 process에 의해 영향을 받거나 영향을 끼친다.

-       Cooperating process를 위한 이유는 다음과 같다: 1) 정보 공유 2) 계산 속도 향상 3) 모듈성 4) 편리성

-       Cooperating processprocesscommunicationIPC를 필요로 한다.

-       IPC의 두 모델: Shard memory, Message passing

Producer-Consumer Problem: Producerinformation을 생성하고, Consumer는 정보를 소비한다.
-       Unbounded-buffer는 버퍼의 사이즈에 제한없이 놓는다.
-       Bounded-bufferfixbuffer size에 놓는다.

Bounded-Buffer (Shard-Memory Solution) (Circular Queue => Buffer_size – 1 elements만 사용할 수 있음)




IPC – Shared Memory
-       서로 communicate하길 원하는 process들은 memory 지역을 서로 공유한다.
-       CommunicationOS가 아닌, user process의 제어 아래서 진행된다.
-       Major issueuser process들이 shard memory에 접근할 때 그들의 행동을 동기화하도록 하는 mechanism을 제공하는 것이다.

IPC – Message Passing
-       Processs들의 행동을 동기화하고 communicate하기 위한 mechanism이다
-       공유된 variable을 재정렬하지 않고 process들을 communicate할 수 있다.
-       IPC 기능은 두 가지 operation을 제공한다: send(message), receive(message)
-       Message 사이즈는 고정되거나 variable이다.
-       프로세스 PQcommunicate하기를 원할 경우:
n  그들 사이에 communication link를 생성한다.
n  Send/receive를 통해 message를 교환한다.

Direct Communication
-       Processexplicitly하게 서로 naming을 해야한다.
n  send (P, message): send a message to process P
n  receive (Q, message): receive a message from process Q

-       Properties of communication link
n  Link는 자동으로 설정된다.
n  Link는 정확히 communicating하는 process의 한 쌍만 associated된다.
n  각각의 pair는 정확히 하나의 link만 나타난다.
n  Linke는 단방향성일 수도 있지만, 보통 양방향성이다.

Indirect Communication
-       Messagesmailbox로 송신되고 수신된다. (일종의 port로써 referred.)
n  각각의 mailboxuniqueid를 갖고 있는다.
n  Process들은 만약 그들이 mailbox를 공유하고 있을 때에만 communicate할 수 있다.

-       Operations
n  새로운 mailbox (port)를 만든다
n  Mailbox를 통해 message를 주고 받는다
n  Mailbox를 파괴한다.

-       Mailbox sharing problem (one sender, two receivers)
n  최대 두 개의 processlink를 설정해야만 한다.
n  time에 오직 하나의 processreceive할 수 있게 해야만 한다.
n  Senderreceiver가 누구인지 가리켜 receiver를 선택해야한다.

Synchronization
-       Message Passingblocking이나 non-blocking 종류이다.

-       Blockingsynchronous(동기화)를 고려한 것이다.
n  Blocking send같은 경우 message를 받을 때까지 senderblock하는 것
n  Blocking receive같은 경우 message 사용이 가능할 때까지 receiverblock하는 것

-       Non-blockingasynchronous를 고려한 것이다.
n  Non-blocking send: sendermessage를 보내고 계속 진행한다.
n  Non-blocking receive: receivervalid message를 받거나 null message를 받는다.
이는 Receiver가 받을 것이 없는데도 메시지를 요청하거나 receivermessage를 받지 않았음에도 sendermessage를 보내는 것을 방지하기 위한 기법이다.

만약, sendreceiver가 모두 block되어 있는 상황이면, rendezvous라고 부른다.

Buffering
-       MessageQueuelink와 붙어 있다.
-       이는 세 가지 중 하나의 상태로 implement된다.
n  Zero Capacity – linkqueueing되어 있는 message가 없는 상태. (Senderreceiver를 위해 기다려야만 한다.)
n  Bounded Capacity – n개의 message의 유한한 길이. Senderlink가 꽉 차있으면 기다려야만 한다.
n  Unbounded Capacity – Sender가 절대 기다리지 않는 무한한 길이

3.1 Line A에서의 Output은 무엇인가?

Parent ProcessChild ProcessCommunication이 없기 때문에 data 정보를 나누지 못하기 때문에 parent processvalue는 그대로 5.

3.2 Initial parent process를 포함하여 얼마나 많은 processprogram에 의해 생성되는가?
8
(fork() system call이 실행되고 나서, 해당하는 child process는 다음 system call() instruction의 다음instruction부터 수행)


3.5 processfork() operation을 이용하여 새로운 process를 생성했을 때, parent processchild process사이에 어떠한 상태가 공유되는가?
오직 shared memory segment만 공유된다. Stackheap은 새로운 process에서 복사되는 것일 뿐이다.

3.9 두 개의 process사이에서 kernel에 의해 context-switch가 일어날 때 어떠한 action이 발생하는가?
1) Clock interrupt에 반응하여 OS는 현재 진행중인 processProgram counteruser stack pointer를 저장하고 kernel clock interrupt handler에 제어 전달
2) clock interrupt handlerprocess PCB에 있는 나머지 정보들 저장
3) scheduler에 다음 실행할 process 요청
4) OS가 해당하는 processpcb를 받아 다음 processstate를 펼치고, register를 재저장함.



댓글

가장 많이 본 글