OS (Operating System)

[OS] Week04 - 1 (3/23) : fork, exec, zombie, abort, IPC, buffer, spin lock, synchronization

FDEE 2021. 4. 3. 16:40

fork 함수의 몇가지 이슈

- 1. Resource sharing options : 자원 공유 : subset, 즉 일부만 공유한다

- 2. Execution options : 수행 측면 : Parent, child는 concurrently 하게 동작한다

      Parent 는 child 가 termination 될때까지 wait 한다

- 3. Address space : Child 는 duplicate 한 후 exec 로 초기화를 하여 또다른 process를 생성한다

      Stack, Heap, Data, Text 중 Text는 새로운 코드로 바뀌며 나머지는 초기화 된다.

 

fork 4가지 측면 정리

- 1. Resource sharing : subset

  - 공유 가능 : file

  - 공유 불가능 : CPU time, memory : 별도의 process이기 때문

- 2. Execution : concurrently

- 3. Address space

  - Fork : Duplicate, exec : 초기화

- 4. call once, return twice : return value 값에 따라 Parent, Child 프로세서를 구별

  - value : 0 : Child Process

  - value : PIC : Parent Process

  - value : 음수 : Error

 

Zombie status

- child process가 terminate 된 후 반환되지 않는 경우의 상태

- Parent : fork 실행 후 보통 wait 을 실행하여 반환값을 기다린다

- wait 함수가 없는 경우 child가 termitate 되면 zombie 상태로 전환된다

 

Parent : fork -- | wait ---------- | ready -- dispatch

Child :               | exec -- exit |

 

Process termination

- exit : 자발적인 종료 : 인자를 통해 Parent Process로 데이터를 전송할 수 있다

- abort : 비자발적인 종료 : Tree 구조이기 때문에 child Process의 처리가 필요하다

  - 1. cascading termination : 해당 Process + Child Process 모두 termination

  - 2. orphan process : 해당 Process의 Child Process들을 init Process의 Child로 이동시킨 후

        해당 Process만 termination

 

IPC : Inter-Process Communication

- Indepentent : 독립적인 Process

- Cooperating : Communitation이 필요한 Process

  - Information Sharing : 정보를 공유한다

  - speed up : 빠르게 효율적으로 작업을 수행한다

  - Modularity : 모듈화로 일을 효과적으로 분산한다

  - Convenience : editing, printing, compiling을 동시에 수행한다

 

P-C process (Producer, Consumer)

- buffer를 통해 정보를 send, read 한다

- buffer는 shared memory 공간에 위치한다

 

Buffer and Synchronization : 동기화

- in, out 위치를 통해 데이터 유무 구별이 가능하다

- in : Free position in the buffer : 비어있는 공간 위치

- out : the First full position in the buffer : 차있는 공간의 첫번째 위치

- Spin Lock : 동기화를 위해 사용되는 기술 (loop)

  - Producer : while(((in+1)%BUFFER_SIZE) == out) 즉 꽉 찬 경우에 Spic Lock 활성화

  - Consumer : while(in == out) 즉 비어있는 경우에 Spin Lock 활성화

 

IPC의 방법

- 1. Message passing : Mailbox를 생성하여 kernel을 통해 데이터를 송수신

  - send, read 할 때 마다 system call : kernel 도움이 필요하다

- 2. Shared Memory : 한 Process 내부에 공간을 할당하여 두가지 이상의 Process간의 데이터를 송수신

  - 공유할 Process 내에서 할당시에만 system call : kernel의 도움이 필요하다

  - 공간 생성시 shmget 함수 실행

  - 공간 접근시 shmat 함수 실행

  - synchronalization 설정이 필요하다

 

Establishing links

- 1. Dirent communication : Hard coding : 보내고 받는 Process의 이름이 필요하다

  - Q.send(P, message)

  - P.receive(Q, message)

- 2. Indirent communitation : mailbox, 즉 shared memory를 통해 송수신

  - 매개체 : OS, hard coding 방식이 아니다