기금넷 공식사이트 - 복권 조회 - 프로세스 스케줄링 알고리즘 찾기
프로세스 스케줄링 알고리즘 찾기
1부: 실시간 스케줄링 알고리즘 소개
POSIX 1003.b는 실시간 시스템이 무엇인지 정의합니다. 이는 시스템이 제한된 범위 내에서 필요한 수준을 제공할 수 있음을 의미합니다. 응답 시간 서비스. Donald Gillies가 제안한 보다 수용적인 정의는 다음과 같습니다. 실시간 시스템은 계산의 정확성이 프로그램의 논리적 정확성뿐 아니라 결과가 생성되는 시간에 따라 결정된다는 의미입니다. 시스템을 획득하지 못했습니다. 만족할 경우 시스템 오류가 발생합니다.
실시간 시스템은 다양한 실시간 요구 사항에 따라 소프트 실시간과 하드 실시간의 두 가지 유형으로 나눌 수 있습니다. 하드 실시간 시스템은 최악의 서비스 시간이 보장되는 시스템, 즉 어떤 경우에도 이벤트 응답 시간의 기한을 준수해야 하는 시스템을 말합니다. 예를 들어, 항공우주 분야의 우주선 제어는 실제로 그러한 시스템입니다. 실시간 특성을 지닌 다른 모든 시스템을 소프트 실시간 시스템이라고 부를 수 있습니다. 분명히 말하면, 소프트 실시간 시스템은 통계적 관점에서 작업(다음 설명에서는 작업과 프로세스를 구분하지 않음)이 처리 시간을 보장받을 수 있고 시스템에 도착하는 이벤트도 처리할 수 있는 시스템입니다. 마감일이 도래하기 전에 처리되지만, 마감일을 위반한다고 해서 치명적인 오류가 발생하지는 않습니다. 실시간 멀티미디어 시스템은 소프트 실시간 시스템입니다.
컴퓨터 시스템이 실시간 지원을 제공하려면 운영 체제가 CPU 및 기타 리소스를 효과적으로 예약하고 관리해야 합니다. 멀티 태스킹 실시간 시스템에서는 리소스 예약 및 관리가 더 복잡합니다. 다음 기사에서는 먼저 분류 관점에서 다양한 실시간 작업 스케줄링 알고리즘을 논의한 다음 일반 Linux 운영 체제의 프로세스 스케줄링과 실시간 작업을 지원하기 위해 다양한 실시간 Linux 시스템에서 일반 Linux 시스템으로의 개선 사항을 연구합니다. 시간 특징. 마지막으로 Linux 운영체제를 실시간 분야에 적용할 때 발생하는 몇 가지 문제점을 분석하고, 다양한 실시간 Linux가 이러한 문제를 어떻게 해결하는지 요약한다.
1. 실시간 CPU 스케줄링 알고리즘의 분류
다양한 실시간 운영체제의 실시간 스케줄링 알고리즘은 다음 세 가지 범주로 나눌 수 있다[Wang99][Gopalan01 ]: 우선순위 기반 스케줄링 알고리즘(Priority-driven Scheduling-PD), CPU 사용률 기반의 공유 중심 스케줄링 알고리즘(Share-drive Scheduling-SD), 시간 기반 프로세스 스케줄링 알고리즘(Time-Driven Scheduling- TD), 다음과 같이: 이 세 가지 스케줄링 알고리즘이 하나씩 소개됩니다.
1.1. 우선순위 기반 스케줄링 알고리즘
우선순위 기반 스케줄링 알고리즘은 각 프로세스가 스케줄링될 때 항상 가장 높은 우선순위를 갖는 작업을 스케줄링합니다. 실행됩니다. 다양한 우선순위 할당 방법에 따라 우선순위 기반 스케줄링 알고리즘은 다음 두 가지 유형으로 나눌 수 있습니다. [Krishna01][Wang99]:
정적 우선순위 스케줄링 알고리즘:
이런 종류의 스케줄링 알고리즘은 시스템에서 실행 중인 모든 프로세스에 우선 순위를 정적으로 할당합니다. 정적 우선순위 할당은 작업 주기, 사용자 우선순위 또는 기타 미리 결정된 정책과 같은 애플리케이션 속성을 기반으로 할 수 있습니다. RM(Rate-Monotonic) 스케줄링 알고리즘은 작업의 실행 주기 길이에 따라 스케줄링 우선순위를 결정하는 일반적인 정적 우선순위 스케줄링 알고리즘입니다.
동적 우선순위 스케줄링 알고리즘:
이 스케줄링 알고리즘은 리소스 요구사항에 따라 작업의 우선순위를 동적으로 할당하며, 그 목적은 리소스 할당 및 스케줄링 유연성을 높이는 것입니다. 비실시간 시스템에는 단기 작업 우선 스케줄링 알고리즘과 같은 스케줄링 알고리즘이 많이 있습니다.
실시간 스케줄링 알고리즘 중 EDF 알고리즘은 가장 일반적으로 사용되는 동적 우선순위 스케줄링 알고리즘입니다. 이 알고리즘은 마감일(Deadline)에 따라 준비 대기열의 각 작업에 우선순위를 할당합니다.
1.2. 비례 공유 스케줄링 알고리즘
우선순위 기반 스케줄링 알고리즘은 간단하고 효과적이지만, 이 스케줄링 알고리즘은 많은 경우에 적합하지 않습니다. 이 스케줄링 알고리즘을 사용하려면 실시간 멀티미디어 회의 시스템과 같은 소프트 실시간 애플리케이션을 예로 들 수 있습니다. 이러한 종류의 소프트 실시간 애플리케이션에는 비례 공유 자원 스케줄링 알고리즘(SD 알고리즘)을 사용하는 것이 더 적합합니다.
비례 공유 스케줄링 알고리즘은 CPU 사용량 비율을 기반으로 하는 공유 스케줄링 알고리즘을 말하며, 기본 개념은 일정 가중치(비율)에 따라 스케줄링해야 하는 작업 그룹을 스케줄링하는 것입니다. 실행 시간은 가중치에 정확히 비례합니다.
비례 공유 스케줄링 알고리즘 [Nieh01]은 두 가지 방법으로 구현할 수 있습니다. 첫 번째 방법은 스케줄링 대기열의 선두에 나타나는 각 준비 프로세스의 빈도를 조정하고 프로세스를 선두에서 스케줄링하는 것입니다. 큐 실행의 두 번째 방법은 준비된 큐의 각 프로세스가 하나씩 실행되도록 예약하지만 할당된 가중치에 따라 각 프로세스의 실행 시간 조각을 조정하는 것입니다.
비례 공유 스케줄링 알고리즘은 순환 방식, 공정 공유, 공정 대기열, 복권 예약 방식(복권) 등으로 나눌 수 있습니다.
비례 공유 스케줄링 알고리즘의 한 가지 문제점은 우선순위 개념을 정의하지 않는다는 것입니다. 모든 작업은 적용되는 비율에 따라 CPU 리소스를 공유합니다. 모든 작업의 속도가 비례적으로 느려집니다. 따라서 시스템의 실시간 프로세스가 일정량의 CPU 처리 시간을 확보할 수 있도록 하기 위해 프로세스 가중치를 동적으로 조정하는 방법이 일반적으로 사용됩니다.
1.3. 시간 기반 프로세스 스케줄링 알고리즘
안정적이고 알려진 입력을 가진 간단한 시스템의 경우 시간 중심(TD) 스케줄링 알고리즘을 사용할 수 있습니다. 데이터 처리에 대한 예측 가능성. 이 스케줄링 알고리즘은 본질적으로 디자인 타임에 결정되는 오프라인 정적 스케줄링 방법입니다. 시스템 설계 단계에서는 시스템 내 모든 처리 조건이 명확한 후, 각 작업의 시작, 전환, 종료 시간에 대해 사전에 명확한 배치와 설계가 이루어집니다. 이 스케줄링 알고리즘은 소형 임베디드 시스템, 자동 제어 시스템, 센서 등의 응용 환경에 적합합니다.
이 스케줄링 알고리즘의 장점은 작업 실행이 매우 예측 가능하다는 점이지만 가장 큰 단점은 유연성이 부족하고 작업을 실행해야 하는데 CPU가 유휴 상태로 남아 있는 상황이 발생하게 됩니다.
2. 일반 Linux 시스템의 CPU 스케줄링
일반 Linux 시스템은 실시간 프로세스와 비실시간 프로세스를 모두 지원하며 일반 프로세스에 비해 절대적인 우선순위를 갖습니다. 이에 따라 실시간 프로세스는 SCHED_FIFO 또는 SCHED_RR 스케줄링 전략을 사용하고 일반 프로세스는 SCHED_OTHER 스케줄링 전략을 사용합니다.
스케줄링 알고리즘 구현에서 Linux의 각 작업에는 rt_priority, 정책, 우선순위(nice) 및 카운터인 스케줄링과 관련된 4가지 매개변수가 있습니다. 스케줄러는 이 네 가지 매개변수를 기반으로 프로세스를 예약합니다.
SCHED_OTHER 스케줄링 정책에서 스케줄러는 항상 우선순위 카운터 값이 가장 큰 프로세스를 선택하여 실행을 예약합니다.
논리적 분석에 따르면 SCHED_OTHER 스케줄링 정책에는 스케줄링 주기(에포크)가 있습니다. 각 스케줄링 주기에서 프로세스의 우선순위 및 카운터 값은 현재 순간에 어떤 프로세스가 실행되도록 예약해야 하는지에 영향을 줍니다. 여기서 우선순위는 고정된 값입니다. 변경되는 값은 프로세스가 생성될 때 결정됩니다. 이는 프로세스의 우선 순위와 프로세스가 각 스케줄링 주기에서 얻을 수 있는 시간 조각 수를 반영하는 동적으로 변경되는 값입니다. 현재 스케줄링 주기의 프로세스입니다. 각 스케줄링 주기가 시작될 때 우선순위 값이 카운터에 할당되고 프로세스 실행이 예약될 때마다 카운터 값이 감소됩니다. 카운터 값이 0이면 프로세스는 이 스케줄링 주기에서 해당 시간 조각을 모두 사용했으며 더 이상 이 스케줄링 주기의 프로세스 스케줄링에 참여하지 않습니다. 모든 프로세스의 시간 조각이 모두 사용되면 스케줄링 주기가 종료되고 주기가 다시 시작됩니다. 또한 Linux 시스템의 스케줄링 주기는 정적이지 않고 동적으로 변경되는 수량임을 알 수 있습니다. 예를 들어 실행 가능 상태의 프로세스 수와 우선순위 값이 에포크의 길이에 영향을 줄 수 있습니다. . 2.4 이상의 커널에서는 우선순위가 nice로 대체되지만 두 가지의 기능은 비슷하다는 점은 주목할 가치가 있습니다.
SCHED_OTHER 스케줄링 정책은 본질적으로 비례 공유 스케줄링 정책임을 알 수 있습니다. 그 설계 방법은 프로세스 스케줄링의 공정성을 보장할 수 있습니다. 즉, 각 프로세스에서 우선순위가 낮은 프로세스도 CPU 실행을 얻게 됩니다. 또한, 다양한 프로세스에 대한 우선순위 차별화를 제공하여 우선순위 값이 높은 프로세스는 더 많은 실행 시간을 얻을 수 있습니다.
실시간 프로세스의 경우 실시간 우선순위 rt_priority를 기반으로 하는 우선순위 스케줄링 전략을 사용합니다. 그러나 서로 다른 스케줄링 전략에 따라 동일한 실시간 우선순위를 갖는 프로세스 간의 스케줄링 방법도 다릅니다. :
SCHED_FIFO: 정적 우선순위에 따라 서로 다른 프로세스가 대기열에 추가되고, 동일한 우선순위 대기열에서 먼저 실행할 준비가 된 프로세스가 먼저 예약되며, 실행 중인 프로세스는 다음 조건이 충족될 때까지 종료되지 않습니다. 발생: 1. 우선 순위가 더 높은 프로세스가 CPU를 점유하고 있습니다. 2. 리소스 요청으로 인해 CPU를 차단합니다. 3. CPU를 자발적으로 포기합니다(sched_yield 호출). 전략은 위의 SCHED_FIFO와 완전히 동일합니다. 단, 타임 슬라이스가 실행 중인 프로세스에 도달하면 실행을 포기합니다. sched_rr_get_interval을 호출하면 됩니다. ;
리눅스 시스템 자체는 데스크탑 중심의 시스템이기 때문에 이를 실시간 애플리케이션에 적용할 때 다음과 같은 문제가 있다.
Linux 시스템은 10ms이므로 정확한 타이밍을 제공할 수 없습니다.
프로세스가 커널 모드로 들어가기 위해 시스템 호출을 호출하면 선점될 수 없습니다.
Linux 커널 구현은 많은 수의 차단 인터럽트 작업으로 인해 인터럽트 손실이 발생합니다.
가상 메모리 기술을 사용하기 때문에 페이지 오류가 발생하면 하드 디스크에서 스왑 데이터를 읽어야 합니다. 디스크 읽기 및 쓰기는 저장 위치의 무작위성으로 인해 읽기 및 쓰기 시간이 무작위로 발생하며 일부 경우에는 실시간 작업 마감에 영향을 미칩니다.
Linux 프로세스 스케줄링도 실시간을 지원합니다. 우선순위, 실시간 작업을 위한 효과적인 스케줄링 메커니즘 및 알고리즘이 부족합니다. 네트워크 하위 시스템의 프로토콜 처리 및 다른 장치의 인터럽트 처리 중 어느 것도 해당 프로세스의 스케줄링과 관련이 없으며 자체적으로 명확한 스케줄링 메커니즘이 없습니다.
3. 다양한 실시간 Linux 시스템
3.1. RT-Linux 및 RTAI
RT-Linux는 New Mexico Institute of Technology [ RTLinuxWeb][Barabanov97]. 기본 아이디어는 Linux 시스템에서 하드 실시간 지원을 제공하기 위해 마이크로커널(우리는 이를 RT-Linux의 실시간 하위 시스템이라고도 함)을 사용하여 작은 실시간 운영 체제를 구현하고 일반 Linux 시스템은 운영 체제 내에서 우선 순위가 낮은 작업으로 실행됩니다. 또한 일반 Linux 시스템의 작업은 FIFO를 통해 실시간 작업과 통신할 수 있습니다. RT-Linux의 프레임워크는 그림 1에 나와 있습니다.
그림 1 RT-Linux 구조
RT-Linux의 핵심 기술은 소프트웨어를 통해 하드웨어 인터럽트 컨트롤러를 시뮬레이션하는 것입니다. Linux 시스템이 CPU 인터럽트를 차단하려고 하면 RT-Linux의 실시간 하위 시스템이 하드웨어 인터럽트를 실제로 차단하지 않고 요청을 가로채서 기록합니다. 이렇게 하면 인터럽트 차단으로 인한 시스템 오류를 방지할 수 있습니다. 일정 시간 동안 실시간 성능이 향상됩니다. 하드웨어 인터럽트가 도착하면 RT-Linux는 인터럽트를 가로채서 이를 처리할 실시간 하위 시스템에 인터럽트 루틴이 있는지 또는 처리를 위해 일반 Linux 커널로 전달되는지 여부를 결정합니다. 또한 일반 Linux 시스템의 최소 타이밍 정확도는 시스템의 실시간 클럭 주파수에 따라 결정됩니다. 일반적으로 Linux 시스템은 클럭을 초당 100개의 클럭 인터럽트로 설정하므로 Linux 시스템의 일반적인 타이밍 정확도는 10ms입니다. 클록 주기는 10ms이며, RT-Linux는 시스템의 실시간 클록을 싱글샷 상태로 설정하여 12마이크로초 수준 이상의 스케줄링 세분성을 제공할 수 있습니다.
RT-Linux 실시간 하위 시스템의 작업 스케줄링은 RM 및 EDF와 같은 우선순위 기반 알고리즘 또는 기타 스케줄링 알고리즘을 사용할 수 있습니다.
RT-Linux는 실제로 과부하 상태에서 작동하는 독점 시스템에 좋은 선택이지만 CPU 리소스 예약 및 실시간 시스템과 일반 Linux 시스템 간의 관계만 제공합니다. 이 경우 개발자는 프로토콜 스택 등 Linux 시스템에 구현된 기능을 최대한 활용할 수 없습니다. 따라서 RT-Linux는 산업 제어 및 하드 실시간 요구 사항과 같은 간단한 실시간 작업이 있는 환경에 적합합니다. 그러나 멀티미디어 처리에 적용하려면 많은 작업이 필요합니다.
이탈리아의 RTAI(Real-Time Application Interface)는 RT-Linux에서 파생되었으며, 그 디자인 철학은 RT-Linux와 완전히 동일합니다. 원래는 RT-Linux가 서로 다른 Linux 버전 간에 이식하기 어려운 문제를 해결하기 위해 설계되었습니다. 이를 위해 RTAI는 Linux 시스템에서 실시간 작업이 수행되는 방식을 정의합니다. 이 추상화 계층에서 제공하는 인터페이스입니다. 따라서 Linux 커널에 실시간 지원을 추가할 때 Linux 커널 소스 코드를 가능한 한 적게 수정할 수 있습니다.
3.2. Kurt-Linux
Kurt-Linux는 캔자스 대학에서 개발되었으며 마이크로초 수준의 실시간 정확도를 제공할 수 있습니다 [KurtWeb] [Srinivasan]. 실시간 커널만 구현하는 RT-Linux와 달리 Kurt-Linux는 일반 Linux 시스템을 기반으로 구현되며 일반적인 Linux 시스템 호출을 사용할 수 있는 최초의 Linux 기반 실시간 시스템이기도 합니다.
Kurt-Linux는 시스템을 정상 상태, 실시간 상태, 혼합 상태의 세 가지 상태로 나눕니다. 정상 상태에서는 실시간 상태에서만 일반적인 Linux 스케줄링 전략을 채택합니다. 실시간 작업을 실행합니다. 혼합 상태에서는 실시간 요구 사항이 엄격한 상황에서 실시간 작업과 비실시간 작업을 모두 실행할 수 있습니다.
리눅스 시스템의 실시간 특성을 향상시키기 위해서는 시스템이 지원하는 시계 정확도를 향상시켜야 한다. 그러나 단순히 클럭 주파수를 높이면 스케줄링 부하가 증가하여 시스템 성능이 심각하게 저하됩니다. 이러한 모순을 해결하기 위해 Kurt-Linux는 Linux 시스템에서 시계 정확도를 향상시키기 위해 UTIME에서 사용하는 방법[UTIMEWeb]을 채택합니다. 즉, 시계 칩을 단일 트리거 상태(One Shot 모드)로 설정합니다. 즉, 시계를 설정합니다. 타임아웃 기간마다 칩을 칩에 추가한 후 타임아웃 이벤트가 발생하면 클록 인터럽트 핸들러에서 필요에 따라 클록 칩의 타임아웃 기간을 다시 설정합니다. 기본적인 아이디어는 정확한 타이밍이란 우리가 필요로 하는 상대적으로 정확한 시간에 클록 인터럽트가 발생해야 한다는 것을 의미하지만 시스템 클록 주파수가 이 정밀도에 도달할 필요는 없다는 것입니다. CPU의 클럭 카운터 TSC(Time Stamp Counter)를 사용하여 CPU의 주 주파수까지 시간 정확도를 제공합니다.
실시간 작업 스케줄링을 위해 Kurt-Linux는 시간(TD) 기반의 정적 실시간 CPU 스케줄링 알고리즘을 사용합니다. 실시간 작업은 설계 단계에서 실시간 이벤트가 발생할 시기를 명시적으로 지정해야 합니다. 이 스케줄링 알고리즘은 주기적으로 실행되는 작업에 대해 더 나은 스케줄링 결과를 얻을 수 있습니다.
RT-Linux에 비해 Kurt-Linux의 장점 중 하나는 Linux 시스템 자체의 시스템 호출을 사용할 수 있다는 것입니다. 원래는 하드 실시간을 지원하도록 설계되었지만, 단순하기 때문입니다. 구현 Linux 스케줄러를 간단한 시간 중심 스케줄러로 교체하면 실시간 프로세스 스케줄링이 다른 비실시간 작업의 영향을 받기 쉬워 실시간 작업의 기한을 맞추지 못하는 경우가 있습니다. 엄격한 실시간 시스템(Firm Real-time)이라고도 합니다. Kurt-Linux를 기반으로 하는 현재 애플리케이션에는 ARTS(ATM Reference Traffic System), 멀티미디어 재생 소프트웨어 등이 포함됩니다. 또한 Kurt-Linux가 채택한 방식은 클럭 칩을 자주 프로그래밍해야 합니다.
3.3.RED-Linux
RED-Linux는 University of California, Irvine [REDWeb][Wang99]에서 개발한 실시간 Linux 시스템입니다. Linux에서는 스케줄링이 매우 잘 이루어지며 동일한 운영 체제 커널에서 구현됩니다. Time-Driven, Priority-Dirven, Share-Driven의 세 가지 유형의 스케줄링 알고리즘을 동시에 지원합니다.
시스템의 스케줄링 세분성을 향상시키기 위해 RED-Linux는 RT-Linux의 소프트웨어 시뮬레이션 인터럽트 관리자 메커니즘을 빌려 클록 인터럽트의 빈도를 늘립니다. 하드웨어 인터럽트가 도착하면 RED-Linux의 인터럽트 시뮬레이션 프로그램은 들어오는 인터럽트를 큐에 넣기만 하고 실제 인터럽트 핸들러를 실행하지는 않습니다.
또한 커널 상태에서 Linux 프로세스가 선점될 수 없는 문제를 해결하기 위해 RED-Linux는 Linux 커널의 여러 기능에 선점점 프리미티브를 삽입하여 프로세스도 선점할 수 있도록 했습니다. 커널 상태에서 어느 정도 선점되었습니다. 이러한 방식으로 커널의 실시간 특성이 향상됩니다.
RED-Linux의 설계 목표는 다양한 스케줄링 알고리즘을 지원할 수 있는 범용 스케줄링 프레임워크를 제공하는 것입니다. 시스템은 각 작업에 다음 속성을 추가하고 이를 프로세스 스케줄링의 기초로 사용합니다. >
우선순위: 작업의 우선순위;
Start-Time: 작업의 시작 시간
Finish-Time: 작업의 종료 시간; p>
예산: 작업 중 작업에 사용될 리소스 수
이러한 속성의 값과 스케줄러가 이러한 속성 값을 사용하는 우선 순위를 조정합니다. , 거의 모든 것이 스케줄링 알고리즘을 통해 달성될 수 있습니다. 이러한 방식으로 세 가지 다른 스케줄링 알고리즘을 원활하고 균일하게 결합할 수 있습니다.
- 관련 기사
- 원피스 루피.
"원피스 보신 분들 모두 들어오세요"
- 바네사 허진스와 잭에게는 무슨 일이 일어나고 있는 걸까요?
- 토요일에 복지 복권을 채우는 숫자
- 중국 석유가스주식유한공사 헤이룽장 흑하 판매지사는 어떠세요?
- 업주가 복권 오프라인 구매 분쟁 (업주 직원들이 표를 까먹고 막 당첨된 것) 을 배상해야 합니까?
- 월드 오브 워크래프트 검사의 소피는 어떻게 된거야?
- 복권 1 등상은 어떻게 채워요? _ 복권 1 등상은 어떻게 채워 드릴까요
- 칠판에 게시할 수 있는 철학적 이야기
- 복권에 4 와 9 당첨이 있습니까? _ 복권에 4 와 9 당첨이 있습니까? 얼마예요?
- 바비큐 야식 문안의 매력적인 문장.