디스크(일반적으로)에 저장되어 있는 프로그램이 실행될 때, 프로그램 자신의 고유한 메모리 공간에 프로그램의 코드가 적재되고 프로세서는 메모리에 적재된 코드(명령어)를 하나하나 읽어 실행한다. 이렇게 실행중인 상태의 프로그램을 프로세스라 부른다.
프로세스와 마찬가지로 명령어가 프로세서를 이용하여 실행되어지는 객체의 기본 단위이다.
프로그램 명령을 실행하는 프로세스 내의 개체로, 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름으로 다음의 내용을 포함한다:
하나의 프로세스에서 여러개의 스레드가 실행될 수 있으며, 같은 프로세스 안에 있는 스레드끼리는 자원과 상태를 공유한다. 즉, 같은 주소 공간에 존재하며 동일한 데이터에 접근이 가능해진다 (동기화 문제에 주의!). 하지만 프로그램 카운터, 각종 레지스터 및 스택 공간들은 각각의 스레드가 별도로 공간을 가지며 공유되지 않는다.
하나의 스레드에서 오픈한 파일을 다른 스레드가 사용이 가능해짐에 따라:
1) 어플리케이션 성능 향상
2) context switching 비용 감소
3) 다중 프로세서 구조 이용
: 다중 스레딩은 스레드가 여러 프로세서에서 병렬로 실행할 수 있는 환경을 제공
하나의 응용프로그램을 여러개의 프로세스로 구성하여 하나의 작업을 처리한다.
안정성 확보: 여러개의 자식 프로세스 중 하나에 문제가 생겨도 그 프로세스만 죽고 프로그램 실행은 정상적으로 이어짐
별도의 동기화 작업이 필요치 않음
context switching 과정에서 오버헤드가 발생할 확률이 높음: 프로세스는 각 독립된 메모리 영역을 할당받기 때문에 공유하는 메모리가 없다. 캐시 메모리 초기화 등 무거운 작업이 잦게되고 시간이 많이 소요되며 오버헤드가 일어날 수 있음.
프로세스간 통신 과정이 복잡하다: 메모리 영역이 각 프로세스에 독립적으로 위치하므로 프로세스간 공유되는 변수나 자료구조를 만들 수 없다. 이때문에 IPC라는 통신기법이 필요해짐.
하나의 응용프로그램을 여러개의 스레드로 구성하며, 여러 스레드가 하나의 작업을 처리한다.
e.g. 웹서버 (멀티 스레딩 응용프로그램)
1, 메모리 공간과 시스템 자원 소모가 줄어듦.
스레드간 통신시 전역변수 공간 또는 동적으로 할당된 heap 영역을 이용해 데이터를 전달 받음으로 통신이 간단.
context switching시 캐시 메모리 초기화 등의 무거운 작업이 필요없음 : 비용이 적고 응답속도가 빨라져 시스템 처리량 증가
자원간의 동기화 문제 : 스레드들간에 공유되는 데이터에 한 스레드는 읽기를 실행하고 또 하나의 스레드는 쓰기를 실행할 때
하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 주고 강제종료로 이어질 수 있음.
생성되었지만 운영체제에 의해 수행 가능한 프로세스 풀로 진입이 아직 허영되지 않은 프로세스
자원을 할당받아 작업이 진행될 수 있게 준비된 프로세스
현재 수행중인 프로세스
I/O 작업 완료 등과 같은 이벤트가 발생할 때까지 수행될 수 없는 프로세스
프로세스 수행이 중지되거나 어떤 이유로 중단되었기 때문에 프로세스 풀에서 방출된 프로세스