Search
Duplicate
📒

[OS Stduy] 01-3. CPU 스케쥴링, 커널모드

상태
수정중
수업
OS Study
주제
OS
연관 노트
3 more properties
참고

CPU 스케쥴링

NOTE
프로세스들에게 합리적으로 CPU 자원을 배분하기 위해 CPU 스케줄링을 수행한다!
넓은 의미의 스케줄링 = 스케줄링(Ready Queue 정렬) + Dispatch(프로세스를 CPU에 올림)
스케쥴링 알고리즘의 평가기준
CPU가 쉬고 있지 않게 해야한다.
단위 시간당 처리량이 높아야한다.
수행을 요청한 후 작업이 끝날 때 까지 걸린시간이 짧아야 한다.
수행을 요청한 후 작업이 시작될 떄까지 걸린 시간이 짧아야 한다.
요청한 후 응답이 올 떄까지 시간이 짧아야 한다.

시스템 별 목표

Batch System
한 번에 하나의 프로그램만 수행하는 것.
가능한 한 많은 일을 수행하기 위해 through(시간당 처리량)과 CPU 사용률이 중요하다.
반응형 시스템
응답시간 → 프로세스가 Ready Queue에서 대기하는 시간을 최소화한다.
대기시간 → 프로세스가 Wait Queue에서 대기하는 시간을 최소화한다.
실시간 시스템
시간 제약 조건이 걸려있는 시스템이다.
CPU를 누구한테 먼저 할당시켜야 하는가?
프로세스마다 우선순위가 다르기 떄문에 일반적으로 운영체제는 이를 반영하여 스케쥴링한다.
프로세스는 CPU와 입출력을 사용하는 구간이 존재함
입출력 집중 프로세스(I/O bound process)
입출력 작업이 많은 프로세스
대표적으로 비디오 재생이나 디스크 백업 작업 등을 담당하는 프로세스
CPU 집중 프로세스 (CPU bound process)
CPU 작업이 많은 프로세스
대표적으로 복잡한 수학 연산, 컴파일, 그래픽 처리 작업을 담당하는 프로세스
일반적으로 입출력 집중 프로세스의 우선순위가 높다!
ps -el 명령어로 우선순위 확인
윈도우에서 확인하는 방법 (Process explore)

스케줄링 큐

NOTE
CPU를 사용할 때 다음 프로세스를 찾을 때 마다 PCB를 확인하는건 비효율적이다. 프로세스의 우선순위에 따라 줄을 세워두고 순서를 결정하는데 이를 스케줄링 큐라고 한다!
요청작업에 따른 우선순위큐 생성!
스케줄링 이해를 위한 구조도!
대기 큐는 여러 종류가 존재할 수 있음!
준비 큐
CPU를 이용하고 싶은 프로세스들이 줄을 서는 큐
대기 큐
입출력장치를 이용하기 위해 대기 상태로 접어든 프로세스들이 줄을 서는 큐
입출력이 완료되어 인터럽트 발생 시 대기 큐에서 제거되고 준비 큐로 이동한다.

선점형 vs 비선점형 스케쥴링

NOTE
프로세스의 우선순위에 따라 실행중인 프로세스를 중단하고 실행하는지와 실행 중인 것까지만 실행하는지에 따라 기법이 분류됨!

선점형 스케쥴링

우선순위를 위해 실행중인걸 멈춘다 ⇒ 선점형 스케쥴링!
대부분의 운영체제가 채택한 방식
프로세스들에게 골고루 자원을 배분할 수 있다는 장점
문맥 교환 과정에서의 오버헤드 발생

비선점형 스케쥴링

프로세스가 종료되거나 대기하기 전에는 끼어들 수 없음!
어느 하나의 프로세스가 자원 사용을 독점할 수 있음
문맥 교환시 오버헤드는 적지만, 몯느 프로세스가 자원을 골고루 사용불가

CPU 스케쥴링 알고리즘

선입 선처리 스케쥴링(FCFS)

NOTE
준비 큐에 삽인된 순서대로 프로세스를 처리하는 비선점형 스케쥴링 방식!
선착순!!
CPU를 오래 사용하는 프로세스가 먼저 도착하면 다른 프로세스들이 기다리는 시간이 매우 길어짐..
잠깐의 실행을 위해 오래 기다리게되는 현상 ⇒ 호위 효과

최단 작업 스케쥴링(SJF)

NOTE
호위 효과를 방지하기 위해 CPU 사용시간이 짧은 프로세스를 먼저 실행하는 비선점형 스케쥴링 방식!
시간이 짧은거 부터!

라운드 로빈 스케쥴링

NOTE
선입 선처리 스케쥴링에 프로세스 CPU를 정해진 시간동안 실행하고 순환시킴!
일정 간격으로 돌아가며 실행! (타임 슬라이스)
타임 슬라이스가 너무 크면 호위 효과가 발생할거고, 너무 작으면 문맥 교환 오버헤드가 커진다.

최소 잔여 시간 우선 스케쥴링(SRT)

NOTE
최단 작업 우선 스케줄링라운드 로빈 스케줄링을 합쳐 선점형 스케줄링 방식으로 구현!
작업 시간 대신 잔여시간을 기준으로 짧은 것을 앞에 둔다.
정해진 타임 슬라이스 만큼 CPU를 사용하되, 남아있는 작업 시간이 가장 작은 것을 우선시한다.

우선순위 스케즐링

NOTE
프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 실행하는 방식.
우선순위가 낮으면 언제 할지모른다..
우선순위가 낮은 프로세스의 실행이 계속 연기되는 기아 현상 발생 가능
대기시간으로 우선순위에 가중치를 준다!
오래 대기한 프로세스의 우선순위를 높이는 에이징 기법으로 기아 현상을 방지한다!

