<Process Termination>

exit() system call, 처리불가능한 signal, CPU err, 부모 process의 명령과 같은 상황에서 process termination이 발생하며 아직 process 상태에 존재한다.

(process에 존재하지만 실행에 필요한 컴퓨터 자원들을 process 정보를 갖는 PCB를 제외하고 모두 놓으며 process에 존재하지 않으려면 wait system call을 이용해 PCB까지 모두 놓게된다.)

상태값도 변화하는데 running 상태에서 terminated(zombie)상태로 바뀐다.

 

Q. 만약 끝나는 process가 자식이 있다면 어떻게 해야할까?

--> init process에 양자로 보내며 다음과 같다.

 

 

 

<IPC Interprocess Communication>

원래 process들은 서로간의 접근이 불가능하다. 하지만 공유하고자 하는 정보가 있다면?

[Message Passing]

- A processmessagesystem call을 이용해 Kernel로 보냄.

이때, user mode에서 kernel modemode change가 발생함.

A 실행 이후 Bscheduling되어 실행되면 kernel에서 receive system call로 가져옴

[Shared Memory]

A, B가 같이 사용하는 별도로 새로 할당된” memory 공간이다.(meomory 영역)

A, Bvirtual , 가상공간 메모리 주소에도 할당이 된다.

message passing에 비해 실행속도가 빠르다.

다만, A, B간의 충돌문제(동기화 문제) 발생 가능성이 있다.

위) Message Passing&nbsp; &nbsp; /&nbsp; &nbsp;아래) Shared Memeory

 

 

 

Signal: process가 다른 process에게 OS를 통해 event가 발생했다 알리는 것.

Interrupt: 운영체제에게 event를 알리는 것

System Call: 운영체제에게 필요한 명령을 알리는 것

(Signal은 의미가 정해진 값만 보낼수 있다.)

(하지만 message passing, shared memory는 복잡·다양한 내용을 상대에게 보낼 수 있다.)

 

Signal을 받았을 때 취할 수 있는 동작은 다음과 같다.

- terminate

- stop

- ignore(signal 사실만 알고 반응하지 않음)

- user가 자신이 정의한 signal에 대해 코딩한 경우

 

 

<Threads Process>

Thread: process 내부 cpu가 실행한 instruction의 집합, 일종의 실행단위이다.

앞에서 말하던 process를 실행한다는 뜻은 process 내부 thread를 실행한다는 뜻으로 lightweight process라고도 부른다.

 

<Thread의 구성요소>

stack

thread control block: (register를 위한 메모리 공간, process 내부에서 register값만 따로 들어가는 공간)

 

<Thread의 장점>: process에 비해

생성 · terminate 시간이 짧다

context switch 시간이 짧다: (code, data, file과 같은 resource는 그대로 있고 stackregister만 바꿔주면 되기 때문)

thread간 통신하는데 걸리는 시간이 짧다: (code, data, file과 같은 영역을 이용하면 memorymessage를 공유할 필요성이 없어진다.)

 

<Multi Thread> - 하나의 process안에 여러 thread가 있는 것

process(컴퓨팅 시 자원집합) = thread(실행단위)가 실행될 수 있는 환경을 제공하는 틀

Q: 그냥 Multi thread말고 multi process를 사용하면?

A: 서로 정보를 주고받기 위해서는 multi process의 경우 IPC를 이용해야 한다.

<< input에서 Block이 되어도 Transforming, output process들은 concurrent하게 진행이 가능하다.

, IPC가 메모리를 사용해서 속도

<< thread간 통신은 data segment에 있는 global variable을 이용한다.

(thread는 일종의 function)

 

Thread를 만드는 방식에 따라 User-Level thread, Kernel-Level thread로 나뉜다.

 

<User-Level thread>

kernel 밖에서 thread를 생성

Tread Library: thread를 생성관리하기 위해 필요한 함수들의 묶음

이로 인해 kernel-level thread에 비해 thread 생성관리 시간이 빠름

또한 kernel이 아닌, 사용자에 의해 마음대로 scheduling이 가능하다는 장점이 있다.

다만 kernel이 보기에 1개의 thread로 보여 하나의 block상태가 모든 threadblock상태로 만들 수 있다. --> concurrent하게 수행이 불가능하다.

 

 

 

<Kernel-Level thread>

Kernel 안에서 thread를 생성

생성관리를 위해서는 user kernel 간의

mode change가 필요해서 시간이 더 느림

사용자, Kernel 모두에게 여러개의 thread

-> concurrent하게 실행 가능

 

'Computer System > 운영체제' 카테고리의 다른 글

this->OS.code(6)  (0) 2022.10.31
this->OS.code(5)  (0) 2022.10.31
this->OS.code(3)  (0) 2022.10.31
this->OS.code(2)  (0) 2022.10.31
this->OS.code(1)  (0) 2022.10.30

+ Recent posts