[운영체제] OS, 스케쥴링

2022. 7. 1. 10:52C#/운영체제

[OS]

운영체제의 가장 주된 목적은 컴퓨터 하드웨어를 관리하는 것이다. 컴퓨터에는 수많은 하드웨어가 존재한다. CPU, 메모리, 키보드, 마우스 등이 있으며 이를 관리해줘야 컴퓨터를 효율적으로 사용 있다.

운영체제는 사용자에게 편의를 제공하는 목적 가지고 있다. 운영체제가 없다면 위에서 말한 하드웨어에 관한 모든 관리를 사용자가 직접 해야하기 때문에 컴퓨터를 사용하는데 매우 불편할 것이다. 하지만 지금의 컴퓨터는 사용자가 매우 편하게 사용할 있다.

운영체제의 기능에는 CPU, 메모리등의 자원관리, 스케줄링 기능 제공, 각종 하드웨어의 관리 제어등이 있으며 이론적으로 운영체제의 목적은 다음과 같은 4가지다.

쉽게 정의하자면 운영체제는 컴퓨터의 성능을 높이고, 사용자에게 편의성을 제공하는 목적을 가지고 컴퓨터 하드웨어 관리하는 프로그램이다.

대표적인 컴퓨터 운영체제로는 윈도우, OS, 리눅스, 유닉스 등이 있다.

*커널모드와 유저모드

보통 운영체제에는 커널모드와 유저모드 두가지 프로세서 접근모드를 지원한다. 이유는 유저(혹은 유저 어플리케이션) 함부로 운영체제의 치명적인 데이터를 수정하거나 삭제하지 못하게 하기 위해서. 커널모드는 모든 시스템과 메모리에 접근이 허가된 프로세스 실행모드이다. 유저모드보다 커널모드에 높은 권한을 줌으로써 유저모드에서 에러가 발생하더라도 시스템 전체의 안전성 보장된다.

사용자가 직접적으로 하드웨어 장치를 제어한다면 문제가 발생할 있기 때문에 사용자 어플리케이션은 시스템콜(System Call) 통해 직접적인 하드웨어 요청이나 중요한 시스템 요청 한다. 요청을 하면 어플리케이션은 유저모드에서 커널모드로 잠시 전환 되었다가 커널모드에서 작업을 실행한 응답을 유저 어플리케이션에 반환되면서 다시 유저모드로 돌아가게 된다. 이러한 구조를 갖춤으로써 사용자 프로세스가 운영체제와 데이터를 함부로 들여다보거나 변경하지 못하게 보호한다.

*시스템

커널의 기능을 요청해서 사용하는 것을 말하는데 쉽게 생각하면 OS API 사용한다고 생각하면 쉽다. 시스템 콜은 프로그램의 거의 모든 코드의 실행에서 발생하며 파일 생성이나 쓰기 또는 읽기, 키보드 입력, 그래픽 출력, 스레드 생성 제어같은 것도 시스템 콜을 통해 커널에 요청하여 커널모드에서 처리한다.

*Windows에서 시스템 라이브러리는 어디있을까?

윈도우에서의 시스템 라이브러리는 ntdll.dll이며 기본적으로 필요한 기능들을 DLL형태로 만들어 윈도우 운영체제 안에 내장시켜 놓았다.

(C: -> Windows -> System32 에서 찾을 있었다

[스케쥴링]

*스케쥴링이 필요한 이유?

OS 정의를 컴퓨터의 성능을 높이고 사용자에게 편의성을 제공하는 목적을 가지고 컴퓨터 하드웨어 관리하는 프로그램이라고 정의할 수 있다. 따라서 OS 실행 대기중인 프로세스들에게 자원 배정을 적절히 하여 시스템의 성능을 끌어올릴  있어야한다.

*스케쥴링을 고민해줘야하는 상태 변화에는 어떤 것들이 있을까?

  • running -> waiting
  • running -> ready
  • waiting -> ready
  • terminate

*스케쥴링의 여러방식

  • FCFS(FIFO) : 먼저 들어온 순서대로 실행
  • SJF :실행시간이 가장 짧은것 부터 실행시키는 방식이다. 대기 시간이 짧다는 장점이 있다.
  • SRTF: 선점형 SJF방식이라 생각하면 좋다.

  • Round Robin : 프로세스에서 정해진 시간만큼 할당하고 할당된 시간안에 종료되지 않으면 ready queue 들어간다. 이때 할당 시간량이 중요한데 너무 적으면 context switching 자주 일어나고 너무 길면 FCFS 다를바가 없다.

-> 보통 시간단위는 10~100ms

  • MLQ : ready Queue 여러개의 queue 분류하고 각각 다른 스케쥴링 알고리즘을 가지는 방식이다. 쉽게 말해 프로세스를 그룹화 하는 것이다.

하지만 이러한 스케줄링은 만능이 아니며 당연히 문제가 발생할  있다. 특정 프로세스가 우선순위가 낮아서 우선순위가 높은 프로세스에 계속 밀려 무기한 차단될  발생하는 것을 Starvation이라 한다.

 

[Starvation]

이는 스케줄링과 관련이 있는데 SJF,SRTF,MLQ등의 스케줄링 알고리즘에서 발생할  있다.

  • SJF : 실행시간이 긴 실행파일의 경우에 대해 starvation이 일어날 수 있다.
  • SRTF :실행시간이  실행파일의 경우에 대해 starvation 일어날  있다.
  • MLQ : 높은 우선순위가 계속해서 들어오게 될경우 아래 큐에 있는 실행파일은 실행될  없을  있다.

이러한 starvation 해결하기 위해 우선순위가 낮아 대기시간이  실행파일에 대해 우선순위를 주기적으로 올려주는 Aging 기법이 존재한다.

 

[Aging 기법을 적용한 스케줄링 알고리즘]

  • HRN : SJF방식은 실행시간이  프로세스는 뒤로 계속 밀리는 불리함이 있다. 그래서 Aging기법을 통해 보완한 스케쥴링 방식이다.

-> 우선순위 = (대기시간 + 실행시간) / 실행시간

  • MLFQ : 기존 MLQ방식은 특정 프로세스가 큐에 고정되는 방식이었다. 반면 MLFQ 큐와  사이에 프로세스가 이동하는  허용한다. 또한 RR 같이 Time Quantum(타임 퀀텀) 가지는 여러 queue 존재하며 우선순위가 높은 순으로  퀀텀을 지나며 실행한다.

만약 해당 퀀텀내에 실행을 모두 마치지 못하면 아래 우선순위 큐로 내려간다. 이런식으로 우선순위를 변경하며 실행되는 스케줄링 방식이다.