컴퓨터 OS 프로세스

2020. 9. 5. 05:12OS

프로세스의 개념

프로세스란 실행중인 프로그램을 의미한다.

 

프로그램 그 자체는 프로세스가 될 수 없다. 프로그램은 명령어 리스트틀 내용으로 디스크에 저장되어있는 수동적인 존재이다. 

 

이와 대조적으로 프로세스는 다음에 실행할 명령어를 지정하는 프로그램 카운터와 레지스터, 포르세스 상태 등이 함께 존재하는 집합을 가진 능동적인 존재이다. 

 

프로세스 상태

프로세스 상태

  • 새로운(new): 프로세스가 생성 중이다.
  • 실행(running): 명령어들이 실행되고 있다. 
  • 대기(waiting): 프로세스가 어떤 사건(입출력 완료 또는 신호의 수신 같은)이 일어나기를 기다린다. (I/O 또는 event 같은 것 때문에 기다리고 있다)
  • 준비 완료(ready): 프로세스가 처리기에 할당되기를 기다린다. 
  • 종료(terminated): 프로세스의 실행이 종료되었다. 

ready -> running 

준비 완료가 된 프로세스를 스케줄러가 선택해 running으로 옮긴다.

running -> waiting

running에서 waiting이 될 경우의 예를 들자면

한 프로세스를 실행하고 있을 때 로그인이 필요해지면 프로세스의 I/O가 발생하기 전까지 실행되지 못합니다.

그래서 이러한 프로세스를 waiting으로 옮긴 후 아이디 비밀번호가 입력이 완료되면 다시 실행시킬 수 있는 상태 ready로 옮길 수 있습니다.

 

프로세스 제어 블록

각 프로세스는 운영체제에서 프로세스 제어 블록으로 표시된다. 파일 제어 블록에는 아래와 같은 것이 있다. 

 

  • 프로세스 상태: 위의 프로세스의 상태를 나타내는 값을 갖는다. 
  • 프로그램 카운터: 다음에 실행할 명령어를 가리킨다.
  • CPU 레지스터들: 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태 코드가 존재한다. 
    여기서 상태코드는 인터럽트 발생 시 저장되어야 한다. 
  • CPU-스케줄링 정보: 여기에는 프로세스 우선순위, 스케줄 큐 에대한 포인터와 다른 스케줄 매개변수들을 포함한다. 

프로세스 스케줄링

CPU의 사용률을 최상으로 만들기 위해 프로세스 스케줄러는 CPU에서 실행 가능한 여러 프로세스들 중에서 하나의 프로세스를 선택한다.

 

스케줄링 큐

스케줄링 큐

프로세스가 시스템에 들어오게 되면 Job queue에 놓여진다. 이 큐는 시스템 안의 모든 프로세스들로 구성된다. 보통은 주 메모리에 저장된다.

 

준비완료 상태에서 실행을 기다리는 프로세스들은 ready queue라 불리는 리스트 상에 유지된다. 이 큐는 일반적으로 연결 리스트로 저장된다. 큐의 헤더는 첫번째 프로세스와 마지막 프로세스를 가리키는 포인터를 갖고 있다. 

 

 

queueing diagram

각 사각형은 하나의 큐를 나타낸다. 두 가지 타입의 큐(준비 완료 큐, 장치 큐들의 집합)가 있다. 원은 서비스 하는 자원이며 화살표는 시스템은 흐름의 표현이다. 

 

위 사진을 보면 이와 같은 것을 확인할 수 있다. 

  • 프로세스가 입출력 요청을 하여 I/O queue에 넣어지고 다시 ready queue로 갈 수 있다.
  • 프로세스가 fork를 통해 자식을 생성하고 자식 프로세스의 종료를 기다릴 수 있다. 
  • 인터럽트의 결과로 인해 강제로 CPU로 부터 제거되고 준비완료 큐에 다시 놓일 수 있다. 

종류가 되면 모든 큐에서 제거되고 PCB를 반납합니다. 

 