다단계 큐 스케쥴링

NOTE
우선순위 별로 준비 큐를 여러개 사용하는 방식!
준비상태에 큐를 종류별로 사용한다!
프로세스 유형별로 우선순위를 구분하기 때문에 실행하기 편리하다.
큐별로 타임 슬라이스, 스케줄링 알고리즘 등을 개별적으로 설정 가능하다.
하지만 프로세스가 큐간 이동을 하지 못한다.

다단계 피드백 큐 스케쥴링

NOTE
다단계 큐 스케줄링에서 발생할 수 있는 기아 현상을 방지하기 위해 발전된 형태!
타임 슬라이스 만큼 실행한 후, 완료되지 않으면 다음 우선순위 큐에 넣음!
오랫동안 실행되지 않으면 에이징 기법으로 높은 우선순위 큐로 이동
CPU를 오래 사용할수록 점점 우선순위가 낮아지고 오래 기다리면 에이징 기법으로 우선순위가 높아진다.

CPU 스케줄링 방식

NOTE
각 장단점에 대해서는 다른 노트에 설명해두었다.

인터럽트 시스템 , 시스템 콜

NOTE
커널모드는 인터럽트, 시스템 콜을 호출하면 전환되는 모드이다!
커널 모드와 유저 모드를 번갈아가며 프로세스는 동작한다.
커널 모드
프로그램의 현재 CPU 상태를 저장한다.
인터럽트, 시스템콜을 직접처리한다 (CPU에서 커널코드 실행)
처리가 완료되면 중단된 CPU 상태를 복원

커널(Kernel)

NOTE
운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로써 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원(CPU, 메모리)들을 관리하는 역할을 한다.
컴퓨터(Computer) -> 하드웨어(Hardware) (: 컴퓨터 본체, 모니터, 키보드 등) -> 소프트웨어(Software) -> 응용 프로그램 (: MS Office, Chrome, VSCode 등) -> 운영 체제(OS, Operating System) (: Windows, MacOS, Linux 등) -> 시스템 프로그램 (: (Shell)) -> 커널(Kernel) : 운영체제의 핵심부
JavaScript
복사
좀더 세분화해서 보자.
컴퓨터 계층과 커널
커널은 항상 컴퓨터 자원들을 바라만 보고 있기에, 사용자와의 상호작용은 지원하지 않는다.
⇒ 사용자와의 상호작용을 위해 시스템 프로그램쉘(Shell)이 등장한다.

쉘(Shell)

사용자가 컴퓨터에게 전달하는 명령을 해석하는 프로그램, 즉 커널과 사용자간의 다리 역할을 수행한다.

커널의 자원 관리(추상화)

NOTE
커널의 가장 큰 역할은 컴퓨터의 물리적 자원(하드웨어)와 추상화 자원을 관리하는 것이다.
하드웨어와 유저 스페이스간의 통신을 위해 사용함
사용자 영역 계층
shell같은 운영체제 구성요소나, GUI를 사용해서 앱이 실행되는 곳을 말한다.
커널 계층
커널과 사용자 영역 사이에는 init 시스템과 시스템 서비스처럼 많은 구셩요소가 있지만, 엄밀히 말하면 이들은 커널의 일부가 아니라는 점에 유의
하드웨어 계층
CPU, MEMORY, DISK, NIC와 같은 인터페이스와 키보드, 모니터 디바이스를 의미
물리적 자원 이름 -> 추상화한 자원 용어 CPU -> 태스크(Task) 메모리(memory) -> 페이지(page), 세그먼트(segment) 디스크(disk) -> 파일(file) 네트워크(network) -> 소켓(socket)
JavaScript
복사
하나뿐인 하드웨어를 마치 여러개인 것처럼 보여지도록 하는 기술
커널은 이를 위해 하나의 하드웨어 자원을 여러 사용자들을 위한 여러개의 추상화된 객체로 관리하게 된다.

커널의 5가지 관리자

1.
태스크 관리자 : 물리적 자원인 CPU → 추상 자원인 태스크로 제공
2.
메모리 관리자 : 물리적 자원인 메모리 → 추상 자원인 페이지나 세그먼트로 제공
3.
파일 시스템 관리자 : 물리적 자원인 디스크 → 추상 자원인 파일로 제공
4.
네트워크 관리자 : 물리적 자원인 네트워크 장치 → 추상 자원 소켓으로 제공
5.
디바이스 드라이버 관리자 : 각종 외부장치(프린터, GPU 등)에 대한 접근을 제공

요약

사용자 → 시스템 프로그램(Shell 등을 사용) → 커널 → 컴퓨터 자원 접근

인터럽트

NOTE
시스템에서 발생한 다양한 종류의 이벤트 혹은 그런 이벤트를 알리는 매커니즘
인터럽트 발생예시) 전원에 문제가 생김, IO작업이 완료됨, 잘못된 메모리 공간 접근 등등..
인터럽트가 발생하면 CPU에서 즉각적으로 처리를 위해 커널 코드를 커널 모드에서 실행함
시스템 콜
OS 커널이 제공하는 서비스를 이용할 때
프로세스/스레드 관련, 파일 IO, 소켓관련 장치, 프로세스 통신 관련
시스템 콜 발생 ⇒ 커널 코드가 커널 모드에서 실행

시스템 콜

NOTE
커널이 제공하는 서비스에 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
시스템 콜 발생예시) 프로세스/스레드 관련, 파일 IO. 소켓관련 장치