"Ìîæåì ëè ìû ñäåëàòü îïåðàöèîííûå ñèñòåìû íàäåæíûìè è áåçîïàñíûìè" |
Èñòî÷íèê: http://www.citforum.ru/operating_systems/microkernel_tanenbaum/
Êñòàòè, èìåííî ýòà ñòàòüÿ âûçâàëà íîâûé âèòîê äèñêóññèè Ýíäðþ Òàíåíáàóìà ñ Ëèíóñîì Òîðâàëüäñîì (ïåðâûé ñïîð î ìèêðîÿäåðíîì ïîäõîäå âîçíèê åùå â 1992 ã.).
Ïîêóïàòåëè êîìïüþòåðîâ ðàññ÷èòûâàþò íà òàêóþ æå èõ íàäåæíîñòü, êàê, íàïðèìåð, ó òåëåâèçîðîâ: êóïèë, ïîäêëþ÷èë ê ñåòè, è êîìïüþòåð íàäåæíî ðàáîòàåò â òå÷åíèå 10 ëåò. Íàèáîëüøèå íàðóøåíèÿ íàäåæíîñòè è áåçîïàñíîñòè êîìïüþòåðîâ âûçûâàåò îïåðàöèîííàÿ ñèñòåìà. Õîòÿ â ïðèêëàäíûõ ïðîãðàììàõ ìîæåò ñîäåðæàòüñÿ ìíîãî äåôåêòîâ, åñëè áû îïåðàöèîííûå ñèñòåìû áûëè ñâîáîäíû îò îøèáîê, îøèáêè â ïðèëîæåíèÿõ ìîãëè áû ïðè÷èíÿòü òîëüêî îãðàíè÷åííûé óùåðá. Õàðàêòåðèñòèêè íàäåæíîñòè è áåçîïàñíîñòè îïåðàöèîííûõ ñèñòåì ÿâëÿþòñÿ âçàèìîñâÿçàííûìè. Íàïðèìåð, îøèáêà ïåðåïîëíåíèÿ áóôåðà ìîæåò ïðèâåñòè ê êðàõó ñèñòåìû (ïðîáëåìà íàäåæíîñòè), íî òà æå îøèáêà ìîæåò ïîçâîëèòü ïðîíèêíóòü â êîìïüþòåð óìåëî íàïèñàííîìó âèðóñó èëè ÷åðâþ (ïðîáëåìà áåçîïàñíîñòè). Ïîâûøåíèå óðîâíÿ íàäåæíîñòè ñïîñîáñòâóåò ïîâûøåíèþ óðîâíÿ áåçîïàñíîñòè.
 ñîâðåìåííûõ îïåðàöèîííûõ ñèñòåìàõ èìåþòñÿ äâå õàðàêòåðèñòèêè, äåëàþùèå èõ íåíàäåæíûìè è íåáåçîïàñíûìè: îíè îãðîìíû è îáëàäàþò î÷åíü ïëîõîé èçîëÿöèåé ñáîåâ.  ÿäðå ÎÑ Linux ñîäåðæèòñÿ áîëåå 2,5 ìèëëèîíîâ ñòðîê êîäà, â ÿäðå Windows XP - â äâà ñ ëèøíèì ðàçà áîëüøå.  îäíîì èç èññëåäîâàíèé íàäåæíîñòè ïðîãðàììíîãî îáåñïå÷åíèÿ ïîêàçàíî, ÷òî â ïðîãðàììàõ èìååòñÿ îò øåñòè äî øåñòíàäöàòè îøèáîê íà 1000 ñòðîê èñïîëíÿåìîãî êîäà; â äðóãîì èññëåäîâàíèè íàñ÷èòûâàåòñÿ îò äâóõ äî 75 îøèáîê íà 1000 ñòðîê èñïîëíÿåìîãî êîäà â çàâèñèìîñòè îò ðàçìåðà ìîäóëÿ. Ïðè òàêèõ îöåíêàõ ÿäðî Linux ñîäåðæèò îêîëî 15000 îøèáîê, à Windows XP - áîëüøå 30000 îøèáîê. Åùå õóæå òî, ÷òî îêîëî 70% êîäà îïåðàöèîííûõ ñèñòåì çàíèìàåò êîä äðàéâåðîâ óñòðîéñòâ, â êîòîðûõ îøèáêè âñòðå÷àþòñÿ â 3-7 ðàç ÷àùå, ÷åì â îáû÷íîì êîäå. Ïîíÿòíî, ÷òî ïðîñòî íåâîçìîæíî íàéòè è èñïðàâèòü âñå îøèáêè; áîëåå òîãî, ïðè èñïðàâëåíèè îøèáîê ÷àñòî ïðèâíîñÿòñÿ íîâûå.
