본문 바로가기

OS

[OS] 프로세스와 스레드_방통대 교재 정리

728x90

#####. 프로세스 / 스레드

###. 프로세스

#. 프로세스(process)란 실행 중인 프로그램을 의미

#. 프로그램 자체는 디스크 내에 파일로 존재하는 동작을 하지 않는 정적이며 수동적인 개체여서, 프로그램을 실행시키려면 운영체제로부터 프로그램이 동작하는 데 필요한 CPU, 메모리, 입출력, 파일 등의 자원을 할당받아 동작

#. 실행에 들어간 프로그램을 프로세스라 한다.

#. 동작을 하는 능동적인 개체

#. 사용자가 실행시킨 사용자 프로세스와 스풀링 같은 시스템 작업을 위한 시스템 프로세스가 있다.

#. 운영체제는 프로세스를 생성시키고 종료시키기 위한 다양한 작업과 프로세스를 실생시키기 위한 스케줄링 작업 처리를 하고 프로세스가 다른 상태로 전이되도록 처리한다.

 

###. 프로세스 구성

#. 프로세스의 구성은 크게 메모리 구조와 프로세스 제어블록으로 나뉜다.

 

#. 메모리구조

 - 코드 영역 / 데이터 영역

 - 코드영역 : 해당 프로세스의 프로그램 자체를 가진다. 코드 영역에서 명령을 하나씩 꺼내 CPU가 해당 명령을 처리

 - 데이터영역 : 프로세스가 사용하는 상수나 변수의 값, 서브프로그램의 호출상태 등 프로그램 실행 시 필요한 데이터를 가진다. 정적 데이터 영역, 스택 영역, 힙 영역으로 세분화 됨

 

#. 제어블록

 - Process Control Block : PCB

 - 해당 프로세스의 정보를 보관한다. 프로세스의 정보는 아래와 같다

 : 프로세스 번호 (Process IDentification : PID) 프로세스 구분 기준이 되는 식별자

 : 프로세스 상태 : 실행, 준비, 대기 등 프로세스의 현재 상태를 나타낸다.

 : 프로그램 카운터 (Program Counter : PC) : 프로세스 수행을 위해 다음에 실행할 명령의 주소를 나타냄

 : 레지스터 (register) : CPU의 레지스터에 해당하는 정보들을 나타낸다. 실행상테에 다른 상태로 전이되는 경우 CPU의 레지스터 정보를 이곳에 저장시켜 나중에 다시 실행상태로 전이될 때 복구 시켜 프로세스의 정확한 수행을 계속 할 수 있도록 한다.

  : 메모리 관리 정보 : 프로세스가 저장된 주소와 가상 메모리를 사용하는 경우에는 가상주소와 실주소의 사상(mapping)정보, 기준 레지스터  (ase register)와 경계 레지스터 (bound  register)등의 정보를 나타낸다.

 : 프로세스 우선순위 : 운영체제가 스케줄링 시 어떤 프로세스를 선택할 것인가를 결정하는데 필요한 피로세스 우선순위 정보를 나타낸다.

 : 회계정보 : CPU사용시간, 프로세스의 시스템 존재시간, 메모리 사용량, 보조기억장치 사용량, 그리고 기타 시스템 프로그램의 사용 실태 등 다양한 정보를 나타낸다.

 - 보통 여러 프로세스를 동시에 관리하며 번갈아 실행시키게 되는데, 실행 중이던 프로세스의 여러 정보를 그 프로세스의 제어블록에 저장 한 후 나중에 이 프로세스를 다시 실행하게 되면, 프로세스 제어 블록에 저장된 정보를 이용하여 이어서 실행하게 된다.

 

