티스토리 뷰

안녕하세요 :)

 

운영체제를 주제로 한 세번째 포스팅은 프로세스의 정의, 상태, 컴포넌트에 대하여 다루어보겠습니다.

 

 

3.1) what is process?

실행되고있는 프로그램을 프로세스라고 간략하게 말할수 있습니다.

프로세스의 요소 세가지도 저번 포스팅에서  code, data context라고 말씀드렸습니다.

 

프로세스는 다음과 같은 요소들로 특성지을수 있습니다.

 

identifier - 학번같은느낌으로 관리를 위한 번호를 부여합니다.

state - 상태정보

priority - 중요도

program counter - 프로그램카운터

memory pointers

context data

I/O state information

Accounting information

 

process control block(PCB) 이란 곳에 위와 같은 정보들을 저장합니다.

pcb는 운영체제가 멀티플 프로세싱을 가능하게 해주는 가장핵심이 되는 툴입니다.

만약 프로세스가 인터럽트 당하면 I/O 디바이스로 인터럽트 핸들러가 동작하게 된다 이때 인터럽트 당하기전에 돌아가던 프로세스의 정보(pc값, 레지스터값, 상태값)를 pcb에 저장하고 인터럽트 프로세스를 처리한 이후 pcb에 저장된 정보를 다시 꺼내어 당하기전 프로세스를 수행한다

 

PCB는 프로세스의 요소들을 저장하고 운영체제에 의해 만들어지고 관리되며 이것으로 인해 여러 프로세스를 동시에 관리할수 있다.

 

나중에 다시 수행할수 있는 충분한 정보를 PCB에 저장하기 때문에 멀티 프로세싱이 가능

 

 

3.2 process state

Dispatcher - 하나의 프로세스를 다른 프로세스로 바꿔주는 역할을 수행함

운영체제의 일부로서, 공평하게 여러 프로그램들이 CPU를 사용할수 있도록 해준다, 독점 방지

 

메인메모리의 앞부분에 디스패쳐가 위치하고 있다. 각각의 프로세서들이 6사이클동안 cpu를 사용하여 메인메모리의 주소값을 옮기며 명령을 수행할수 있다고 할때 주소의 흐름은 다음과 같다

 

process a = 8000~8009

process b = 3000~3015

dispatcher = 100~105

 

pc값 흐름 -> 8000~8005 -> 100~105 -> 3000~3005 -> 100~105 -> 8006~8009 -> 100~105 -> 3006~

 

pc값을 변경시키며 프로세스를 수행중 중간중간 time아웃이 걸려 디스패쳐가 실행될때 위와 같이 흐른다.

 

 

 

TWO-STATE PROCESS MODEL)

이전의 프로세스가 타임아웃이 발생해서 블럭 상태로 빠지게 되면 디스패쳐가 낫러닝이었던 프로세스를 러닝상태로 만들어주는 사이클 반복

 

not running process in a queue)

낫 러닝인 상태의 프로세스들이 큐의 형태로 기다리고 있다가 디스패쳐가 타임아웃이 발생할때마다 맨앞으 프로세스를 processor에 넣어준다.

process Creation)

프로세스는 만들어 지는 경우

-new batch job - 프로그램 하나 수행시

-Interactive logon - 유저 담당, 명령어 수행을 위한 process 생성, 주로 log in 시

-created by OS to provide a service - 프로그램을 시작시

-spawned by existing process - 부모 프로세스가 자식 프로세스를 만들때 ex) fork

 

process termination)

프로세스가 끝나는 경우

Normal conpletion - 프로그램 수행이 끝날때, 운영체제에게 다시 cpu 할당

time limit exceeded - 정해진 특정 시간을 넘길시 ->무한루프를 죽일시

memory unavailable - 메모리 할당을 무한으로 할시 죽음

bounds violation - 엑세스 공간 이외의 공간 할당 요구 할시

protection error - 접근이 허용되지 않는 파일 접근시

Arithmetic error - 나누기 0같은 경우

time overrun - 지연시간 초과시

