프로세스와 스레드
프로세스
실행 중인 프로그램, 주기억장치에 저장된 프로그램
- 프로그램 : 보조기억장치에 존재하며 실행되기를 기다리는 명령어, 수동적 존재
<br/>
<br/>
프로세스의 상태
<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/27MIQB181224235512.PNG" style="width:400px">
-
new : 프로세스가 생성됨
-
ready : CPU에게 할당되기를 기다리는 상태
-
running : CPU에게 할당 받아 명령어를 실행중 (이 상태를 갖는 프로세스는 오직 하나)
-
waiting : 어떤 이벤트가 발생하기를 기다림
-
terminated : 프로세스가 실행을 끝마침
<br/>
<br/>
사용자가 프로그램을 실행하여, 프로세스가 생성되고 주기억 장치에 적재되어 ready 상태로 대기한다.
주기억장치에는 여러 프로세스가 있을 것이고,
CPU는 스케줄링에의해 하나의 프로세스가 running 상태로 결정한다. 이를 dispatch라 한다.
runing 상태의 프로세스가 타임아웃 발생시에는 인터럽트에 의하여 다시 대기 상태로 변경한다.
runnig 상태의 프로세스에서 IO 작업 요청이 발생하면, wait 상태로 변경되어 IO작업이 완료 될때까지 대기한다.
IO 작업이 완료되면 wait 상태에서 대기 상태로 변경된다.
<br/>
프로세스 테이블과 프로세스 제어 블록(PCB)
OS는 각각의 프로세서의 PCB를 가리키는 포인터를 테이블 형태로 저장한다.
프로세서 제어 플록(PCB) 프로세시의 전보를 저장한 블록이다.
예를들어 PID(프로세스고유키), 현재상태, 레지스터 정보를 가진다.
프로세스가 종료되면 프로세스 테이블에서 해당 PCB를 제거한다.<br/>
<br/>
컨텍스트 스위치 (Context Switch)
CPU 스케줄링에 의하여 할당된 프로세스를 교체하는 작업을 말한다
실행중인 프로세스의 정보를 PCB에 저장하고, 대기 상태로 만든후
다른 프로세스를 실행시키는 작업을 말한다.
<br/>
스레드
프로세스내에서 실행되는 세부 작업단위를 말한다.
같은 프로세스내에 스레드들 stack 영역을 제외한 부분을 공유한다.
그렇기 때문에 스레드간에는 데이터 공유가 용이하다.<br/>
<br/>
<br/>