본문 바로가기

ComputerScience/Operating System

OS - 3 Process Description and Control

728x90

1. Process Elements

- 앞에서 간단하게 프로세스가 무엇인가에 대해 살펴보았다. 이번장에서 자세히 알아볼텐데 일단 프로세스가 무엇으로 구성되어있는지 살펴보자.

- 프로세스는 메인메모리에 올라와 있는 (실행하고자하는) 프로그램의 일부분이다. 당연히 프로그램의 코드가 들어있고 그 프로그램 코드가 사용할 혹은 관련된 데이터들이 있을 것이다.

- 그리고 뒤에서 더 자세히 알아볼테지만 프로세스가 현재 cpu에 의해 돌아가고 있는지 아니면 잠깐 쉬고 있는지 등의 상태를 나타내는 state, 프로세스가 마지막으로 실행되었을 때 cpu register값들을 가지고 있다. 이 정보를 알고 있어야 실행중이던 프로세스를 다시 실행할 때 어디서부터 일을 시작하면 되는지 cpu가 알수 있을 것이다.

- 이 밖에도 프로세스의 우선순위, i/o status information등의 정보를 가지고 있다.

2. Process Control Block

- 위의 정보를 하나의 묶음으로 운영체제가 프로세스 실행을 위해 만드는 자료구조를 PCB라고 한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 하나의 process마다 대응되는 PCB가 만들어지고 PCB가 만들어졌다는 것은 프로그램이 메인메모리에 올라와서 실행될 준비가 되었다는 뜻이다.

3. Process Execution (two-state model)

- 그럼 이렇게 만든 프로세스는 어떻게 실행될까?

- 일단 쉽게 실행과 상태라는 개념을 이해하기 위해 프로세스는 현재 실행 중/ 실행을 기다리는 중 이 두가지 상태만 있다고 가정하고 생각해보자

- 일단 프로세스가 만들어지면 queue로 들어가게된다. Dispatcher라는 프로그램이 하나씩 프로세스를 꺼내서 프로세서에게 수행하도록하고 끝나면 다시 queue로 보낸다. 이렇게 반복하면서 생성된 프로세스들을 순차적으로 실행하게 된다.

- Dispatcher로 queue를 빠져나간 프로세스는 running 상태이고, 그 밖에 queue에서 대기하고 있는 프로세스는 not running 상태라고 할 수 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 여기서 잠깐 trace라는 개념을 짚고가자.

- 프로세스를 processor가 수행할때 처리한 명령어들을 순서대로 나열하면 이것을 trace라고 부른다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 예를들면 각 프로세스마다 적혀진 숫자는 실행했던 명령어주소들을 나열한 것이다. 즉 프로세스가 실행된 궤적을 나타낸다고 할 수 있다.

- 멀티프로그래밍에서 여러 프로세스가 수행되는 과정을 trace를 따라서 살펴보면 다음과 같다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 멀티프로그래밍을 위한 timeout혹은 i/o interrupt마다 프로세스들이 교환되어서 공평하게 여러 작업들이 cpu를 사용하게 된다.

1. 제일먼저 프로세스 A가 수행되다가 정해진 시간만큼 cpu를 다 쓰고나면 다음 프로세스에게 사용기회를 넘긴다.

2. 파란색칸은 dispatcher가 실행된 궤적을 나타낸다. dispatcher가 수행되어 다음프로세스를 cpu에게 할당하고 직전에 작업을 하던 프로세스는 다시 queue로 보낸다.

3. 새로운 프로세스B가 이어서 실행되고 I/O interrupt가 발생하여 i/o응답을 기다리는 동안 다른 프로세스를 수행하기 위해 dispatcher가 호출된다. 다음 프로세스C를 cpu에게 할당한다.

4. 이제 C도 정해진 시간만큼 cpu를 사용했기때문에 dispatcher가 실행되어 다음 프로세스를 cpu에게 할당한다.

4. Process Execution (five-state model)

