프로그램 : 어떤 작업을 위해 실행할 수 있는 파일
아직 파일을 실행하지 않은 상태이기 때문에 정적 프로그램을 줄여 프로그램이라고 부름
프로세스 (Process)
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 프로그램. 즉, 돌아가고 있는 프로그램의 상태를 말한다.
메모리에 올라와 실행되고 있는 프로그램의 인스턴스이자 운영체제로부터 시스템 자원을 할당받는 작업의 단위다.
! 여기서 시스템 자원이란
CPU 시간, 운영을 위한 주소 공간, 독립된 메모리 영역 등이다.
특징
- 프로세스는 각각 독립된 메모리 영역을 할당받는다. (코드, 데이터, 스택, 힙)
- 기본적으로 1프로세스 1스레드(메인)
- 각 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 다른 프로세스의 자원에 접근하기 위해 프로세스 간의 통신을 사용할 수 있다.(IPC, inter-process communication)
-> 파이프, 파일, 소켓 등을 이용
-> 별도의 공유 메모리를 만들어서 정보를 주고받도록 설정
-> LPC (Local inter-Process Communication) 사용 - PCB가 있어 프로세스의 상태를 저장한다.
스레드 (Thread)
스레드는 프로세스 내에서 실행되는 여러 흐름의 단위를 말한다.
프로세스의 특정한 수행 경로이자 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
특징
- 스레드는 프로세스 내에서 각자의 스택만 할당받고, 코드,데이터,힙 영역은 공유한다.
-> 독립적인 스택을 갖는다는 것은 독립적인 함수 호출이 가능하다는 의미.
-> 독립적인 함수 호출이 가능하다는 것은 독립적인 실행흐름이 추가된다는 의미. - 각각의 스레드는 별도의 레지스터를 갖는다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
- 스레드도 TCB 갖고 있음
컨텍스트 스위칭
CPU는 여러 프로세스를 돌아가며 작업을 처리하는데 이 과정을 Context Switching이라고 한다.
동작 중인 프로세스가 대기 상태로 변환되면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 프로세스가 동작하면서 그 프로세스의 이전 상태를 복구하는 작업을 말한다.
멀티 프로세스와 멀티 스레드 -> 한 어플리케이션에 대한 처리 방식
병렬성(Parallelism)과 동시성(Concurrency)
병렬성 : 여러 개의 코어(CPU)에 맞춰 여러 개의 프로세스, 스레드를 돌려 병렬로 작업을 동시 수행
동시성 : 둘 이상의 작업이 동시에 실행되는 것
병렬성은 물리적으로 동시에 실행하는 것, 동시성은 동시에 실행하는 것처럼 보이게 하는 것이다.
동시성은 프로세스를 잘게 나누어 번갈아 실행하여 사용자로 하여금 동시에 실행되는 것처럼 보이게 한다.
멀티 태스킹: 하나의 CPU가 여러 프로세스를 번갈아 처리하므로 여러 개의 작업을 동시에 수행하는 것처럼 보인다.
주의!
멀티 프로세싱 - 하나의 시스템에서 여러 개의 CPU를 사용하는 것
멀티 프로세스 - 하나의 응용프로그램을 여러 개의 프로세스로 분리하여 실행하는 것
멀티 프로세스
하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
(작업은 태스크 단위)
장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 프로세스로 영향이 확산되지 않는다. 안정성 상승
단점
- 컨텍스트 스위칭으로 인한 오버헤드
- 프로세스들은 서로 공유하는 메모리가 없어 컨텍스트 스위칭 발생 시, 캐시에 있는 모든 데이터를 리셋하고 다시 정보를 불러와야 한다. PCB(프로세스 컨트롤 블럭)도 바꿔야 한다.
- 하나의 프로그램에 속해도 프로세스 사이의 변수를 공유할 수 없다.
멀티 스레딩
하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것.
윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세스를 지원하고 있지만, 멀티 스레딩을 기본으로 하고 있다.
웹 서버는 대표적인 멀티 스레드 응용프로그램이다.
장점
- 시스템 자원 소모 감소 (자원의 효율성 증가) & 시스템 처리량 증가 ( 처리 비용 감소)
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
- 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
- 스레드 사이의 작업량이 작아 Context Switching이 빠르다. 스레드 컨텍스트는 하나의 프로세스 내의 스레드를 교환하는 것을 말한다.
- 스레드 간의 통신 방법은 프로세스 간의 통신보다 간단하다.
- 스레드는 스택을 제외한 모든 메모리를 공유하기 때문에 통신 부담이 적고, 프로그램 응답 시간이 단축된다.
단점
- 주의 깊은 설계가 필요함 - 설계를 잘못하면 싱글 스레드가 더 빠를 수도 있다.
- 디버깅이 까다로움
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
-> 스레드를 여러 개 사용하도록 설계해도 코어가 하나라면 여러 개의 스레드를 병렬적으로 처리할 수가 없다. - 다른 프로세스의 스레드를 제어할 수 없다.
- 멀티 스레드의 경우 자원 공유 문제가 발생한다. (동기화 문제)
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
정리 - 멀티 스레딩을 사용하는 이유
자원의 효율성
같은 작업을 멀티 프로세스->멀티 스레드로 변경하여 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
특히 프로세스 간의 컨텍스트 스위칭은 CPU 레지스터 교체뿐 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되어 오버헤드가 크다.
스레드는 프로세스 내의 메모리를 공유해 스레드 간 데이터를 주고 받는 것이 간단하고, 그에 따른 시스템 자원 소모가 줄어든다.
처리 비용 감소 및 응답 시간 단축
프로세스 간의 통신보다 스레드 간의 통신이 비용이 적어 작업 간 통신의 부담이 줄어든다.
프로세스 간의 전환보다 스레드 간 전환 속도가 빠르다.
Context Switching시 스레드는 스택 영역만 스위칭하면 되니까 빠르다. 스레드의 경우, 스위칭할 메모리 자체가 작다.
주의! 동기화 주의
스레드 간의 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 충돌이 발생할 수 있다.
출처
[OS] 프로세스와 스레드의 차이 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
👩💻 멀티 태스킹 & 멀티 프로세싱 개념 한방 정리
컴퓨터의 병행 처리 우리가 음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 컴퓨터가 자원을 효율적으로 사용하는 멀티 태스킹(Multi Tasking) 기술 덕분이다. 멀티 태
inpa.tistory.com
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
'컴퓨터시스템' 카테고리의 다른 글
Segmentation Fault (0) | 2024.03.11 |
---|---|
레지스터와 메모리, 그리고 캐시 (0) | 2024.03.11 |
웹서버와 CGI와 WAS (+ MIME Type) (2) | 2024.02.22 |
파일 디스크립터란? (File Descriptor) (0) | 2024.02.22 |
메모리 단편화와 메모리 할당 정책 (0) | 2024.02.07 |