-íåèçâåñòíî

 -Ïîäïèñêà ïî e-mail

 

 -Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â CommonReader

 -Ñîîáùåñòâà

×èòàòåëü ñîîáùåñòâ (Âñåãî â ñïèñêå: 1) In_wood_of_imagine

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 27.02.2008
Çàïèñåé: 1387
Êîììåíòàðèåâ: 780
Íàïèñàíî: 4145


"Ìîæåì ëè ìû ñäåëàòü îïåðàöèîííûå ñèñòåìû íàäåæíûìè è áåçîïàñíûìè"

×åòâåðã, 03 Èþëÿ 2008 ã. 11:04 + â öèòàòíèê

Ïåðåñêàç Ñåðãåÿ Êóçíåöîâà ñòàòüè Ýíäðþ Òàíåíáàóìà, Äæîððèòà Õåðäåðà è Õåðáåðòà Áîñà "Can We Make Operating Systems Reliable and Secure?"

Èñòî÷íèê: http://www.citforum.ru/operating_systems/microkernel_tanenbaum/


Andrew S. Tanenbaum, Jorrit N. Herder, Herbert Bos, Vrije Universiteit, Amsterdam.
Computer (IEEE Computer Society, V. 39, No 5, May 2006).

Êñòàòè, èìåííî ýòà ñòàòüÿ âûçâàëà íîâûé âèòîê äèñêóññèè Ýíäðþ Òàíåíáàóìà ñ Ëèíóñîì Òîðâàëüäñîì (ïåðâûé ñïîð î ìèêðîÿäåðíîì ïîäõîäå âîçíèê åùå â 1992 ã.).

Ïîêóïàòåëè êîìïüþòåðîâ ðàññ÷èòûâàþò íà òàêóþ æå èõ íàäåæíîñòü, êàê, íàïðèìåð, ó òåëåâèçîðîâ: êóïèë, ïîäêëþ÷èë ê ñåòè, è êîìïüþòåð íàäåæíî ðàáîòàåò â òå÷åíèå 10 ëåò. Íàèáîëüøèå íàðóøåíèÿ íàäåæíîñòè è áåçîïàñíîñòè êîìïüþòåðîâ âûçûâàåò îïåðàöèîííàÿ ñèñòåìà. Õîòÿ â ïðèêëàäíûõ ïðîãðàììàõ ìîæåò ñîäåðæàòüñÿ ìíîãî äåôåêòîâ, åñëè áû îïåðàöèîííûå ñèñòåìû áûëè ñâîáîäíû îò îøèáîê, îøèáêè â ïðèëîæåíèÿõ ìîãëè áû ïðè÷èíÿòü òîëüêî îãðàíè÷åííûé óùåðá. Õàðàêòåðèñòèêè íàäåæíîñòè è áåçîïàñíîñòè îïåðàöèîííûõ ñèñòåì ÿâëÿþòñÿ âçàèìîñâÿçàííûìè. Íàïðèìåð, îøèáêà ïåðåïîëíåíèÿ áóôåðà ìîæåò ïðèâåñòè ê êðàõó ñèñòåìû (ïðîáëåìà íàäåæíîñòè), íî òà æå îøèáêà ìîæåò ïîçâîëèòü ïðîíèêíóòü â êîìïüþòåð óìåëî íàïèñàííîìó âèðóñó èëè ÷åðâþ (ïðîáëåìà áåçîïàñíîñòè). Ïîâûøåíèå óðîâíÿ íàäåæíîñòè ñïîñîáñòâóåò ïîâûøåíèþ óðîâíÿ áåçîïàñíîñòè.

 ñîâðåìåííûõ îïåðàöèîííûõ ñèñòåìàõ èìåþòñÿ äâå õàðàêòåðèñòèêè, äåëàþùèå èõ íåíàäåæíûìè è íåáåçîïàñíûìè: îíè îãðîìíû è îáëàäàþò î÷åíü ïëîõîé èçîëÿöèåé ñáîåâ.  ÿäðå ÎÑ Linux ñîäåðæèòñÿ áîëåå 2,5 ìèëëèîíîâ ñòðîê êîäà, â ÿäðå Windows XP - â äâà ñ ëèøíèì ðàçà áîëüøå.  îäíîì èç èññëåäîâàíèé íàäåæíîñòè ïðîãðàììíîãî îáåñïå÷åíèÿ ïîêàçàíî, ÷òî â ïðîãðàììàõ èìååòñÿ îò øåñòè äî øåñòíàäöàòè îøèáîê íà 1000 ñòðîê èñïîëíÿåìîãî êîäà; â äðóãîì èññëåäîâàíèè íàñ÷èòûâàåòñÿ îò äâóõ äî 75 îøèáîê íà 1000 ñòðîê èñïîëíÿåìîãî êîäà â çàâèñèìîñòè îò ðàçìåðà ìîäóëÿ. Ïðè òàêèõ îöåíêàõ ÿäðî Linux ñîäåðæèò îêîëî 15000 îøèáîê, à Windows XP - áîëüøå 30000 îøèáîê. Åùå õóæå òî, ÷òî îêîëî 70% êîäà îïåðàöèîííûõ ñèñòåì çàíèìàåò êîä äðàéâåðîâ óñòðîéñòâ, â êîòîðûõ îøèáêè âñòðå÷àþòñÿ â 3-7 ðàç ÷àùå, ÷åì â îáû÷íîì êîäå. Ïîíÿòíî, ÷òî ïðîñòî íåâîçìîæíî íàéòè è èñïðàâèòü âñå îøèáêè; áîëåå òîãî, ïðè èñïðàâëåíèè îøèáîê ÷àñòî ïðèâíîñÿòñÿ íîâûå.

