Notice
Recent Posts
Recent Comments
Link
nathan_H
[OS] 프로세스 vs 쓰레드 본문
Intro
- 프로세스와 쓰레드가 먼지는 알지만, 막상 말로 설명하려면 제대로 못하는 경우가 많다.
- 아는 것과 이해한 것은 다르기 때문에 이번에 명확하게 "이해"하고자 프로세스와 쓰레드에 대해 정리하고자 한다.
들어가기 전에
프로그램 & 프로세스 & 쓰레드 각 용어에 대한 의미를 파악하고 가자.
프로그램
: 작업을 위해 실행할 수 있는 파일.프로세스
: 연속적으로 실행되고 있는 프로그램스레드
: 프로세스 내에서 실행되는 여러 흐름의 단위
프로세스
- 프로세스는 앞서 언급했던대로, "실행되고 있는" 프로그램이다.
- 즉 운영체제 메모리에 올라와 실행되고 있는 단위라고 보면 된다.
특징
- 프로세스는 독립된 메모리 영역을 가지고 있다.
Heap, Data, Code(text), Stack
Heap
: 프로세스가 실행되는 동안 동적으로 메모리가 할당되는 영역.Data
: 전역 변수들이 수록되는 영역.Stack
: 함수의 매개변수나 복귀 주소와 로컬 변수와 같이 임시적이 자료를 가지고 있는 영역.Code
: 프로그램 코드.
- 프로세스는 또한 프로그램 카운터의 값과 처리기 레지스터의 내용으로 대표되는 현재 활동을 포함하고 있다.
- 각 프로세스는 독립된 주소 공간에서 실행되고, 기본적으로 각 프로세스 내의 변수나 데이터에 접근할 수 없다.
- 다른 프로세스 자원에 접근하기 위해서는 IPC(inter-process-communication)을 사용해야 함.
- EX) 파이프, 파일, 소켓 등
프로세스 제어 블록 (PCB)
- 각 프로세스 정보를 나태내는 블록으로 Process State, Process Number, Program Counter, registers, memory limits 등이 기록되어 있다.
Program Counter
: 프로세스가 "다음에 실행할 명령어의 주소"를 가리킴.Registers
: CPU Registers는 컴퓨터 구조에 따라 다양한 수와 타입을 가지는데, Register에는 accumlator, index register, stack register, general-purpose 레지스터들과 상태 코드가 포함되어 있다. Registers는 프로세스가 올바르게 실행되기 위해, 인터럽트 발생 시 저장되어야 함.
- 그리고 위 정보를 토대로, CPU는 프로세스를 병행 수행을 진행한다.
- 즉 PCB는 프로세스마다 달라지는 모든 정보를 저장하는 저장소의 역할을 한다고 보면 된다.
PCB 저장 및 Process 사용 흐름
스레드
- 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위이다.
- 프로세스는 기본적으로 하나의 스레드를 가지고 있으며, 많은 프로그램은 멀티 스레드 기반해서 동작하는 경우가 많다.
- "프로세스 내에서 실행되는 여러 흐름의 단위"라는 말이 와닿지 않을 수 있는데, 프로그램 내에서 동작하는 많은 흐름이나 동작을 생각하면 된다.
- 가령, 함수 실행, http 통신 등등
특징
- 스레드는 프로세스내에서 실행되는 단위이기 때문에, 프로세스의
Code
,Heap
,Data
영역을 공유한다. - 그래서, 프로세스와 달리 스레드는 프로세스 내의 자원을 서로 공유하며 접근이 가능하다.
자바 스레드
- 자바 스레드는 운영체제에서 관리하는 쓰레드와 큰 차이가 없지만, 유저 스레드라는 점과 JVM이 운영체제 역할을 하며 직접 관리하는 점이 다르다.
- 그래서 자바는 JVM내에 따로 프로세스가 존재하지 않고, 스레드만 존재하고 기본적으로 멀티 스레드 전략으로 실행된다.
- 자바에서 스레드 스케줄링 또한 JVM에 의해 이루어진다.
- JVM이 관리하는 스레드 정보
- 스레드 개수
- 스레드로 실행되는 프로그램 코드의 메모리 위치.
- 스레드 상태
- 스레드 우선순위
- JVM이 관리하는 스레드 정보
- 즉, 자바 개발자 입장에서는 자바 스레드로 작동할 코드를 작성하고, 스레드의 생명 주기는 JVM에 의해 관리된다.
프로세스 vs 스레드
- 그럼 이제 프로세스와 스레드의 개념과 특징을 파악했는데, 두 개의 각 차이점 무엇인지 간략하게 정리해보자.
메모리 및 주소
- 프로세스 : 실행되고 있는 프로그램으로 각각 독립된 주소와 메모리를 가지고 있음.
- 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위이므로, 프로세스 메모리 및 주소를 통해 제어.
자원 공유
- 프로세스 : 각 프로세스 간의 자원 공유 및 접근이 기본적으로 불 가능 하며, 필요 시 IPC를 통해 진행해야 함.
- 스레드 : 프로세스 내에서 실행되는 단위이므로 한 프로세스 내의 자원을 서로 공유 및 접근이 가능하다.
멀티 프로세스 & 멀티 스레드
- 프로세스와 스레드의 차이점과 장단점은 멀티 프로그래밍 관점에서 많은 차이점을 가지게 되는데, 그래서 이번에는 멀티 프로세스와 멀티 스레드 관점에서 알아보자.
들어가기 전에
- Context Switching 이란?
- CPU 내에서 여러 프로세스 혹은 스레드가 돌아가면서 병행 수행을 하는데, 이때 각 프로세스 혹은 스레드를 바꾸는 과정을 Context Switching 이라고 한다.
- 즉, 대기중인 프로세스의 상태를 보관(Context)하고, 다음 순서의 프로세스의 상태를 복구해 작업(Switching)을 하는 과정이라고 보면 된다.
멀티 프로세스
- 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것.
- 참고, 프로세스는 기본적으로 부모 - 자식 관계로 생성이 된다.
장점
- 장애 대응 : 여러 개의 자식 프로세스 중 하나가 문제가 발생하면 해당 자식 프로세스만 죽는 것 이상으로 다른 프로세스에 영향을 주지 않는다.
단점
비용
- 실행 및 종료 : 프로세스는 스레드보다 큰 단위이기 때문에, 실행 및 종료하는 실행 비용이 많이 들게 됨.
- Context Switching : 캐시 메모리 초기화 등 무거운 작업이 진행돼 시간과 비용이 많이 소모되고, 오버헤드가 발생하게 된다.
- 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러와야 한다.
자원 공유
- 프로세스는 각각의 독립된 주소와 메모리를 통해 실행되므로 자원공유을 진행하려면 IPC를 통해 공유를 진행해야하는데, IPC자체가 복잡하고 비용이 발생하는 방법이다.
멀티 스레드
- 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 하나의 작업을 처리하도록 하는 것.
장점
- 처리 비용
- 멀티 스레드의 장점은 멀티 프로세스에 비해 비용적인 측면이 상당 부분 감소되는데, 우선 스레드는 프로세스 내에서 수행되는 것이기 때문에, Heap, Data, Code 영역이 공유되어 자원을 공유하는 것이 간단해지기 때문에 비용이 적게 발생하며 빠르게 수행됨.
- Context Switching도 스레드 사이의 작업량이 작으므로 빠르게 수행이 이루어 지며 비용이 적게 발생.
- 자원 소모
- 프로세스를 생성하기 위해서는 운영체제에 시스템 콜을 통해 진행되는데, 스레드는 프로세스 내에서 생성되기 때문에 비교적 효율적으로 자원을 관리할 수 있음.
단점
- 자원을 공유한다는 점이 장점이자 단점이 될 수 있는데, 자원 공유로 인한 동기화 이슈가 발생할 수 있음.
- 그로 인해 주의 깊은 설계와 디버깅이 쉽지 않다.
마무리
- 프로세스와 스레드는 각 용어와 어떤 특징을 가지고 있는지 명확히 파악하면, 멀티 프로그래밍에서의 장,단점에 대한 이해는 쉽게 될 것이다.
- 하지만 위 이론적인 내용은 정말 단순히 "이론"이기에 직접 Action을 통한 경험으로 숙련도를 높이는 과정이 필수 일 거 같다.
참고
'Computer Science > OS' 카테고리의 다른 글
[OS] Blocking / Non-Blocking & Synchronous / ASynchronous (0) | 2020.10.09 |
---|
Comments