Кіріспе

Vanguard – Apple Computer компаниясының зерттеуге бағытталған Apple Advanced Technology Group (ATG) тобында 1990-шы жылдардың басында әзірленген тоқтатылған эксперименталды микроядро. V жүйесіне негізделген Vanguard стандартталған объектілерді идентификациялау және өнімділікті арттыру үшін ерекше хабар тізбектеу жүйесін ұсынды. Vanguard Apple компаниясының ешбір коммерциялық өнімінде қолданылмады. 1993 жылы жобаның негізгі зерттеушісі Росс Финлейсон Apple компаниясын тастағаннан кейін әзірлеу тоқтатылды.

Негізгі түсініктер

Vanguard жалпы V System-ға өте ұқсас болды, бірақ операциялық жүйенің нақты объектіге бағытталған бағдарламалауын қолдады. Бұл ядро мен сервер интерфейстері жаңа кодта мұраға алынып, кеңейтілуі мүмкін объектілер ретінде экспортталды дегенді білдіреді. Бұл өзгеріс жүйеде көзге көрінбейді, ол бағдарламалауды жеңілдететін кодтың өзгеруіне қатысты. Мысалы, Vanguard-та бірнеше серверлер қолдайтын кіріс/шығыс (I/O) класы болды, мысалы, желілік және файл серверлері, жаңа қолданбалар I/O интерфейсін импорттап, әдістерді шақыру арқылы олармен өзара әрекеттесе алатын. Бұл жаңа серверлерді жазуды да жеңілдетті, себебі олар бағдарламалау стандартына ие болды және кодты оңай бөлісе алды.

V хабарлама семантикасы

Микроядроның негізгі тұжырымы – бір үлкен ядроны бір-бірімен байланыс жасайтын серверлер жиынтығына бөлу. Компьютерлік жүйенің барлық аппараттық құралдарын басқаратын бір үлкен бағдарламаның орнына, түрлі міндеттер машинаның әртүрлі бөліктерін басқару құқығы берілген кішігірім бағдарламаларға тапсырылады. Мысалы, бір серверге желілік жабдықты басқару, ал екіншісіне – қатты дискілерді басқару міндеті жүктеледі. Тағы бір сервер файлдық жүйені басқарады, сондай-ақ төменгі деңгейдегі екі серверді де шақырады. Пайдаланушы қолданбалары осы серверлерден қызметтерді алу үшін оларға хабарламалар жібереді, жүйелік шақыру (syscall) немесе тұзақ арқылы ядродан осы жұмысты орындауды сұраудың орнына, процестер аралық байланыс (IPC) түрін пайдаланады. V жүйесінде IPC жүйесі клиенттік қолданбаның тұрғысынан қашықтықтан процедура шақыруларға (RPC) ұқсас тұжырымдалған. Клиент ядроның немесе басқа қолданбалардың қолдайтын шақырулары туралы ақпаратты қамтитын интерфейс анықтамасы файлын импорттайды, содан кейін осы анықтаманы сұрауларды жинақтау үшін пайдаланады. Шақырылған кезде ядро дереу жұмысты бастайды, нәтижелерді тексеріп, ақпаратты дұрыс басқарушыға, мүмкін ядроның ішінде, жібереді. Кез келген нәтижелер ядро арқылы клиентке қайтарылады. Жүйенің клиенттік қолданбаға көрінетін жұмыс істеуі қалыпты монолиттік ядромен жұмыс істеуге өте ұқсас. Нәтижелер үшінші тараптың басқарушысынан келгенімен, бұл клиентке көрінбейді. Бұл сұрауларды өңдейтін серверлер клиенттерге ұқсас жұмыс істейді, деректерді жіберу үшін ядромен байланыс жасайды. Алайда, серверлер әдетте ұзаққа созылатын сұрауларды өңдеу үшін қажетті жаңа жіптерді (thread) іске қосады. Бұл жұмыс орындалғаннан кейін және жауаптар жіберілгеннен кейін жіптер босатылып, серверлер қосымша сұрауларды күту режиміне өте алады. Керісінше, көптеген микроядролық жүйелер синхронды процедура шақырулардың орнына асинхронды байланыс моделіне негізделген. Канондық микроядролық жүйе, Mach, хабарламаларды I/O ретінде модельдеді, бұл бірнеше маңызды қосымша әсерлерге ие. Олардың ішіндегі бастысы – Unix сияқты жүйелердегі қалыпты тапсырма жоспарлаушылар I/O сұрауын күтіп тұрған клиентті тоқтатады, сондықтан хабарламаларды күтіп тұрған бағдарламаларды тоқтату және қайта іске қосу әрекеттері жүйенің өзіне енгізілген. Бұл тәсілдің кемшілігі – жоспарлаушының ауырлығы жоғары, оны шақыру өнімділік мәселесін тудырды және оның өнімділігін жақсарту үшін кең ауқымды даму жұмыстарын қажет етті. V System моделінде хабарлама жіберудің үстіне қосылатын жүктеме азаяды, өйткені процестің жоспарлаушысымен кеңесудің қажеті жоқ, келесі орындалуы керек нәрсе туралы сұрақ туындамайды, яғни шақырылған сервер. V әдісінің кемшілігі – егер жауапты өңдеуге біраз уақыт кетсе, сервер үшін көбірек жұмыс қажет болады.

