프로세스는 두 가지 특성이 있다.
1. 자원 소유권
프로세스는 할당받은 자원을 소유하는 일종의 컨테이너이다. ( 주소공간, 프로그램 코드, 전역변수, Heap, OS 자원 )
2. 스케줄링 / 수행
프로세스는 우선순위를 가지며 OS에 의해 스케줄링되어 처리기를 할당받는다.
프로세스는 방대한 크기를 가진다. 정해진 시간에 한번에 처리가 불가능하므로 작은 단위로 나누는데, 이때 나누어진 경량 프로세스가(light process)가 쓰레드(Thread)이다. 쓰레드는 OS가 처리기에 디스패칭하는 단위이다. 하나의 프로세스는 여러 개의 쓰레드로 나뉜다. 그러나 자원 소유권은 하나의 프로세스가 갖는다. 그러므로 여러 개의 쓰레드는 하나의 자원을 공유한다.
이렇게 하나의 프로세스 내에서 여러 개의 쓰레드가 동작할 수 있도록 지원하는 운영체제의 기능을 멀티 스레딩(Multi Threading)이라 부른다.
단일 프로세스 단일 쓰레드 : DOS, MAC-OS
단일 프로세스 다수 쓰레드 : JRE ( JAVA RUNTIME ENVIROMENT )
다수 프로세스 단일 쓰레드 : 전통적 UNIX
다수 프로세스 다수 쓰레드 : WINDOWS, LINUX
쓰레드는 디스패치의 단위이므로 문맥(Context)가 있다. 그리고 쓰레드를 제어할 쓰레드 제어 블록도 존재한다. 각 쓰레드마다 별도의 스택이 존재하지만 프로세스의 상태와 자원을 공유한다.
어떤 작업을 처리할 때 프로세스를 생성하는 것보다 쓰레드를 생성하여 처리하는 것이 빠르다. 쓰레드는 기존의 프로세스를 토대로 생성되기에 속도가 빠르다. 쓰레드 간의 통신도 프로세스의 자원을 공유하기 때문에 커널의 개입없이 이루어질 수 있다.
사용자가 문서를 작성하면 문서 프로그램은 작성된 내용을 출력함과 동시에 저장작업도 처리한다. 이렇듯 하나의 프로세스 내에서 이루어지는 서로 다른 명령을 동시에 처리하는 것이 가능하다.
쓰레드 상태
생성(Spawn) : 프로세스가 생성되면 스레드도 함께 생성된다. 새로운 쓰레드는 레지스터 문맥과 스택공간을 가지며 준비 큐에 위치된다.
블록(Block) : 쓰레드가 어떤 사건을 대기하고 있는 상태이다.
비블록(UnBlock) : 어떤 사건이 발생했을 때 준비상태가 되는 것이다.
종료(Finish) : 쓰레드가 작업을 완료하면 레지스터 문잭과 스택이 해제된다.
한 프로세스의 임의의 스레드가 블록되어도 다른 스레드가 처리기를 차지하여 실행된다.
쓰레드 동기화
모든 쓰레드는 주소공간과 같은 자원을 공유한다. 하나의 쓰레드가 자원을 변경하면 모든 쓰레드가 영향을 받는다. 그러므로 모든 쓰레드는 서로 간섭하지 않고 자료구조를 손상하지 않도록 쓰레드들의 행위를 동기화(순서)해야한다.
ex) 하나의 공유변수에 대해서 쓰기(write)연산은 한순간에 하나 연산만 가능하다.
ex) 구글 크롬은 멀티 프로세스 브라우저로 각 탭이 자원을 공유하지 않고 독립적이다. 한 탭이 멈춰도 다른 탭은 살아있다.
참고자료
'CS > OS' 카테고리의 다른 글
[운영체제] Amdal의 법칙 , 구스타프슨 법칙 (0) | 2021.10.12 |
---|---|
[운영체제] KLT( Kernel Level Thread ) VS ULT ( User Level Thread ) (0) | 2021.10.11 |
[운영체제] 프로세스 제어구조 (0) | 2021.10.11 |
[운영체제] 프로세스 상태 (0) | 2021.10.11 |
[운영체제] PCB의 구성요소 (0) | 2021.10.11 |