Áîëüøîé ðàçìåð ñîâðåìåííûõ îïåðàöèîííûõ ñèñòåì îçíà÷àåò, ÷òî íè îäèí ÷åëîâåê íå ìîæåò ïîíèìàòü ñèñòåìó öåëèêîì, â ðåçóëüòàòå ÷åãî óïðàâëåíèå ñèñòåìîé ñòàíîâèòñÿ î÷åíü òðóäíûì äåëîì. Íî òî æå ìîæíî ñêàçàòü, íàïðèìåð, è ïðî àâèàíîñåö. Íè îäèí îòäåëüíûé ÷åëîâåê íå çíàåò, êàê ðàáîòàåò àâèàíîñåö, íî âñå åãî ïîäñèñòåìû õîðîøî èçîëèðîâàíû. Ïðîáëåìà çàñîðåííîãî òóàëåòà íå âëèÿåò íà ïîäñèñòåìó çàïóñêà ðàêåò. Ó îïåðàöèîííûõ ñèñòåì îòñóòñòâóåò ïîäîáíàÿ èçîëÿöèÿ êîìïîíåíòîâ. Ñîâðåìåííàÿ îïåðàöèîííàÿ ñèñòåìà ñîäåðæèò ñîòíè è òûñÿ÷è ñâÿçàííûõ âìåñòå ïðîöåäóð, êîòîðûå îáðàçóþò åäèíóþ áèíàðíóþ ïðîãðàììó, âûïîëíÿåìóþ â ÿäðå. Êàæäàÿ èç ìèëëèîíîâ ñòðîê êîäà ÿäðà èìååò âîçìîæíîñòü çàïèñè â êëþ÷åâûå ñòðóêòóðû äàííûõ, èñïîëüçóåìûå íåñâÿçàííûì ñ íåé êîìïîíåíòîì, ÷òî ìîæåò ïðèâåñòè ê êðàõó ñèñòåìû.

Ïðîåêò Nooks
Ê ñ÷àñòüþ, ñèòóàöèÿ íå ÿâëÿåòñÿ áåçíàäåæíîé. Èññëåäîâàòåëè ïðèëàãàþò óñèëèÿ ê ñîçäàíèþ áîëåå íàäåæíûõ îïåðàöèîííûõ ñèñòåì. Àâòîðû ñòàòüè ðàññìàòðèâàþò ÷åòûðå ïîäõîäà, èñïîëüçóåìûå èññëåäîâàòåëÿìè äëÿ ïðèäàíèÿ áóäóùèì îïåðàöèîííûì ñèñòåìàì áîëåå âûñîêîãî óðîâíÿ íàäåæíîñòè è áåçîïàñíîñòè. Íàèáîëåå êîíñåðâàòèâíûì ÿâëÿåòñÿ ïîäõîä ïðîåêòà Nooks, íàïðàâëåííîãî íà ïîâûøåíèå íàäåæíîñòè ñóùåñòâóþùèõ îïåðàöèîííûõ ñèñòåì (òàêèõ êàê Windows è Linux).  Nooks ïîääåðæèâàåòñÿ ìîíîëèòíàÿ ñòðóêòóðà ÿäðà, íî ÿäðî çàùèùàåòñÿ îò ñîäåðæàùèõ îøèáêè äðàéâåðîâ óñòðîéñòâ ïóòåì îáåðòûâàíèÿ êàæäîãî äðàéâåðà óðîâíåì çàùèòíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ. Îáîëî÷êà äðàéâåðà òùàòåëüíî îòñëåæèâàåò âñå âçàèìîäåéñòâèÿ ìåæäó äðàéâåðîì è ÿäðîì. Öåëÿìè ïðîåêòà Nooks ÿâëÿþòñÿ çàùèòà ÿäðà îò ñáîåâ äðàéâåðîâ, àâòîìàòè÷åñêîå âîññòàíîâëåíèå ïîñëå îòêàçà äðàéâåðà è äîñòèæåíèå âñåãî ýòîãî ïóòåì íåáîëüøèõ èçìåíåíèé â ñóùåñòâóþùèõ äðàéâåðàõ è ÿäðå. Ïåðâàÿ ðåàëèçàöèÿ áûëà âûïîëíåíà äëÿ Linux, íî èäåè ïðèìåíèìû è ê äðóãèì óíàñëåäîâàííûì îïåðàöèîííûì ñèñòåìàì.

Õîòÿ ýêñïåðèìåíòû ïîêàçàëè, ÷òî Nooks ìîæåò ïåðåõâàòèòü 99% ôàòàëüíûõ îøèáîê äðàéâåðîâ è 55% èõ ïðî÷èõ îøèáîê, ñèñòåìà íå ÿâëÿåòñÿ ñîâåðøåííîé. Íàïðèìåð, â äðàéâåðàõ ìîãóò âûïîëíÿòüñÿ ïðèâèëåãèðîâàííûå êîìàíäû, êîòîðûì â íèõ âûïîëíÿòüñÿ íå ïîëàãàåòñÿ; â íèõ ìîæåò ïðîèçâîäèòüñÿ çàïèñü â íåâåðíûå ïîðòû; â íèõ ìîãóò âîçíèêàòü áåñêîíå÷íûå öèêëû. Êðîìå òîãî, ãðóïïå Nooks ïðèøëîñü âðó÷íóþ íàïèñàòü áîëüøîå ÷èñëî îáîëî÷åê äðàéâåðîâ, è â íèõ ñàìèõ ìîãóò ñîäåðæàòüñÿ îøèáêè. Íàêîíåö, íå ïðåäîòâðàùàåòñÿ ïîëíîñòüþ âîçìîæíîñòü äîñòóïà ïî çàïèñè êî âñåé ïàìÿòè. Òåì íå ìåíåå, ýòîò ïðîåêò ÿâëÿåòñÿ ïîòåíöèàëüíî ïîëåçíûì øàãîì ê ïîâûøåíèþ íàäåæíîñòè óíàñëåäîâàííûõ îïåðàöèîííûõ ñèñòåì.

