프로세스와 스케줄러의 이해


프로세스의 이해

 

프로세스란?

메인 메모리로 이동하여 실행중인 프로그램 → 일반적인 정의

보통 프로세스라 하면 실행중인 프로그램 이다. 라고 표현을 한다.

틀린 표현은 아니다. 

그러나 메인메모리가 256메가 인데 실행파일의 크기가 1기가 라고 하면 과연 메모리에 올라가있는 코드만 프로세스인가? 

틀린건 아니지만 너무 애매한 표현이다.



프로세스의 구체적인 이해


프로세스의 범위

메모리 구조 + 레지스터 Set

프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있다.




 ↑

 Code 영역

명령어

(Instruction Code)

   

 ↑

Data 영역

 전역변수

static 변수

   

Heap 영역



Stack 영역

 프로그래머 할당

   

 



   

 지역변수

전달인자 정보

   
       

프로세스가 생성되면 위와같은 메모리가 할당 된다. 

프로그램이 실행된다라는 것은 레지스터에 프로그램 실행정보로 가득차게되는데

이런 레지스터 set과 메모리 구조 모두 프로세스 범위에 포함된다.


'프로세스를 구성하는 범주는 프로세스 별로 독립적으로 할당받는 리소스다.'

라고 할 수 있다.



프로세스 스케줄러


프로세스 스케줄러 기능

둘 이상의 프로세스가 적절히 실행되도록 컨트롤


스케줄링 방법

스케줄링 알고리즘에 따라 다양함.



스케줄러 라는 장치는 Windows 에서 지원해주는 소프트웨어적인 장치이다.

프로세스 스케줄러는 말그데로 프로세스를 스케줄링 해주는 것이다.

CPU는 하나인데 프로세스는 여러게를 실행 시키려하면 CPU는 하나의 프로세스만 실행시킬수 있기때문에 스케줄러가 프로세스의 순서를 정해주고  순서를 정하는 정책을 결정하고 관리해주는 것이다.


§스케줄러는 소프트웨어이기 때문에 스케줄러가 동작하는 순간에도 프로세스들은 동작하지 못한다. 넓은 관전에서 보면 스케줄러도 프로세스에 포함시킬 수 있다.






프로세스의 상태




프로세스는 Ready , Running, Blocked 같은 상태정보를 지닌다.

Running 상태는 CPU에 의해서 실행중인 상태로 CPU가 하나라면 Running 상태의 프로세스는 하나일 수 밖에 없다.

Blocked는 실행중이 아닌 상태.

Ready 상태는  Running 하고 싶은 상태로 C프로세스가  Running 상태이고

A와 B가 Ready 상태일때 C가 Blocked 상태로 간다고 하면 A와 B중 누가 Running

상태로 가느냐를 정해주는 것이 바로 스케줄러가 하는것이다.   

즉 Ready 상태에 있다는 것은 스케줄러가 선택해주기를 기다리는 상태이다.

그림에서 볼 수있듯이 모든 프로세스는 실행시키면 Ready 상태가 된다.

연산중에는 CPU에 의존적인 연산이 있고 그렇지 않은 연산있다.

그중에 I/O연산은 유독 CPU에 의존적이지 않기때문에 사칙연산과같은 기본적인 연산과 병행해 질수있다. 

만약에 Running 상태에 있는 C라는 프로세스가 I/O 연산시작 했을때 I/O 연산이 끝날때 까지 C는 쉬고있고 대신 다른 프로세스가  Running 상태가 되어도 된다.

그럼 C는 Ready 상태가 되야될까? Blocked 상태가 되야할까?

 Ready 상태가 된다고 생각해보면 C는 다시  Running 상태가 될것이고 I/O연산이 끝나지 않았다면 다시  Ready 상태가 되는 반복을 하기때문에 Blocked 상태가 된다.

그리고 다시 I/O연산이 끝났다면 Ready 상태로 돌아가게 된다.

 Running 상태에서 바로 Ready 상태가 되는것은 다른 프로세스들고 실행을 시키여하기때문에 연산이 끝나지않았어도 Ready 상태로 내리는 경우이다.


1. 모든 프로세스는 실행시키면 Ready 상태가 된다.

2. Ready 상태이면 스케줄러가   Running 상태로 만들어준다.

3. Running 상태에서 다른 프로세스를 실행시키기위해 어쩔수 없이 양보하는 경우

    Ready 상태로 내려간다.

4. 일반적으로 I/O 연산을 하고있는 프로세스들은 다른프로세스들에게 양보하기위        

   해서 Blocked 상태로 간다.

5. I/O 연산이 끝나면 프로세스를 다시 진행시키기위해  Ready 상태가 된다.

6. 프로세스 종료.




컨텍스트 스위칭(context switching)




ALU가 연산을 하기위해서 레지스터에 의존적이다.

레지스터는 Running 상태의 프로세스 정보로 가득차있다.

이때 Ready상태의 프로세스를 실행 시키려 할때 프로세스를 실행시킬 수 있는 

첫 번째 조건은 지금 레지스터레 채워져있는 데이터를 다른 저장영역에 저장시키고

 Ready상태의 프로세스를 위한 데이터를 레지스터에 복원해야한다.

이런 작업을 컨텍스트 스위칭(context switching)이라 한다.













+ Recent posts