본문 바로가기

Studying/Operating System

04. Process Management (2/2), 05. CPU Scheduling (1/3)

1. 자원의 공유: 자식이 부모를 그대로 copy하기 때문에 메모리 낭비가 될 수 있음

-> 몇몇 OS에서는 일단 copy하지 않고 공유하고 있음

-> 내용이 달라질 때까지 기다림                             (Copy-on-Write, COW)


2. fork() 시스템 콜: fork() 수행 시 반환값으로 id를 반환함, fork() 수행한 시점에서 시작함 (Program Counter까지 복사됐기 때문에)

가. id가 0일 경우, 자식

나. id가 0이 아닐 경우, 부모


3. exec() 시스템 콜

-> execlp(): 인자로 넘겨진 새로운 프로그램을 실행 (일반적으로 자식에게 새로운 프로그램을 덮어씌울 때 사용)


4. wait() 시스템 콜: 호출한 부모는 sleep 상태(block 상태)로 만들고, 자식이 종료할 때까지 기다림


5. exit() 시스템 콜: 프로그램을 종료시키는 시스템 콜

가. 자발적 종료: 마지막 statement 수행 후, 자동으로 컴파일러가 넣어서 호출됨(main 리턴되는 부분)

나. 비자발적 종료

1) 부모프로세스가 자식프로세스를 강제 종료시킴

가) 자식이 한계치를 넘는 자원 요청

나) 자식에게 할당한 업무가 더 이상 필요하지 않을 때

2) 키보드로 kill, break 등을 친 경우

3) 부모가 종료하는 경우 (부모가 종료하기 전에 자식을 종료해야함)


6. 프로세스간 협력

가. 독립적 프로세스(Independent process): 원칙적으로 하나의 프로세스가 다른 프로세스에 영향을 미치지 않음

나. 협력 프로세스(Cooperating process): 필요에 의해서 영향을 미칠 수 있음

다. 프로세스 간 협력 메커니즘(IPC: Interprocess Communication)

1) Message passing: 커널을 통해 메시지 전달 (원칙적으로 불가하기에 커널을 활용하는 것)

(가) Direct Communication: 명시적으로 통신하려는 프로세스의 이름을 표시

(나) Indirect Communication: mailbox(또는 port)를 통해 메시지를 간접 전달

2) Shared memory: 서로 다른 프로세스가 일부 주소 공간을 공유하는 메커니즘

*Thread: 스레드는 하나의 프로세스에 여러 개가 존재하는 것으로 프로세스 간 협력과는 다름.


---------------------------

7. CPU Scheduling

가. CPU-burst Time

1) I/O bound job은 중간에 I/O가 사용하므로, CPU가 짧게 자주 쓴다.

2) CPU bound job은 중간에 I/O가 사용하지 않으므로 CPU가 적게 길게 쓴다.

나. CPU Scheduling: Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다. (진행 후 Dispatcher 진행)

다. Dispatcher: CPU의 제어권을 CPU Scheduler에 의해 선택된(결정된 후에) 프로세스에게 넘긴다. (Context Switch)

*용어

1) Nonpreemptive: 강제로 빼앗지 않고 CPU를 자진해서 반납하는 것(종료나 I/O 요청 등)

2) Preemptive: 강제로 빼앗음

'Studying > Operating System' 카테고리의 다른 글

05. CPU Scheduling (3/3) / 06. Process Synchronization (1/5)  (0) 2018.06.02
05. CPU Scheduling (2/3)  (0) 2018.05.30
04. Process Management (1/2)  (0) 2018.05.20
03. Process (2/3), (3/3)  (0) 2018.05.20
03. Process (1/3)  (0) 2018.05.19