Áîëüøîé ðàçìåð ñîâðåìåííûõ îïåðàöèîííûõ ñèñòåì îçíà÷àåò, ÷òî íè îäèí ÷åëîâåê íå ìîæåò ïîíèìàòü ñèñòåìó öåëèêîì, â ðåçóëüòàòå ÷åãî óïðàâëåíèå ñèñòåìîé ñòàíîâèòñÿ î÷åíü òðóäíûì äåëîì. Íî òî æå ìîæíî ñêàçàòü, íàïðèìåð, è ïðî àâèàíîñåö. Íè îäèí îòäåëüíûé ÷åëîâåê íå çíàåò, êàê ðàáîòàåò àâèàíîñåö, íî âñå åãî ïîäñèñòåìû õîðîøî èçîëèðîâàíû. Ïðîáëåìà çàñîðåííîãî òóàëåòà íå âëèÿåò íà ïîäñèñòåìó çàïóñêà ðàêåò. Ó îïåðàöèîííûõ ñèñòåì îòñóòñòâóåò ïîäîáíàÿ èçîëÿöèÿ êîìïîíåíòîâ. Ñîâðåìåííàÿ îïåðàöèîííàÿ ñèñòåìà ñîäåðæèò ñîòíè è òûñÿ÷è ñâÿçàííûõ âìåñòå ïðîöåäóð, êîòîðûå îáðàçóþò åäèíóþ áèíàðíóþ ïðîãðàììó, âûïîëíÿåìóþ â ÿäðå. Êàæäàÿ èç ìèëëèîíîâ ñòðîê êîäà ÿäðà èìååò âîçìîæíîñòü çàïèñè â êëþ÷åâûå ñòðóêòóðû äàííûõ, èñïîëüçóåìûå íåñâÿçàííûì ñ íåé êîìïîíåíòîì, ÷òî ìîæåò ïðèâåñòè ê êðàõó ñèñòåìû.
Õîòÿ ýêñïåðèìåíòû ïîêàçàëè, ÷òî Nooks ìîæåò ïåðåõâàòèòü 99% ôàòàëüíûõ îøèáîê äðàéâåðîâ è 55% èõ ïðî÷èõ îøèáîê, ñèñòåìà íå ÿâëÿåòñÿ ñîâåðøåííîé. Íàïðèìåð, â äðàéâåðàõ ìîãóò âûïîëíÿòüñÿ ïðèâèëåãèðîâàííûå êîìàíäû, êîòîðûì â íèõ âûïîëíÿòüñÿ íå ïîëàãàåòñÿ; â íèõ ìîæåò ïðîèçâîäèòüñÿ çàïèñü â íåâåðíûå ïîðòû; â íèõ ìîãóò âîçíèêàòü áåñêîíå÷íûå öèêëû. Êðîìå òîãî, ãðóïïå Nooks ïðèøëîñü âðó÷íóþ íàïèñàòü áîëüøîå ÷èñëî îáîëî÷åê äðàéâåðîâ, è â íèõ ñàìèõ ìîãóò ñîäåðæàòüñÿ îøèáêè. Íàêîíåö, íå ïðåäîòâðàùàåòñÿ ïîëíîñòüþ âîçìîæíîñòü äîñòóïà ïî çàïèñè êî âñåé ïàìÿòè. Òåì íå ìåíåå, ýòîò ïðîåêò ÿâëÿåòñÿ ïîòåíöèàëüíî ïîëåçíûì øàãîì ê ïîâûøåíèþ íàäåæíîñòè óíàñëåäîâàííûõ îïåðàöèîííûõ ñèñòåì.
Âòîðîé ïîäõîä ïðîèçðàñòàåò èç êîíöåïöèè âèðòóàëüíîé ìàøèíû. Èäåÿ ñîñòîèò â çàïóñêå íà "ãîëîé" àïïàðàòóðå âìåñòî îïåðàöèîííîé ñèñòåìû ñïåöèàëüíîé óïðàâëÿþùåé ïðîãðàììû, êîòîðàÿ íàçûâàåòñÿ ìîíèòîðîì âèðòóàëüíîé ìàøèíû. Âèðòóàëüíàÿ ìàøèíà ñîçäàåò íåñêîëüêî ýêçåìïëÿðîâ íàñòîÿùåé ìàøèíû. Íà êàæäîì ýêçåìïëÿðå ìîæåò âûïîëíÿòüñÿ ïðîãðàììíîå îáåñïå÷åíèå, êîòîðîå ìîãëî áû ðàáîòàòü íà ôèçè÷åñêîé ìàøèíå. Ýòîò ìåòîä îáû÷íî èñïîëüçóåòñÿ äëÿ îäíîâðåìåííîãî âûïîëíåíèÿ íà îäíîé àïïàðàòóðå íåñêîëüêèõ îïåðàöèîííûõ ñèñòåì, íàïðèìåð, Linux è Windows.
 ïðèíöèïå, ýòîò ïîäõîä äîëæåí îáåñïå÷èâàòü áîëåå âûñîêóþ íàäåæíîñòü, ÷åì ó îòäåëüíîé îïåðàöèîííîé ñèñòåìû, ïîñêîëüêó ïðè îòêàçå âèðòóàëüíîé ìàøèíû, ñîäåðæàùåé îäèí èëè íåñêîëüêî äðàéâåðîâ, ýòà âèðòóàëüíàÿ ìàøèíà ìîæåò áûòü ïåðåçàïóùåíà, à äðàéâåðû ìîãóò áûòü âîçâðàùåíû â èñõîäíîå ñîñòîÿíèå. Çäåñü íå ïðåäïðèíèìàþòñÿ ïîïûòêè âåðíóòü äðàéâåðû â ñîñòîÿíèå, ïðåäøåñòâóþùåå îòêàçó, êàê ýòî äåëàåòñÿ â Nooks. Èçìåðåíèÿ ïðîèçâîäèòåëüíîñòè ïîêàçûâàþò, ÷òî íàêëàäíûå ðàñõîäû íà èñïîëüçîâàíèå ïàðàâèðòóàëüíûõ ìàøèí â òàêîé ìàíåðå ñîñòàâëÿþò îêîëî 3-8%.