스케줄러 종류

  • 장기 스케줄러

    장기 스케줄러는 디스크에 저장되어 있는 프로세스를 선택해 실행하기 위한 메모리로 적재된다. 즉 준비 완료 상태가 되는 것이다. 단기에 비해 실행 빈도수가 적다. 

  • 단기 스케줄러

    실행 준비가 완료된 프로세스들 중에 선택해 running 상태로 실행시켜준다. 단기 스케줄러는 cpu가 최대의 효율을 낼 수 있게 반드시 자주 새로운 프로세스를 선택해주어야한다. 
  • 중기 스케줄러

    메모리에서 CPU를 위해 적극적으로 경쟁하는 프로세스들을 제거함으로써 다중 프로그래밍의 정도를 완화하는 것이다. 차후에 중단된 프로세스를 메모리로 불러와서 중단되었던 시점에서부터 실행을 재개한다. 이를 스와핑 기법이라고 한다. 

프로세스간 통신

운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적인 프로세스들일 수 있다. 

 

독립적인 프로세스는 실행중에 다른 프로세스에게 영향을 주거나 받지 않는 프로세스를 의미한다. 반대로 서로 영향을 주거나 받는 프로세스들은 병행 프로세스라고 한다. 

프로세스가 협력을 하는 이유

  • 정보 공유

    여러 사용자가 동일한 정보에 흥미를 가질 수 있으므로, 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공한다. 

  • 계산 가속화

    작업들을 여러 프로세스들로 나누어서 병렬적으로 실행시킬 수 있게 만든다.
  • 모듈성

    별도의 프로세스 혹은 스레드로 나누어서 모듈식 형태로 시스템을 구성할 수 있다. 

프로세스 통신 모델

프로세스 통신 모델

  • 공유 모델

    위 사진과 같이 프로세스 A가 공유 메모리에 값을 넣은 다음 B가 이것을 꺼내서 사용하는 형식이다. 공유 메모리에 데이터를 넣는 프로세스를 생산자 프로세스 빼서 사용하는 프로세스를 소비자 프로세스라고 한다. 공유 메모리가 꽉차게 되면 넣지 않고 기다린다. 

    일반적으로 프로세스는 다른 프로세스의 메모리에 접근하지 못합니다. 공유 메모리의 경우 이러한 금지 사항을 어기는 것을 동의한 모델이다. 


  • 메세지 전달 모델

    메세지 전달 모델은 이름 그대로 데이터를 프로세스 1에서 프로세스 2로 전송하는 방법이다. 방법 중에도 직접 통신, 간접 통신, 동기식, 비동기식 등의 방법이 있다.

    1. 직접 통신 및 비동기 통신

    직접 통신은 상대를 직접 선택해 전송하는 방법이다. 받을 때는 받는 사람의 정보를 보내도 되고 안보내도 된다.

    간접 통신은 상대에게 직접 보내는 것이 아니라 상대의 메일박스 또는 포트로 전송하는 방법이다. 

    2. 동기화

    blocking send: 수신하는 프로세스가 받을 때까지 송신측의 버퍼에 저장한다. 즉 waiting된다. 

    non-blocking send: 송신하는 프로세스가 메시지를 보내고 작업을 재시작한다. 

    blocking receive: 메시지를 받을 때까지 waiting 상태가된다. 

    non-blocking receive: 송신하는 프로세스가 유효한 메시지 또는 null을 받아서 결과를 확인한다.

    blocking send, receive를 사용하면 이를 랑데뷰라고 부릅니다.

    3. 버퍼링

    프로세스에 의해 교환되는 메시지는 임시 큐에 들어 있다. 이러한 큐를 구현하는 방법은 세가지가 있다.

    3.1 무용량(자동 버퍼링)
     
    즉 아무것도 저장될 수가 없어서 수신측이 받을 수 있을 때까지 waiting 해야합니다. 

    3.2 유한용량(자동 버퍼링)

    새로운 메시지가 전송될 때 queue가 만원이 아니라면 큐에 저장된다. 송신자는 만원이 될때 까지 실행을 계속한다. 또한 만원이면 공간이 이용 가능할 때까지 반드시 봉쇄되어야 한다. 

    3.3 무한용량(버퍼가 없는 메시지 시스템)

    무한으로 저장될 수 있어서 큐안에 무한으로 대기할 수 있고 송신자는 절대 멈추지 않는다. 

대부분 운영체제에서는 이 두 모델 모두 사용하고 있다.

 

'OS' 카테고리의 다른 글

프로세스 동기화  (0) 2020.09.11
CPU 스케줄링  (0) 2020.09.09
스레드  (0) 2020.09.07
Thread Context Switching vs Process Context Switching  (1) 2020.05.05
Thread, process  (0) 2020.05.04