- 그럼 이전 내용을 확장해서 5가지 상태로 프로세스의 실행을 이해해보자

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 제일먼저 프로그램이 메모리에 올라와서 PCB가 만들어지면 그 프로세스는 ready상태가 된다. dispatch만 되면 실행될 수 있는 상태를 말한다.

- dispatcher에 의해 cpu를 할당받으면 running상태가되고

- 허용시간을 다쓰거나 급하게 처리해야하는 우선순위가 더 높은 프로세스가 dispatch된다면 ready상태로 돌아가게된다.

- 만약 프로세스의 작업이 다끝났다면 release되어 PCB가 사라진다.

- 그런데 running중에 i/o처럼 응답시간이 긴 작업이 수행된다면 cpu는 놀 수 없기 때문에 실행하던 프로세스를 blocked상태로 만들어 내보내고 dispatcher를 통해 새로운 process를 할당받는다.

- i/o응답을 기다리던 blocked 프로세스에게 i/o응답이 도착해서 다시 실행될 준비가 끝났다면 ready상태로 이동하게 된다.

- 이때 모든 상태간 이동은 queue를 통해서 이루어진다.

- 큐를 통해 위 과정을 도식화 하면 다음과 같다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- block된 이유(event 종류)에 따라서 여러가지 큐가 있을 수도 있다.

5. Suspended Process

- event의 응답을 기다고 있는 프로세스의 상태를 blocked라고 했다. 

- 그런데 만약 event를 너무 장시간 기다려야 하는 상황이 발생된다면 event queue의 맨앞에서 응답을 기다리느라 ready queue가 채워지지 못해 점점 비는 상황이 발생될 수 있다. 

- 이럴때 block된 프로세스들이 모여있는 큐를 막지말고 ready queue로 들어갈 준비가 된 프로세스들을 계속 보낼수 있도록 장시간 대기중인 프로세스를 다른 상태로 옮기게 되고 이를 suspended state라고 한다. 

- suspend가 되는 상황을 예로들면 메모리공간이 필요할때, 프로세스가 특정 타이밍에 동작되어야 할때등 여러 이유가 있다.

- 이렇게 suspended state로 이동된 프로세스는 차지하던 메인메모리 자리를 내주고 disk로 이동하게 된다. 이 과정을 swapping이라고 한다.

- suspended state를 추가해서 process execution을 도식화하면 다음과 같다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

1. blocked 상태에서 장시간 응답이 오지 않는다면 차지하던 메모리 공간을 빼고 디스크로 거취를 옮겨 suspend상태가 된다.

2. suspend상태에서 다시 실행할 준비가 되면 ready상태로 바뀌고 dispatcher에 의해 cpu할당을 기다리게 된다.

6. Process Execution (seven-state model)

- 프로세스의 상태의 종류와 이동방법은 운영체제 마다 다를 수 있다. 제일 기본적인 일곱가지 상태를 기반으로 프로세스의 실행을 살펴보자

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

1. 프로세스가 생성되고나서 disk로 프로세스가 이동하면 ready/suspend 상태, 반대로 바로 메모리로 올라가면 실행 직전 상태인 ready상태가 된다.

2. ready상태에서 dispatcher에 의해 cpu를 할당받으면 running 상태가 된다. 

3. ready상태에서 pcb가 disk로 이동하면 ready/suspend상태가 된다. ready/suspend상태는 프로세스가 disk에 있지만 메모리 공간만 받으면 바로 실행될 수 있는 상태를 말한다.

4. running상태에서 프로세스의 모든 작업이 끝나면 release되어 pcb가 사라진다. 혹은 주어진 cpu사용 시간을 다쓰면 다시 ready상태로 돌아가서 다음 차례를 기다리게 된다. 혹은 실행도중 event를 기다려야하는 상황이 발생되면 프로세스를 blocked상태로 이동시키고 cpu는 다음 프로세스를 수행한다.

