Кіріспе
Дәстүрлі ядроға қарағанда аз қызметтер ұсынатын ядро. Компьютерлік ғылымда микроядро (көбінесе μ ядро деп қысқартылады) – операциялық жүйені (ОЖ) іске асыру үшін қажетті механизмдерді қамтамасыз ететін ең аз көлемдегі бағдарламалық жасақтама. Бұл механизмдерге төменгі деңгейдегі жад кеңістігін басқару, процестерді басқару және процестер аралық байланыс (IPC) жатады. Аппараттық құралда бірнеше сақина немесе процессор режимдері болса, микроядро ең жоғары привилегия деңгейінде орындалатын жалғыз бағдарламалық жасақтама болуы мүмкін, бұл әдетте қадағалаушы немесе ядролық режим деп аталады. Құрылғы драйверлері, протокол жиынтықтары және файлдық жүйелер сияқты операциялық жүйенің дәстүрлі функциялары әдетте микроядродан шығарылып, пайдаланушы кеңістігінде орындалады. Көрсету кодының көлемі бойынша микроядролар монолиттік ядролардан көбінесе кіші болады. Мысалы, MINIX 3 микроядросы шамамен 12 000 код жолынан тұрады.
In computer science, a microkernel (often abbreviated as μ kernel) is the near minimum amount of software that can provide the mechanisms needed to implement an operating system (OS). These mechanisms include low level address space management, thread management, and inter process communication (IPC). If the hardware provides multiple rings or CPU modes, the microkernel may be the only software executing at the most privileged level, which is generally referred to as supervisor or kernel mode. Traditional operating system functions, such as device drivers, protocol stacks and file systems, are typically removed from the microkernel itself and are instead run in user space. In terms of the source code size, microkernels are often smaller than monolithic kernels. The MINIX 3 microkernel, for example, has only approximately 12,000 lines of code.
Тарих
Микроядролар өз тамырларын даттық компьютер пионері Пер Бринч Хансенге және оның даттық компьютерлік компания Regnecentralen-дегі қызметіне дейін жатқызады, онда ол RC 4000 компьютері үшін бағдарламалық жасақтаманы әзірлеуді басқарды. 1967 жылы Regnecentralen RC 4000 прототипін Польшадағы Zakłady Azotowe Puławy тыңайтқыш зауытына орнатты. Компьютер зауыттың қажеттіліктеріне бейімделген кішкентай нақты уақыт операциялық жүйені қолданды. Бринч Хансен және оның командасы RC 4000 жүйесінің жалпыламалығы мен қайта пайдалану мүмкіндігінің жетіспеуіне алаңдады. Олар әр орнату үшін әртүрлі операциялық жүйе қажет болады деп қорқып, RC 4000 үшін бағдарламалық жасақтама құрудың жаңа және жалпылама тәсілдерін зерттеуді бастады. 1969 жылы олардың күш-жігері RC 4000 көп бағдарламалық жүйесін аяқтаумен аяқталды. Оның ядросы 23-ке дейін артықшылықтары жоқ процестер арасындағы байланысты хабар алмасу арқылы қамтамасыз етті, олардың 8-і бір уақытта бір-бірінен қорғалды. Бұл сонымен қатар бағдарламалардың қатар орындалу уақыт тілімдерін жоспарлауды, басқа жұмыс істеп тұрған бағдарламалардың сұрауы бойынша бағдарлама орындалуын бастау және басқаруды, сондай-ақ перифериялық құрылғыларға немесе олардан деректерді беруді жүзеге асырды. Осы қарапайым механизмдерден басқа, бағдарлама орындау және ресурстарды бөлу стратегиясы болған жоқ. Бұл стратегияны бағдарламаларды орындау иерархиясы арқылы жүзеге асыру жоспарланған, онда басты процестер бала процестерді толық бақылауда ұстап, олардың операциялық жүйелері ретінде әрекет ететін еді. Бринч Хансеннің жұмысынан кейін 1970 жылдардан бері микроядролар жасалып келеді. Микроядро термині алғаш рет 1981 жылдан кешірек пайда болған жоқ. Микроядролар компьютер әлеміндегі өзгерістерге жауап ретінде және осы жаңа жүйелерге қолданыстағы «моноядроларды» бейімдеудегі бірнеше қиындықтарға жауап ретінде ойластырылды. Жаңа құрылғы драйверлері, протоколдар жиынтығы, файлдық жүйелер және басқа да төменгі деңгейдегі жүйелер үнемі жасалып жатты. Бұл код әдетте монолиттік ядрода орналасқандықтан, онымен жұмыс істеу үшін көп еңбек пен мұқият кодты басқару қажет болды. Микроядролар осы қызметтердің барлығын кез келген басқа бағдарлама сияқты пайдаланушы кеңістігіндегі бағдарламалар ретінде жүзеге асыру идеясымен жасалды, бұл олармен монолиттік түрде жұмыс істеуге және кез келген басқа бағдарлама сияқты іске қосуға және тоқтатуға мүмкіндік берді. Бұл осы қызметтермен оңай жұмыс істеуге ғана емес, сонымен қатар ядролық кодты бөліп, қарама-қарсы салдарлар туралы уайымдамай оны жақсырақ реттеуге мүмкіндік берді. Сонымен қатар, бұл операциялық жүйелерді жалпы ядроға «құруға» мүмкіндік береді, бұл операциялық жүйелерді зерттеуге көмектеседі. Микроядролар 1980-ші жылдары, алғашқы жергілікті желілер енгізілген кезде өте танымал тақырып болды. AmigaOS Exec ядросы 1986 жылы ұсынылған және салыстырмалы коммерциялық сәттілікке ие болған ПК-де қолданылған алғашқы мысал болды. Басқа жағынан кемшілік деп есептелген жадты қорғаудың болмауы, бұл ядроға өте жоғары хабар алмасу өнімділігіне ие болуға мүмкіндік берді, өйткені пайдаланушы кеңістігіндегі бағдарламалар арасында хабар алмасу кезінде деректерді көшірудің қажеті болмады. Ядроны пайдаланушы кеңістігіне таратуға мүмкіндік берген механизмдер жүйеге желілік байланыстар арқылы таралуға мүмкіндік берді. Алғашқы микроядролар, әсіресе Ричард Рашид жасаған Mach, көңілі толмаған өнімділік көрсетті, бірақ оның ішкі артықшылықтары соншалықты зор болды, бұл 1990-шы жылдардың соңына дейін зерттеудің маңызды бағыты болды. Алайда, осы уақыт ішінде компьютерлердің жылдамдығы желілік жүйелерге қатысты күрт өсті, ал өнімділіктегі кемшіліктер даму тұрғысынан артықшылықтарды басып тастады. Қолданыстағы жүйелерді жақсырақ өнімділікке бейімдеуге көптеген әрекеттер жасалды, бірақ үстіңгі жұмыс әрқашан едәуір болды және осы әрекеттердің көпшілігі пайдаланушы кеңістігіндегі бағдарламаларды ядроға қайтаруды талап етті. 2000 жылға қарай Mach ядросының көптеген ірі масштабты күш-жігері аяқталды, бірақ Apple-дің 2001 жылы шыққан macOS әлі де XNU деп аталатын гибридті ядроны қолданады, ол OSF/1-дің Mach ядросын (OSFMK 7.3 ядросы) қатты өзгерткен (гибридті) кодымен BSD UNIX кодымен біріктіреді, және бұл ядро iOS, tvOS және watchOS-та да қолданылады. Windows NT, NT 3.1 бастап Windows 11-ге дейін гибридті ядролық дизайнды қолданады. 2012 жылдан бастап Mach негізіндегі GNU Hurd да жұмыс істейді және Arch Linux және Debian сынақ нұсқаларына қосылған. Микроядролар бойынша маңызды жұмыстар көбінесе аяқталған болса да, тәжірибешілер оларды дамытуды жалғастырды. Кейіннен бұрынғы дизайнның өнімділік проблемаларының көпшілігі түсінікке қатысты фундаменталды шектеу емес, керісінше, дизайнерлердің көптеген қызметтерді жүзеге асыру үшін бір мақсатты жүйелерді пайдалануға деген ұмтылысынан туындады екені көрсетілді. Проблемаға көбірек прагматикалық көзқарас қолданып, құрастыру кодын пайдалану және әдетте бағдарламалық жасақтамада қолдау көрсетілетін ұғымдарды күшейту үшін процессорға сүйену арқылы жақсартылған өнімділікке ие микроядролардың жаңа сериясы құрылды. Микроядролар экзоядролармен тығыз байланысты. Олар гипервизорлармен де көп ортақ нәрселері бар, бірақ соңғылары минималдыққа таласпайды және виртуалды машиналарды қолдауға маманданған; L4 микроядросы көбінесе гипервизор ретінде қолданылады.
Кіріспе
Операциялық жүйелердің алғашқы ядролары салыстырмалы түрде кішкентай болды, себебі компьютер жады шектеулі болды. Компьютерлердің мүмкіндіктері арта келе, ядро басқаруға тиіс құрылғылардың саны да көбейді. Unix тарихының басында ядролар әдетте кішкентай болды, тіпті олардың құрамында түрлі құрылғы драйверлері мен файлдық жүйелер болғанмен де. Адрестік кеңістік 16 биттен 32 битке дейін ұлғайғанда, ядро дизайны енді аппараттық архитектурамен шектелмеді және ядролар үлкейе бастады. Unix-тің Беркли дистрибуциясы (BSD) үлкен ядролар дәуірін басталды. CPU, дискілер және принтерлерден тұратын негізгі жүйені іске қосумен қатар, BSD толық TCP/IP желілік жүйесін және бірқатар «виртуалды» құрылғыларды қосты, бұл қолданыстағы бағдарламаларға желіде «көрінбейтін» жұмыс істеуге мүмкіндік берді. Бұл өсім көп жылдар бойы жалғасып, нәтижесінде миллиондаған код жолдарынан тұратын ядролар пайда болды. Осы өсімге байланысты ядроларда қателер жиі кездесе бастады және оларды күтіп ұстау қиын болды. Микроядроның мақсаты – ядролардың өсуіне және осыған байланысты туындайтын қиындықтарды шешу болды. Теория бойынша, микроядро дизайны кодты пайдаланушы кеңістігіндегі қызметтерге бөлу арқасында басқаруды жеңілдетеді. Бұл сондай-ақ ядролық режимде жұмыс істейтін код мөлшерінің азаюынан туындайтын қауіпсіздік пен тұрақтылықты арттыруға мүмкіндік береді. Мысалы, егер желілік қызмет буферлік ағыннан зардап шексе, тек желілік қызметтің жады зақымдалады, ал жүйенің қалған бөлігі жұмыс істей береді.
Процестер арасындағы байланыс
Процестер аралық байланыс (IPC) – жеке процестерге бір-бірімен қарым-қатынас жасауға мүмкіндік беретін кез келген механизм, әдетте хабарламалар жіберу арқылы. Ортақ жад, қатаң түрде анықталғанда, процестер аралық байланыс механизмі болып табылады, бірақ IPC аббревиатурасы көбінесе тек хабарлама алмасуға қатысты, және осы соңғысы микроядролар үшін ерекше маңызды. IPC операциялық жүйені серверлер деп аталатын кішірек бағдарламалардан құруға мүмкіндік береді, олар жүйедегі басқа бағдарламалармен IPC арқылы шақырылады. Перифериялық аппараттық құралдардың көп бөлігі осылай басқарылады, құрылғы драйверлері, желілік протоколдар жиынтығы, файлдық жүйелер, графика және т.б. үшін серверлер қолданылады. IPC синхронды немесе асинхронды болуы мүмкін. Асинхронды IPC желілік байланысқа ұқсас: жіберуші хабарлама жібереді және орындауды жалғастырады. Алушы хабарламаның қолжетімділігін тексереді (сауалдайды) немесе белгілі бір хабарлама механизмі арқылы ескертіледі. Асинхронды IPC ядроның хабарламалар үшін буферлер мен кезектерді сақтауын және буфердің толып кетуін қамтамасыз етуін қажет етеді; сонымен қатар хабарламаларды екі рет көшіруді қажет етеді (жіберушіден ядроға және ядродан алушыға). Синхронды IPC-де бірінші тарап (жіберуші немесе алушы) екінші тарап IPC-ні орындауға дайын болғанға дейін тоқтатылады. Бұл буферлеуді немесе бірнеше көшірмелерді қажет етпейді, бірақ жасырын кездесу бағдарламалауды қиындатады. Көптеген бағдарламашылар асинхронды жіберуді және синхронды қабылдауды артық көреді. Бірінші буын микроядролары әдетте синхронды және асинхронды IPC-ні қолдады және IPC-нің нашар өнімділігінен зардап шекті. Йохан Лидтке IPC механизмдерін жобалау мен іске асыру осы нашар өнімділіктің түпкі себебі деп санайды. Ол өзінің L4 микроядросында IPC шығындарын шамамен бір рет азайтатын әдістерді енгізді. Бұған жіберу және қабылдау операцияларын қолдайтын IPC жүйелік шақыру кіреді, барлық IPC-ні синхронды етеді және мүмкіндігінше көп деректерді тіркелімдерде жібереді. Сонымен қатар, Лидтке тікелей процесс ауысуы тұжырымын енгізді, онда IPC орындалу кезінде (толық емес) контексттік ауысу жіберушіден тікелей алушыға жүзеге асырылады. Егер L4-те хабардың бір бөлігі немесе барлығы тіркелімдерде берілсе, бұл хабардың тіркелімдік бөлігін көшірмелеусіз өткізеді. Сонымен қатар, жоспарлаушыны шақырудың қосымша шығындары болдырмайды; бұл RPC (қашықтан процедуралық шақыру) түрінде серверді шақыратын клиент үшін өте пайдалы. Тағы бір оңтайландыру, жалқау жоспарлау деп аталады, IPC кезінде жоспарлау кезектерін қараудан аулақтайды, IPC кезінде тоқтатылатын жіптерді дайын кезекте қалдырады. Жоспарлаушы шақырылғаннан кейін, ол осындай жіптерді тиісті күту кезекке жылжытады. Көп жағдайда жіп келесі жоспарлаушы шақырудан бұрын тоқтатылмайды, сондықтан бұл тәсіл маңызды жұмысты үнемдейді. Осыған ұқсас тәсілдер QNX және MINIX 3 қолданды. Бірқатар эксперименттер барысында Чен мен Бершад монолиттік Ultrix-тің нұсқаулық бойынша жад циклдерін (MCPI) пайдаланушы кеңістігінде жұмыс істейтін 4.3BSD Unix серверімен біріктірілген микроядро Mach-пен салыстырды. Олардың нәтижелері Mach-тың нашар өнімділігін жоғары MCPI арқылы түсіндірді және IPC ғана жүйелік шығындардың көп бөлігіне жауапты емес екенін көрсетті, бұл тек IPC-ге бағытталған оңтайландырулар шектеулі әсер етеді. Лидтке кейіннен Чен мен Бершадтың нәтижелерін Ultrix пен Mach MCPI арасындағы айырмашылықтың басым бөлігі сыйымдылық кэшінің жоғалуынан туындағанын байқап, микроядроның кэш жұмыс жиынтығын күрт азайту мәселені шешеді деген қорытындыға келді. Клиент-сервер жүйесінде, тіпті асинхронды примитивтерді қолданған кезде де, қарым-қатынастың көпшілігі негізінен синхронды, өйткені әдеттегі операция - клиент серверді шақырып, содан кейін жауап күту. Ол өзін тиімді іске асыруға мүмкіндік беретіндіктен, көптеген микроядролар L4 нұсқасын ұстанды және тек синхронды IPC примитивін ұсынды. Асинхронды IPC көмекші жіптерді пайдалану арқылы үстіңгі жағында іске асырылуы мүмкін. Алайда тәжірибеде синхронды IPC-нің пайдалылығы күмәнді екені көрініп тұр: синхронды IPC көп жіпті дизайнды басқаша қарапайым жүйелерге мәжбүрлейді, нәтижесінде синхрондастырудың күрделіліктері туындайды. Сонымен қатар, RPC сияқты серверді шақыру клиентті және серверді реттеп отырады, егер олар бөлек өзектерде жұмыс істесе, олардан аулақ болу керек. Сондықтан коммерциялық өнімдерде қолданылатын L4 нұсқаларына асинхронды байланысты жақсырақ қолдау үшін асинхронды хабарлама механизмін қосу қажет болды. Бұл сигнал сияқты механизм деректерді тасымалдамайды және сондықтан ядродан буферлеуді қажет етпейді. Екі түрлі IPC-ге ие болу арқылы олар, дегенмен, минимализм принципін бұзды. L4-тің басқа нұсқалары толығымен асинхронды IPC-ге көшті. Синхронды IPC бірінші тарапты екінші тарап дайын болғанға дейін тоқтататындықтан, шексіз пайдалану оңай шатасуға әкелуі мүмкін. Сонымен қатар, клиент серверге сұрау жіберіп, жауапты алуға тырыспау арқылы қызметтен бас тарту шабуылын оңай ұйымдастыра алады. Сондықтан синхронды IPC шексіз тоқтатуды болдырмау құралын ұсынуы керек. Көптеген микроядролар IPC шақыруларына уақыт шектеуін қояды, бұл тоқтату уақытын шектейді. Іс жүзінде, мағыналы уақыт шектеуін таңдау қиын, және жүйелер клиенттер үшін шексіз уақыт шектеуін және серверлер үшін нөлдік уақыт шектеуін қолдануы әдеттегідей. Нәтижесінде, тренд кез келген уақыт шектеуін ұсынбауға, егер серік дайын болмаса IPC сәтсіз аяқталуын көрсететін флагты ұсынуға қарайды. Бұл тәсіл тиімді түрде нөл және шексіз уақыт шектеулерінің екеуінің арасында таңдау жасауға мүмкіндік береді. L4 және MINIX-тің соңғы нұсқалары осы жолға түсті (L4-тің ескі нұсқалары уақыт шектеуін қолданды). QNX мәселені шешеді, клиент хабарлама жіберу шақыруының бөлігі ретінде жауап буферін көрсетуді талап етеді. Сервер жауап берген кезде ядро деректерді клиенттің буферіне көшіреді, клиент жауапты нақты қабылдауды күтудің қажеті болмайды.
Серверлер
Микроядро серверлері, негізінен, басқа бағдарламалар сияқты демон бағдарламалары, бірақ ядро олардың кейбіреулеріне физикалық жадтың көптеген бағдарламаларға қол жеткізе алмайтын бөліктерімен өзара әрекеттесуге рұхсат береді. Бұл кейбір серверлерге, әсіресе құрылғы драйверлеріне, тікелей аппараттық құралдармен жұмыс істеуге мүмкіндік береді. Жалпы мақсаттағы микроядро үшін негізгі серверлер жиынтығына файлдық жүйе серверлері, құрылғы драйверлері серверлері, желілік серверлер, дисплей серверлері және пайдаланушы интерфейсі құрылғылары серверлері кіреді. Бұл серверлер жиынтығы (QNX-тен алынған) Unix монолитті ядросы ұсынатын қызметтерге ұқсас қызметтер жиынтығын қамтамасыз етеді. Қажетті серверлер жүйе іске қосылғанда іске қосылады және файлдарға, желіге және құрылғыларға қол жеткізу сияқты қызметтерді әдеттегі қолданба бағдарламаларына ұсынады. Мұндай серверлер пайдаланушы қолданбасының ортасында жұмыс істегендіктен, серверді әзірлеу ядроны әзірлеуге қажетті құрастыру және жүктеу процесіне қарағанда, әдеттегі қолданбаларды әзірлеуге ұқсас. Сонымен қатар, көптеген «ақаулар» серверді тоқтату және қайта іске қосу арқылы түзетілуі мүмкін. Дегенмен, ақаулы сервермен бірге жүйе күйінің бір бөлігі жоғалады, сондықтан бұл тәсіл бағдарламалардың ақаулықтарды өңдеуін қажет етеді. Жақсы мысал – TCP/IP қосылымдарына жауапты сервер: егер бұл сервер қайта іске қосылса, қолданбалар «жоғалған» қосылымды көреді, бұл желілік жүйедегі қалыпты жағдай. Басқа қызметтер үшін ақаулықтар сирек кездеседі және қолданба кодын өзгертуді қажет етуі мүмкін. QNX үшін қайта іске қосу мүмкіндігі QNX жоғары сенімділік құралдары жиынтығы ретінде ұсынылады.
Құрылғы драйверлері
Құрылғы драйверлері жиі тікелей жадқа кіруді (DMA) орындайды, сондықтан физикалық жадтың кез келген орнына, оның ішінде әртүрлі ядролық дерек құрылымдарына жазуға мүмкіндігі бар. Сондықтан мұндай драйверлерге сенім арту қажет. Олардың ядроның бір бөлігі болуы керек деген жалпы қате түсінік бар. Шындығында, драйвердің ядроның бір бөлігі болуы оның сенімділігін арттырмайды немесе кемітпейді. Құрылғы драйверін пайдаланушы кеңістігінде іске қосу, дұрыс жұмыс ілемейтін драйвердің келтіретін зиянды міндетті түрде азайта бермейді, бірақ практикада бұзушылыққа ұшыраған (жаман ниетті емес) драйверлердің болған жағдайында жүйе тұрақтылығын арттыруға көмектеседі: драйвер кодының (құрылғы емес) жадқа қол жеткізу бұзушылықтары жадты басқару аппараттық құралдарымен анықталуы мүмкін. Сонымен қатар, көптеген құрылғылар DMA мүмкіндігіне ие емес, олардың драйверлерін пайдаланушы кеңістігінде іске қосу арқылы сенімсіз етуге болады. Соңғы кезде көптеген компьютерлерде IOMMU пайда болып келеді, олардың көпшілігі құрылғының физикалық жадқа қол жеткізуін шектеу үшін қолданылады. Бұл пайдаланушы режиміндегі драйверлердің де сенімсіз болуына мүмкіндік береді. Пайдаланушы режиміндегі драйверлер микроядролардан ертерек пайда болған. 1967 жылы Мичигандық терминалдық жүйе (MTS) пайдаланушы кеңістігіндегі драйверлерді (оның ішінде файлдық жүйе қолдауын) қолдаған, бұл мүмкіндікпен жасалған алғашқы операциялық жүйе. Тарихи тұрғыдан алғанда, драйверлер үлкен мәселе тудырмады, себебі құрылғылардың саны аз болды және оларға сенім артылатын, сондықтан оларды ядроға енгізу дизайнды жеңілдетті және ықтимал өнімділік проблемаларын болдырмады. Осыдан Unix, Linux және Windows NT жүйелеріндегі дәстүрлі ядролық драйвер стилі пайда болды. Әртүрлі перифериялық құрылғылардың көбеюімен драйверлік кодтың көлемі артты және қазіргі операциялық жүйелерде код көлемі бойынша ядродан басып өтеді.
Қауіпсіздік
Микроядролардың қауіпсіздік артықшылықтары жиі талқыланады. Қауіпсіздік тұрғысынан, микроядролардың минималдылық принципі, кейбіреулердің пікірінше, барлық кодқа қажетті функционалдылықты қамтамасыз ету үшін қажетті құқықтар ғана берілуі керек деген ең аз құқықтар қағидасының тікелей салдары болып табылады. Минималдылық жүйенің сенімді есептеу базасын (TCB) ең аз деңгейде ұстап тұруды талап етеді. Ядро (аспаптық жабдықтың артықшылықты режимінде орындалатын код), тексерілмеген деректерге қол жеткізе алады және осылайша олардың тұтастығын немесе құпиялылығын бұза алады, сондықтан ядро әрқашан TCB-ның бөлігі болып табылады. Қауіпсіздікке бағытталған жобалауда оны азайту табиғи. Осының салдарынан, микроядролық жобалар жоғары қауіпсіздікті талап ететін жүйелер үшін, соның ішінде KeyKOS, EROS және әскери жүйелер үшін қолданылды. Шындығында, ең жоғары сенімділік деңгейіндегі (Бағалаудың сенімділік деңгейі (EAL) 7) ортақ критерийлерде бағалау нысанының "қарапайым" болуы керек деген талап бар, бұл күрделі жүйеге нақты сенімділік орнатудың практикалық мүмкін еместігін мойындау. Бірақ "қарапайым" термині шатастырады және дұрыс анықталмаған. Кем дегенде, Қорғаныс министрлігінің Сенімді Компьютерлік Жүйелерді Бағалау Критерийлері B3/A1 сыныптарында біршама дәл тіл қолданды: text="ТКБ нақты анықталған семантикасы бар толық, түсініксіз қарапайым қорғау механизмдерін [іске асыруы] тиіс. Маңызды жүйелік инженерия ТКБ-ның күрделілігін азайтуға, сондай-ақ қорғау үшін маңызды емес модульдерді TКB-дан шығаруға бағытталған."|sign=|source=Қорғаныс министрлігінің Сенімді Компьютерлік Жүйелерді Бағалау Критерийлері
text="The TCB shall [implement] complete, conceptually simple protection mechanisms with precisely defined semantics. Significant system engineering shall be directed toward minimizing the complexity of the TCB, as well as excluding from the TCB those modules that are not protection critical. "|sign=|source=Department of Defense Trusted Computer System Evaluation Criteria
In 2018, a paper presented at the Asia Pacific Systems Conference claimed that microkernels were demonstrably safer than monolithic kernels by investigating all published critical CVEs for the Linux kernel at the time. The study concluded that 40% of the issues could not occur at all in a formally verified microkernel, and only 4% of the issues would remain entirely unmitigated in such a system.
2018 жылы Азия-Тынық мұхиты жүйелері конференциясында ұсынылған мақалада, сол кездегі Linux ядросы үшін жарияланған барлық маңызды CVE-лерді зерттеу арқылы микроядролар монолиттік ядролардан айқын түрде қауіпсіз екендігі көрсетілді. Зерттеу нәтижесінде, мәселелердің 40%-ы ресми тексерілген микроядрода мүлдем туындамайды, ал мәселелердің 4%-ы ғана осындай жүйеде толыққанды шешілмейді.
text="The TCB shall [implement] complete, conceptually simple protection mechanisms with precisely defined semantics. Significant system engineering shall be directed toward minimizing the complexity of the TCB, as well as excluding from the TCB those modules that are not protection critical. "|sign=|source=Department of Defense Trusted Computer System Evaluation Criteria
In 2018, a paper presented at the Asia Pacific Systems Conference claimed that microkernels were demonstrably safer than monolithic kernels by investigating all published critical CVEs for the Linux kernel at the time. The study concluded that 40% of the issues could not occur at all in a formally verified microkernel, and only 4% of the issues would remain entirely unmitigated in such a system.