본문 바로가기
IT Basic/Operating System

[OS] 5장 프로세스 관리

by HouseDust 2021. 12. 22.
반응형

5장, 프로세스 관리

 

프로세스(process)실행중인 로그램(program in execution)을 뜻한다.

 

시분할방식으로 여러 프로그램이 CPU를 나눠쓰는데, 

다시 자기 차례가 왔을 때 '어떤 명령까지 수행했는지'에 대한 정보가 필요하다.

이를 담고 있는 것이 프로세스 문맥(context)이다.

 

프로세스 문맥

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

 

하드웨어 문맥 : CPU의 수행 상태. 프로그램 카운터, 각종 레지스터 저장값

프로세스의 주소 공간 : 코드, 데이터, 스택 주소

커널상의 문맥 : PCB와 커널스택 

 

프로세스의 상태

- 실행(running) : 프로세스가 CPU를 보유, 기계어 명령을 실행하고 있는 상태

- 준비(ready) : 프로세스가 CPU를 보유하면 바로 명령을 실행할 수 있으나, CPU를 할당받지 못한 상태

- 봉쇄(blocked, wait, sleep) : CPU를 할당받더라도 당장 실행할 수 없는 상태

- 시작(new) : 프로세스가 시작되어 그 프로세스를 위한 자료구조는 생성되었지만, 메모리 획득을 승인받지 못한 상태

- 완료(terminated) : 프로세스가 종료되었으나, 관련 자료구조를 완전히 정리하지 못한 상태

- 중지(suspended, stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태, 중지준비/중지봉쇄

 

문맥교환(context switch)?

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

시스템 콜이나 인터럽트가 발생하여 사용자모드에서 커널 모드로 바뀌는 것은 문맥교환이라고 하지 않는다. 다른 프로세스에서 인터럽트가 발생했더라도, 인터럽트를 당한 프로세스의 모드가 변경된 것으로 간주한다. 

문맥교환에는 많은 오버헤드(overhead)가 따르기 때문에, 적당한 CPU할당시간을 세팅해야한다.

 

CPU 디스패치(dispatch)?

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

 

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

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

- 프로세스의 상태(process state) : CPU를 할당해도 되는지 여부

- 프로그램 카운터(program counter)의 값 : 다음에 수행할 명령의 위치

- CPU 레지스터(CPU register)의 값 : CPU 연산을 위한 레지스터 값

- CPU 스케줄링 정보(CPU scheduling information) 

- 메모리 관리 정보(memory management infromation)

- 자원 사용 정보(accounting information) : 자원 사용 요금 계산

- 입출력 상태 정보(I/O status information) 

 

준비 큐(ready queue)

준비 상태에 있는 프로세스들을 줄 세우기 위한 큐

CPU 스케줄링에 따라 순서가 변경됨

 

장치 큐(device queue)

특정 자원을 기다리는 프로세스들을 줄 세우기 위한 큐

하드웨어 뿐만 아니라, 소프웨어 자원도 큐가 있다. (ex. 공유 데이터)

 

작업 큐(job queue)

시스템 내의 모든 프로세스를 관리하기 위한 큐.

 

큐헤더(queue header) : 큐의 가장 앞부분

큐는 각 프로세스의 PCB를 연결리스트의 형태로 관리하며, 포인터를 사용하여 순서를 정한다. 

 

스케줄러(Scheduler)

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

  • 장기 스케줄러(long term scheduler) / 작업 스케줄러(job scheduler) : 어떤 프로세스를 준비 큐에 진입시킬지 결정
    메모리 할당에 관여, 메모리에 동시에 올라가있는 프로세스의 수 조절
  • 단기 스케줄러(short term scheduler) / CPU 스케줄러 : 준비상태의 프로세스 중 어떤 프로세스를 실행 상태로 만들지 결정
    시분할 시스템에서 타이머 인터럽트 발생시 단기 스케줄러 호출
  • 중기 스케줄러(medium term scheduler) : 너무 많은 프로세스에게 메모리를 할당하여 성능이 저하될 때, 프로세스의 수를 동적으로 조절
    스왑아웃(swap out) : 성능이 저하될 정도로 메모리에 많은 프로세스가 올라가 있으면, 메모리를 통쨰로 뺴서 디스크의 스왑영역에 넣는 것. (순서 : 봉쇄상태의 프로세스 -> 타이머 인터럽트로 준비큐에 이동하는 프로세스)

 

부모 프로세스와 자식 프로세스

원칙적으로 부모프로세스가 종료되기 이전에 자식프로세스가 모두 종료되어야 한다. 부모프로세스는 fork() 시스템 콜을 통해 자식프로세스를 복제생성한다. 복제된 것이기 때문에, 전부 동일한데 자식/부모를 구분하기 위해 fork()의 결괏값을 다르게 준다.  -fork()의 결과값 : 복제본은 0, 원본은 양수- exec() 함수로 새로운 프로그램을 덮어씌워서 독자적인 프로그램을 수행시킬 수 있도록 한다.

 

프로세스 종료

  • 자발적 종료 : exit()함수
  • 비자발적 종료 : about() 함수, 부모 프로세스가 자식 프로세스를 강제로 종료하는 것
    - 한계치 이상의 자원을 요구할 때
    - 자식 프로세스의 작업이 더 이상 필요하지 않을 때
    - 부모 프로세스가 종료될 때

 

프로세스 간의 협력

각 프로세스는 독립적인 주소공간을 가지고 수행되는데, 때로는 업무의 효율성을 위해 자원을 공유하기도 한다.

프로세스 간의 협력 메커니즘

  • IPC(Inter-Process Communication) : 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신
    의사소통 기능과 동시에 동기화를 보장한다.
    - 메시지전달 : 공유데이터 사용하지 않음, 커널을 통해 send, recieve 메시지를 주고 받으며 통신
    - 공유메모리 : 공유데이터 사용함, 주소 공간의 일부를 공유. 프로세스끼리 동기화 문제를 해결해야 한다

▶직접통신과 간접통신

  • 직접통신(direct communication)
    통신하려는 프로세스의 이름이 명시적으로 표시됨
    링크 자동생성
    하나의 링크는 한쌍의 프로세스에 할당
    각 프로세스 쌍에게는 하나의 링크만 존재
    링크는 단방향성일 수 있으나, 주로 양방향성
  • 간접통신(indirect communication)
    메시지를 메일박스 또는 포트로부터 전달 받음
    메일박스엔 고유ID 존재
    메일 박스를 공유하는 프로세스들 끼리만 통신 가능
    링크는 여러 프로세스들에게 할당 가능
    각 프로세스의 쌍은 여러 링크를 공유할 수 있음
    링크는 단방향성, 양방향성 모두 가능

 

 


참고 자료

반효경, 『운영체제와 정보기술의 원리』, 이화여자대학교출판문화원(2020), p113-p143

 

반응형

댓글