Âòîðîé ïîäõîä ïðîèçðàñòàåò èç êîíöåïöèè âèðòóàëüíîé ìàøèíû. Èäåÿ ñîñòîèò â çàïóñêå íà "ãîëîé" àïïàðàòóðå âìåñòî îïåðàöèîííîé ñèñòåìû ñïåöèàëüíîé óïðàâëÿþùåé ïðîãðàììû, êîòîðàÿ íàçûâàåòñÿ ìîíèòîðîì âèðòóàëüíîé ìàøèíû. Âèðòóàëüíàÿ ìàøèíà ñîçäàåò íåñêîëüêî ýêçåìïëÿðîâ íàñòîÿùåé ìàøèíû. Íà êàæäîì ýêçåìïëÿðå ìîæåò âûïîëíÿòüñÿ ïðîãðàììíîå îáåñïå÷åíèå, êîòîðîå ìîãëî áû ðàáîòàòü íà ôèçè÷åñêîé ìàøèíå. Ýòîò ìåòîä îáû÷íî èñïîëüçóåòñÿ äëÿ îäíîâðåìåííîãî âûïîëíåíèÿ íà îäíîé àïïàðàòóðå íåñêîëüêèõ îïåðàöèîííûõ ñèñòåì, íàïðèìåð, Linux è Windows.

Ïàðàâèðòóàëèçàöèÿ
 ïðîåêòå, âûïîëíÿåìîì â óíèâåðñèòåòå Êàðëñðóý, èäåÿ âèðòóàëüíûõ ìàøèí ïðèìåíÿåòñÿ äëÿ îáåñïå÷åíèÿ çàùèòû âíóòðè îäíîé îïåðàöèîííîé ñèñòåìû. Êðîìå òîãî, ïîñêîëüêó ïðîöåññîð Pentium íå ÿâëÿåòñÿ ïîëíîñòüþ âèðòóàëèçèðóåìûì, áûëî ÷àñòè÷íî ñíÿòî îãðàíè÷åíèå âûïîëíåíèÿ íà âèðòóàëüíîé ìàøèíå íåèçìåíÿåìîé îïåðàöèîííîé ñèñòåìû.  îïåðàöèîííîé ñèñòåìå äîïóñêàþòñÿ èçìåíåíèÿ, ãàðàíòèðóþùèå, ÷òî îíà íå äåëàåò íè÷åãî, ÷òî íå ìîæåò áûòü âèðòóàëèçèðîâàíî. Äëÿ îòëè÷èÿ îò èñòèííîé âèðòóàëèçàöèè ýòîò ïîäõîä áûë íàçâàí ïàðàâèðòóàëèçàöèåé. Èäåÿ ñîñòîèò â òîì, ÷òîáû íà îäíîé èç âèðòóàëüíûõ Linux-ìàøèí âûïîëíÿëèñü ïðèêëàäíûå ïðîãðàììû, à íà äðóãèõ âèðòóàëüíûõ ìàøèíàõ ðàáîòàëè äðàéâåðû óñòðîéñòâ. Ïðè êðàõå äðàéâåðà èç ñòðîÿ âûõîäèò òîëüêî åãî âèðòóàëüíàÿ ìàøèíà, à îñíîâíàÿ ìàøèíà ñîõðàíÿåò ðàáîòîñïîñîáíîñòü. Äîïîëíèòåëüíûì ïðåèìóùåñòâîì ÿâëÿåòñÿ òî, ÷òî íå òðåáóåòñÿ ìîäèôèêàöèÿ äðàéâåðîâ, ïîñêîëüêó îíè îñòàþòñÿ â îáû÷íîé ñðåäå ÿäðà Linux. Êîíå÷íî, äëÿ äîñòèæåíèÿ ïàðàâèðòóàëèçàöèè òðåáóåòñÿ ìîäèôèêàöèÿ ñàìîãî ÿäðà Linux, íî ýòî äåëàåòñÿ îäèí ðàç äëÿ âñåõ âèðòóàëüíûõ ìàøèí.

 ïðèíöèïå, ýòîò ïîäõîä äîëæåí îáåñïå÷èâàòü áîëåå âûñîêóþ íàäåæíîñòü, ÷åì ó îòäåëüíîé îïåðàöèîííîé ñèñòåìû, ïîñêîëüêó ïðè îòêàçå âèðòóàëüíîé ìàøèíû, ñîäåðæàùåé îäèí èëè íåñêîëüêî äðàéâåðîâ, ýòà âèðòóàëüíàÿ ìàøèíà ìîæåò áûòü ïåðåçàïóùåíà, à äðàéâåðû ìîãóò áûòü âîçâðàùåíû â èñõîäíîå ñîñòîÿíèå. Çäåñü íå ïðåäïðèíèìàþòñÿ ïîïûòêè âåðíóòü äðàéâåðû â ñîñòîÿíèå, ïðåäøåñòâóþùåå îòêàçó, êàê ýòî äåëàåòñÿ â Nooks. Èçìåðåíèÿ ïðîèçâîäèòåëüíîñòè ïîêàçûâàþò, ÷òî íàêëàäíûå ðàñõîäû íà èñïîëüçîâàíèå ïàðàâèðòóàëüíûõ ìàøèí â òàêîé ìàíåðå ñîñòàâëÿþò îêîëî 3-8%.

Ïåðâûå äâà ïîäõîäà ñôîêóñèðîâàíû íà ïîâûøåíèè íàäåæíîñòè óíàñëåäîâàííûõ îïåðàöèîííûõ ñèñòåì. Ñëåäóþùèå äâà ïîäõîäà îðèåíòèðîâàíû íà ñîçäàíèå áóäóùèõ íàäåæíûõ ñèñòåì. Îäèí èç ýòèõ ïîäõîäîâ ðàçðóøàåò ñàìó ñóòü ïðîáëåìû: íàëè÷èå âñåé îïåðàöèîííîé ñèñòåìû â âèäå îäíîé ãèãàíòñêîé ïðîãðàììû, âûïîëíÿåìîé â ðåæèìå ÿäðà. Âìåñòî ýòîãî â ðåæèìå ÿäðà ðàáîòàåò òîëüêî êðîøå÷íîå ìèêðîÿäðî, à îñòàëüíàÿ ÷àñòü îïåðàöèîííîé ñèñòåìû âûïîëíÿåòñÿ â ïîëüçîâàòåëüñêîì ðåæèìå â âèäå íàáîðà ïîëíîñòüþ èçîëèðîâàííûõ ïðîöåññîâ ñåðâåðîâ è äðàéâåðîâ. Ýòîé èäåå ïî÷òè äâàäöàòü ëåò, íî â ïðîøëûå ãîäû îíà íå áûëà ïîëíîñòüþ èññëåäîâàíà, ïîñêîëüêó îáåñïå÷èâàëà ñëåãêà õóäøóþ ïðîèçâîäèòåëüíîñòü, ÷åì ìîíîëèòíîå ÿäðî.  1980-å ãã. ïðîèçâîäèòåëüíîñòü ñòîÿëà íà ïåðâîì ìåñòå, à íàäåæíîñòü è áåçîïàñíîñòü íåäîîöåíèâàëèñü. Îäíàêî âðåìåíà ìåíÿþòñÿ, à âìåñòå ñ íèìè è ïðåäñòàâëåíèÿ ëþäåé î òîì, ÷òî ÿâëÿåòñÿ âàæíûì.

