[운영체제] 프로세스/스레드
프로세스
사전적 정의 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
과거의 MS-DOS와 같은 운영체제에서는 한번에 한가지 작업만 가능했음. 이때 하드디스크에 설치 되어있는 프로그램을 메모리 상에서 실행중인 작업을 프로세스
라고 함
기본적으로 프로세스마다 최소 1개의 스레드를 갖고 있음 (각 프로세스는 별도의 주소공간 할당)
최근 대표적 운영체제(윈도우, 리눅스, 유닉스)에서는 한번에 여러가지 작업을 동시에 처리할 수 있음. 이처럼 여러개의 프로세스를 동시에 실행하는 것을 멀티태스킹이라고 함
하나 이상의 프로세스에서 병렬로 작업을 처리하는 것이 멀티프로세스
프로세스 구조
Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역 할당받음
Code
코드 자체를 구성하는 메모리 영역, 프로그램 명령이 위치
Data
전역변수, 정적변수, 배열, 구조체 등이 저장 (초기화된 데이터)
함수 내부에 선언된 정적 변수는 프로그램 실행 될 때 공간만 할당, 실행 시 초기화
Stack
프로그램이 자동으로 사용하는 임시 메모리 영역 (함수 호출 시 생성)
지역변수, 매개변수, 리턴 값 등 잠시 사용했다가 사라지는 데이터를 저장하는 영역
Heap
프로세스가 사용할 수 있도록 미리 예약되어있는 공간
동적으로 메모리를 할당하고자 할 때 위치하는 메모리 영역
C : mallock()
C++, Java : new()
스레드
사전적 정의 : 프로세스 내에서 실행되는 여러 흐름의 단위
프로세스에는 기본적으로 최소 1개의 스레드를 가지고 있음 (메인 스레드 포함)
만약 프로세스가 1개보다 많으면? 멀티스레드
특징
프로세스 내에서 각각 Stack만 따로 할당을 받음 ( Code, Data, Heap 영역 공유)
프로세스 vs 스레드
프로세스 | 스레드 |
---|---|
실행중인 프로그램 | 경량화된 프로세스 |
resource와 thread로 구성 | 프로세스 내에서 실제 작업 수행 |
모든 프로세스 하나 이상 스레드 가짐 | 한 프로세스 내에서 동작되는 실행 흐름 |
하나의 프로세스가 생성되면, 기본적으로 하나의 스레드 같이 생성 (메인 스레드)
스레드를 추가로 생성하지 않는다면, 모든 프로그램은 메인 스레드에서 실행이 됨
프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함
멀티프로세스
하나의 응용 프로그램을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것
즉, 하나의 컴퓨터에 여러개의 CPU를 장착(=멀티코어)해서 하나 이상의 프로세스들을 동시에 처리할 수 있는 것을 말함 (병렬 처리!!)
특징
- 부모-자식 관계라도 자신만의 메모리 영역을 갖고 있음 (즉, 상속이 가능해도 독립적 관계)
- 프로세스 간 통신을 하려면 IPC(Inter Process Communication)을 활용해야 함
장점
안전성 : 메모리 침범에 의한 문제를 OS 차원에서 해결해줌
만약 문제가 생기면? 그냥 다시 실행해주면 끝
단점
부담을 많이 줌
Context Switching으로 인한 성능 저하 발생
프로세스는 각각 독립된 메모리 영역을 갖고 있기 때문에, 많은 작업을 할수록 오버헤드 발생 가능성 증가
Context Switching이란?
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함
→ 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함
멀티스레드
하나의 응용 프로그램을 여러 스레드로 구성하여 각 스레드가 하나의 작업을 처리하는 것
즉, 프로세스 내에서 하나의 스레드가 아닌 여러개의 스레드를 만들어 명령어를 처리하는 것
이처럼 스레드는 공유 메모리를 가지며 여러 스레드가 다수의 작업을 동시에 처리하도록 해줌
장점
Context Switching 시, 독립적으로 할당받는 프로세스와는 달리 공유 메모리만큼의 시간 및 자원 손실이 감소
스택을 제외한 모든 메모리를 공유하므로, 전역 변수와 정적 변수에 대한 자료 공유 가능
(즉, 프로세스간 통신처럼 복잡한 과정을 거치지 않고, 비교적 효율적 일처리가 가능함)
단점
효율성 및 안정성에 대한 문제 발생
멀티스레드는 공유 메모리를 갖기 때문에, 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드를 작동 불능 상태로 만들어버림
(프로세스는 각각 독립적이기 때문에 하나의 프로세스가 망가져도 해당 프로세스만 중단, 나머지 프로세스는 영향을 받지 않음)
이러한 문제로 인해 Critical Section 기법으로 대비를 함
Critical Section(임계 구역)
멀티 스레딩 상황에 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
상호 배제(mutual exclusion), 진행(progress), 한정된 대기(bounded waiting) 충족 필요
멀티 프로세스 vs 멀티 스레드
멀티 프로세싱 | 멀티 스레딩 |
---|---|
CPU를 추가해 컴퓨팅 성능을 향상 | 단일 프로세스에 여러 스레드를 만들어 컴퓨팅 성능을 향상 |
여러 프로세스가 동시에 실행 | 단일 프로세스의 여러 스레드가 동시에 실행 |
프로세스 생성은 시간 소모적 | 스레드 생성은 시간과 자원 모두 경제적 |
- 멀티 프로세싱을 사용하면 시스템에 2개 이상의 CPU가 추가되지만, 멀티 스레딩은 프로세스가 여러 스레드를 생성하여 시스템의 컴퓨팅 속도를 높일 수 있음
멀티 프로세싱 시스템에서 멀티 스레딩이 병렬 처리를 증가시킴
즉, 멀티 프로세싱 환경에서 멀티 스레딩의 이점을 점차적으로 높여나가는 것이 가능함
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Deadlock (0) | 2019.03.31 |
---|---|
[운영체제] 뮤텍스(Mutex) & 세마포어(Semaphore) (2) | 2019.03.31 |
[운영체제] CPU 스케줄링 (1) | 2019.03.03 |
[운영체제] 스케줄러 (0) | 2019.02.23 |
운영체제(Operating System)란? (0) | 2019.02.13 |