프로세스란 실행되는 하나의 프로그램을 의미하는 것이고, 하나의 프로그램ㅇ 실행되기 위해서는 하나의 CPU가 필요하기 때문에 프로세스 수만큼 CPU가 존재할 수 있다면 이상적이겠지만 이는 불가능하다.
따라서 실행 중인 모든 프로세스들에게 골고루 cpu를 할당하는 스케줄러가 필요하다 이일은 멀티 프로세스를 지원하는 운영체제의 일부분에 해당하는 스케줄러가 담당하는 일이다.
-일반 os와 리얼타임 os 의 차이점
RTOS와 일반 OS의 차이는 응답성(응답속도)에 있다. RTOS는 응답성이 Windows와 같은 일반 OS보다 좋다. 따라서 우리가 명령하는 일들을 신속히 처리한다.
RTOS는 사용하는 영역이 제한적. 범용적인 OS보다 하는 일이적음. 프로그래머가 시키지 않은 일은 하지않음.
정리해보면 RTOS는 일반 OS에 비해서 속도가 빠른것이 아닌 사용되는 목적이 구체적이고 제한적이다보니 보다 단순한게 디자인되어 있고 일반 OS에 비해서 훨씬 가볍다. 따라서 응답성이 좋을 뿐이다.
Soft RTOS vs Hard RTOS
일이 특화되어 응답성이 좋음 -> Soft RTOS
전통적인 RTOS -> Hard RTOS : 일반 OS에 비해서 단순히 응답성이 좋은 정도가 아닌 단순히 개선된 응답성이 아닌 데드라인
데드라인은 정말로 시간에 크리티컬한 상황에서 발생한다 (자동차의 오토브레이크 시스템)
이처럼 데드라인이 중요한 시스템에서 이를 충족시킬 수 있는 능력을 지니는 RTOS를 가리켜 Hard RTOS라 한다.
데드라인 충족은 단순히 CPU의 속도가 빠르다고 해서 만족되는 것이 아니기 때문에 Hard RTOS를 디자인한다는 것은 결코 쉬운 일이 아니며, 이를 위해서는 일반 OS와 전혀 다른 알고리즘으로 스케줄러가 디자인된다.
선점형 OS와 비선점형 OS
프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS를 구분한다.
비선점형 OS는 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 안흔ㄴ다. 새로 등장한,보다 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행 중인 프로세스가 명시적으로 CPU를 양보할 때까지 혹은 i/o 작업 등으로 블로킹 상태에 놓을 때까지 기다려야만 한다.
따라서 인터렉티브한 프로그램 구현 시 프로그래머 의존도가 높아지는 문제점을 지닌다.
프로그래머는 자신이 개발한 프로그램이 주구장창 CPU를 독차지하지 않도록 신경을 써서 프로그래밍해야한다.
인터렉티브 시스템 : 오늘날의 OS 사용자의 키보드 혹은 마우스 입력에 민감하게 반응해야 한다. 즉 여러분과의 대화를 계속하면서 그 결과에 따라서 프로그램을 구동하는 것이다. 이러한 시스템을 가리켜 인터렉티브 시스템이라 한다.
이러한 특성은 둘 이상의 프로세스를 동작시키는 멀티 프로세스 기반OS에 적합하다. 왜냐하면 스케줄러에 의해서 실행순서가 적절히 조절되다 보니 프로그래머가 신경을 쓸 일이 거의 없어지기 때문이다.
우선순위 동일한 프로세스 2개가 실행중이라면 스케줄러는 적절히 시간을 나눠서 최대한 동시에 실행되는효과를 내도록 실행순서를 조정할것이다.
Windows ,RTOS등이 선점형 OS이다
-우선순위 스케줄링 알고리즘
우선순위가 7인 프로세스와 2인 프로세스가 동시에 실행된다면?
NO : 우선순위 스케줄링 알고리즘은 우선순위가 높은 프로세스를 먼저 실행하기때문에 순위가 높은 프로세스 작업을 마쳐야 그다음 우선순위의 프로세스가 실행된다 이러한 관점에서 본다면 질문의 답은 NO이다.
YES : 높은 우선순위 프로세스가 i/o관련 작업을 하는 과정에서, 낮은 우선순위 프로세스가 실행 기회를 얻을 수도 있다. 따라서 우선순위가 낮은 프로세스도 적은 시간이나마 실행될 확률이 높다. 즉 낮은 우선순위의 프로세스가 기아 상태에 빠지는 것은 생각보다 드문 일이다. 이러한 관점에서 본다면 위 질문의 답은 YES가 된다.
-라운드 로빈 스케줄링 알고리즘
우선순위가 동일 프로세스의 경우 적용되는 알고리즘. 이 알고리즘은 같은 우선순위의 프로세스들간 형평성 유지를 위해, 정해진 시간간격만큼만 실행을 하고 우선순위가 동일한 다른 프로세스에게 CPU의 할당을 넘기는 방식을 제공한다. 오로지 형평성 유지를 위해서다.
퀀텀,타임슬라이스 : 실행의 최소 단위 시간 간격
동일한 우선순위의 모든 프로세스들은 이 타임슬라이스를 기준으로 CPU의 할당을 넘기게됨
타임슬라이스가 길면 : 인터렉티브한 시스템에서 문제가될수있음(반응이 늦게됨)
짧으면 : 컨텍스트 스위칭이 자주 발생해서 성능에 저하를 가져다줌
Windows는 우선순위 기반과 라운드 로빈 기반 알고리즘을 적절히 혼용하여 선점형 운영체제 특성을 나타내도록 디자인되어있음
-스케줄링 알고리즘에 의해서 스케줄링이 진행되는 시점
어느 시점에 스케줄러가 동작하도록 디자인하면 좋은가?
세가지 관점
라운드 로빈 방식의 스케줄링 알고리즘 적용에 대한 관점 : 정해진 시간이 지나면 다음프로세스에게 실행순서를 넘겨야 한다. 그런데 실행순서를 넘기기 위해서는 스케줄러가 동작해야 한다 -> 프로세스의 실행시간 간격에 해당하는 매 타임 슬라이스 마다 스케줄러는 동작해야 한다.
우선순위 방식의 스케줄링 알고리즘 적용에 대한 관점 : 우선순위가 높은 프로세그가 무조건 먼저 실행 -> 새로운 프로세스 생성 or 현재 프로세스 종룡시 스케줄러를 동작해 비교
블로킹 상황 : 현재 실행 중인 프로세스가 불로킹 상태에 놓이면, 다음 실행될 프로세스 선정을 위해서도 스케줄러가 동작하게 된다.
-Priority inversion
프로세스의 우선순위가 뒤 바뀌는 현상
해결책 : 프로세스 A가 바로 Blocked에 빠지는것이 아닌 C에게 자신의 우선순위를 잠시 위임
Windows 프로세스 우선순위
Windows는 총 6단계의 우선순위 계층을 제공한다.
실행속도의 조절이 목적이라면 Sleep 함수의 호출을 통해서 Blocked 상태로 만드는 것이 훨씬 좋은 방법이다.
이것만은 알고갑시다
RTOS와 일반 OS를 구분 짓는 기준을 단순히 속도로 정의하면 안 된다. 속도와는 별도로 응답성의 관점에서 이 둘을 구분해야 한다. 응답성이 좋다는 것은 새로운 일의 실행을 지시했을 때 그 일을 시작하기까지 걸리는 시간이 아주 적음을 의미한다. 응답성이 좋으면 RTOS라 한다 그런데 일반적으로 응답성이 좋으면 좋을수록 둘 이상의 일을 동시에 처리하는 멀티 프로세스의 성격이 약하다.
프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS가 나뉜다. 선점형 OS는 현재 실행 중인 프로세스 보다 높은 우선순위의 프로세스가 등장하면 그 순간 바로 실행 중인 프로세스를 변경해 버린다. 그러나 비선점형 OS는 우선 순위가 높은 프로세스가 등장하더라도 현재 실행 중인 프로세스가 일을 넘기지 않으면 프로세스의 실행이 이동하지 않는다.
3.스케줄러가 동작하는 세 가지 시기
Case 1: 매 타임 슬라이스 마다
Case 2: 프로세스가 생성 및 소멸될 떄마다
Case 3: 현재 실행 중인 프로세스가 블로킹 상태에 놓일 때마다