Ïåðâûå äâà ïîäõîäà ñôîêóñèðîâàíû íà ïîâûøåíèè íàäåæíîñòè óíàñëåäîâàííûõ îïåðàöèîííûõ ñèñòåì. Ñëåäóþùèå äâà ïîäõîäà îðèåíòèðîâàíû íà ñîçäàíèå áóäóùèõ íàäåæíûõ ñèñòåì. Îäèí èç ýòèõ ïîäõîäîâ ðàçðóøàåò ñàìó ñóòü ïðîáëåìû: íàëè÷èå âñåé îïåðàöèîííîé ñèñòåìû â âèäå îäíîé ãèãàíòñêîé ïðîãðàììû, âûïîëíÿåìîé â ðåæèìå ÿäðà. Âìåñòî ýòîãî â ðåæèìå ÿäðà ðàáîòàåò òîëüêî êðîøå÷íîå ìèêðîÿäðî, à îñòàëüíàÿ ÷àñòü îïåðàöèîííîé ñèñòåìû âûïîëíÿåòñÿ â ïîëüçîâàòåëüñêîì ðåæèìå â âèäå íàáîðà ïîëíîñòüþ èçîëèðîâàííûõ ïðîöåññîâ ñåðâåðîâ è äðàéâåðîâ. Ýòîé èäåå ïî÷òè äâàäöàòü ëåò, íî â ïðîøëûå ãîäû îíà íå áûëà ïîëíîñòüþ èññëåäîâàíà, ïîñêîëüêó îáåñïå÷èâàëà ñëåãêà õóäøóþ ïðîèçâîäèòåëüíîñòü, ÷åì ìîíîëèòíîå ÿäðî.  1980-å ãã. ïðîèçâîäèòåëüíîñòü ñòîÿëà íà ïåðâîì ìåñòå, à íàäåæíîñòü è áåçîïàñíîñòü íåäîîöåíèâàëèñü. Îäíàêî âðåìåíà ìåíÿþòñÿ, à âìåñòå ñ íèìè è ïðåäñòàâëåíèÿ ëþäåé î òîì, ÷òî ÿâëÿåòñÿ âàæíûì.
Íàä óðîâíåì ìèêðîÿäðà íàõîäèòñÿ óðîâåíü äðàéâåðîâ óñòðîéñòâ. Äëÿ êàæäîãî óñòðîéñòâà ââîäà-âûâîäà èìååòñÿ ñîáñòâåííûé äðàéâåð, âûïîëíÿåìûé â âèäå îòäåëüíîãî ïðîöåññà â ñîáñòâåííîì àäðåñíîì ïðîñòðàíñòâå, çàùèùåííîì àïïàðàòóðîé óñòðîéñòâà óïðàâëåíèÿ ïàìÿòüþ. Äðàéâåðû ðàáîòàþò â ïîëüçîâàòåëüñêîì ðåæèìå è íå ìîãóò èñïîëíÿòü ïðèâèëåãèðîâàííûå êîìàíäû, à òàêæå ÷èòàòü èç ïîðòîâ êîìïüþòåðà èëè ïèñàòü â íèõ. Äëÿ ïîëó÷åíèÿ ïîñëåäíåé âîçìîæíîñòè îíè äîëæíû ïðîèçâîäèòü âûçîâû ÿäðà. Òàêàÿ êîíñòðóêöèÿ ïîâûøàåò íàäåæíîñòü, õîòÿ è ïîðîæäàåò íåáîëüøèå äîïîëíèòåëüíûå ðàñõîäû.
Ïîâåðõ óðîâíÿ äðàéâåðîâ óñòðîéñòâ ðàñïîëàãàåòñÿ óðîâåíü ñåðâåðîâ. Ôàéëîâûé ñåðâåð ÿâëÿåòñÿ íåáîëüøîé (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 (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 êîìïèëÿòîðîì ïîñòîáðàáîòêè, êîòîðûé ìîæåò âñòàâëÿòü â êîä ïðîâåðêè âðåìåíè âûïîëíåíèÿ. Òàêàÿ èçáûòî÷íàÿ âåðèôèêàöèÿ ñëóæèò äëÿ îòëàâëèâàíèÿ îøèáîê â ñàìèõ âåðèôèêàòîðàõ.
Ïîêà íåïîíÿòíî, êàêîé èç ðàññìîòðåííûõ â ñòàòüå ÷åòûðåõ ïîäõîäîâ áóäåò ïðèíÿò øèðîêî è íàäîëãî (è áóäåò ëè ïðèíÿò õîòÿ áû îäèí èç íèõ). Òåì íå ìåíåå, èíòåðåñíî îòìåòèòü, ÷òî ìèêðîÿäåðíûå îïåðàöèîííûå ñèñòåìû ìîãóò îáðåñòè íîâóþ æèçíü áëàãîäàðÿ ïîòåíöèàëüíîé âîçìîæíîñòè îáåñïå÷èâàòü áîëåå âûñîêóþ íàäåæíîñòü, êîòîðàÿ ñåé÷àñ ìîæåò ñ÷èòàòüñÿ áîëåå âàæíîé õàðàêòåðèñòèêîé, ÷åì ïðîèçâîäèòåëüíîñòü.
| Ðóáðèêè: | Ïî È-íåòó |
| Êîììåíòèðîâàòü | « Ïðåä. çàïèñü — Ê äíåâíèêó — Ñëåä. çàïèñü » | Ñòðàíèöû: [1] [Íîâûå] |