본문 바로가기
컴퓨터공학/운영체제

프로세스(Process)

by Daniel.kwak 2018. 10. 24.


목표


1.프로세스의 정의

2.프로세스의 구성

3.메모리 상의 프로세스의 형태

4.프로세스 상태 변화

5.리눅스에서 프로세스 생성과 종료

6.프로세스 간 통신





프로세스란?

프로그램의 실행 instace를 말한다.(비공식적으론 실행중인 프로그램이다) 


프로그램은 보조기억장치나 메모리에서 실행을 기다리고 있는 데이터와 명령어 등의 모음이라면, 프로그램이 실행되면 비로소 프로세스가 되는 것이다.




프로세스는 그 자체로 다른 프로세스를 실행시킬 수 있는 좋은 도구이다. 대부분의 환경에서 자바 프로그램은 JVM에서 구동시킬 수 있는데, JVM 또한 자바 코드를 바이트 코드로 컴파일하는 기능을 수행하는 컴파일러이기 때문이다. 




프로세스의 구성


프로세스는 운영체제에서 Process Controll Block(PCB)로 표현된다. 다음의 것들을 포함한다. 

-PID : 운영체제가 프로세스를 식별하기 위해 부여한 ID이다.

-프로세스 상태 : CPU는 프로세스를 빠르게 교체하기 때문에 프로세스의 상태가 현재 어떤 상태인지 저장한다.

-프로그램 카운터 : 현재 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.

-CPU 레지스터 집합 : 컴퓨터 구조에 따라서 다양한 수와 타입을 가진다. 레지스터에는 누산기, 인덱스 레지스터, 스택 레지스터 등이 있다. 

나중에 프로세스가 올바르게 실행되도록 인터럽트 발생 시 저장되어야 한다. 

-CPU-스케쥴링 정보 : CPU에서 어떤 프로세스를 먼저 처리할지에 대한 중요한 요소이다.

-메모리 관리 정보 : OS에 의해 사용되는 메모리 시스템에 따라 기준 레지스터와 한계 레지스터 값, OS의 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등을 저장.

-권한 : 프로세스가 접근할 수 있는 자원을 결정하는 정보이다. 안드로이드의 아무 앱이나 사용자 주소록에 접근할 수 없는 것처럼.

-실행문맥 : CPU에 지속적으로 교체되더라도, 마치 연속적으로 실행되는거처럼 보이는 이유는 이 정보를 갖고있기 때문이다.





프로세스 상태변화





새로운(new):프로세스가 생성중이다.

실행(running):프로세스의 명령어가 실행된다.

대기(wait):실행중인 프로세스가 I/O나 신호 수신같은 사건이 일어나길 기다린다.

준비완료(ready):프로세스가 처리기에 할당되기를 기다린다.

종료(terminate):프로세스의 실행이 종료되었다.





프로세스간 통신


프로세스는 독립적이거나 협력적일 수 있는데 협력을 허용하는 환경을 제공하는 이유는 몇 가지가 있다.

정보공유(여러 사용자가 동일한 정보에 접근) , 계산 가속화 , 모듈성, 편의성이다.

협력적 프로세스들은 데이터와 정보를 교환할 수 있는 프로세스간 통신(Interprocess Communication,IPC)기법을 필요로 하는데, 공유 메모리 방식과 메세지 전달 방식이 있다.

두 모델은 운영체제에서 통상적이며 많은 시스템들이 두 가지를 모두 구현한다. 메세지 전달은 통상 시스템 호출을 사용하여 구현되므로 부가적인 소비작업이 필요하기 때문에 공유 메모리 방식이 속도 면에서는 더 빠르다. 많은 코어가 있다면 메세지 전달 방식이 성능 면에서 우수하며, 공유 메모리는 캐쉬 일관성 문제로 성능 저하가 발생한다. 


공유 메모리

통신하는 프로세스들이 공유 메모리 영역을 구축해야 한다. 통산 공유 메모리 영역은 공유 메모리 세그먼트를 생성하는 프로세스의 주소 공간에 위치한다. 프로세스들은 이 세그먼트를 자신의 주소 공간에 추가하여야 한다. 그런 후에 프로세스들은 공유 영역에 읽고 씀으로써 정보를 교환할 수 있다. 

보통 생산자 프로세스와 소비자 프로세스로 구성된다. 생산자 프로세스는 정보를 생산하고, 소비자 프로세스는 정보를 소비한다. (컴파일러-어셈블리 코드 생산, 어셈블러-이 코드를 소비) 

따라서 생산자와 소비자 프로세스들이 병행적으로 실행되도록 하려면, 생산자가 정보를 채워놓고, 소비자가 소모할 수 있는 항목들의 버퍼가 사용가능 해야 한다. 이 떄, 생산자와 소비자는 반드시 동기화 되어야 한다. 


메세지 전달

메세지 전달 방식은 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신하고 그들의 동작을 동기화 할 수 있다. (특히 네트워크로 프로세스들이 연결된 분산 환경에서 유용)

메세지 전달 시스템은 send(message) , receive(message) 연산을 제공한다. 메세지 길이는 가변적이다. 

-명명법(naming)

통신을 원하는 프로세스들은 서로를 가르킬 방법이 있어야 한다.

send(P,message) : P에게 메세제를 전송한다.

receive(Q,message) : Q에게 메세지를 수신힌다.

-동기화 

메세지 전달은 봉쇄형(blocking) 이거나 비봉쇄형(non-blocking)방식으로 전달된다.

봉쇄형 보내기는 송신하는 프로세스 메세지가 수신측 프로레스에 의해 수신될 때 까지 봉쇄된다.

비봉쇄형 보내기는 송신하는 프로세스가 메세지를 보내고 작업을 재시작한다.

봉쇄형 받기는 메세지가 이용가능할 때 가지 수신 프로세스가 봉쇄된다.

비봉쇄형 받기는 송신하는 프로세스가 유효한 메세지 또는 널값을 받는것




'컴퓨터공학 > 운영체제' 카테고리의 다른 글

메모리 관리 전략(1)  (0) 2018.10.27
프로세스 동기화(뮤텍스,세마포어,임계구역)  (0) 2018.10.26
DeadLock(교착상태)  (0) 2018.10.25
CPU 스케쥴링 알고리즘  (0) 2018.10.24
프로세스와 쓰레드의 차이점  (0) 2018.10.24
쓰레드  (0) 2018.10.24