Кіріспе
Unix секілді операциялық жүйе Minix 3 - шағын, Unix секілді операциялық жүйе. Ол BSD 3 Clause лицензиясы бойынша шығарылған және Minix 1 және 2 деген бұрынғы нұсқалардың мұрагері болып табылады. 2017 жылдан бастап Minix 3 IA 32 және ARM архитектуралы процессорларды қолдайды. Ол сондай-ақ Bochs, VMware Workstation, Microsoft Virtual PC, Oracle VirtualBox және QEMU сияқты эмуляторларда немесе виртуалды машиналарда жұмыс істей алады. PowerPC архитектурасына порт жасалуда. Дистрибуция CD-де шығарылады және USB-де орнатуды қолдамайды. Жоба 2018 жылдан бері жұмыс істемей келеді, ал соңғы нұсқасы 3.4.0 rc6 2017 жылдан бастап, Minix 3 талқылау тобы әлі де белсенді. Minix 3 Intel-тің Platform Controller Hub-та табылған Intel Management Engine (ME) OS-ке ықпал еткен деп есептеледі, бұл ME 11 енгізуден басталады, ол Skylake және Kaby Lake процессорларымен қолданылады. Minix x86/AMD64 процессорларында ең көп қолданылатын OS болуы мүмкін екендігі талқыланды, өйткені Intel ME-де қолданылғандықтан, Microsoft Windows, Linux немесе macOS-тен көп орнатулар болды.
Minix 3 is a small, Unix like operating system. It is published under a BSD 3 Clause license and is a successor project to the earlier versions, Minix 1 and 2.
as of 2017, Minix 3 supports IA 32 and ARM architecture processors. It can also run on emulators or virtual machines, such as Bochs, VMware Workstation, Microsoft Virtual PC, Oracle VirtualBox, and QEMU. A port to PowerPC architecture is in development. The distribution comes on a live CD and does not support live USB installation. The project has been dormant since 2018, and the latest release is 3.4.0 rc6 from 2017, although the Minix 3 discussion group is still active. Minix 3 is believed to have inspired the Intel Management Engine (ME) OS found in Intel's Platform Controller Hub, starting with the introduction of ME 11, which is used with Skylake and Kaby Lake processors. It was debated that Minix could have been the most widely used OS on x86/AMD64 processors, with more installations than Microsoft Windows, Linux, or macOS, because of its use in the Intel ME.
Жобаның мақсаттары
Монолиттік ядроға негізделген жүйелердің табиғатын еске түсіріп, мұнда драйвер (Minix жасаушысы Таненбаумның айтуынша, әдеттегі бағдарламаларға қарағанда шамамен 3 × 7 есе көп қателер бар) бүкіл жүйені құлата алады, Minix 3 "негізгі, өзін-өзі қалпына келтіретін, көп серверлі Unix клоны" операциялық жүйені құруға бағытталған. Мұны жүзеге асыру үшін ядрода орындалатын код минималды болуы керек, файл сервері, процесс сервері және әрбір құрылғы драйвері жеке пайдаланушы режиміндегі процестер ретінде орындалуы керек. Әрбір жүргізуші жүйедегі реинкарнация сервері деп аталатын бөлім арқылы мұқият бақыланады. Егер драйвер осы серверден жіберілген сигналдарға жауап бермесе, ол сөндіріледі және драйвердің жаңа көшірмесімен ауыстырылады. Монолитті жүйеде драйвердегі қате бүкіл ядроны оңай қиратады. Бұл Minix 3 - те әлдеқайда аз болуы мүмкін.
Сенімділік саясаты
Minix 3 негізгі мақсаттарының бірі - сенімділік. Төменде оның сенімділігін арттыратын кейбір маңызды қағидалар қарастырылады.
Жүрек өлшемін азайту
Linux және FreeBSD сияқты монолитті операциялық жүйелерде және Windows сияқты гибридтерде ядролық кодтың миллиондаған жолдары бар. Ал Minix 3 -те 6000 жолдай орындалатын ядролық код бар, бұл кодта проблемаларды табуды жеңілдетеді.
Құрттарды қамауға алу
Монолиттік ядроларда құрылғы драйверлері ядрода орналасады. Осылайша, жаңа перифериялық құрылғы орнатылған кезде, ядроға белгісіз, сенім артпайтын код енгізіледі. Драйвердегі бір қате код жүйесіне зақым келтіреді. Minix 3 -те әрбір құрылғы драйвері жеке пайдаланушы режіміндегі процесс болып табылады. Драйверлер артықшылықты нұсқауларды орындай алмайды, беттер кестелерін өзгерте алмайды, кездейсоқ енгізу / шығаруды (I / O) орындай алмайды немесе абсолютті жадыға жаза алмайды. Олар осы қызметтер үшін ядроға шақырулар жасауы керек және ядро әрбір шақыруды билік үшін тексереді.
Драйверлердің жадқа қатынауын шектеу
Монолиттік ядроларда драйвер кез келген сөзді жадыға жаза алады және осылайша пайдаланушы бағдарламаларын кездейсоқ бұза алады. Minix 3-те, пайдаланушы файл жүйесінен деректерді күткен кезде, ол кімге және қандай мекенжайда қол жетімді екенін көрсететін дескриптор жасайды. Содан кейін ол файл жүйесіне осы дескриптордың индексін береді, ол оны драйверге бере алады. Файл жүйесі немесе драйвер одан кейін ядродан дескриптор арқылы жазуды сұрайды, бұл олардың буферден тыс мекен-жайларға жазуын мүмкін емес етеді.
Жаман нұсқауларды орындау
Драйвердің ішіндегі дұрыс емес сілтемені бұрмалау драйвер процесін құлатады, бірақ жүйеге әсер етпейді. Реинкарнация сервері автоматты түрде күйіп кеткен драйверді қайта іске қосады. Пайдаланушылар кейбір драйверлер (мысалы, дискі мен желі) үшін қалпына келтіруді байқамайды, бірақ басқалары (мысалы, аудио және принтер) мүмкін. Монолитті ядроларда драйвердегі дұрыс емес сілтемені жою жүйелік апатқа әкеледі.
шексіз циклдерді игеру
Егер жүргізуші шексіз айналымға түсіп кетсе, жоспарлаушы оның артықшылығын біртіндеп төмендетеді, ол бос уақытқа дейін. Ақырында реинкарнация сервері күй сұраныстарына жауап бермей жатқанын көреді, сондықтан ол циклдік драйверді өшіріп, қайта іске қосады. Монолитті ядрода циклдік драйвер жүйеге ілігуі мүмкін.
Буфердің ашылуынан болатын зақымдануды шектеуге
Minix 3 ішкі байланыс үшін тұрақты ұзындықтағы хабарламаларды қолданады, бұл буфердің белгілі бір ағып кетуін және буферді басқару мәселелерін жояды. Сонымен қатар, көптеген эксплойттар буферді басып өту арқылы жұмыс істейді, бұл бағдарламаны функция шақырудан қайта оралуға, шабуылшы басқаратын жадқа, әдетте, басып өту буферіне сілтеме жасайтын, үстінен жазылған стек қайтару мекенжайын пайдалану үшін. Minix 3-те бұл шабуыл жеңілдетіледі, өйткені нұсқаулар мен деректер кеңістігі бөлінеді және тек (оқу үшін ғана) нұсқаулар кеңістігіндегі кодты ғана орындауға болады, оны орындалатын кеңістікті қорғау деп атайды. Алайда, заңды түрде орындалатын жадының зиянды түрде орындалуына негізделген шабуылдар (libc-ге қайта оралу, қайтаруға бағытталған бағдарламалау) осы жеңілдету арқылы тоқтатылмайды.
Желіде ядро функцияларына қатынауды шектеу
Құрылғы драйверлері ядролық қызметтерді (мысалы, деректерді пайдаланушылардың адрестік кеңістіктеріне көшіру) ядролық шақырулар арқылы алады. Minix 3 ядросында әрбір драйвер үшін біттік карта бар, онда оның қандай шақыруларды жасауға құқығы бар екендігі көрсетілген. Монолиттік ядроларда әрбір драйвер әрбір ядролық функцияны шақыра алады, ол рұқсат етілген немесе рұқсат етілмеген.
I/O порттарына кіруді шектеу
Ядрода сондай-ақ әрбір драйвердің қай I/O порттарына кіре алатыны туралы кесте сақталады. Осылайша, драйвер тек өзінің I/O порттарына ғана жанаса алады. Монолитті ядроларда, баги драйвері басқа құрылғыға тиесілі I/O порттарына кіре алады.
ОЖ компоненттерімен байланысты шектеу
Әрбір драйвер мен сервердің басқа драйверлер мен серверлермен байланысуы қажет емес. Осыған сәйкес, әр процестің қандай мақсаттарға жіберілетінін процесске арналған бит картасы анықтайды.
Қайтыс болған немесе ауырып қалған жүргізушілерді қайта тірілту
Реинкарнация сервері деп аталатын арнайы процесс әрбір құрылғы драйверін мезгіл-мезгіл белгілейді. Егер жүргізуші қайтыс болса немесе пингке дұрыс жауап бермесе, реинкарнация сервері автоматты түрде оны жаңа көшірмемен алмастырады. Жұмыс істемейтін драйверлерді анықтау және ауыстыру автоматты түрде, пайдаланушының әрекеті қажет емес. Бұл мүмкіндік қазіргі уақытта диск драйверлері үшін жұмыс істемейді, бірақ келесі релизде жүйе тіпті диск драйверлерін де қалпына келтіре алады, олар кездейсоқ қатынау жадында (RAM) көлеңкеленеді. Драйверді қалпына келтіру жұмыс істеп тұрған процестерге әсер етпейді.
Тоқтатулар мен хабарламаларды интеграциялау
Тоқтату кезінде ол төмен деңгейде тиісті жүргізушіге жіберілетін хабарламаға айналады. Егер жүргізуші хабар күтіп тұрса, ол бірден үзілісті алады; әйтпесе ол хабарды алу үшін келесі рет РЕЦЕВІЛІК жасағанда хабарлама алады. Бұл схема ұялы үзілістерді болдырмайды және драйверді бағдарламалауды жеңілдетеді.
Сәулет
Көріп отырғанымыздай, төменгі деңгейде микроядро орналасқан, ол шамамен 4000 код сызықтарынан тұрады (негізінен C, сонымен қатар аз мөлшерде ассемблері бар). Ол үзілістерді, жоспарлауды және хабарды өткізуді басқарады. Ол сондай-ақ, рұқсат етілген серверлер мен драйверлер жасай алатын 30-ға жуық ядролық шақырулардың қолданбалы бағдарламалау интерфейсін (API) қолдайды. Пайдаланушы бағдарламалары бұл қоңырауларды жасай алмайды. Оның орнына олар POSIX жүйелік шақыруларын шығара алады, олар серверлерге хабарлама жібереді. Ядролық шақырулар үзілістерді орнату және адрестік кеңістіктер арасындағы деректерді көшіру сияқты функцияларды орындайды. Келесі деңгейде құрылғы драйверлері бар, олардың әрқайсысы жеке пайдаланушы процестері ретінде жұмыс істейді. Әрқайсысы I/O құрылғысын, мысалы диск немесе принтерді басқарады. Драйверлердің I/O портына кіру мүмкіндігі жоқ және олар тікелей I/O нұсқауларын бере алмайды. Оның орнына, олар жазуға болатын I/O порттарының тізімін және жазуға болатын мәндерді бере отырып, ядроға қоңырау шалуы керек. Бұл жерде аз мөлшерде (әдетте 500 нс) үстіртке шығындар болса да, бұл схема ядроға авторизацияны тексеруге мүмкіндік береді, мысалы, аудио драйвері дискіге жаза алмайды. Келесі деңгейде серверлер бар. Бұл жерде операциялық жүйенің барлық функциялары орналасқан. Пайдаланушы процестері файл қызметін, мысалы, файл серверіне файлдарды ашу, жабу, оқу және жазу үшін хабарламалар жіберіп алады. Өз кезегінде файл сервері дискті басқаратын диск драйверіне хабарламалар жіберіп, дискке I/O орындайды. Кілт серверлердің бірі - реинкарнация сервері. Оның міндеті - басқа серверлер мен жүргізушілердің денсаулығын тексеру үшін, олардың жағдайын тексеру. Егер компонент дұрыс жауап бермесе, немесе шығып кетсе немесе шексіз циклге түсіп кетсе, реинкарнация сервері (диспетчерлер мен серверлердің бас процесі) ақаулы компонентті өлтіреді және оны жаңа көшірмемен алмастырады. Осылайша жүйе автоматты түрде өздігінен қалпына келеді, ол жұмыс істеп тұрған бағдарламаларға кедергі келтірмейді. Қазіргі уақытта реинкарнация сервері, процессері және микроядро сенімді есептеу базасының бөлігі болып табылады. Егер олардың біреуі сәтсіз болса, жүйе құлады. Дегенмен, сенімді есептеу базасын Linux және Windows жүйелерінде сияқты 35 миллион код сызығынан 20 000 сызыққа дейін азайту жүйе сенімділігін арттырады.
Minix 3 және алдыңғы нұсқалар арасындағы айырмашылықтар
Minix 1.0, 1.5 және 2.0 адамдар операциялық жүйелерді жобалау туралы білуге көмектесетін құралдар ретінде жасалды. Minix 1.0 1987 жылы шығарылды, онда 12000 C сызығы және кейбір x86 ассемблері бар. Кітапта Minix 1.0 ядросының, жады менеджерінің және файл жүйесінің бастапқы коды басылған. Таненбаум Minix-ті сол кездегі IBM PC және IBM PC/AT микрокомпьютерлерімен үйлесімділік үшін әзірлеген. Minix 1.5, 1991 жылы шығарылған, MicroChannel IBM PS/2 жүйелерін қолдады және Motorola 68000 және SPARC архитектураларына портталды, Atari ST, Commodore Amiga, Apple Macintosh және Sun Microsystems SPARCstation компьютерлік платформаларын қолдады. Сондай-ақ, SunOS-та пайдаланушы процессі ретінде жұмыс істейтін Minix нұсқасы да қол жетімді болды. 1997 жылы шыққан Minix 2.0 тек x86 және Solaris-те орналасқан SPARC архитектуралары үшін қол жетімді болды. Minix vmd екі Vrije Universiteit зерттеушілері жасаған және виртуалды жады мен X терезесі жүйесін қолдауды қосқан. Minix 3 де дәл солай істейді және көптеген жаңа құралдар мен көптеген Unix қолданбалары бар заманауи операциялық жүйе ұсынады. Профессор Таненбаум бірде былай деген: cquoteякуйБіліңізші, MINIX 3 сіздің атаңыздың MINIX-і емес MINIX 1 оқу құралы ретінде жазылған MINIX 3 - бұл жоғары сенімді, өзін-өзі қалпына келтіретін, үрлеусіз операциялық жүйе құрудың бастамасы MINIX 1 және MINIX 3 - Windows 3.1 және Windows XP сияқты ұқсас: бір есім. Minix 3.1.5 нұсқасы 2009 жылдың 5 қарашасында шығарылды. Ол X11, Emacs, vi, cc, GCC, Perl, Python, Almquist shell, Bash, Z shell, FTP клиенті, SSH клиенті, Telnet клиенті, Pine және 400-ден астам басқа кең таралған Unix пайдалы бағдарламаларын қамтиды. X11 қосылғаннан кейін бұл нұсқа тек мәтіндік жүйеден ауысуды білдіреді. Бұл нұсқаның болашақта жақсартылатын тағы бір ерекшелігі - жүйенің құрылғы драйверлерінің құлдырауына төтеп беру мүмкіндігі және көптеген жағдайларда оларды автоматты түрде ауыстыру. Осылайша Minix өзін-өзі қалпына келтіреді және жоғары сенімділікті талап ететін қолданбаларда қолдануға болады. Minix 3.2.0 2012 жылдың ақпан айында шығарылды. Бұл нұсқада көптеген жаңа мүмкіндіктер бар, соның ішінде Clang компиляторы, эксперименталды симметриялық мультипроцессорлық қолдау, procfs және ext2fs файл жүйелерін қолдау және GNU Debugger (GDB). NetBSD-нің бірнеше бөліктері, соның ішінде жүктеуіш, libc және әртүрлі утилиталар мен басқа кітапханалар шығарылымына интеграцияланған. Minix 3.3.0 2014 жылдың қыркүйек айында шығарылды. Бұл релиз x86 қосымшасында ARM архитектурасын қолдайтын алғашқы нұсқа. Ол NetBSD пайдаланушы аймағын қолдайды, онда мыңдаған NetBSD пакеттері бірден орындалады.
cquote|Please be aware that MINIX 3 is not your grandfather's MINIX MINIX 1 was written as an educational tool MINIX 3 is that plus a start at building a highly reliable, self healing, bloat free operating system MINIX 1 and MINIX 3 are related in the same way as Windows 3.1 and Windows XP are: same first name. Minix version 3.1.5 was released 5 Nov 2009. It contains X11, Emacs, vi, cc, GCC, Perl, Python, Almquist shell, Bash, Z shell, FTP client, SSH client, Telnet client, Pine, and over 400 other common Unix utility programs. With the addition of X11, this version marks the transition away from a text only system. Another feature of this version, which will be improved in future ones, is the ability of the system to withstand device driver crashes, and in many cases having them automatically replaced without affecting running processes. In this way, Minix is self healing and can be used in applications demanding high reliability. Minix 3.2.0 was released in February 2012. This version has many new features, including the Clang compiler, experimental symmetric multiprocessing support, procfs and ext2fs filesystem support, and GNU Debugger (GDB). Several parts of NetBSD are also integrated in the release, including the bootloader, libc and various utilities and other libraries. Minix 3.3.0 was released in September 2014. This release is the first version to support the ARM architecture in addition to x86. It also supports a NetBSD userland, with thousands of NetBSD packages running right out of the box.
Талисман
Рокки Ракун - Миникс 3 -тің талисманы.
MINIXCon-тың атауы
MINIXCon - бұл Minix-ке қатысты әңгімелерді, күш-жігерді және зерттеулерді бөлісу жөніндегі конференция. 2016 жылы бір рет өткізілді. MINIXCon2017 баяндамалардың жетіспеушілігіне байланысты тоқтатылды.