티스토리 뷰
Process란?
프로세스란 실행중에 있는 프로그램을 의미한다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 운영체제는 프로세스들에게 적절히 자원들을 할당하여 여러가지 작업을 수행할 수 있게 한다.
특징
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
Thread
프로세스의 한계
프로세스만 존재하면 어떤일이 발생할까? 프로세스만 존재한다는 말은 다른 말로 한다면 한번에 하나의 작업을 할 수 있다는 뜻이다. 같은 프로세스를 여러개 만들수도 있겠지만 프로세스는 앞에서 말했다 싶이 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 즉 같은 프로세스라도 서로 공유하는 부분없이 독립적으로 자원을 할당받아 만들어 그만큼 메모리를 차지하고 CPU에서 할당받는 자원이 중복되게 될 것이다. 스레드(thread)는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생 하였다.
스레드의 개념
스레드란, 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다. 브라우저를 예를들면 우리는 웹 브라우저에서 파일을 다운 받으면서 인터넷 쇼핑을 즐길 수 있다.
즉, 하나의 프로세스 안에서는 여러가지 작업의 흐름이 동시에 진행되기 때문에 가능한 것인데 이러한 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티(다중) 스레드라고 부른다.
스레드의 자원 공유
스레드는 프로세스가 할당 받은 자원을 이용하는 실행의 단위로서, 스레드가 여러개 있으면 우리가 파일을 다운 받으며 동시에 웹 서핑을 할 수 있게 해준다. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되기 때문에 동시 작업이 가능한 것이다. 그래서 아래 사진과 같이 하나의 프로세스 내에 여러개의 스레드가 들어있는 상태인 것이다.

이때 프로세스의 4가지 메모리 영역(Code, Data, Heap, Stack) 중 스레드는 Stack만 할당받아 복사하고 Code, Data, Heap은 프로세스내의 다른 스레드들과 공유된다. 따라서 각각의 스레드는 별도의 Stack을 가지고 있지만 heap 메모리는 고유하기 때문에 서로 다른 스레드에서 가져와 읽고 쓸 수 있게 된다.

stack영역을 공유하지 않는 이유
stack은 함수 호출 시 전달되는 인자, 되돌아갈 주소값, 함수 내에서 선언하는 지역 변수 등을 저장하는 메모리 공간이기 때문에, 독립적인 스택을 가졌다는 것은 독립적인 함수 호출이 가능하다라는 의미이다. 그리고 독립적인 함수 호출이 가능하다는 것은 독립적인 실행 흐름이 추가된다는 말이다. 즉, stack을 가짐으로써 스레드는 독립적인 실행 흐름을 가질 수 있게 되는 것이다.
또한 스레드는 프로세스와 달리 주소공간을 공유하기 때문에 스레드간 통신은 프로세스간 통신보다 비교적 간단하고 빠르다.
이처럼 스레드를 활용하면 자원의 효율성이 증가하기도 하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경을 써야한다는 단점이 있다.
특성
|
프로세스
|
스레드
|
정의
|
실행 중인 프로그램의 인스턴스
|
프로세스 내에서 실행되는 경량 실행 단위
|
메모리 공간
|
독립된 주소 공간
|
프로세스의 메모리 공간 공유 (코드, 데이터, 힙)
|
스택
|
각 프로세스는 독립적인 스택을 가짐
|
각 스레드는 독립적인 스택을 가지지만 나머지는 공유
|
통신
|
IPC 등의 복잡한 메커니즘 필요
|
같은 메모리 공간 내에서 간단히 데이터 공유 가능
|
독립성
|
완전히 독립적
|
프로세스 내에서 의존적
|
생성과 관리
|
자원 소모가 크고 생성 속도가 느림
|
자원 소모가 적고 생성 속도가 빠름
|
컨텍스트 스위칭
|
비용이 높음
|
비용이 낮음
|
'OS' 카테고리의 다른 글
OS - CPU 스케줄링 (1) | 2024.08.28 |
---|---|
프로세스 (1) | 2024.08.22 |
OS - 동기식 I/O와 비동기식 I/O (1) | 2024.08.16 |
OS - 커널과 이중모드, 시스템 콜 (0) | 2024.08.16 |
OS - programmed I/O, Interrupted I/O, DMA I/O (0) | 2024.08.16 |