Кіріспе

Linux 2.6 ядросының процестерді кестелеуі O(1) кестесі (кейде "O of 1 scheduler", "Big O of 1 scheduler" немесе "constant time scheduler" деп аталады) – бұл операциялық жүйеде қанша процесс іске қосылғандығына қарамастан, процестерді тұрақты уақыт ішінде кестелей алатын ядролық кестелеу дизайны. Бұл, алдыңғы O(n) кестелеушілерге қарағанда жақсарту, себебі O(n) кестелеушілер процестерді кіріс мөлшеріне пропорционал уақыт ішінде кестелейді. Шын уақыт операциялық жүйелерінде детерминистік орындалу өте маңызды, ал O(1) кестелеуші орындалу уақытының белгілі бір шегінен аспайтын кестелеу қызметтерін ұсынуға қабілетті. O(1) кестелеуші Linux 2.6.0-ден 2.6.22-ге дейінгі нұсқаларында (2003-2007 жылдар) қолданылды, содан кейін Толық әділетті кестелеушімен алмастырылды.

Шолу

Linux жоспарлаушысы 2003 жылы 2.6 ядросының шығарылуымен толыққанды жаңартылды. Жаңа жоспарлаушы O(1) деп аталды. O(1) жоспарлаушысы қолданатын алгоритм, тұрақты жоспарлау уақытын қамтамасыз ету үшін процестердің белсенді және мерзімі өткен тізімдеріне сүйенеді. Әрбір процеске белгілі бір уақыт кванты беріледі, одан кейін ол үзіліске ұшырап, мерзімі өткен тізімге көшіріледі. Белсенді тізімдегі барлық міндеттер уақыт квантын толық пайдаланғаннан және мерзімі өткен тізімге ауыстырылғаннан кейін тізім алмасу жүзеге асады. Тізімдерге тек нұсқау арқылы қол жеткізіледі, сондықтан оларды ауыстыру екі нұсқауды ауыстырудай жылдам. Бұл алмасу белсенді тізімді жаңа бос мерзімі өткен тізімге айналдырады, ал мерзімі өткен тізім белсенді тізімге айналады.

О(1) белгісі туралы

Алгоритм кіріс деректермен жұмыс істейді, ал кіріс деректің мөлшері оның орындалу уақытын анықтайды. Үлкен О нотациясы алгоритмнің орындалу уақытының өсу қарқынын, кіріс деректің мөлшеріне байланысты көрсету үшін қолданылады. Мысалы, O(n) алгоритмінің орындалу уақыты кіріс мөлшері n өскен сайын сызықтық түрде өседі. O(n²) алгоритмінің орындалу уақыты квадраттық түрде өседі. Егер алгоритмнің орындалу уақытына тұрақты жоғарғы шек қою мүмкін болса, онда ол O(1) деп есептеледі (оны "тұрақты уақытта" орындалады деуге болады). Яғни, O(1) алгоритмі кіріс деректің мөлшеріне қарамастан, белгілі бір уақыт ішінде аяқталуы кепілдік беріледі.

Linux жоспарлаушысының өнімділігін жақсарту

Linux 2.6.8.1 жоспарлаушысы O(1) уақыттан нашаррақ жұмыс істейтін алгоритмдерді қамтымады. Яғни, жоспарлаушының әр бөлігі, жүйеде неше тапсырма болса да, белгілі бір тұрақты уақыт ішінде орындалуы кепілдірілген. Бұл Linux ядросына тапсырмалардың саны артқан сайын қосымша шығындарды ұлғайтпай, көптеген тапсырмаларды тиімді түрде өңдеуге мүмкіндік береді. Linux 2.6.8.1 жоспарлаушысындағы екі маңызды дерек құрылымы оның O(1) уақытында жұмыс істеуіне мүмкіндік береді, ал оның дизайны олардың айналасында құрылған: орындалу кезектері және басымдық тізімдері.

Мәселелер

Бұл алгоритмнің басты мәселесі – тапсырманы интерактивті немесе интерактивті емес деп белгілеу үшін қолданылатын күрделі эвристикалық тәсілдер. Алгоритм интерактивті процестерді орташа ұйқы уақытын (процесс кіріс күтіп отырған уақыт мөлшері) талдау арқылы анықтауға тырысады. Ұзақ уақыт бойы ұйықтап жатқан процестер пайдаланушының кіріс беруін күтіп тұрғандықтан, жоспарлаушы олардың интерактивті екенін жорамалдайды. Жоспарлаушы интерактивті тапсырмаларға басымдық қосып (жоғары өнімділік үшін), ал интерактивті емес тапсырмаларды басымдықтарын төмендету арқылы шектеуге тырысады. Тапсырмалардың интерактивтілігін анықтауға қатысты барлық есептеулер күрделі және қате есептеулерге бейім, бұл интерактивті процесс жағынан интерактивті емес мінез-құлыққа әкелуі мүмкін.

Ауыстыру

2.6.23 (2007 жылдың қазанында) O(1) кестесінің орнына Толық әділ кестесі енгізілді. CFS авторы Инго Молнардың сөзінше, оның негізгі идеясын бір ғана сөйлеммен түсіндіруге болады: "CFS негізінен нақты аппараттық құрылғыда 'идеалды, дәл көп тапсырмалы процессорды' модельдейді".