CS 지식/○ OS(Operating System)

(2) 프로세스 & 스레드

코르시카 2021. 6. 12. 23:05

1. 프로세스와 스레드

1-1) 정의

(a) 프로세스 : 메모리 상에서 실행중인 프로그램의 작업

(b) 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위

 

1-2) 기본 개념

(a) 프로세스-스레드 관계

기본적으로 프로세스마다 최소 1개의 스레드 보유 (메인 스레드 포함)

== 하나의 프로세스가 생성될 때 기본적으로 하나의 스레드 같이 생성

 

(b) 프로세스의 특징

프로세스는 각각 별도의 주소 공간 할당, 서로 독립적이다 (완전 개별)

  • Code : 코드 자체를 담고 있는 메모리 영역(프로그램 명령)
  • Data : 전역변수, 정적변수, 배열 등 (초기화 된 데이터)
  • Heap : 동적 할당시 사용 (new(), mallock())
  • Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)

> 프로세스의 메모리 구조

> 정적 / 동적할당의 차이

추가 참조 - 정적할당 / 동적할당
link : 링크

 

(정적할당/동적할당) 스택(stack)과 힙(heap)영역

정적할당 : 변수선언을 통해 필요한 메모리를 확보하는 방법 동적할당 : 프로그램 실행 도중, 필요한 메모...

blog.naver.com

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이란?
추가 참조 링크 : link

1) 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

 

프로세스 & 스레드 | 👨🏻‍💻 Tech Interview

프로세스 & 스레드 프로세스 : 프로그램을 메모리 상에서 실행중인 작업 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위 기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함

gyoogle.dev

https://corock.tistory.com/289

 

[Java] Multil Thread(멀티스레드)

1. 프로세스(Process)와 스레드(Thread) '''스레드의 뜻은 거미줄, 실타래라는 뜻이다. 스레드라는 건 작업 단위를 말한다. 1.1 작업관리자에서 프로세스와 스레드 확인 Ctrl+Alt+Del - 작업 관리자 - 성능

corock.tistory.com

 

반응형