Ïðîåêò Minix 3
 îïåðàöèîííîé ñèñòåìå Minix 3 ìèêðîÿäðî îáðàáàòûâàåò ïðåðûâàíèÿ, îáåñïå÷èâàåò îñíîâíûå ìåõàíèçìû äëÿ óïðàâëåíèÿ ïðîöåññàìè, ðåàëèçóåò ìåæïðîöåññíûå âçàèìîäåéñòâèÿ è ïðîèçâîäèò ïëàíèðîâàíèå ïðîöåññîâ. Îíî òàêæå ïðåäîñòàâëÿåò íåáîëüøîé íàáîð âûçîâîâ ÿäðà äëÿ àâòîðèçîâàííûõ äðàéâåðîâ è ñåðâåðîâ, íàïðèìåð, äëÿ ÷òåíèÿ ÷àñòè çàäàííîãî ïîëüçîâàòåëüñêîãî àäðåñíîãî ïðîñòðàíñòâà èëè çàïèñè â àâòîðèçîâàííûå ïîðòû ââîäà-âûâîäà.  àäðåñíîì ïðîñòðàíñòâå ìèêðîÿäðà ðàáîòàåò äðàéâåð òàéìåðà, íî îí ïëàíèðóåòñÿ êàê îòäåëüíûé ïðîöåññ. Íèêàêèå äðóãèå äðàéâåðû â ðåæèìå ÿäðà íå ðàáîòàþò.

Íàä óðîâíåì ìèêðîÿäðà íàõîäèòñÿ óðîâåíü äðàéâåðîâ óñòðîéñòâ. Äëÿ êàæäîãî óñòðîéñòâà ââîäà-âûâîäà èìååòñÿ ñîáñòâåííûé äðàéâåð, âûïîëíÿåìûé â âèäå îòäåëüíîãî ïðîöåññà â ñîáñòâåííîì àäðåñíîì ïðîñòðàíñòâå, çàùèùåííîì àïïàðàòóðîé óñòðîéñòâà óïðàâëåíèÿ ïàìÿòüþ. Äðàéâåðû ðàáîòàþò â ïîëüçîâàòåëüñêîì ðåæèìå è íå ìîãóò èñïîëíÿòü ïðèâèëåãèðîâàííûå êîìàíäû, à òàêæå ÷èòàòü èç ïîðòîâ êîìïüþòåðà èëè ïèñàòü â íèõ. Äëÿ ïîëó÷åíèÿ ïîñëåäíåé âîçìîæíîñòè îíè äîëæíû ïðîèçâîäèòü âûçîâû ÿäðà. Òàêàÿ êîíñòðóêöèÿ ïîâûøàåò íàäåæíîñòü, õîòÿ è ïîðîæäàåò íåáîëüøèå äîïîëíèòåëüíûå ðàñõîäû.

Ïîâåðõ óðîâíÿ äðàéâåðîâ óñòðîéñòâ ðàñïîëàãàåòñÿ óðîâåíü ñåðâåðîâ. Ôàéëîâûé ñåðâåð ÿâëÿåòñÿ íåáîëüøîé (4,500 ñòðîê èñïîëíÿåìîãî êîäà) ïðîãðàììîé, êîòîðàÿ ïðèíèìàåò çàïðîñû îò ïîëüçîâàòåëüñêèõ ïðîöåññîâ ïî îáðàáîòêå Posix-ñîâìåñòèìûõ âûçîâîâ, îòíîñÿùèõñÿ ê ôàéëàì (read, write, lseek è stat) è âûïîëíÿåò èõ. Íà ýòîì óðîâíå íàõîäèòñÿ è ìåíåäæåð ïðîöåññîâ, êîòîðûé ïîääåðæèâàåò óïðàâëåíèå ïðîöåññàìè è ïàìÿòüþ è âûïîëíÿåò Posix-ñîâìåñòèìûå è äðóãèå ñèñòåìíûå âûçîâû, òàêèå êàê fork, exec è brk. Íåñêîëüêî íåîáû÷íûì ÿâëÿåòñÿ ñåðâåð ðåèíêàðíàöèè, êîòîðûé ÿâëÿåòñÿ ðîäèòåëüñêèì ïðîöåññîì âñåõ äðóãèõ ñåðâåðîâ è âñåõ äðàéâåðîâ. Åñëè äðàéâåð èëè ñåðâåð àâàðèéíî èëè ïî ñîáñòâåííîé èíèöèàòèâå çàâåðøàåòñÿ, ëèáî íå îòâå÷àåò íà ïåðèîäè÷åñêèå çàïðîñû îòêëèêà, òî ñåðâåð ðåèíêàðíàöèè ïðèíóäèòåëüíî çàâåðøàåò åãî, åñëè ýòî òðåáóåòñÿ, è ïåðåçàïóñêàåò èç êîïèè íà äèñêå èëè â îñíîâíîé ïàìÿòè.  ÷èñëî äðóãèõ ñåðâåðîâ âõîäèò ñåðâåð ñåòè, ïîääåðæèâàþùèé âåñü ñòåê TCP/IP; ïðîñòîé ñåðâåð èìåí, èñïîëüçóåìûé âñåìè îñòàëüíûìè ñåðâåðàìè; è èíôîðìàöèîííûé ñåðâåð, ñïîñîáñòâóþùèé îòëàäêå.