Invalid instruction - 운영체제 만이 가능한 것을, 유효하지 않은것을 시도할때

parent termination, parent request - 부모 프로세스는 자식프로세스를 죽일수 있다.

 

 

not running 중 cpu를 할당 받아도 수행을 못하는 프로세스와 수행할수 있는 프로세스가 존재한다.

이를 위해 아래부터는 5개의 상태로 나는 state model을 소개한다.

 

 

 

 

Five state model)

running - 수행되고 있는 프로세스(executed)

ready - 수행될 준비가 된 프로세스

blocked - 수행될 준비가 되지 않고 어떠한 수행준비를 마칠수 있는어떠한 이벤트가 발생할때까지 기다림

new - 새롭게 할당될 준비를 하는과정속에 PCB는 할당을 받았지만 메모리는 할당받지 못한경우 , 할당시에는 ready 상태로 들어간다, 아직 메모리 할당이 안되어 레디 큐에는 들어가지 안핬다 (여기서의 pool -> queue)

exit - 프로세스 수행이 끝난 상태

 

언제 각 state 들로 바뀔수 있을까)

new -> ready - 큐 할당될떄

ready -> runing - 메인메모리에서 cpu가 할당되었을때

running -> exit - 수행이 끝났을때 아니면 오류가 났을떄

running -> ready  - 타임아웃발생(디스패쳐)

running -> blocked -  IO 명령어 또는 기다려야 할 경우

blocked -> ready - 이벤트가 발생하였을때

ready,blocked -> exit 어떤 상태에서도 exit 할수 있음, (예, 부모 프로세스가 자식을 죽일떄)

 

이러한 five state 모델에서는 큐를 두가지로 나눈다 -> 블락드 큐 or 레디 큐 

프로세서에서 블락당한 경우 블락큐로, 뉴 or 블락상태에서 레디상태로 간 경우를 레디큐로 보냄

(여기서 블락당한 순서대로 무조건 레디상태로 변한다는 가정이 없기 때문에 여러개의 블락큐를 운용한다.)

 

suspend processes)

큐가 많이 할당 되었을때 CPU는 놀고 있다 이에대한 솔루션이 suspend 상태이다.

블락되어있는 큐가 가득차있을때 메모리 공간에서 블락된 프로세스들중 우선순위가 낮은 프로세스 이미지를 swapping(스와핑)이라는 기법을 사용하여 다시 디스크로 보낸다. 이렇게 하면 메인 메모리의 공간이 조금은 더 늘어날수 있기 때문이다. 그때 디스크에서는 서스펜드 큐가 존재한다.

 

하지만 서스펜드 상태는 아직 종료된 상태는 아니다.

서스펜드상태의 프로세스라 함은 다음과 같다.

-지금바로 수행은 불가능하고 이벤트를 기다린다.

-자발적이 아닌 운영체제에 의해 서스펜드 당한다, 그리고 다시 운영체제에 의해 돌아온다

 

그리하여 서스펜드 상태가 추가된 상태도는 아래와 같다.

그렇다면 새로 생긴 메모리는 누구에게 줄것인가?

메인메모리에 올라가지 못한 프로세스는 job queue라고 불리는 공간에 들어가게 된다.

서스펜드 상태의 프로세스들은 주로 레디 상태로 갈수있는 이벤트를 기다리고 있다 그렇다면

이 이벤트가 발생한 서스펜드 상태의 프로세스와 이벤트를 기다리고 있는 서스펜드 상태의 프로세스가 서로 구분되어야 할것이다.

그렇게 해서 서스펜드 상태의 state를 두가지로 분리하여 만들어진 마지막 일곱번째 상태도는 아래와 같다.

중요하게 다룰 경우는 총 세가지 이다.

 

레디 -> 레디/서스펜드 - 이경우는 swapout을 시키는 것 만이 메인메모리의 부족한 공간을 늘릴수있는 유일한 방법일때와 레디 프로세스의 우선순위가 매우 낮은경우 블락드 대신 서스펜드 될 가능성도 있다.

 

