사전적 의미) 실을 꿰다
운영체제 의미) 실행될 명령어들의 연속
정량 프로세스(Light Weight)라고 한다
하나의 프로세스를 수행하는 과저에서 여러 개의 인터럽트 루틴이나 함수를 순서적으로 수행하는 프로세스 = 단일 쓰레드
하나의 프로세스에 여러 개의 쓰레드 존재 = 다중 쓰레드
순차적 실행과 프로세스 상태 전이의 병렬성을 접속하기 위해 개발되었다
다중 프로그래밍 기법에서 여러 개의 프로세스는 하나의 시스템 공유
하나의 컴퓨터 시스템에서 여러 개의 프로세스가 상태 전이를 통해 실행되듯이 하나의 프로세스에서 여러 개의 쓰레드가 실행될 수 있도록 하는 기술
프로세스 내 쓰레드 간 통신은 커널 개입을 필요로 하지 않기 때문에 프로세스 간 통신보다 더 효율적으로 이루어진다.
멀티 프로세서(CPU가 여러 개)는 탑재 프로세서(CPU)마다 쓰레드를 실행시킬 수 있기 때문에 프로세스의 처리율을 향상시킬 수 있다.
다중 프로세스에서 각 프로세스는 각각 독립된 메모리 영역(Code, Data, Heap, Stack의 구조)을 할당 받는다
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
각 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 이용해야 한다
< 다중 프로세서의 독립적인 메모리 >
다중 쓰레드는 하나의 쓰레드 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유한다
스택은 함수 호출 시 되돌아갈 위치 값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다
스택 메모리 공간이 독립적이므로 사용하는 것은 독립적이 ㄴ함수 호출이 가능하다는 것이기 때문에 쓰레드는 독립적인 실행 흐름이 가능하다
따라서 쓰레드는 각종 레지스터(PC : 프로르램 카운터 등) 및 스택 공간들을 모든 쓰레드가 독립적으로 사용한다
쓰레드들은 하나의 프로세스 내의 주소 공간이나 자원들을 같ㄴ은 프로세스 내에 쓰레드끼리 공유하면서 실행된다
프로세스들은 같은 힙(Heap) 공간을 공유하거나 접근할 수 없지만 하나의 프로세스 안에 있는 여러 쓰레드들은 같은 힙 공간을 공유할 수 있다.
한 쓰레드가 프로세스 자원을 변경하면 다른 쓰레드도 그 변경 결과를 알 수 있다
< 다중 쓰레드 >
■ 커널 수준의 쓰레드
- 쓰레드 패키지를 운영체제 커널 자체에서 운영 관리
- 각 응용 프로그램들은 운영체제에 영향을 많이 받게 되므로 이식성 낮음
■ 사용자 수준의 쓰레드
- 쓰레드 패키지를 사용자 영역에 두고 운영체제 커널은 단일 프로세스만을 관리
- 쓰레드 패키지를 런타임 시스템(Run Time System)에서 운영
- 운영체제 입장에서는 런타임 시스템도 하나의 프로세스로 인식
- 쓰레드를 운영하지 않는 운영체제에서 실행할 수 있도록 이식성 뛰어나다
다시 비교를 해보면..