Íàêîíåö, íàä óðîâíåì ñåðâåðîâ íàõîäÿòñÿ ïîëüçîâàòåëüñêèå ïðîöåññû. Äëÿ ïîëüçîâàòåëåé åäèíñòâåííûì îòëè÷èåì îò äðóãèõ Unix-ñèñòåì ÿâëÿåòñÿ òî, ÷òî áèáëèîòå÷íûå ïðîöåäóðû äëÿ ñèñòåìíûõ âûçîâîâ âûïîëíÿþò ñâîþ ðàáîòó ïóòåì ïîñûëêè ñîîáùåíèé ñåðâåðàì. Âî âñåì îñòàëüíîì ýòî îáû÷íûå ïîëüçîâàòåëüñêèå ïðîöåññû, â êîòîðûõ ìîæåò èñïîëüçîâàòüñÿ API Posix.

Ìåæïðîöåññíûå âçàèìîäåéñòâèÿ (IPC) â MINIX 3 ïîääåðæèâàþòñÿ íà îñíîâå ïåðåäà÷è ñîîáùåíèé ôèêñèðîâàííîé äëèíû ñ èñïîëüçîâàíèåì ïðèíöèïà ðàíäåâó: ñèñòåìà êîïèðóåò ñîîáùåíèå íàïðÿìóþ îò îòïðàâèòåëÿ ê ïîëó÷àòåëþ, êîãäà îáà îíè ê ýòîìó ãîòîâû. Êðîìå òîãî, ïîääåðæèâàåòñÿ ìåõàíèçì àñèíõðîííîãî óâåäîìëåíèÿ î ñîáûòèÿõ. Ñîáûòèÿ, î êîòîðûõ îêàçàëîñü íåâîçìîæíî óâåäîìèòü ïðîöåññ, ôèêñèðóþòñÿ â áèòîâîé øêàëå â òàáëèöå ïðîöåññîâ. Ñ ñèñòåìîé ïåðåäà÷è ñîîáùåíèé èíòåãðèðîâàíà îáðàáîòêà ïðåðûâàíèé. Îáðàáîò÷èêè ïðåðûâàíèé èñïîëüçóþò ìåõàíèçì óâåäîìëåíèé äëÿ ñèãíàëèçàöèè î çàâåðøåíèè ââîäà-âûâîäà. Ýòîò ìåõàíèçì ïîçâîëÿåò îáðàáîò÷èêó óñòàíîâèòü áèò â áèòîâîé øêàëå "íåîáðàáîòàííûõ ïðåðûâàíèé" äðàéâåðà è ïðîäîëæèòü âûïîëíåíèå áåç áëîêèðîâêè. Êîãäà äðàéâåð ñòàíîâèòñÿ ãîòîâûì ê ïîëó÷åíèþ ïðåðûâàíèÿ, ÿäðî ïðåîáðàçóåò åãî â îáû÷íîå ñîîáùåíèå.

Íàäåæíîñòü Minix 3 ïðîèñõîäèò èç ðàçíûõ èñòî÷íèêîâ. Âî-ïåðâûõ, ðàçìåð êîäà, âûïîëíÿåìîãî â ÿäðå, ñîñòàâëÿåò îêîëî 4000 ñòðîê, è îáùåå ÷èñëî îøèáîê - âñåãî îêîëî 24. Íåáîëüøîé ðàçìåð ÿäðà ïîçâîëÿåò âåðèôèöèðîâàòü åãî êîä âðó÷íóþ èëè íà îñíîâå ôîðìàëüíûõ ìåòîäîâ. Îñîáåííîñòè IPC ïîçâîëÿþò èçáåæàòü ïîòðåáíîñòè óïðàâëåíèÿ áóôåðàìè â ÿäðå. Êðîìå òîãî, äëÿ êàæäîãî ïðîöåññà îãðàíè÷åíû äîñòóïíûå ïðèìèòèâû IPC, âêëþ÷àÿ àäðåñà íàçíà÷åíèÿ è ñîáûòèÿ, î êîòîðûõ ïðîèñõîäèò óâåäîìëåíèå. Íàïðèìåð, ïîëüçîâàòåëüñêèå ïðîöåññû ìîãóò èñïîëüçîâàòü òîëüêî ïðèíöèï ðàíäåâó è ïîñûëàòü ñîîáùåíèÿ òîëüêî Posix-ñåðâåðàì.  äîïîëíåíèå ê ýòîìó, âñå ñòðóêòóðû ÿäðà ÿâëÿþòñÿ ñòàòè÷åñêèìè. Âñå ýòè ñâîéñòâà çíà÷èòåëüíî óïðîùàþò êîä è óñòðàíÿþò îøèáêè â ÿäðå, ñâÿçàííûå ñ ïåðåïîëíåíèåì áóôåðîâ, "óòå÷êó ïàìÿòè" (memory leak), íåñâîåâðåìåííûå ïðåðûâàíèÿ è ò.ä. Êîíå÷íî, ïåðåìåùåíèå áîëüøåé ÷àñòè îïåðàöèîííîé ñèñòåìû â ïðîöåññû, âûïîëíÿåìûå â ðåæèìå ïîëüçîâàòåëÿ, íå óñòðàíÿþò íåèçáåæíûå îøèáêè â äðàéâåðàõ è ñåðâåðàõ, íî ýòî îãðàíè÷èâàåò èõ âîçäåéñòâèå íà ñèñòåìó â öåëîì. Îøèáî÷íûé êîä â ÿäðå ìîæåò èñïîðòèòü êðèòè÷íûå ñòðóêòóðû äàííûõ, çàïèñàòü íà äèñê íåíóæíûå äàííûå è ò.ä.; îøèáî÷íûé æå êîä â áîëüøèíñòâå äðàéâåðîâ è ñåðâåðîâ íå ìîæåò ïðèíåñòè òàêîãî âðåäà, ïîñêîëüêó ýòè ïðîöåññû ñòðîãî ðàçäåëåíû è î÷åíü îãðàíè÷åíû â ñâîèõ âîçìîæíîñòÿõ.