5. blocked상태에서 event응답이 왔다면 다시 cpu를 할당받을 준비가 되었기 때문에 ready상태로 이동한다. 반대로 너무 장시간 응답이 안와서 blocked queue의 순환을 막아서 ready큐가 고갈되어가면 disk로 프로세스를 swapping하고 blocked/suspend 상태가 된다.

6. blocked/suspend상태의 프로세스가 event응답이 왔거나 다시 활성화 된다면 ready/suspend, blocked상태로 바뀌게 된다.

7.  Process Table

- 위에서 프로세스가 생성되고 상태에 따라 실행되는 흐름을 살펴보았다.

- 그럼 운영체제는 어떻게 이렇게 많은 프로세스들을 관리하는 걸까?

- 프로세스마다 아래 그림 처럼 사용하는 자원들도 다양할 것이다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 그 방법중 하나가 존재하는 프로세스들을 table로 관리하는 것이다.

- table안에 각 프로세스들은 각자의 식별자, 메모리 어느 위치에 존재하는지, 진행 내역 처럼 os가 관리하기 위한 정보들을 process image로 가지고있다.

- 그리고 각각의 memory, i/o, file 테이블은 각자 해당하는 자원을 점유하고 있는 process들을 리스트로 가지고 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

-  프로세스 이미지의 구성을 살펴보면 다음과 같다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 운영체제는 이 프로세스 이미지의 PCB를 교체해가면서 프로세스들의 상태를 바꾸고 여러 프로세스를 돌아가면서 수행하도록 관리할 수 있다.

- PCB의 processor state information이 앞장에서 살펴본 context이다. cpu가 작업하던 마지막 순간의 register값들을 저장해서 다음에 작업을 이어서 하더라도 문맥을 따라갈 수 있도록 한다. 

- PCB는 운영체제에서 가장 중요한 자료구조이다. 이 PCB는 운영체제가 프로세스를 관리하기 위한 모든 데이터를 포함하고 있다.

8. Process Creation

- 이번에는 프로세스가 생성되는 과정을 살펴보자.

1. 새로운 프로세스를 위한 식별자를 할당한다.

2. 프로세스에게 메모리 공간을 할당하고

3. 프로세스가 메인메모리에 올라오면 PCB를 만든다.

4. 적절한 스케쥴링 큐로 프로세스를 이동시킨다.

9. Mode Switching

- PCB는 아까도 말했다시피 매우 중요한 데이터이다. 따라서 일반 사용자가 함부로 조작할 수 없도록 운영체제만 만질 수 있는 방법이 필요하다.

- 운영체제에서는 두가지 모드가 있다. 하나는 user mode, 다른 하나는 kerenel 모드이다.

- 사용자 모드에서는 조작에 있어서 제한된 명령어만 수행할 수 있는 상태이다.

- 반대로 kernel모드에서는 시스템 조작의 모든 권한을 가질 수 있다.

- 사용자가 구현한 프로그램이 동작할때 사용하는 메모리영역을 user space라고하고 이 영역은 커널모드, 유저모드 둘다 접근이 가능하다.

- 반대로 운영체제만 독점적으로 사용할 수 있는 메모리 영역을 kernel space라고 한다. 이는 커널모드에서만 접근 가능하다.

 

- 프로세스가 수행되고 있다가 interrupt가 발생하거나 치명적인 오류로 갑자기 종료되어야 한다고 해보자. 이때는 인터럽트를 처리하기 위해서는 priviledge instruction이 요구될 수도 있다. 그럼 os는 커널모드로 전환되어 작업을 수행하고 다시 user 모드로 돌아온다.

- 즉 프로세스를 스케쥴링할 때는 운영체제가 커널모드로 들어가서 커널스케쥴러를 호출해줘야한다. 

- PCB들은 기본적으로 커널영역 안에 만들어지고 context switching이 될 때마다 PCB의 내용을 교체해줄 수 있는건 커널모드에서만 가능하다. 이렇게 PCB에 대한 보안을 실현하게 된다.

728x90
반응형