5장 프로세스 관리

Jimin·2022년 10월 10일
0

운영체제

목록 보기
7/9
post-thumbnail

1. 프로세스의 개념

프로세스(process)

실행 중인 프로그램(program in execution)

디스크에 실행파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작하면 비로소 생명력을 갖는 프로세스가 되며,
프로세스는 CPU를 획득해 자신의 코드를 수행하기도 하고,
때로는 CPU를 반환하고 입출력 작업을 수행하기도 한다.

일반적으로 잡(job)이라는 용어와 프로세스를 혼용해 사용하기도 한다.

프로세스의 문맥

프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다.

프로세스의 문맥이 포함하는 것

  • 프로세스의 주소 공간(코드, 데이터, 스택 상태)
  • 레지스터에 어떤 값을 가지고 있었는지
  • 시스템 콜 등을 통해 커널에서 수행한 일의 상태
  • 프로세스에 관해 커널이 관리하고 있는 각종 정보

프로세스의 문맥

크게 세 가지로 분류할 수 있다.

  • 하드웨어 문맥
  • 프로세스의 주소 공간
  • 커널상의 문맥

하드웨어 문맥

CPU의 수행 상태를 나타내는 것으로 프로그램 카운터값과 각종 레지스터에 저장하고 있는 값들을 의미

프로세스의 주소 공간

프로세스의 문맥을 결정짓는 중요한 요소 중 하나

프로그램이 수행되어 프로세스가 되면 운영체제는 프로세스를 관리하기 위한 자료구조를 유지한다.
PCB, 커널스택(kernel stack)이 이에 해당하며 이 또한 프로세스의 문맥을 구성하는 중요한 요소가 된다.


2. 프로세스의 상태

프로세스의 상태는 세가지로 구분할 수 있다.

  • 실행(running)
  • 준비(ready)
  • 봉쇄(blocked, wait, sleep)

실행상태

프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태

준비상태

프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만, CPU를 할당받지 못한 상태

봉쇄상태

CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태

프로세스의 상태를 구분하는 이유

→ 컴퓨터의 자원을 효율적으로 관리하기 위함

시작상태

프로세스가 생성 중인 일시적 상태

프로세스가 시작되어 그 프로세스를 위한 각종 자료주조는 생성되었지만 아직 메모리 획득을 승인 받지 못한 상태를 말한다.

완료상태

프로세스가 종료 중인 일시적 상태

프로세스가 종료되었으나 운여에제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태를 말한다.

문맥교환(context switch)

실행시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정

CPU 디스패치(dispatch)

준비 상태에 있는 프로세스들 중에서 CPU를 할당받을 프로세스를 선택한 후 실제로 CPU의 제어권을 넘겨 받는 과정

프로세스가 실행 상태에 있다

→ CPU를 할당 받고 기계어 명령을 하나씩 수행해 나가는 것을 의미한다.


3. 프로세스 제어블록(Process Control Block: PCB)

운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조를 뜻한다.

PCB의 구성요소들

  • 프로세스의 상태(process state)
  • 프로그램 카운터(program counter)의 값
  • CPU 레지스터(CPU register)의 값
  • CPU 스케줄링 정보(CPU scheduling information)
  • 메모리 관리 정보(memory management information)
  • 자원 사용 정보(accounting information)
  • 입출력 상태 정보(I/O status information)

프로세스의 상태

CPU를 할당해도 되는지 여부를 결정하기 위해 필요

프로그램 카운터값

다음에 수행할 명령의 위치를 가르킴

CPU 레지스터 값

CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지를 나타낸다.

CPU 스케줄링 정보와 메모리 관리 정보

각각 프로세스의 CPU 스케줄링과 메모리 할당을 위해 필요한 정보

자원 사용 정보

사용자에게 자원 사용 요금을 계산해 청구하는 등의 용도로 사용된다.

입출력 상태 정보

오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보를 나타낸다.


4. 문맥교환(context switch)

하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정


5. 프로세스를 스케줄링하기 위한 큐

운영체제는 준비 상태에 있는 프로세스들을 줄 세우기 위해 준비 큐 (ready queue)를 두고 준비 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다.

CPU를 기다리는 프로세스를 줄 세우는 준비 큐외에도 운영체제는 특정 자원을 기다리는 프로세스들을 줄 세우기 위해 자원별로 장치 큐 (device queue)를 둔다.

작업 큐 는 시스템 내의 모든 프로세스를 관리하기 위한 큐로, 프로세스의 상태와 무관하게 현재 시스템내에 있는 모든 프로세스가 작업 큐에 속하게 된다.
가장 넓은 개념으로, 준비 큐장치 큐 에 있는 프로세스들은 모두 작업 큐 에 속해 있다.


6. 스케줄러(scheduler)

프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드를 지칭한다.

스케줄러는 두 가지로 나눌 수 있다.

  • 장기 스케줄러(long term scheduler)
  • 단기 스케줄러(short term scheduler)

장기 스케줄러

작업 스케줄러(job scheduler)라고도 부른다.
어떤 프로세스를 준비 큐에 진입시킬지 결정하는 역할을 한다.

준비큐는 CPU만 얻으면 당장 실행될 수 있는 프로세스의 집합이다.

프로세스에게 메모리를 할당하는 문제에 관여한다.
→ 시작 상태의 프로세스들 중 어떠한 프로세스를 준비 큐에 삽입할 것인지 결정하는 역할을 한다.

속도가 느린 것이 허용된다.

메모리에 동시에 올라가 있는 프로세스의 수(degree of multiprogramming)를 조절하는 역할을 한다.

