기록하는 개발자

[운영체제] 프로세스와 스레드(프로그램, 멀티프로그래밍, 멀티태스킹, 멀티스레드) 본문

ComputerScience

[운영체제] 프로세스와 스레드(프로그램, 멀티프로그래밍, 멀티태스킹, 멀티스레드)

밍맹030 2023. 12. 18. 23:07
728x90

이번 하반기 면접을 준비할 때 java, javascript 위주로 준비하면서 cs 공부도 했는데 

공부할수록 새록새록 기억이 나는게 뇌가 살아나는 느낌....

공부겸 정리겸 공부했던 cs 지식들을 기록하면 좋을 것 같다.


프로그램, 멀티프로그래밍, 멀티태스킹, 프로세스, 스레드, 멀티스레드, 멀티프로세스, 멀티프로세싱, etc...

이름 비슷한 녀석들의 종류가 참 많다..

헷갈리는 녀석들을 짚고 넘어가보자

 


프로그램(Program) & 프로세스(Process)

프로그램(Program)

사전적 의미로는 '어떤 작업을 위해 실행할 수 있는 파일'로  컴퓨터가 실행할 수 있는 명령어들의 집합이다.

 

프로세스(Process)

컴퓨터에서 실행 중인 프로그램으로 각각의 프로세스는 독립된 메모리 공간을 할당 받으며 명령어들과 데이터를 가진다.

사전전 의미로는 '컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램'이다.

→ 프로세스는 프로그램을 메모리상에서 실행 중인 작업

 

*운영체제가 여러 개의 프로세스를 동시에 실행하는 것 : 멀티 태스킹(Multi-Tasking)

*어떤 작업을 하나 이상의 프로세서가 병렬로 처리하는 것 : 멀티 프로세싱(Multi-Processing)


멀티 태스킹(Multi-Tasking) & 멀티 프로그래밍(Multi-Programming)

멀티 태스킹(Multi-Tasking)

멀티 태스킹은 다수의 작업(Task)을 운영체제의 스케줄링에 의해 번갈아 가며 수행되도록 해주는 것을 의미한다.

​멀티 태스킹의 스케줄링 방식은 멀티 프로그래밍 방식(Multi-programming), 시분할 방식(Time-sharing), 실시간 시스템 방식(Real-time)을 사용하여 수행된다.

- 프로세스는 한번 cpu를 사용할 때 아주 짧은 시간만 cpu에서 실행되도록하여 프로세스의 응답 시간을 최소화 시키는 것이 목적이다.

 

멀티 프로그래밍(Multi-Programming) 방식

여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시킨다. 프로세서의 자원낭비를 최소화하기 위해 낭비되는 시간을 다른 프로그램 수행에 사용하여 여러 프로그램을 교대로 수행할 수 있게 한다.

 

→ 초기 컴퓨터는 한 번에 하나의 프로그램만 처리가 가능했는데, 입출력 작업에 시간이 많이 소요되면 프로세서는 해당 작업이 완료될 때까지 대기해야하고 이로 인해 프로세서의 자원을 낭비하게 되었다. 따라서 프로그램A의 입출력 작업을 할 때 프로그램B를 수행하는 멀티프로그래밍을 지원하게 되었다.

 

시분할 방식 (Time-Sharing)

여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시킨다. 멀티 프로그래밍을 논리적으로 확장한 개념으로, 프로세서의 자원낭비를 최소화하기 위해 낭비되는 시간을 다른 프로그램 수행에 사용하여 여러 프로그램을 교대로 수행할 수 있게 한다.

 

- 특정 작업 시간 동안 CPU를 사용한 후에 다시 대기하고, 대기큐에 있는 작업을 꺼내와서 CPU를 사용하는 것을 반복한다.

- Round Robin 방식으로도 불린다.

 

특징

- 프로세스 스케줄링과 다중 프로그래밍을 사용해 각 사용자에게 컴퓨터의 CPU를 시간적으로 분할하여 나눠준다.

