728x90
 = 프로세스(Process) 란? 

  프로세스라는 용어는 1960년대 멀틱스 시스템(Multics System)을 설계한 사람들이 처음 사용했습니다. 이후 작업(Task)이라는 용어와 함께 사용되었으며 PCB를 가진 프로그램/주기억장치에 저장된 프로그램/프로세서(CPU)가 할당되는 실체/프로시저가 활동 중인 실체/비동기적 행위를 일으키는 주체/운영체제가 관리하는 실행 단위/실행중인 프로그램 등과 같은 의미로 프로세스란 용어를 정의하고 있습니다. 여기서 비동기적이라는 말의 의미는 정해진 순서가 없이 행하는 행위를 말하는 것입니다. 그리고 이것들 중 가장 일반적인 정의는 '실행중인 프로그램'입니다. 여기서 실행중인 프로그램이란 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태를 말합니다.

 

   

 

  위 사진은 우리가 흔히 Ctrl+Alt+Delete 를 눌러서 실행 시키는 작업관리자입니다. 작업관리자에서 프로세스 탭으로 들어가시면 지금 실행중인 프로그램을 보실수 있는데 보시면 CPU부분에 어떤건 숫자가 있고 어떤건 숫자가 없습니다. 왼쪽 사진의 엑셀은 CPU에 14라고 적혀 있고  오른쪽 사진에는 0이라고 적혀 있습니다. 왼쪽 사진의 엑셀을 보고 실행중인 프로그램 즉, 프로세스라고 하는 것입니다. 그리고 오른쪽 사진의 엑셀은 보조기억장치에 적재 되어 있고 CPU에서 작업하지 않는 그냥 프로그램이라고 보시면 됩니다. 

 

  = 프로세스(Process)의 종류 

- 운영체제 프로세스 : 프로세스 실행 순서를 제어하거나, 사용하고 이는 프로세스가 다른 사용자나 운영체제 영역을 침범하지 못하게 감시하는 기능을 담당하는 프로세스로, 사용자 프로세스를 생성하거나 입출력 프로세스를 생성하는 등 시스템 운영에 필요한 작업을 수행 하는 프로세스입니다. 커널 프로세스 또는 시스템 프로세스라고 합니다. 위에 있는 작업 관리자사진의 사용자 이름을 보시면 'SYSTEM'이라고 적혀 있는 것일이 바로 운영체제 프로세스입니다.

 

- 사용자 프로세스 : 사용자 코드를 수행하는 프로세스입니다. 즉 사용자가 실행하는 프로세스란 말입니다.

 

- 병행 프로세스 : 프로세스 여러 개가 동시에 실행되면 병행 프로세스라고 부릅니다. 병행 프로세스는 서로 독리적으로 실행되는 독립 프로세스와 프로세스들이 서로 협렵하며 수행 되는 협동 프로세스로 구분 됩니다. 독립프로세스는 운영체제에서 프로세스 여러 개가 병행하여 수행될 때 주어진 초깃값에 따라 항상 같은 결과를 부여주는 프로세스 입니다. 그리고 협동 프로세스는 독립 프로세스와 달리, 다른 프로세스의 영향을 주거나 다른 프로세스에 의해 영향을 받는 프로세스입니다. 주로 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어상호 작용해야 하는 경우에 발생하는 프로세스입니다.

 

  = 프로세스 제어 블록(PCB, Process Control Block) 

  PCB는 운영체제가 프로세스에 대한 중요한 정보를 저장하는 곳으로 각 프로세스가 생성 될 때 마다 고유의 PCB가 생성되고, 프로세스가 종료되면 PCB는 제거 됩니다. PCB는 아래 사진과 같은 정보들을 저장하고 있습니다.

 

 

  프로세스 고유 식별자 포인터 / 프로세스의 현재 상태 / 스케줄링 및 프로세서의 우선 순위 / CPU 레지스터 정보 / 주기억장치 관리 정보 등 이 저장되어 있습니다.

 

  = 프로세스의 상태 전이

  프로세스는 프로세스가 프로세서를 할당 받기 위해 기다리고 있는 상태이면서 프로세스는 준비 상태 큐에서 실행을 준비하는 준비(Ready)상태 / 준비상태 큐에 있는 프로세스가 프로세서를 할당 받아 실행 되는 상태이면서 프로세스 수행이 완료되기 전에 프로세서에게 주어진 프로세서 할당 시간이 종료되면 프로세스는 준비 상태로 전이 되고 실행 중인 프로세서에 입출력처리가 필요하면 실행 중인 프로세스는 대기 상태로 전이가 되는 실행(Running)상태 / 프로세서에 입출력 처리가 필요하면 현재 수행 중인 프로세스가 중단되고 대기 상태로 전이 되고 입출력 처리가 완료되면 대기 상태에서 준비 상태로 전이 되는 대기(Block)상태가 존재 합니다.

 

 

  준비 상태에 있던 프로세스가 CPU에 할당받아 실행 되는 걸 디스패치(Dispatch)라 하고 실행중인 프로그램이 할당된 시간이 끝나서 다시 준비 상태로 돌아가는걸 Time out 이라고 합니다. 이때 프로세스가 모든 명령의 실행을 마치지 못했다 하더라고 할당된 시간이 끝나면 다시 준비 상태로 타임아웃 하게 됩니다. 그리고 다시 준비상태에서 기다리다가 CPU에 할당되어 다시 실행 상태로 디스패치 되고 또 할당된 시간이 끝나면 다시 준비상태 타임아웃되고는 순환을 반복합니다.

  CPU가 프로세스를 실행중일때 갑자기 급한 프로세스가 CPU를 사용해야 할 일이 생기면 실행중인 프로세스는 대기상태로 들어가게 되는데 이를 Blocked라고 합니다. 그리고 급한 프로세스가 끝났다고 해서 대기상태에 있던 프로세스가 다시 실행 상태로 돌아가는건 아니고 준비 상태로 돌아가게 됩니다. 그리고 다시 디스패치되어 실행상태로 상태전이를 하게 됩니다. 

 

  = 문맥 교환(Context Switching)

  CPU가 할당되는 프로세스를 변경하기 위하여 현재 CPU를 사용하여 실행되고 있는 프로세서의 상태 정보를 저장하고 제어권을 인터럽트 스비스 루틴에게 넘기는 작업을 의미합니다. 즉 실행중인 프로세스가 Blocked되어져 대기상태로 바뀔때 실행중이던 프로세스가 어디까지 실행되었는지를 PCB에 기록한다는 말입니다. 그래야 다시 실행 되었을때 이전에 실행했던 명령은 뛰어 넘고 다음 명령을 실행할수 있기 때문입니다.

 

 = 스레드(Thread) 란?

  스레드는 프로세스처럼 프로세서를 사용하는 기본 단위이면서 프로그램을 실행하는 프로세스 내의 개체이며 여러 자원을 할당 받아 실행하는 프로그램의 단위 입니다. 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 두개 이상의 스레드가 존재하는 경우에는 다중 스레드라고 합니다. 그리고 프로세스의 일부 턱성을 갖고 있기 때문에 경량 프로세스(Light Process)라고도 합니다.

 

출처 : http://blog.naver.com/bsy9109/130166630482

728x90

'OS' 카테고리의 다른 글

프로세스와 스레드  (0) 2014.11.28
윈도우 메시지 처리 과정  (0) 2014.11.14
스레드 동기화  (0) 2014.11.13
RAID  (0) 2014.10.17
모놀리식 커널  (0) 2014.10.17

+ Recent posts