-
[OS] 프로그램 VS 프로세스 VS 스레드OS 2021. 7. 21. 23:53
프로그램 VS 프로세스 VS 스레드
안녕하세요? 장장스입니다.
오늘은 헷갈리는 개념인 프로그램, 프로세스, 스레드에 대해서 정리해 보겠습니다아!
프로그램, 프로세스, 스레드
프로그래밍을 하다보면 계속해서 나오는 프로그램, 프로세스, 스레드가 무엇인지 간단하게 짚고 넘어가겠습니다!.
프로그램(Program)?
프로그램은 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일을 말합니다. 윈도우에서는 보통 .exe 파일이 프로그램입니다. 예를 들면 엑셀, 웹 브라우저(크롬, 엣지, 웨일 등), 카카오톡 등이 있습니다.
프로세스(Process)?
운영 체제 위에서 실행중인 프로그램으로 프로그램 명령어와 데이터들이 메모리에 올라가고 실행 중 또는 실행 대기중인 상태
잠깐, 그러면 프로세서(Processor)는 무엇인가요?
프로세스가 동작 될 수 있도록 하는 하드웨어(=CPU)프로세스는 실행이 되면 각각의 독립된 메모리 공간인 코드, 데이터, 스택, 힙을 할당 받습니다.
원칙적으로 서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않습니다.
만약 프로세스간 서로 다른 자원에 접근하려면 프로세스간의 통신을 해야합니다.
스레드(Thread)?
프로세스 내에서 프로세스의 자원을 이용하여 실행되는 여러 흐름의 단위
스레드들은 같은 프로세스 안에서 실행되므로 code, data, heap은 공유하며 동작합니다.
각각의 스레드들은 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있습니다.
멀티 프로세스 VS 멀티 스레드
멀티 프로세스
하나의 응용프로그램을 두개 이상의 프로세스로 구성하여 각 프로세스가 하나의 작업을 목표로
(태스크)을 처리하도록 하는 것이다.
장점
- 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높다.
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다.
- 여러개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴하다.
단점
- 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지한다.
- 독립된 메모리 영역이기 때문에 작업량이 많을수록(Context Switching 발생 증가) 오버헤드가 발생하여 성능저하가 발생 할 수 있다.
- Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.
멀티 스레드
하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.
장점
- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있다.
- 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
- 또한, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다.
단점
- 하나의 스레드 장애로 프로세스가(전체 스레드)가 종료 될 위험이 있다.
- 스레드간의 자원을 공유를 전역 변수를 사용하기에 동기화 문제(병목현상, 데드락)가 발생할 수 있다.
- 주의 깊은 설계가 필요하고 디버깅이 어렵다.
- 불필요 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생한다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
Post
- 2021.07.19 - [OS] - [OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)
- 2021.07.20 - [OS] - [OS] 프로세스 관리, 프로세스 문맥(context)
References
- https://www.youtube.com/watch?v=DmZnOg5Ced8
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'OS' 카테고리의 다른 글
[OS] 데드락 (Deadlock) - 교착상태 (0) 2021.08.16 [OS] Race Condition 경쟁상태란? (0) 2021.08.15 [OS] 프로세스 관리, 프로세스 문맥(context) (0) 2021.07.20 [OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) (2) 2021.07.19 [OS] 인터럽트(Interrupt) (0) 2021.07.18