멀티 프로그래밍 환경에서 하나의 CPU를 나누어 쓰는 방식이다.

사용자와 시스템 간의 온라인으로 처리 상황을 알 수 있다.

사용자가 운영체제에 직접 명령을 주고 즉시 응답을 받는다.

사용자 혼자 컴퓨터를 사용하는 것과 같은 효과를 준다.

 

 

실시간 시스템 방식(Real-Time)

처리 요청이 오면 약속한 시간 내에서 즉시 처리하는 방식으로, 한정된 시간 제약 조건 상에서 작업을 처리해야 하는 시스템이다.

   → 시간제한성이 중요하며, 자동 항법 장치, 교환국 처럼 실시간으로 처리해야 하는 시스템에 사용된다.

 

장점 : 처리 시간이 짧고 처리 비용이 낮다


프로세스 & 스레드

프로세스

앞서 각각의 프로세스는 독립된 메모리 공간을 할당 받으며 명령어들과 데이터를 가진다고 했다.

 

프로세스의 특징 

- 프로세스는 각각 code, data, stack, heap의 구조로 되어있는 독립된 메모리 영역을 가진다.

- 프로세스 당 최소 1개의 스레드(메인스레드)를 가지고 있다.

- 각 프로세스는 별도의 주소 공간에서 실행된다.

- 한 프로세스는 다른 프로세스의 변수 및 자료구조에 접근할 수 없다.

- 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC inter-process communication)을 사용해야한다.

 

 

스레드(Thread)

프로세스가 할당받은 자원을 이용하는 실행의 단위로, 프로세스는 한 개 이상의 스레드를 가질 수 있다.

사전적 의미로는 '프로세스 내에서 실행되는 여러 흐름의 단위'이다.

 

스레드의 특징

- 스레드는 프로세스 내의 stack을 제외한 code, data, heap, stack을 공유한다.

   → 같은 프로세스 내 스레드 간의 context switching은 프로세스끼리의 context switching보다 가볍다.

- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.

- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.


멀티 프로세스(Multi-Process) & 멀티 스레드(Multi-Thread)

 

단일 프로세스 시스템 : 한 번에 하나의 프로그램만 실행 됨. Cpu 사용률이 좋지 않다.

 

 

멀티 프로세스(Multi-Process)

두 개 이상의 프로세서나 코어를 활용하여 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 방식이다.

 

장점

- 각각 독립된 메모리 영역을 할당 받기 때문에 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 프로세스에 영향을 주지 않는다.

 

단점

- Context Switching(문맥 교환)에 많은 비용이 소모된다.

   → 프로세스는 각각의 독립된 메모리 영역을 할당받기 때문에 자식 프로세스 간에 공유하는 메모리가 없다. 따라서 Context Switching이 발생하면 캐시에 있는 모든 데이터의 리셋 후 다시 캐시 정보를 불러와야 하는 캐시 메모리 초기화 등 무거운 작업이 진행되어 많은 시간이 소모되는 오버헤드가 발생하게 된다.

Context Switching(문맥 교환)이란?
동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

 

이러한 멀티 프로세스의 단점으로 인해 멀티 스레드를 사용하는 것이 효율적이다.


멀티 스레드(Multi-Thread)

하나의 프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 처리하는 방식이다.

 

장점
시스템 자원 소모 감소(자원의 효율성 증대)

   → 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
시스템 처리량 증가 (처리 비용 감소)
   → 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
   → 스레드 사이의 작업량이 작아 Context Switching이 빠르다.
간단한 통신 방법으로 인한 프로그램 응답 시간 단축
   → 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.


단점
- 스레드 하나가 프로세스 내 자원을 망쳐버린다면 전체 프로세스가 종료될 수 있다.

- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 밖에 없다. 교착상태가 발생하지 않도록 주의해야 한다.

- 주의 깊은 설계가 필요하며, 디버깅이 까다롭다.
다른 프로세스에서 스레드를 제어할 수 없다. (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.)

 


