-
(2) 프로세스 & 스레드CS 지식/○ OS(Operating System) 2021. 6. 12. 23:05
1. 프로세스와 스레드
1-1) 정의
(a) 프로세스 : 메모리 상에서 실행중인 프로그램의 작업
(b) 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위
1-2) 기본 개념
(a) 프로세스-스레드 관계
기본적으로 프로세스마다 최소 1개의 스레드 보유 (메인 스레드 포함)
== 하나의 프로세스가 생성될 때 기본적으로 하나의 스레드 같이 생성
(b) 프로세스의 특징
프로세스는 각각 별도의 주소 공간 할당, 서로 독립적이다 (완전 개별)
- Code : 코드 자체를 담고 있는 메모리 영역(프로그램 명령)
- Data : 전역변수, 정적변수, 배열 등 (초기화 된 데이터)
- Heap : 동적 할당시 사용 (new(), mallock())
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
> 프로세스의 메모리 구조
> 정적 / 동적할당의 차이
추가 참조 - 정적할당 / 동적할당
link : 링크1) 정적할당 : 변수 선언을 통해 필요한 메모리를 확보(코딩중에 미리)
아마 Process의 메모리상 data 영역에 할당되는 듯
2) 동적할당 : 프로그램 실행 도중, 필요한 메모리를 확보하는 방식
Process의 heap 영역에 할당
3) 메모리 타입
(a) Stack 구조 : 지역변수
- 후입선출(Stack 구조)
- 지역변수들이 { } 코드블럭 안에서 메모리를 저장하고, 코드 블록이 끝나면 해당 메모리가 release되는 구조(b) Heap 구조 : 전역변수(동적) / 동적할당
- 힙 영역은 운영체제가 관리, heap영역의 메모리 중에 사용하지 않는 메모리를 할당
- 코드 runtime 도중 프로그램의 메모리 할당 요청시, 운영체제가 임의의 빈 공간을 줌
- C언어 mallock 등은 반드시 사용 후 반환을 해야 한다 → 메모리 누수 생길 수 있음
※ 동적할당 및 전역변수에 이용2-3) 스레드의 특징
스레드는 상위 프로세스 밑에서 Stack만 할당 받고, 나머지 영역은 서로 공유
→ 프로세스가 나머지 영역을 관리 해주는 듯
※ heap 영역은 OS가 관리
2-4) 프로세스 / 스레드 차이
프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
스레드 : 다른 스레드와 공간 / 자원을 공유하면서 사용
3. 멀티프로세스
3-1) 정의
하나의 컴퓨터에 여러 CPU가 장착되어있어 하나 이상의 프로세스들을 "실질적 병렬" 처리하는 것
3-2) 장점
안정성 (메모리 침범 문제를 OS 차원에서 해결)
process간 완전히 독립적이므로 할당받을 수 있으면 독립적으로 수행될 수 있음으로
3-3) 단점
각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을 수록 Context-switching overhead 발생
<참조를 위한 접은글 ▼ >
더보기OS - context swtiching이란?
추가 참조 링크 : link1) Context - Swithcing의 정의?
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.
▶ 캐시메모리 초기화 같은 무거운 작업
2) Context란?OS에서 Context는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다.
이 Context는 프로세스의 PCB(Process Control Block)에 저장된다.
그래서 Context Switching 때 PCB의 정보를 읽어(적재) CPU가 전에 프로세스가 일을 하던거에 이어서 수행이 가능한 것이다.
PCB의 저장정보
- 프로세스 상태 : 생성, 준비, 수행, 대기, 중지
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
- 레지스터 : 누산기, 스택, 색인 레지스터
- 프로세스 번호
* 참고로 Context Switching 때 해당 CPU는 아무런 일을 하지 못한다. 따라서 컨텍스트 스위칭이 잦아지면 오히려 오버헤드가 발생해 효율(성능)이 떨어진다.
출처: https://jeong-pro.tistory.com/93 [기본기를 쌓는 정아마추어 코딩블로그]즉, 신뢰성과 독립성을 위해 process자체를 많이 만들어 경제적으로 작업을 수행할 수 있으나 CPU가 1 -> 2 process 교체할 때 state를 저장하고 바꾸는 과정에서 "아무런 동작을 하지 못함"으로 소비하는 비용이 단점
4. 멀티 스레드
4-1) 정의
하나의 응용프로그램(process)에서 여러 스레드를 구성해, 각 스레드가 하나의 작업을 처리하는 것
하나의 process 밑에서는 다수의 thread가 자원을 공유하고, 이를 통해 작업들을 동시에 처리하도록 해줌
4-2) 장점
독립 프로세스에 비해 공유 메모리만큼이 thread 개수 만큼 빠지므로 적은 비용
4-3) 단점
안정성 문제.
하나의 스레드가 데이터 공간을 망가뜨리면(ex 서로 변수 접근 등)
모든 스레드가 작동 불능 상태(or 소위 잘못된 계산 결과를 가짐 ∵ 공유 메모리를 가지므로)
4-4) 단점 해결 방법
멀티 스레드에 대한 안정성은 Critical Section 기법을 통해 구현
-> 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려 할 때 발생하는
문제를 해결하기 위한 "동기화 과정"
상호 배제, 진행, 한정된 대기 등을 충족해야 함
참조
https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
https://corock.tistory.com/289
반응형'CS 지식 > ○ OS(Operating System)' 카테고리의 다른 글
(6) PCB & Context Switching (0) 2021.06.16 (5) System Call (0) 2021.06.15 (4) 인터럽트 (0) 2021.06.15 (3) 프로세스 주소 공간 (0) 2021.06.13 (1) 운영체제란? (0) 2021.06.10