프로세스와 스케줄러의 이해
프로세스의 이해
프로세스란?
메인 메모리로 이동하여 실행중인 프로그램 → 일반적인 정의
보통 프로세스라 하면 실행중인 프로그램 이다. 라고 표현을 한다.
틀린 표현은 아니다.
그러나 메인메모리가 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)이라 한다.
'강좌 정리 > 뇌를자극하는윈도우즈시스템프로그래밍' 카테고리의 다른 글
06장. 커널 오브젝트와 오브젝트 핸들 ① 커널 오브젝트에 대한 이해 (0) | 2012.07.05 |
---|---|
05장. 프로세스의 생성과 소멸 ②프로그래밍을 통한 프로세스의 생성 (0) | 2012.07.04 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ③ Direct 모드와 Indirect 모드 (0) | 2012.07.02 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ②LOAD & STORE 명령어 디자인 (0) | 2012.07.02 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ① 컴퓨터 구조의 접근방법 (0) | 2012.06.29 |