블락드/서스펜드 -> 블락드 - 블락드 서스펜드의 프로세스가 우선순위가 매우 높으며 이벤트가 빠른시간내에 발생할 확신이 들때

 

러닝 -> 레디/서스펜드 - 블락/서스펜드 상태중에서도 우선순위가 매우높은 프로세스가 이벤트가 발생하여 바로 메모리로 올라와야 하는데 메모리가 부족한경우 swap -out 당할 가능성이 있다.

 

Reasons for process suspension

서스펜드를 당하는 이유

-swapping

-other OS reason - 운영체제가 봤을때 프로세스가 메모리를 계속 잠식시키고 있을경우

-Interactive user request - 유저의 요청에 의해서

-Timing - 정해진 시간에 의해 주기적으로

-부모가 자식프로세스를 서스펜드 시킬수 있음

 

3.3)process Description

운영체제는 여러 프로세스를 관리 하기위해 아래와 같은 테이블을 유지하고 있다

-memory table - 주소 매칭에 대한 테이블

-IO table - 메모리와 IO 디바이스에 사이의 관계에 대한 테이블

-file table - 하드디스크안에 파일을 배치할때의 테이블

-processtable

 

프로세스 테이블안에는 각각에 할당된 메모리에 대한 포인터가 존재한다.

 

process Image)

프로세스 이미지 안에 들어있는정보는 다음과 같다.

-user data

-user program

-system stack - 각 프로세스는 하나 또는 하나이상의 스택을 갖는데, 시스템스택은 파라미터와 콜링 어드레스를 저장하는데 시스템콜(운영체제의 함수처리를 위한것) 을위함

-process control block

 

여기서 스택의 위치는 다음 그림을 통해 알수있습니다. 이 스택영역은 로컬변수와 함수호출시의 콜링어드레스를 쌓아둡니다.

스택 영역 - 사용자 함수 호출에 필요한 여러 가지 요소들을 저장하며 이에는

지역변수, 이전 스택 프레임에 대한 포인터(주소), 함수호출 수행후의 리턴주소, 함수 호출에 사용한 인자들(parameters)가있습니다.

 

 

이번에는 프로세스 이미지의 요소중 하나였던 PCB에 대해서 집중적으로 다루어 보겠습니다.

 

 

 

 

3.4) process control

프로세스의 컨트롤은 두가지 모드로 나뉩니다.

-user mode

-system mode or kernel mode

 

유저모드의 권한보다 시스템 또는 커널모드의 권한이 훨씬크고 운영체제의 소스코드를 사용할때 커널모드가 사용됩니다.

 

그렇다면 이 운영체제의 소스코드로 이루어진것들 함수들은무엇이 있는지는 다음과 같습니다.

아래의 모든 것들이 함수로 구현되어 있습니다.

  

프로세스 컨트롤을 두가지 모드로 나누어서 하는 이유는 운영체제의 소스코드와 테이블을 보호하기 위해서입니다.

하나의 cpu 비트로 커널모드와 유저모드로 스위칭이 가능합니다.

 

그렇다면 언제 이러한 모드 체인징이 이루어지는지 계속 공부하며 알아가 보겠습니다.

 

system call 이란?

운영체제가 제공해주는 함수로 각종 io 디바이스들의 이용을 할수 있음.

예를들어보겠습니다.

 

우리가 C 프로그래밍에서 printf라는 함수를 사용하면 헤더파일에 포함시킨 라이브러리 내에서 함수를 꺼내와서 사용하게 됩니다. 그라이브러리에 구현되어있는 함수들을 살펴보면 결국 운영체제가 사용하는 가장 낮은버전의 기계어로 이루어진 소스코드를 사용하게 되는데 그때 시스템 콜이 발생하는것입니다.

 

 

 

process creation step)

- assign a unique process identifier, 프로세스에 아이디부여

- allocate space for process, 메인메모리에 올리기위한 공간 할당

- intialize process control block, PCB 초기화

- set up appropriate linkages,  레디큐에 넣어줌, 서스펜드될 가능성또한 있음

- create or expand other data structures, 나머지 기타정보 필요시 할당

 

