춤추는 개발자

[OS] 프로세스와 스레드의 특징 및 차이 본문

Developer's_til/운영체제

[OS] 프로세스와 스레드의 특징 및 차이

Heon_9u 2021. 5. 18. 17:18
728x90
반응형

프로세스란?

 - 컴퓨터에서 자원을 점유한 상태로 실행 중인 프로그램

 - OS로부터 시스템 자원을 할당받는 작업의 단위

 

프로세스의 특징

1. 각각 독립된 메모리 영역 (Code, Data, Stack, Heap의 구조)을 할당받는다.

2. 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

3. 각 프로세스는 별도의 주소 공간에서 실행되며, 각 프로세스는 서로의 변수나 자료 구조에 접근할 수 없다.

4. 한 프로세스가 다른 프로세스에 접근하려면 IPC를 사용해야 한다. (파이프, 파일, 소켓 등)

 


스레드란?

 - 프로세스 내에서 작업을 처리하는 기능의 단위

 - 프로세스 내에서 실행되는 여러 흐름의 단위

 - 프로세스의 특정한 수행 경로

 

스레드의 특징

1. 스레드는 프로세스 내에서 Stack 영역만 할당받고 나머지 Code, Data, Heap 영역은 공유한다.

2. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름(작업의 단위)으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 있는 스레드끼리 공유하면서 실행된다. (스레드 통신)

3. 각각의 스레드는 별도의 레지스터와 Stack을 갖고있지만, Heap 메모리는 서로 읽고 쓸수 있다.

4. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 변경 결과를 즉시, 볼 수 있다.

 

Java에서의 스레드란?

 - 일반 스레드와 차이가 없으며, JVM이 OS의 역할을 한다.

 - 자바에는 프로세스가 존재하지 않고, 스레드만 존재하며, JVM에 의해 스케쥴되는 실행 단위이다.

 - JVM이 관리하는 영역 (스레드의 갯수, 상태, 우선순위 등)

 - 즉, 개발자는 Java 스레드로 작동할 스레드 코드를 작성(new Thread)하고, 스레드 코드가 생명 주기를 가지고 시작하도록 JVM에 요청하는 작업을 한다.

 


 

프로세스와 스레드의 작동 방식에 대한 추가 설명

- 프로세스는 각각 독립된 메모리 영역을 할당하기 때문에 프로세스는 다른 프로세스의 변수나 자료 접근할 수 없습니다.

 

프로세스가 OS로부터 메모리를 할당받은 모습

이와 다르게 한 프로세스 내에서 스레드는 메모리를 서로 공유할 수 있습니다. 프로세스가 할당받은 Stack메모리 영역을 제외하고 Code, Data, Heap형식으로 할당된 메모리 영역을 공유합니다.

 

스레드의 Stack 영역과 자원을 공유하는 모습

 

 이 경우, 프로세스는 실행 도중, 오류가 발생되어 강제 종료돼도 공유하고 있는 파일을 손상시키지 않는 경우가 아니라면, 다른 프로세스에 아무 영향을 주지 않는다.

 그러나 스레드의 경우, 메모리 영역을 공유하기 때문에 특정 스레드에서 오류가 발생하면, 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

 


 

멀티 프로세스와 멀티 스레드

멀티 프로세스

 - 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

 

장점

- 여러 개의 서브 프로세스 중 하나에 문제가 발생한다면, 해당 프로세스만 종료되고, 파일을 공유하지 않는 이상 다른 프로세스에 영향을 주지 않는다.

 

 

단점

- 그러나 Context Switching(문맥전환)으로 인해 오버헤드가 발생할 수 있다.

- Context Switching과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생할 수 있다.

- 프로세스는 각각 독립된 메모리 영역을 할당받기 때문에 공유하는 메모리가 없다. 이는 Context Switching이 발생하면 캐시에 있는 모든 데이터를 초기화하고 다시 캐시 정보를 불러오기 때문에 자원 소모가 심하다.

- 프로세스 사이의 어렵고 복잡한 통신 기법 (IPC)

 

Context Switching란?

 - CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context Switching라 한다.

 - 구체적으로 설명하자면, 하나의 프로세스를 실행하고 있는 상태에서 요청의 의해 다음 순위의 프로세스가 실행되어야 할 때, 기존의 프로세스의 상태 또는 레지스터 값을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 작업을 의미한다.

 

 


멀티 스레드

- 하나의 프로세스를 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 처리하도록 만드는 것이다.

- 윈도우, 리눅스 등 많은 OS들이 멀티 프로세싱을 지원하지만, 멀티 스레딩을 기본으로 하고 있다.

- 웬 서버는 대표적인 멀티 스레드 응용 프로그램이다.

 

 

장점

- 프로세스를 생성하여 자원을 할당하는 과정이 줄어들어 자원을 효율적으로 관리할 수 있다.

- 스레드 간 통신이 프로세스 간의 통신보다 비용이 적다.

- 스레드 사이의 작업량이 작아서 Context Switching이 빠르다.

- 스레드는 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.

- 프로그램의 일부분이 긴 작업을 수행하더라도 사용자와 상호작용할 수 있습니다.

 

 

단점

- 주의깊은 설계가 필요하다.

- 디버깅이 까다롭다.

- 단일 프로세스 시스템의 경우, 효과를 기대하기 어렵다.

- 멀티 스레드의 경우, 자원 공유의 문제가 발생한다. (동기화 문제)

- 하나의 스레드에 문제가 발생하면, 전체 프로세스가 영향을 받는다.

 

 

 

728x90
반응형

'Developer's_til > 운영체제' 카테고리의 다른 글

프로세스의 스케줄링  (0) 2021.11.08
프로세스 제어 블록과 문맥 교환  (0) 2021.11.08
[OS] 멀티 스레드의 동기화  (0) 2021.05.18