코딩하는 오리

[운영체제] 프로세스와 스레드 본문

카테고리 없음

[운영체제] 프로세스와 스레드

jooeun 2023. 3. 2. 17:47

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

 

프로세스

프로세스는 컴퓨터 메모리에 올라가서 실행되고 있는 프로그램의 인스턴스로, 운영체제로부터 시스템 자원(cpu 시간, 주소 공간, 메모리 영역)을 할당받는 작업의 단위입니다
 
- 각각의 독립된 메모리 영역(코드, 데이터, 스택, 힙)을 할당받고, 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지며 한 프로세스는 별도의 주소공간에서 실행되어 다른 프로세서에 접근할수 없습니다.
 
 

스레드

스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로, 프로세스가 할당 받은 자원을 이용하는 실행의 단위입니다

- 프로세스 내에서 각각 스택만 따로 할당받고, 코드, 데이터, 힙은 공유합니다. 따라서 한 스레드가 프로세스 자원을 변경하면 이웃 스레드도 그 변경결과를 즉시 확인할 수 있습니다.
- 동기화 문제가 발생할 수 있다

멀티 프로세스

멀티 프로세스는 하나의 프로그램을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 환경입니다.

- 프로세스는 운영체제로부터 CPU 시간, 주소공간, 독립된 메모리 영역(code, data, stack, heap)을 할당 받습니다.

- 각 프로세스는 독립된 주소 공간에서 실행되어 다른 프로세스의 주소 공간에 접근할 수 없습니다.(독립적)

- 프로세스간 IPC(Inter-Process-Communication)를 사용해 데이터를 주고 받습니다.

 

장점

- 독립된 구조이기 때문에 안정성이 높다. 하나의 프로세스가 죽어도 다른 프로세스가 영향을 받지 않는다.

단점

- 각각 독립된 메모리 영역을 가족 있어, 많은 메모리 공간과 CPU 시간을 차지하고 작업량이 많을 수록 오버헤드가 발생합니다.

- Context Switching 비용이 커 성능 저하가 따라올 수 있습니다.

 

멀티 스레드

같은 프로세스 내에 둘 이상의 스레드를 동시에 실행하는 환경을 멀티 스레드 환경이라 부릅니다. 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 생성되고, 이를 메인 스레드라 부릅니다.

 

장점

- 적은 메모리 공간을 차지하고 Context Switching이 빠릅니다.

- 프로그램의 응답 시간이 단축되고 시스템의 처리율이 향상됩니다.

- 시스템의 자원을 공유하므로 시스템의 자원 소모가 감소합니다(자원 효율성 증대)

- 프로세스간 통신(IPC)에 비해 통신 비용이 절감됩니다

단점

- 여러 개의 스레드가 자원을 공유하기 때문에 동기화 문제, 병목 현상을 고려해야 합니다

- 하나의 스레드에 문제가 발생하면 전체 스레드에 영향을 미칩니다.

 

- 동시성 : 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것을 말합니다. 즉, 문맥교환이 빠르게 수행되면서 실제로는 번갈아가며 실행되는 것이지만 그 속도가 너무 빨라서 동시에 실행되는 것처럼 보여지는 것입니다.

- 병렬성 : 멀티 작업을 위해 멀티 코어에서 한 개 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.

 


용어 정리

멀티 프로세스

다수의 프로세서(CPU)가 서로 협력적으로 일을 처리하는 것을 의미합니다. 다수의 프로세서가 다수의 작업을 함께 처리하는 것.

- 멀티 프로세싱의 장점은 하나의 프로세서가 고장이 나더라도 해당 프로세서가 진행 중인 작업은 다른 프로세서에서 수행하고 있기 때문에 작업이 정지되지 않는다.
- ​여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용한다면 각 데이터를 각 프로세서에게 할당할 필요 없이 하나의 공간에 데이터를 저장한 후 이를 공유하여 사용하도록 한다면 비용을 절약할 수 있다.

멀티 프로그래밍

프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것입니다.

멀티 태스킹

OS의 스케쥴링에 의해 task를 번갈아가며 수행하는 것을 의미합니다. 즉, 여러개의 task를 자주 번갈아가며 수행하다 보니 사용자는 동시에 여러 task가 수행되고 있다고 느낍니다. 이를 위해 멀티 프로그래밍, 시분할 방식(CPU의 전체 사용 시간을 작은 사업 시간량으로 분할하여 그 시간량 동안 작업에게 번갈아가며 CPU를 할당해주는 방식), 실시간 시스템 방식을 사용하여 수행된다.