Åùå îäíîé îñîáåííîñòüþ, ïîâûøàþùåé íàäåæíîñòü, ÿâëÿåòñÿ èñïîëüçîâàíèå ðàçäåëüíûõ ïðîñòðàíñòâ êîìàíä è äàííûõ. Äàæå åñëè îøèáî÷íûé êîä èëè âèðóñ âûçîâóò ïåðåïîëíåíèå áóôåðà è ïîìåñòÿò ÷óæîé êîä â ïðîñòðàíñòâî äàííûõ, ýòîò êîä áóäåò íåâîçìîæíî âûïîëíèòü ïóòåì ïåðåõîäà íà íåãî, ïîñêîëüêó ÿäðî íå çàïóñòèò êîä, íå íàõîäÿùèéñÿ â ïðîñòðàíñòâå êîìàíä ïðîöåññà (äîñòóïíîì òîëüêî ïî ÷òåíèþ).

Ñðåäè äðóãèõ îñîáåííîñòåé, ñïîñîáñòâóþùèõ ïîâûøåíèþ íàäåæíîñòè, íàèáîëåå âàæíûì ÿâëÿåòñÿ ñâîéñòâî ñàìîâîññòàíîâëåíèÿ. Åñëè äðàéâåð ïðîèçâîäèò çàïèñü ïî íåâåðíîìó óêàçàòåëþ, âïàäàåò â áåñêîíå÷íûé öèêë èëè äóðíî âåäåò ñåáÿ êàêèì-ëèáî äðóãèì îáðàçîì, òî ñåðâåð ðåèíêàðíàöèè àâòîìàòè÷åñêè çàìåíèò åãî, ÷àñòî áåç âëèÿíèÿ íà äðóãèå ïðîöåññû.

 òå÷åíèå äåñÿòèëåòèé ìóëüòèñåðâåðíûå àðõèòåêòóðû íà îñíîâå ìèêðîÿäðà êðèòèêîâàëèñü çà íåäîñòàòî÷íóþ ýôôåêòèâíîñòü. Îäíàêî ðàçëè÷íûå ïðîåêòû ïîêàçàëè, ÷òî ïðè ìîäóëüíîé ðàçðàáîòêå ìîæíî äîñòè÷ü ïðèåìëåìîé ïðîèçâîäèòåëüíîñòè. Íåñìîòðÿ íà òî, ÷òî ñèñòåìà Minix 3 íå îïòèìèçèðîâàëàñü äëÿ äîñòèæåíèÿ âûñîêîé ïðîèçâîäèòåëüíîñòè, îíà ðàáîòàåò äîñòàòî÷íî áûñòðî. Âûíîñ ñ ÿäðà äðàéâåðîâ ïðèâåë ê ñíèæåíèþ ïðîèçâîäèòåëüíîñòè íà 10%, è ñèñòåìà ñîáèðàåòñÿ, âêëþ÷àÿ ÿäðî, îáùèå äðàéâåðû è âñå ñåðâåðû (112 êîìïèëÿöèé è 11 ðåäàêòèðîâàíèé ñâÿçåé) ìåíåå ÷åì çà 6 ñåêóíä íà ïðîöåññîðå Athlon ñ 2,2 Ããö. Òîò ôàêò, ÷òî ìóëüòèñåðâåðíàÿ àðõèòåêòóðà ñìîãëà îáåñïå÷èòü âûñîêîíàäåæíóþ Unix-ïîäîáíóþ ñðåäó çà ñ÷åò íåáîëüøîãî ñíèæåíèÿ ïðîèçâîäèòåëüíîñòè, ïîêàçûâàåò ïðàêòè÷íîñòü ýòîãî ïîäõîäà. Minix 3 äëÿ Pentium ñâîáîäíî ðàñïðîñòðàíÿåòñÿ ïîä ëèöåíçèåé Áåðêëè íà ñàéòå www.minix3.org.

Ïðîåêò Singularity
Íàèáîëåå ðàäèêàëüíûé ïîäõîä ïðåäëîæåí â Microsoft Research. Ïî ñóùåñòâó, ýòîò ïîäõîä îòâåðãàåò ïîíÿòèå îïåðàöèîííîé ñèñòåìû êàê åäèíîé ïðîãðàììû, âûïîëíÿåìîé â ðåæèìå ÿäðà, ïëþñ íåêîòîðûé íàáîð ïîëüçîâàòåëüñêèõ ïðîöåññîâ, âûïîëíÿåìûõ â ðåæèìå ïîëüçîâàòåëÿ, è çàìåíÿåò åãî ñèñòåìîé, íàïèñàííîé íà íîâîì òèïèçèðîâàííîì ÿçûêå, â êîòîðîì îòñóòñòâóþò ïðîáëåìû ñ óêàçàòåëÿìè è ïð., ñâîéñòâåííûå C è C++. Ïîäîáíî äâóì ïðåäûäóùèì, ýòîò ïîäõîä ñóùåñòâóåò äåñÿòèëåòèÿ. Îí èñïîëüçîâàëñÿ â êîìïüþòåðå Burroughs B5000. Òîãäà åäèíñòâåííûì äîñòóïíûì ÿçûêîì áûë Algol, è çàùèòà ïîääåðæèâàëàñü íå óñòðîéñòâîì óïðàâëåíèÿ ïàìÿòüþ, à çà ñ÷åò íåâîçìîæíîñòè ãåíåðàöèè "îïàñíîãî" êîäà êîìïèëÿòîðîì ÿçûêà Algol.