단기 스케줄러

CPU 스케줄러라고도 부른다.
준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정한다.

→ 준비 큐에 있는 여러 프로세스들 중 어떠한 프로세스에게 CPU를 할당할 것인가를 결정하는 역할을 한다.

수행 속도가 충분히 빨라야한다.

중기 스케줄러(medium term scheduling)

너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우 이를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러이다.

프로세스당 보유 메모리양이 지나치게 적어진 경우 이를 완화시키기 위해 일부 프로세스를 메모리에서 디스크로 스왑 아웃시키는 역할을 수행한다.
→ 중기 스케줄러가 일부 프로세스를 메모리에서 디스크로 스왑 아웃시키는 0순위는 봉쇄상태에 있는 프로세스들이다.

중기 스케줄러의 등장으로 프로세스의 상태에는 실행, 준비, 봉쇄외에 하나의 상태가 더 추가된다.

중지(suspended, stopped)

외부적인 이유로 프로세스의 수행이 정지된 상태를 나타내는 상태

  • 중지준비 상태(suspended ready)
    준비 상태에 있던 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃되면 이 프로세스의 상태는 중지 준비 상태가 된다.

  • 중지봉쇄 상태(suspended block)
    봉쇄(block) 상태에 있던 프로세스가 중기 스케줄러에 의해 스왑 아웃되면 이 프로세스의 상태는 중지봉쇄 상태가 된다.


7. 프로세스의 생성

운영체제가 프로세스를 전부 생성 X
시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만,
그다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다.

부모 프로세스

프로세스를 생성한 프로세스

자식 프로세스

새롭게 생성된 프로세스

자원을 획득하는 방법

생성된 프로세스가 작업을 수행하기 위해서는 자원이 필요하다.

  1. 운영체제로부터 직접 자원을 할당받기
  2. 부모 프로세스와 자원을 공유하기

프로세스가 수행되는 모델

  • 부모와 자식이 공존하며 수행되는 모델
  • 자식이 종료(terminated)될 때까지 부모가 기다리는(wait) 모델이 있다.

프로세스 종료

프로세스 종료는 두가지로 나뉜다.

  1. 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려 이루어지는 자발적 종료
  2. 비자발적 종료는 부모 프로세스가 자식 프로세스의 수행을 강제로 종료시키는 것이다.

프로세스가 자식 프로세스를 생성하는 방법

운영체제는 자식 프로세스의 생성을 위해 fork() 시스템 콜을 제공한다.

과정

프로세스가 fork() 시스템 콜
→ CPU의 제어권이 커널로 넘어감
→ 커널은 fork()를 호출한 프로세스를 복제해 자식 프로세스를 생성한다.
⇒ fork() 시스템 콜을 하게되면 fork() 함수를 호출한 프로세스와 똑같은 프로세스가 하나 생성되게 된다.

exec() 시스템 콜

프로세스가 지금까지 수행했던 상태를 잊어버리고 그 주소 공간을 완전히 새로운 프로그램으로 덮어씌운 후 새로운 프로그램의 첫 부분부터 다시 실행을 시작하도록 하는 시스템 콜

wait() 시스템 콜

자식 프로세스가 종료되기를 기다리며 부모 프로세스가 봉쇄 상태에 머무르도록 할 때 사용된다.


8. 프로세스 간의 협력

IPC(Inter-Process Communication: 인터프로세스 커뮤니케이션)

프로세스 간의 협력 메커니즘을 위해 운영체제가 제공하는 대표적인 메커니즘으로,
하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신을 말한다.

프로세스들 간의 통신(communication)과 동기화를 이루기 위한 메커니즘을 의미한다.

IPC; 프로세스들 간의 통신과 동기화를 이루기 위한 메커니즘을 의미한다.

IPC의 대표적인 방법으로는 두가지가 있다.

  • 메시지 전달(message passing) 방식
  • 공유메모리(shared memory) 방식

이 두 방식의 차이는 프로세스 사이에 공유 데이터(shared data)를 사용하는가, 그렇지 않는가에 있다.

메시지 전달 방식

프로세스 간에 공유 데이터를 일체 사용하지 않고 메시지를 주고 받으며 통신하는 방식

메시지 통신을 하는 시스템은 커널에 의해 send(message)receive(message) 라는 두 가지 연산을 제공받게 된다.

통신하기를 원하는 두 프로세스는 커뮤니케이션 링크(communication link)를 생성한 후 send()와 receive()를 이용해서 메시지를 주고받게 된다.

커뮤니케이션 링크의 구현 방법은 두가지가 있다.

  • 물리적인 방법
  • 논리적인 방법

메시지 전달 방식은 메시지의 전송 대상이 다른 프로세스인지 아니면 메일박스라는 일종의 저장공간이지에 따라 다시 두 가지로 나뉜다.

  • 직접통신(direct communication)
  • 간접통신(indirect communication)

직접통신

통신하려는 프로세스의 이름을 명시적으로 표시한다.
send(P, message)
receive(Q, message)

단방향성일 수 있으나 대부분의 경우 양방향성이다.

간접통신

메시지를 메일박스(mail box) 또는 포트(port)로부터 전달받는다.

공유메모리 방식

공유메모리 방식에서는 프로세스들이 주소 공간의 일부를 공유한다.

공유메모리 방식은 프로세스 간의 통신을 수월하게 만드는 인터페이스를 제공하지만,
서로의 데이터에 일관성 문제가 유발될 수도 있다.

profile
https://github.com/Dingadung

0개의 댓글