[OS] 프로세스와 쓰레드
2022. 1. 4. 14:39
프로그램이란
- (실행되기 전)명령어, 코드 및 정적인 데이터의 묶음
프로세스란
- 실행 중인 프로그램
- 하드 디스크에 있는 프로그램이 프로세스가 되면서 메모리에 적재 된다.
- 운영체제로부터 시스템 자원을 할당 받는 작업의 단위
- 스레드 단위 작업을 지원하기 위한 자원 할당의 단위 → 프로세스가 동작 중이라는 것은 한 프로세스에 있는 스레드가 실행 중이라는 것
- 프로세스 생성 시 PCB블록이 생성되어 프로세스가 관리된다.
프로세스 메모리 영역
Stack - 매개변수, 지역 변수 등 임시적인 자료
Heap - 동적으로 할당되는 메모리
Data - 전역 변수
code - 프로그램의 코드
PCB
- 각 프로세스는 운영체제에서 PCB(Process Control Block)으로 표현됨
- 프로세스를 제어하기 위한 정보를 모아둠.
- 포인터 : 준비상태나 대기상태의 큐를 구현하기 위해 필요한 포인터
- PID : 프로세스 식별자
- 프로세스 상태 : new, ready, running, wating, halted 등
- 프로그램 카운터 : 다음 실행할 명령어의 주소
- 스케줄링 정보 : 우선순위 등
스레드란
- 프로세스 내에서 나뉘어진 하나의 실행 단위 (여러 개가 있을 수 있음)
- CPU 이용의 기본 단위
- Text, data, heap 영역을 공유
- 각 Thread는 별도의 stack 영역을 가진다
*자원은 Process 단위로 받고 작업/스케줄링은 Thread단위로 진행한다!
한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식이 있다.
멀티 스레드 (하나의 어플리케이션을 여러 개의 스레드가 실행)
- 한 프로세스 안에 스레드가 2개 이상일 때
- 프로세스의 자원을 공유 ( heap, data, text)
- ex) Internet explore
(장점)
- 향상된 응답성 (자원을 공유하기 때문에)
- context switching 비용이 적음 ( 자원을 공유하기 때문에 )
- 캐싱 적중률이 높음
(단점)
- 서로 다른 쓰레드가 데이터 영역과 힙 영역을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 그렇기 때문에 멀티 쓰레딩 환경에서는 동기화 작업이 필요하다.
- 긴밀하게 연결되어 있어 한 스레드에 문제가 생기면 다른 쓰레드에도 영향을 미친다.
멀티 프로세스 (하나의 어플리케이션을 여러 개의 프로세스가 실행)
- pork를 통해 자식 프로세스 생성
- 하나의 작업을 여러 개의 프로세스가 처리
- ex) Google Chrome
(장점)
- 동기화 작업이 필요하지 않음
- 자식 프로세스 중 하나가 문제가 생겨도 다른 프로세스에 영향이 없음
(단점)
- 독립적이기 때문에 IPC를 통해서 통신해야됨
- 자원을 공유하지 못함
Context switching이란?
- 프로세스 혹은 쓰레드의 할당시간이 끝나고 새로운 프로세스나 쓰레드를 CPU에 할당시킬 때 기존 실행단위를 대기상태로 만들고 새로운 실행단위를 실행상태로 바꾸는 모든 일련의 과정
- 멀티 쓰레드는 공유된 자원 이외에 heap영역만 변경하면 되기 때문에 context switching비용이 적게 든다.
- 멀티 프로세스는 모든 자원이 독립되어 있기 때문에 context switching 비용이 비교적 많이 든다.
'CS > OS' 카테고리의 다른 글
[OS] 멀티프로세스의 pork를 통한 자식 생성과 copy on write (0) | 2022.01.04 |
---|