Тізбектеу

Vanguard жүйесінде V-мен салыстырғанда IPC жүйесіне қосылған маңызды жаңалық – бірнеше сервер арасында бір хабарды бір рет жіберуге мүмкіндік беретін хабар тізбегі болды. Теориялық тұрғыдан алғанда, тізбектеу жиі кездесетін көп қадамды операциялардың өнімділігін арттыра алады. Мысалы, клиенттік қолданба файлды оқуы керек болсын. Әдетте, бұл файл серверін табу үшін ядроға бір хабар, содан кейін файл серверіне тағы үш хабарды қажет етеді: біреуі файл атауын объектінің идентификаторына айналдыру үшін, екіншісі осы идентификаторды ашу үшін, содан кейін файлды оқу үшін тағы біреуі. Vanguard-тың тізбектеуін пайдаланып, клиент барлық осы сұраныстарды қамтитын бір хабарламаны құрастыра алады. Хабарлама ядроға жіберіледі, содан кейін файл серверіне беріледі, ол деректерді қайтарудан бұрын барлық үш сұранысты да өңдейді. Микроядролық жүйелермен байланысты өнімділік мәселелерінің көп бөлігі хабарламалар қолданбалар арасында өтетін контексттік ауыстыруларға байланысты. Жоғарыдағы мысалда V жүйесінде жұмыс істегенде сегіз контексттік ауыстыру болуы керек; клиент ядроға және одан ауысқан сайын әр сұранысқа екі ауыстыру. Vanguard-та тізбек пайдалану оны тек үш ауыстыруға дейін азайтады; біреуі клиенттен ядроға, екіншісі ядродан файл серверіне, ал соңғысы серверден клиентке. Кейбір жағдайларда контексттік ауыстырудың шығыны сұранысты орындауға кететін уақыттан артық болса, Vanguard-тың тізбектеу механизмі нақты өнімділікті жақсартуға әкелуі мүмкін.

Нысанның атауы

V сонымен қатар қарапайым таратылған атау қызметін енгізді. Бұл қызмет әртүрлі нысандарды білдіретін, белгілі бір атауларды, мысалы, 2-қабаттағы лазерлік принтерді, таратылған V жүйесінде сақтайтын. Бағдарламалар атау серверінен нысандарды атауы бойынша сұрай алатын, ал оларға сол нысанмен өзара әрекеттесуге мүмкіндік беретін идентификатор берілетін. Атау қызметі жеке сервер емес, ол ядродағы кодпен басқарылатын. Бұл Spring операциялық жүйесіндегі толыққанды атау серверімен салыстырғанда, ол жүйедегі нысандар туралы ғана емес, сонымен қатар жүйедегі басқа серверлердің жеке атауларын, мысалы, файл атауларын және IP-адрестерін аудару үшін де қолданылатын. V жүйесінде сервердегі нысандарға қандай да бір жеке кілт арқылы, мысалы, 32 биттік бүтін сан арқылы сілтеме жасалатын. Клиенттер бұл кілттерді серверлерге белгілі бір міндет туралы әңгіме жүргізу үшін жіберетін. Мысалы, бағдарлама ядродан файлдық жүйені сұрауы мүмкін, сонда оған бағдарлама идентификаторын білдіретін 32 биттік кілт беріліп, кейін сол кілтті файлдық жүйеге файлды ашу туралы сұрауды жіберу үшін қолданатын. Нәтижесінде 64 биттік кілт қайтарылатын. Бұл мысалдағы кілттер серверлерге тән, жүйеде қолданылатын ортақ кілт форматы болған жоқ. Мұндай атауларды табу V жүйесінде соншалықты кең таралғандықтан, авторлар бұл кілттерді Vanguard жүйесінде бірінші деңгейдегі элементтерге жатқызуға шешім қабылдады. Серверлер кез келген нысан идентификаторын пайдаланудың орнына, Vanguard жүйесінде барлық серверлер 128 биттік кілтті түсінуге және қайтаруға міндетті болды, ал алғашқы 64 биті сервер идентификаторын, ал екіншісі сол сервердегі нысанды анықтауға арналған. Сервер идентификаторы ядрода сақталып, егер сілтеме жасалатын сервер қашықтағы машинада болса, хабарды желі арқылы жіберуге мүмкіндік берді. Клиент үшін бұл көрінбейтін. ID-лердің жаман ниетті бағдарламалық жасақтамамен болжауға тыйым салу мақсатымен кездейсоқ тағайындалған-жоқ дегені белгісіз.