Process

Seongho·2022년 4월 20일
0

운영체제

목록 보기
3/12

기초

Processor - CPU
Program - 보조기억장치에 저장되어 있는 순서있는 instruction과 데이터의 집합
Process - 메모리에 적재되어 프로세서에 의해 실행되고 있는 프로그램
job, task - 일반적으로 Process와 혼용하여 사용

프로세스란?

RAM에 적재되어 실행중인 프로그램의 인스턴스이다. OS의 스케줄링을 하는 기본적인 단위이고 각각의 프로세스는 ID값이 있다.(PID)

Process Hierarchy

POSIX 운영체제들(Unix, Linux..)에는 프로세스 계층 관계가 있다. init process(PID==1)로부터 모든 프로세스가 만들어진다. 부모 프로세스는 자식 프로세스에 모든 자원과 권한을 복사해준다. (Address space를 복사)
**윈도우에서는 Process Hierarchy 개념이 없다. CreateProcess() 함수로 프로세스 만들지만, 부모 자식 관계는 없다.

fork()

시스템 콜을 통해 child process를 만들어낸다. child process는 parent process의 fork 수행 후 그 다음 코드부터 수행된다. 자식 프로세스는 부모 프로세스의 모든 virtual address space를 복사한다. fork()는 리턴값이 있는데, 부모 프로세스는 fork()의 리턴값으로 자식 프로세스의 PID를 받고, 자식 프로세스는 리턴값으로 0을 받는다.

위의 예제는 fork()를 통해 자식 프로세스를 만들면, 두 프로세스 중 어떤 프로세스가 CPU를 점유할지는 OS가 결정하는 것이기 때문에 어떤 프로세스가 먼저 실행될지는 모른다는 것을 말하고 있다.

Zombie , Orphan Process

  • zombie process : 자식 프로세스가 죽고, 부모 프로세스만 살아있을 때, 자식 프로세스를 zombie process라고 한다. 아래 예제에서 fork()를 통해 자식 프로세스를 만든 후에 자식 프로세스는 1초 기다린 후에 종료되고 부모 프로세스는 총 30초, 즉, 자식 프로세스가 종료되고 29초 후에 종료되는데, 이때, 자식 프로세스를 Zombie Process(Stat == Z)라 한다.
  • orphan process : 부모 프로세스가 죽고 자식 프로세스만 남았을 때 자식 프로세스를 orphan process라 부르고, 운영체제가 PID가 1인 init process로 자식 프로세스를 입양시킨다. 즉, orphan process의 부모 프로세스는 init process가 되는 것이다.
    아래 예제에서 fork()를 통해 자식 프로세스를 만들고, 부모 프로세스는 2초 기다리고 종료되고, 자식 프로세스는 1초씩 반복문을 10번 돌아 10초동안 열번 출력하고 종료되기 때문에, 부모 프로세스가 종료되고 남은 8초 동안 자식 프로세스는 orphan process가 된다.
    (예제 출력문은 다른 프로그램...같다..)

Process state Transition


프로세스가 생성되면 운영체제는 ready 상태로 프로세스를 스케쥴링한다. 여기서, dispatching하여 CPU에 프로세스를 할당하면 running 상태가 된다. 만약 I/O 인터럽트가 발생하면 running 상태인 프로세스는 ready 상태로 전환하고 CPU의 제어권을 kernel로 이양하여 ISR을 실행한다.

PCB(Process Control Block)

프로세스를 관리하기 위한 kernel 내부의 자료구조이다. PCB에는 프로세스와 관련된 모든 정보가 저장된다. 운영체제가 CPU에 프로세스를 할당할 때, 운영체제는 PCB의 PC, SP, register값들을 CPU에 세팅한다.

Context Switch

운영체제가 CPU를 점유하고 있는 프로세스를 바꿔주는 것이다. context switch가 일어나면 운영체제는 현재 CPU에서 실행중인 프로세스의 PC, SP, register값들을 PCB에 저장하고 새로 CPU를 점유할 프로세스의 PCB를 CPU에 세팅한다. 이 과정은 Overhead가 발생하는데, 이 과정이 CPU의 메인 동작(명령어를 읽는)이 아닌, 부가적인 동작이기 때문이다. 하지만, 이런 Overhead에도 불구하고 context switch는 필요하다. 만약에 context switch가 1초에 한번 일어날 수 있다면, 크롬에서 tab을 옮겨다닐 때마다 1초씩 걸릴 것이다.(크롬은 새로운 탭을 생성할 때 process를 새로 생성한다.) 그래서 context switch는 1초에 100-1000번까지 일어날 수 있다.

State queue

PCB는 state queue 자료구조로 관리된다. OS는 process의 state(상태)에 따라 세 가지의 큐를 가지고, 여기에 PCB를 스케쥴링한다.

fork() 예


웹 서버는 클라이언트(웹 브라우저)가 웹 페이지를 요청하면 fork()를 통해서 프로세스를 만들어 응답한다. 만약에 클라이언트의 요청에 쓰레드를 만들어 할당하면, 만약 1000만명이 동시에 웹을 이용한다고 할 때, 한 명의 컴퓨터에서 문제가 생겨 웹 브라우저가 강제종료되면 1000만명의 웹 브라우저가 종료되는 문제가 생길 것이다.
**생성된 모든 프로세스의 소켓값이 같다.

IPC(Inter Process Communication)

원칙적으로 프로세스간에 communication은 안된다. 하지만, 몇가지 방법을 통해 가능하다.

Ref. 충북대학교 조희승 교수 OS Course

profile
Record What I Learned

0개의 댓글