#. 프로세스 상태 관리

 - 생성, 준비, 실행, 대기, 종료의 다섯가지 상태중 하나의 상태에 있게 된다.

 - 생성 상태 : 처음 작업이 시스템에 주어진 상태. 해당 작업에 대한 프로세스 제어 블록을 생성하고 작업 큐에 넣는다. 이때 프로세스 번호 (PID)가 결정된다. 프로세스의 메모리 구조도 생성되면 준비상태로 전이된다.

 - 준비상태 : 프로세스의 실행 준비가 된 상태로 CPU할당을 기다리는 상태이다. 프로세스 준비큐에 머물고 있다가 스케줄러에 의해 선택되면 CPU를 할당 받으며 실행 상태로 전이 된다. 이렇게 프로세스에 CPU를 할당하는 과정을 디스패치(dispatch)라고 한다.

 - 실행상태 : 프로세스가 처리되는 상태이다. 즉, CPU가 프로세스의 명령들을 처리. 이렇게 프로세스가 처리되거나 만약 스케줄러가 준비큐에서 다른 프로세스를 선택하게 되면, 실행상태의 프로세스는 CPU를 회수당하며 준비상태로 전이 된다. 이는 스케줄링 알고리즘에 따라 CPU 할당 시간이 만료된 경우 또는 더 높은 우선순위 프로세스가 준비 큐에 들어오는 경우 발생

 - 대기상태 : 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당 받을 떄까지 보류되는 상태. 대기상태의 프로세스는 재개 조건이 만족되면 준비상태로 전이된다. 재개 조건은 I/O 작업이 끝났다거나 자원을 할당받았다는 이벤트가 발생하면 만족된다.

 - 종료상태 : 프로세스가 더이상 실행되지 않도록 끝난 상태. 프로세스에 할당 되었던 각종 자원은 운영체제가 회수

 

###. 부모 자식 프로세스

#. 프로세스 생성방법은 사용자가 프로그램을 직접 실행시키는 방법도 있지만 한 프로세스가 다른 프로세스를 생성하는 방법도 있다. 이때 시스템 호출을 하는 프로세스를 부모 프로세스 (parent process), 시스템 호출을 통해 새로 생성된 프로세스를 자식 프로세스(childprocess)라고 한다. 

#. 유닉스 / 리눅스 : fork() : 부모의 복제본

#. 윈도우 : createProcess() : 새로운 프로세스

 

###. 쓰레드

#. 하나의 프로세스는 코드영역, 정적 데이터 영역, 스택영역, 힙 영역을 하나씩 가지며, 스로세스 제어 블록도 하나를 가지기에 프로그램 카운터 (PC)를 포함한 레지스터의 값과 파일 등 할당받은 자원을 하나씩 갖는다.

#. 프로세스는 하나의 프로그램 카운터만 유지하므로 제어흐름을 하나만 갖는다. 전통적인 프로세스는 프로세스 내에서 다중 처리가 불가능하다.

#. 쓰레드(thread)는 프로세스 내에서의 다중처리를 위해 제안된 개념. 프로그램을 실행하기 위한 기본 단위를 프로세스보다 한 단계 낮추어 규정한 것이라고 할 수 있다. 전통적인 프로세스가 자원 소유의 단위인 동시에 디스패칭의 단위인 것과 달리, 최근에 개발된 많은 운영체제에서는 자원 소유의 단위는 프로세스로 두고 디스패칭 단위는 쓰레드로 둔다. 하나의 프로세스 내에는 하나 이상을 쓰레드를 두어 제어 흐름이 하나 이상 될 수 있도록 한다.

#. 쓰레드는 프로세스 내에서 실행의 개념만 불리한 것으로 각 쓰레드는 실행에 필요한 최소한의 정보만 가지며, 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유한다.

#. 각 쓰레드는 프로그램 카운터를 포함한 레지스터의 값과 스택 영역을 갖는다. 프로그램 카운터는 디스패지되어 처리할 명령의 주소를 가지고, 그 외 레지스터 들도 실행과 관련된 정보들을 가지므로 쓰레드마다 이들 정보에 대한 관리가 필요하다.   또한 스택 영역은 실행 시 서브 프로그램의 호출 상태와 관련된 정보를 저장하므로 역시 쓰레드마다 관리가 필요

#. 쓰레드도 프로세스처럼 생성, 준비, 실행, 대기, 종료 상태를 갖는다.

#. 하나의 프로세스가 다중 쓰레드 (multiTrhead)를 구성된 경우 여러가지 장점이 있다. 컴퓨터 시스템에 여러 개의 CPU가 있는 경우 또는 CPU에 여러 개의 core가 있는 경우라면 다중 쓰레드로 병렬 처리 할 수 있다.

 

728x90