Ñèñòåìà, íàçûâàåìàÿ Singularity (http://research.microsoft.com/os/singularity), ïèøåòñÿ ïî÷òè öåëèêîì íà íîâîì òèïèçèðîâàííîì ÿçûêå Sing#. Ýòîò ÿçûê îñíîâàí íà C#, íî äîïîëíåí ïðèìèòèâàìè ïåðåäà÷è ñîîáùåíèé, ñåìàíòèêà êîòîðûõ îïðåäåëÿåòñÿ ôîðìàëüíûìè, ïèñüìåííûìè êîíòðàêòàìè. Ïîñêîëüêó áåçîïàñíîñòü ÿçûêà ñòðîãî îãðàíè÷èâàåò ïîâåäåíèå ñèñòåìû è ïðîöåññîâ, âñå ïðîöåññû âûïîëíÿþòñÿ â åäèíîì âèðòóàëüíîì àäðåñíîì ïðîñòðàíñòâå. Ýòà ñõåìà âåäåò êàê ê áåçîïàñíîñòè (ïîñêîëüêó êîìïèëÿòîð íå ïîçâîëÿåò ïðîöåññó îáðàùàòüñÿ ê äàííûì ëþáîãî äðóãîãî ïðîöåññà), òàê è ê ýôôåêòèâíîñòè (ïîñêîëüêó óñòðàíÿåòñÿ ïîòðåáíîñòü â îáðàùåíèÿõ ê ÿäðó è ïåðåêëþ÷åíèÿõ êîíòåêñòà).

Êðîìå òîãî, ñõåìà Singularity ÿâëÿåòñÿ ãèáêîé, ïîòîìó ÷òî êàæäûé ïðîöåññ ÿâëÿåòñÿ çàìêíóòûì îáúåêòîì è ïîòîìó îáëàäàåò ñîáñòâåííûì êîäîì, ñòðóêòóðàìè äàííûõ, ðàñïðåäåëåíèåì ïàìÿòè, ïîäñèñòåìîé âðåìåíè âûïîëíåíèÿ, áèáëèîòåêàìè è ñáîðùèêîì ìóñîðà. Óñòðîéñòâî óïðàâëåíèÿ ïàìÿòüþ èñïîëüçóåòñÿ òîëüêî äëÿ îòîáðàæåíèÿ ñòðàíèö, à íå äëÿ îáðàçîâàíèÿ îòäåëüíîé çàùèùåííîé îáëàñòè äëÿ êàæäîãî ïðîöåññà. Êëþ÷åâûì ïðèíöèïîì îðãàíèçàöèè Singularity ÿâëÿåòñÿ çàïðåùåíèå äèíàìè÷åñêèõ ðàñøèðåíèé ïðîöåññîâ.  ÷àñòíîñòè, íå äîïóñêàþòñÿ çàãðóæàåìûå äðàéâåðû è ïîäêëþ÷àåìûå ìîäóëè áðàóçåðîâ, ïîñêîëüêó îíè ìîãóò ïðèâíåñòè íåïðîâåðåííûé êîä, êîòîðûé ìîæåò ïîâðåäèòü îñíîâíîé ïðîöåññ. Òàêèå ðàñøèðåíèÿ äîëæíû çàïóñêàòüñÿ, êàê îòäåëüíûå ïðîöåññû, ïîëíîñòüþ îòãîðîæåííûå è îáùàþùèåñÿ íà îñíîâå ñòàíäàðòíîãî ìåõàíèçìà IPC.

Îïåðàöèîííàÿ ñèñòåìà Singularity ñîñòîèò èç ïðîöåññà ìèêðîÿäðà è íàáîðà ïîëüçîâàòåëüñêèõ ïðîöåññîâ, îáû÷íî èñïîëíÿåìûõ â îáùåì âèðòóàëüíîì àäðåñíîì ïðîñòðàíñòâå. Ìèêðîÿäðî óïðàâëÿåò äîñòóïîì ê àïïàðàòóðå, âûäåëÿåò è îñâîáîæäàåò ïàìÿòü, ñîçäàåò, ëèêâèäèðóåò è ïëàíèðóåò ïîòîêè óïðàâëåíèÿ, óïðàâëÿåò ñèíõðîíèçàöèåé ïîòîêîâ óïðàâëåíèÿ ñ ïîìîùüþ ìüþòåêñîâ, ìåæïðîöåññíîé ñèíõðîíèçàöèåé ñ èñïîëüçîâàíèåì êàíàëîâ, à òàêæå ââîäîì-âûâîäîì. Êàæäûé äðàéâåð óñòðîéñòâà âûïîëíÿåòñÿ â îòäåëüíîì ïðîöåññå.

Õîòÿ áîëüøàÿ ÷àñòü ìèêðîÿäðà íàïèñàíà íà Sing#, íåáîëüøàÿ ÷àñòü íàïèñàíà íà C#, C++ è ÿçûêå àññåìáëåðà, è ýòîé ÷àñòè ïðèõîäèòñÿ äîâåðÿòü, ïîñêîëüêó âåðèôèöèðîâàòü åå íåâîçìîæíî. Äîâåðåííûé êîä âêëþ÷àåò óðîâåíü àáñòðàêöèè àïïàðàòóðû è ñáîðùèê ìóñîðà. Óðîâåíü àáñòðàêöèè àïïàðàòóðû ñêðûâàåò îò ñèñòåìû íèçêîóðîâíåâûå äåòàëè àïïàðàòóðû, òàêèå êàê ïîðòû ââîäà-âûâîäà, ïóòè çàïðîñà ïðåðûâàíèé, êàíàëû ïðÿìîãî äîñòóïà ê ïàìÿòè è òàéìåðû. Îñòàëüíîé ÷àñòè îïåðàöèîííîé ñèñòåìû ïðåäîñòàâëÿåòñÿ ìàøèííî-íåçàâèñèìàÿ àáñòðàêöèÿ.

Ïîëüçîâàòåëüñêèå ïðîöåññû ïîëó÷àþò ñèñòåìíûå óñëóãè ïóòåì ïîñûëêè ñòðîãî òèïèçèðîâàííûõ ñîîáùåíèé â ìèêðîÿäðî ÷åðåç äâóõòî÷å÷íûå êàíàëû.  îòëè÷èå îò äðóãèõ ñèñòåì ïåðåäà÷è ñîîáùåíèé, â êîòîðûõ ïîääåðæèâàþòñÿ áèáëèîòå÷íûå ôóíêöèè SEND è RECEIVE, â Sing# ïîëíîñòüþ ïîääåðæèâàþòñÿ êàíàëû íà óðîâíå ÿçûêà, âêëþ÷àÿ ôîðìàëüíóþ òèïèçàöèþ è ñïåöèôèêàöèè ïðîòîêîëà.

 Singularity ïîääåðæèâàåòñÿ ñîâìåñòíî èñïîëüçóåìàÿ ïðîöåññàìè "êó÷à" îáúåêòîâ, íî â êàæäûé ìîìåíò âðåìåíè êàæäûé îáúåêò èç êó÷è ïðèíàäëåæèò òîëüêî îäíîìó ïðîöåññó. Îäíàêî âëàäåíèå îáúåêòîì ìîæåò áûòü ïåðåäàíî äðóãîìó ïðîöåññó ÷åðåç êàíàë. Íàïðèìåð, êîãäà äðàéâåð äèñêà ñ÷èòûâàåò áëîê, îí ïîìåùàåò ýòîò áëîê â êó÷ó. Ïîòîì ñèñòåìà ïåðåäàåò äåñêðèïòîð (handle) ýòîãî áëîêà ïðîöåññó, çàïðîñèâøåìó äàííûå, ïîääåðæèâàÿ ïðèíöèï åäèíñòâåííîãî âëàäåëüöà, íî ïîçâîëÿÿ ïåðåäàâàòü äàííûå áåç êîïèðîâàíèÿ.

Äëÿ âñåõ ñëóæá â Singularity ïîääåðæèâàåòñÿ åäèíîå èåðàðõè÷åñêîå ïðîñòðàíñòâî èìåí. Ñåðâåð êîðíåâîãî èìåíè óïðàâëÿåò âåðõíåé ÷àñòüþ äåðåâà, íî ê åãî óçëàì ìîãóò ìîíòèðîâàòüñÿ äðóãèå ñåðâåðû èìåí.  ÷àñòíîñòè, ôàéëîâàÿ ñèñòåìà, êîòîðàÿ ÿâëÿåòñÿ âñåãî ëèøü ïðîöåññîì, ìîíòèðóåòñÿ ê óçëó /fs, òàê ÷òî /fs/users/linda/foo ìîæåò áûòü èìåíåì ïîëüçîâàòåëüñêîãî ôàéëà. Ôàéëû ðåàëèçóþòñÿ â âèäå B-äåðåâüåâ, êëþ÷àìè êîòîðûõ ÿâëÿþòñÿ íîìåðà áëîêîâ. Ïðè îáðàáîòêå ñèñòåìíûõ âûçîâîâ ôàéëîâàÿ ñèñòåìà òðåáóåò îò äèñêîâîãî äðàéâåðà ïîìåñòèòü â êó÷ó íóæíûå áëîêè. Çàòåì âëàäåíèå áëîêîì ïåðåäàåòñÿ ïî öåïî÷êå ïîëüçîâàòåëüñêîìó ïðîöåññó.

Äëÿ êàæäîãî êîìïîíåíòà ñèñòåìû èìåþòñÿ ìåòàäàííûå, îïèñûâàþùèå åãî çàâèñèìîñòè, ýêñïîðòèðîâàíèå, ðåñóðñû è ïîâåäåíèå. Ýòè ìåòàäàííûå èñïîëüçóþòñÿ äëÿ âåðèôèêàöèè. Îáðàç ñèñòåìû ñîñòîèò èç ìèêðîÿäðà, äðàéâåðîâ è ïðèëîæåíèé, òðåáóåìûõ äëÿ âûïîëíåíèÿ ñèñòåìû, è èõ ìåòàäàííûõ. Âíåøíèå âåðèôèêàòîðû ìîãóò âûïîëíèòü ìíîãî÷èñëåííûå ïðîâåðêè îáðàçà äî çàïóñêà ñèñòåìû; â ÷àñòíîñòè, òàêèì îáðàçîì ìîæíî óáåäèòüñÿ â òîì, ÷òî äðàéâåðû íå êîíôëèêòóþò ïî ðåñóðñàì. Âåðèôèêàöèÿ ñîñòîèò èç òðåõ øàãîâ. Ñíà÷àëà êîìïèëÿòîð êîíòðîëèðóåò òèïû, âëàäåíèå îáúåêòàìè, ïðîòîêîëû êàíàëîâ è ò.ä. Çàòåì êîìïèëÿòîð ãåíåðèðóåò âíóòðåííåå ïðåäñòàâëåíèå íà ÿçûêå MSIL (Microsoft Intermediate Language), ïåðåíîñèìûé áàéò-êîä, êîòîðûé ìîæåò ïðîâåðÿòüñÿ âåðèôèêàòîðîì. Íàêîíåö, ïðåäñòàâëåíèå ñèñòåìû íà MSIL êîìïèëèðóåòñÿ â êîìàíäíûé êîä x86 êîìïèëÿòîðîì ïîñòîáðàáîòêè, êîòîðûé ìîæåò âñòàâëÿòü â êîä ïðîâåðêè âðåìåíè âûïîëíåíèÿ. Òàêàÿ èçáûòî÷íàÿ âåðèôèêàöèÿ ñëóæèò äëÿ îòëàâëèâàíèÿ îøèáîê â ñàìèõ âåðèôèêàòîðàõ.

Ïîêà íåïîíÿòíî, êàêîé èç ðàññìîòðåííûõ â ñòàòüå ÷åòûðåõ ïîäõîäîâ áóäåò ïðèíÿò øèðîêî è íàäîëãî (è áóäåò ëè ïðèíÿò õîòÿ áû îäèí èç íèõ). Òåì íå ìåíåå, èíòåðåñíî îòìåòèòü, ÷òî ìèêðîÿäåðíûå îïåðàöèîííûå ñèñòåìû ìîãóò îáðåñòè íîâóþ æèçíü áëàãîäàðÿ ïîòåíöèàëüíîé âîçìîæíîñòè îáåñïå÷èâàòü áîëåå âûñîêóþ íàäåæíîñòü, êîòîðàÿ ñåé÷àñ ìîæåò ñ÷èòàòüñÿ áîëåå âàæíîé õàðàêòåðèñòèêîé, ÷åì ïðîèçâîäèòåëüíîñòü.

Ðóáðèêè:  Ïî È-íåòó
Ìåòêè:  

 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó