멀티 프로세스
2개 이상의 프로세스가 동시에 실행 되는 것,
여기서 동시에 실행되는 것은 1개의 cpu, 여러개의 cpu 일때가 있을수 있습니다.
1개의 cpu일때는 여러 프로세스를 짧은 시간동안 할당받아 번갈아 가면서 수행하는 시분할 시스템으로 실행이 되고
복수개 일때는 각각의 cpu가 각각의 process를 수행함으로써 process가 동시에 수행됩니다.
1개의 cpu는 한번에 하나의 연산만 수행할 수 있습니다. 그런데 우리가 사용하는 컴퓨터에서는 음악도 들을 수 있고 카톡도 보낼수 있고 웹 서핑도 할 수 있습니다. 하나의 cpu라고 가정했을때 이게 가능한 이유는 cpu가 수 ms 동안 프로세스를 번갈아 수행함으로써 우리는 프로세스 들이 동시에 실행되고 있다고 느끼게 됩니다.
프로세스를 번갈아 수행하는 것을 시분할 시스템이라고 부릅니다.
이때 여러 process 들은 메모리에 적재가 되어 있습니다. 이때 각 process들이 자신의 영역에만 접근할 수 있도록 운영체제가 관리해줍니다.(운영체제 또한 프로세스에 적재 되어 있습니다. 운영체제도 실행되어야 하는 프로그램이기 때문입니다.)
cpu의 내부에는 PC(Program Counter) 레지스터, 캐시등 다양한 것들이 존재합니다.
PC에는 프로세스의 다음 실행 코드 주소가 기록되어 있습니다.
그래서 cpu는 pc 레지스터의 값을 읽어들인후 해당 코드를 실행하게 됩니다.
Context 라는 것은 process가 현재 어떤 상태(waiting, running, block)로 수행되고 있는지에 대한 정보를 의미합니다.
이 context 정보들은 PCB(Process Control Block)에 저장이 됩니다.
이 PCB에 PC(Program Counter)의 값도 저장이 되어있습니다.
추가로 cpu에 필요한 레지스터들 (stack pointer)의 정보도 PCB에 저장을 합니다.
대표적인 Pcb 정보들
Process State | new, running, waiting 등 process의 상태 |
Process Number | process의 number |
Program Counter(PC) | process가 다음에 실행할 명령어 주소 |
Registers | 다양한 register 값들 |
Memory limits | base register, limit register, page table, segment table 등등 |
기타 등등! |
PCB 들은 커널 내에 저장되는 것으로 알고 있습니다(커널은 운영체제 많이 접근이 가능한 영역입니다)
a 프로세스를 수행하다가 b 프로세스를 수행해야 할때 Context switching이 일어납니다.
위에서 context는 프로세스가 현재 어떤 상태로 수행되고 있는지에 대한 정보라고 하였습니다.
b 프로세스를 수행해야 하므로 현재 까지 실행한 a 프로세스에 대한 정보를 a 의 pcb에 저장해두고
이제 b 프로세스의 pcb를 읽어 다음 동작을 수행해야 합니다.
이렇게 이전의 context를 저장하고 새로운 context를 읽어와 다음 동작을 수행하면서 cpu의 제어권이 넘어가는 것을 context switching이라 합니다.
프로세스는 3개의 상태를 같습니다. running, ready, block
running : cpu를 점유하여 실행 되어 지고 있는 상태
ready: cpu만 할당받으면 바로 실행할 수 있는 상태
block: cpu를 할당받아도 명령을 실행할 수 없는 상태 - I/O 작업 기다리는 경우
싱글 스레드 => 하나의 process가 하나의 일만 수행할 수 있도록 하는 것입니다.(하나의 프로세스에서 하나의 thread만 사용합니다.)
싱글 스레드 장점
* 자원의 동기화에 대하여 신경쓰지 않아도 됩니다(데드락과 같은 현상이 발생하지 않습니다.)
* context switching이 일어나지 않습니다.
context switching이 일어나지 않으므로 단순한 작업이라면 멀티 스레드에 비해 작업 시간이 빠를수 있습니다.
싱글 스레드 단점
* 동시성의 장점을 누리기 어렵습니다. 사용자는 하나의 스레드에서 함수가 실행되는 동안 다른 함수의 실행을 확인할 수 없습니다.
* 여러개의 cpu가 있는 경우 이를 활용하지 않는 것은 매우 비효율적입니다.
멀티 스레드 => 하나의 process가 동시에 여러개의 일을 수행할 수 있도록 해주는 것입니다. (하나의 프로세스에 여러개의 thread를 사용합니다.)
한 process내에 복수 개의 thread는 프로세스의 stack 메모리 영역을 제외한 code, data, heap 메모리 영역을 공유합니다.
스레드는 각자의 스택을 가집니다(PC(program counter), stack pointer)
멀티 스레드 장점
* 새로운 프로세스를 생성하는 것보다 같은 프로세스내의 스레드를 생성하는 것이 더 빠릅니다.
* 프로세스간의 context switching보다 context switching이 빠릅니다.
* 프로세스의 자원과 상태를 공유하며 효율적으로 운영할 수 있습니다.
멀티 스레드 단점
* 스레드 스케쥴링에 신경써야 합니다.
* 자원간의 동기화에 신경써야 할 수도 있습니다.
'CS' 카테고리의 다른 글
디자인 패턴/싱글턴 패턴 🆘 (0) | 2022.04.20 |
---|---|
프로세스, 스레드 🔥 (0) | 2022.03.30 |
CQS 원칙 - Command Query Separation (0) | 2022.03.29 |
컴퓨터는 어떻게 켜질까?[컴퓨터 부팅 과정] (2) | 2021.12.12 |