Thread pool

병렬 작업 처리가 많아지면 스레드 개수가 증가하고, 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져 메모리 사용량이 늘어난다. 이는 애플리케이션의 성능 저하로 이어진다. 스레드의 폭증을 막으려면 스레드 풀을 사용해야 한다.

 

Thread pool

스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다.

생성된 스레드들은 작업을 할당 받기 위해 대기 상태에 있게 되는데, 작업이 발생하면 대기 중인 스레드 중 하나를 선택하여 작업을 수행한다. 작업이 완료되면 해당 스레드는 다시 대기 상태로 돌아가고, 새로운 작업을 할당 받을 준비를 한다.

 

장점
쓰레드 풀을 사용하면 스레드 생성 및 삭제에 따른 오버헤드를 줄일 수 있다.

특정 시점에 동시에 처리할 수 있는 작업의 개수를 제한하여이시스템의 자원을 효율적으로 관리하고 성능을 향상시킬 수 있다.


멀티 프로세싱(Multi-Processing) & 멀티 프로세스(Multi-Process)

프로세스(process)는 프로그램의 실행 단위이고 프로세서(processer)는 cpu 코어를 일컫는다.

이름만 보면 똑같은 것 같은데, 위 두 가지가 의미하는 바는 매우 다르다.

 

멀티 프로세스(Multi-Process)

앞서 스레드와 비교한 것이다. 하나의 응용 프로그램을 여러 개의 프로세스로 분리하여 실행하는 것으로, 프로세스(process)가 여러 개인 것이다. 여러 개의 프로세스가 동시에 실행되므로, 하나의 프로세스가 죽어도 프로그램이 죽지않아 프로그램 전체의 안정성이 높아지는 것에 목적을 둔다. 보통 멀티 프로세스는 부모 프로세스와 그의 여러 자식 프로세스로 이루어져 있다.

 

멀티 프로세싱(Multi-Processing)

멀티 프로세싱은 하나의 시스템에서 여러 개의 프로세서(CPU)를 사용하여 작업을 처리하는 것을 의미한다. 즉, 프로세서(CPU)가 멀티인 것이다. 여러 개의 프로세서가 동시에 작업을 처리하므로, 전체적인 처리 속도가 빨라지는 효과에 목적을 둔다.


멀티 프로세싱(Multi-Processing) & 멀티 태스킹(Multi-Tasking)

멀티 프로세싱 (Multi Processing)

여러 개의 CPU 코어가 동시에 작업을 처리하는 것을 의미한다. 여러 개의 프로세서가 병렬로 작업을 수행하므로, 단일 프로세스보다 빠른 처리 속도를 보장할 수 있다.


멀티 태스킹 (Multi Tasking)

단일 CPU에서 여러 개의 작업을 동시에 처리하는 것을 의미한다. 하나의 CPU가 여러 작업들을 번갈아가며 처리하므로, 여러 개의 작업을 동시에 수행하는 것처럼 보이게 된다.


따라서, 둘은 여러 작업에 대해서 동시에 처리하는 목적은 비슷하지만, 멀티 태스킹은 하나의 CPU에서 여러 개의 작업을 처리하는 반면, 멀티 프로세싱은 여러 개의 CPU가 각각의 작업을 처리하는 것이라는 차이점이 있다.

 

멀티 태스킹이 두 팔로 여러 작업을 빠르게 처리하는 것이라면 멀티 프로세싱은 팔이 6개라는 예시가 있다. ㄷㄷ..

4개 작업에 대한 멀티 프로세싱(2개 이상의 코어로 작업) + 멀티 태스킹(단일 코어 내 여러 작업)
하나의 작업을 멀티 프로세싱+멀티 태스킹

 


 

참고

https://sorjfkrh5078.tistory.com/56

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-programming-tasking-processing#%EB%8B%A8%EC%9D%BC_%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_single_process

https://velog.io/@woga1999/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8B%B1%EC%9D%B4%EB%9E%80

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread#multi_process

728x90