컨트롤이 운영체제로 넘어오는 경우들)

interrupt - 핸들러가 운영체제의 소스코드임으로 넘어간다.

trap - 유저 실행코드에 에러가 발생할경우 os가 죽이고 메세지를 남긴다.

supervisor call - 시스템콜 -> 운영체제게 제공해주는 함수들을 사용할 경우

 

 

interrupts)

종류는 세가지가 존재

clock interrupt - 모든 프로세스들이 cpu를 공평하게 나눠쓰기 위함, 최대 이용시간이 초과되면 타임아웃이 발생하고 디스패쳐가 다른 프로세스로 포인터를 이동시킴

i/o interrupts- 입출력 장치에서 인터럽트 신호들보냄

memory fault - 일부만 메인메모리에 올라왔었는데 함수호출등의 이유로 인해 메모리 용량이 초과 되었을때 

trap - 잘못짠 코드때문에 에러를 처리하기위한 인터럽트

supervisor call - 시스템콜 -> 운영체제게 제공해주는 함수들을 사용할 경우

 

clock interrupt가 발생하면)

프로세스에 대한 컨트롤을 운영체제가 넘겨받는다.

러닝 상태의 프로세스를 레디 상태로 바꾸고 레디상태의 프로세스중 하나를 선택하여 러닝상태로 바꾼후 컨트롤을 넘겨준다.

즉, 프로세스 스위칭이 발생한다"process switching"

 

process switching step)

프로세스 스위칭 과정은 다음과 같다

- 현재 cpu의 중요한 레지스터값(pc값)등을 PCB(pcb 내의 processor state information)에 저장한다.

- state를 러닝상태에서 레디 or blocked or ready/suspend 상태로 바꿔줌

- 레디큐 또는 블락큐에 PCB값을 옮겨준다

- 다른 프로세스를 선택한다

- 디스패쳐가 새로 실행된 프로세스의 상태를 레디에서 러닝으로 바꿔준다.

- 메모리 메니지먼트 데이터를 재조정해준다.

- pcb 저장값을 cpu로 옮기고 수행한다.

 

그런데 인터럽트가 발생하면 항상 프로세스 스위칭이 발생할것인가?

 

인터럽트의 처리가 매우 간단한 작업이라면 OS 가 잠깐 컨트롤을 갖는 모드 스위칭이 이루어진다. 이를 지금부터 다루어 보겠습니다.

 

모드 스위칭의 경우 프로세스 스위칭 없이 진행되던 프로세스를 그대로 진행시키는 상태에서 유저모드에서 커널 모드로만 바꾼후 인터럽트를 처리한다.

잠깐 IO 인터럽트 핸들러 소스코드를 수행시킨다. 현재 러닝되고 있는 프로세스의 cpu정보를 담는다 pcb에

pcb에 있는 정보를 인터럽트 처리후 다시 불러온다. 잠깐 인터럽트 당하지만 다시 수행을 유지함으로 프로세스 스위칭 발생안한다.

 

클럭 인터럽트는 프로세스 스위칭, IO 인터럽트는 모드스위칭, 메모리 인터럽트는 프로세스 스위칭, 트랩은 프로세스 스위칭, 시스템 콜의 경우는 프로세스 스위칭과 모드스위칭 둘다 이루어 질수 있다.

코스트가 더 드는 운영은 process sw 이다 mode sw 의 경우 비트값하나만 변경해주면 되기 때문!

 

운영체제는 프로세스가 아니라는 관점에서 바라본다면, 시스템콜과 인터럽트 핸들러 운영체제 소스코드이용을 모드스위칭 만으로도 처리 할수 있다.

 

만약 모드 스위칭이 이루어진다면 커널 스택이 들어간 유저 스페이스로 구성된다. 

 

 

'Major > Operating System' 카테고리의 다른 글

Operating System - Mutual Exclusion  (0) 2021.04.14
Operating System - Treads  (0) 2021.04.14
Operating System - operating system overview  (0) 2021.04.13
Operating System - computer system overview  (0) 2021.04.13
Operating System - intro  (0) 2021.04.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함