А.В. Столяров - Введение в операционные системы (1152218), страница 19
Текст из файла (страница 19)
Ñàìî ïî ñåáå ýòî íå ïðèâîäèòê èçìåíåíèþ ðàçìåðà ôàéëà, íî åñëè ïîñëå ýòîãî ïðîèçâåñòè çàïèñü, ðàçìåð ôàéëà óâåëè÷èòñÿ (êîíå÷íî, ôàéë ïðè ýòîì äîëæåí áûòü îòêðûò â ðåæèìå, äîïóñêàþùåì çàïèñü). Ïðè ýòîìâîçìîæíî îáðàçîâàíèå äûðêè ìåæäó ïîñëåäíèìè äàííûìè ïåðåä ñòàðûì êîíöîì ôàéëà èïåðâûìè äàííûìè, çàïèñàííûìè ñ íîâîé ïîçèöèè.
Òàêèì îáðàçîì, íàïðèìåð, ìîæíî ñîçäàòüíà ìåãàáàéòíîé äèñêåòå ôàéë ðàçìåðîì â ãèãàáàéò. Ýòî êîððåêòíî, ò.ê. â ÎÑ Unix òàêèå äûðêè íå çàïîëíÿþòñÿ ðåàëüíûìè äàííûìè è íå çàíèìàþò ìåñòà íà äèñêå, ïîêà êòî-íèáóäü íåïðîèçâåäåò îïåðàöèþ çàïèñè.12.412.4.1Ôàéëû óñòðîéñòâ è êëàññèôèêàöèÿ óñòðîéñòâÎáîáùåííîå ïîíÿòèå ôàéëàÎäíèì èç çàìå÷àòåëüíûõ ñâîéñòâ ÎÑ Unix ÿâëÿåòñÿ îáîáùåííàÿ êîíöåïöèÿ ôàéëà êàê óíèâåðñàëüíîé àáñòðàêöèè. Ïðàêòè÷åñêè ëþáîå âíåøíåóñòðîéñòâî ïðåäñòàâëÿåòñÿ íà ïîëüçîâàòåëüñêîì óðîâíå êàê ôàéë ñïåöèàëüíîãî òèïà.
Ýòî êàñàåòñÿ, â ÷àñòíîñòè, è æåñòêèõ äèñêîâ, è âñåâîçìîæíûõ ïîñëåäîâàòåëüíûõ è ïàðàëëåëüíûõ ïîðòîâ, è âèðòóàëüíûõ òåðìèíàëîâ, è ò.ï..Òàê, ÷àñòî âîçíèêàåò çàäà÷à ñîçäàíèÿ îáðàçà êîìïàêò-äèñêà (CD). Òàêîå ìîæåò ïîòðåáîâàòüñÿ, íàïðèìåð, ïðè ñîçäàíèè êîïèè äèñêà.  íåêîòîðûõäðóãèõ îïåðàöèîííûõ ñèñòåìàõ äëÿ ïðîâåäåíèÿ òàêîé îïåðàöèè íåîáõîäèìîñïåöèàëüíîå ïðîãðàììíîå îáåñïå÷åíèå. ×òî êàñàåòñÿ ÎÑ Unix, òî òóò îáû÷íîäîñòàòî÷íî âñòàâèòü äèñê â ïðèâîä è äàòü êîìàíäócat /dev/cdrom > image.isoÒî÷íî òàê æå, ÷òîáû, ñêàæåì, îòïðàâèòü ôàéë íà ïå÷àòü, äîñòàòî÷íî êîìàíäûcat myfile.ps > /dev/lp0Êîíå÷íî, îáû÷íî òàê íå äåëàþò, ïîëàãàÿñü íà ïîäñèñòåìó ïå÷àòè, îäíàêî íàìâ äàííîì ñëó÷àå âàæíåå ñàì ôàêò òàêîé âîçìîæíîñòè.82Äåëî â òîì, ÷òî òàêîé ïîäõîä ïîçâîëÿåò îñóùåñòâëÿòü ðàáîòó ñ óñòðîéñòâàìè â îñíîâíîì ñ ïîìîùüþ òåõ æå ñàìûõ ñèñòåìíûõ âûçîâîâ, ÷òî è ðàáîòóñ îáû÷íûìè ôàéëàìè.
Òàê, ÷òîáû çàïèñàòü èíôîðìàöèþ â îïðåäåëåííûé ñåêòîð æåñòêîãî äèñêà, â äðóãèõ îïåðàöèîííûõ ñèñòåìàõ òðåáóåòñÿ îáðàòèòüñÿ êñèñòåìíîìó âûçîâó, ñïåöèàëüíî ïðåäíàçíà÷åííîìó äëÿ çàïèñè ñåêòîðîâ ôèçè÷åñêîãî äèñêà.  ÎÑ Unix äîñòàòî÷íî îòêðûòü íà ÷òåíèå ñïåöèàëüíûé ôàéë,ñîîòâåòñòâóþùèé íóæíîìó äèñêó, ñ ïîìîùüþ âûçîâà lseek() ïîçèöèîíèðîâàòüñÿ íà íóæíûé ñåêòîð è âûäàòü îáû÷íûé write(). Èìåííî òàê îñóùåñòâëÿåòñÿ, íàïðèìåð, âûñîêîóðîâíåâàÿ ðàçìåòêà (ôîðìàòèðîâàíèå) äèñêîâ.Òî÷íî òàê æå, íàïðèìåð, ïðè ââîäå çâóêîâîãî ñèãíàëà ñ ìèêðîôîíà ìîæíî îòêðûòü íà ÷òåíèå ôàéë, ñîîòâåòñòâóþùèé çâóêîâîìó óñòðîéñòâó, è ïðîèçâåñòè ÷òåíèå.
Åñëè ïðî÷èòàííóþ èíôîðìàöèþ çàòåì çàïèñàòü îáðàòíî âçâóêîâîå óñòðîéñòâî, çâóê áóäåò âîñïðîèçâåäåí.Íàäî îòìåòèòü, ÷òî íåêîòîðûå ïåðèôåðèéíûå óñòðîéñòâà ìîãóò è íå èìåòüôàéëîâîãî ïðåäñòàâëåíèÿ. Íàïðèìåð, íå âî âñåõ ÎÑ ñåìåéñòâà Unix ñóùåñòâóþò ôàéëû, ñâÿçàííûå ñ ñåòåâûìè èíòåðôåéñàìè.12.4.2Äâà òèïà óñòðîéñòâÓñòðîéñòâà, äëÿ êîòîðûõ èìååòñÿ ïðåäñòàâëåíèå â âèäå ôàéëà, äåëÿòñÿ íàäâà òèïà: ñèìâîëüíûå (èëè ïîòîêîâûå ) è áëî÷íûå. Äëÿ îáîçíà÷åíèÿ òåõ æåïîíÿòèé ìîãóò èñïîëüçîâàòüñÿ òåðìèíû áàéò-îðèåíòèðîâàííûå è áëîêîðèåíòèðîâàííûå óñòðîéñòâà.Îñíîâíûìè îïåðàöèÿìè íàä áàéò-îðèåíòèðîâàííûìè óñòðîéñòâàìè ÿâëÿþòñÿ çàïèñü è ÷òåíèå îäíîãî (î÷åðåäíîãî) ñèìâîëà (áàéòà).
 ïðîòèâîïîëîæíîñòü ýòîìó, áëîê-îðèåíòèðîâàííûå óñòðîéñòâà âîñïðèíèìàþòñÿ êàê õðàíèëèùå äàííûõ, ðàçäåëåííûõ íà áëîêè ôèêñèðîâàííîãî ðàçìåðà; îñíîâíûìèîïåðàöèÿìè, ñîîòâåòñòâåííî, ÿâëÿþòñÿ ÷òåíèå è çàïèñü çàäàííîãî áëîêà.Ïðèìåðàìè áàéò-îðèåíòèðîâàííûõ óñòðîéñòâ ÿâëÿþòñÿ òåðìèíàë (êëàâèàòóðà è óñòðîéñòâî îòîáðàæåíèÿ), ïðèíòåð7 , ìàíèïóëÿòîð ìûøü, çâóêîâàÿ êàðòà. Ñóùåñòâóþò òàêæå ÷èñòî âèðòóàëüíûå ñèìâîëüíûå óñòðîéñòâà,íå èìåþùèå ôèçè÷åñêîãî âîïëîùåíèÿ. Òàê, óñòðîéñòâî /dev/null ïîçâîëÿåòïðîèçâîäèòü â íåãî çàïèñü ëþáîé èíôîðìàöèè, êîòîðàÿ ïîïðîñòó èãíîðèðóåòñÿ; ïîïûòêà ÷èòàòü èç ýòîãî óñòðîéñòâà ñðàçó âûçûâàåò ñèòóàöèþ êîíåöôàéëà. Óñòðîéñòâî /dev/zero ïîçâîëÿåò ïðî÷èòàòü ëþáîå êîëè÷åñòâî áàéò,ïðè÷åì âñå ïðî÷èòàííûå áàéòû áóäóò ðàâíû íóëþ. Óñòðîéñòâî /dev/randomâûäàåò ÷èòàþùåìó ïðîöåññó ïîñëåäîâàòåëüíîñòü ïñåâäîñëó÷àéíûõ ÷èñåë, èò.ï.7 Òî÷íååáûëî áû ñêàçàòüïðèíòåðíûé ïîðò83 âèäå áëîê-îðèåíòèðîâàííûõ óñòðîéñòâ îáû÷íî ïðåäñòàâëÿþòñÿ äèñêè èäðóãèå ïîäîáíûå èì óñòðîéñòâà.
Äåéñòâèòåëüíî, äèñêîâûå óñòðîéñòâà îáû÷íî ïîçâîëÿþò ÷òåíèå èëè çàïèñü òîëüêî öåëûìè ñåêòîðàìè, ÷òî îáóñëîâëåíîîñîáåííîñòÿìè ôèçè÷åñêîé ðåàëèçàöèè òàêèõ óñòðîéñòâ.Íàðÿäó ñ äèðåêòîðèÿìè è ñèìâîëè÷åñêèìè ññûëêàìè, áëîêîðèåíòèðîâàííûå è áàéò-îðèåíòèðîâàííûå óñòðîéñòâà ïðåäñòàâëÿþò ñîáîéåùå äâà ñïåöèàëüíûõ òèïà ôàéëîâ.12.4.3Îïåðàöèè íàä óñòðîéñòâàìèÊàê ìîæíî çàêëþ÷èòü èç ïðåäûäóùåãî ïàðàãðàôà, ôàéëû óñòðîéñòâ ìîæíî îòêðûâàòü íà ÷òåíèå è çàïèñü, à ê ïîëó÷åííûì äåñêðèïòîðàì ïðèìåíÿòüâûçîâû read() è write().Êðîìå òîãî, áëîê-îðèåíòèðîâàííûå óñòðîéñòâà ïîääåðæèâàþò ïîçèöèîíèðîâàíèå ñ ïîìîùüþ âûçîâà lseek().
Ñëåäóåò îòìåòèòü, ÷òî ïîçèöèîíèðîâàòüñÿ ìîæíî â ëþáóþ (ñóùåñòâóþùóþ) òî÷êó óñòðîéñòâà, êîòîðàÿ, âîîáùåãîâîðÿ, íå îáÿçàíà íàõîäèòüñÿ òî÷íî íà ãðàíèöå ñåêòîðà. Ïðî÷èòàòü èëè çàïèñàòü òàêæå ìîæíî ïðîèçâîëüíîå êîëè÷åñòâî äàííûõ; åñëè ÷èòàåìûé èëèçàïèñûâàåìûé ôðàãìåíò íà÷èíàåòñÿ è/èëè çàêàí÷èâàåòñÿ ãäå-òî, êðîìå ãðàíèö áëîêîâ, ñèñòåìà âîçüìåò íà ñåáÿ ðàáîòó ïî îòáðàñûâàíèþ ëèøíåé èíôîðìàöèè ïðè ÷òåíèè èëè ïî ïðåäâàðèòåëüíîìó ïðî÷òåíèþ èíôîðìàöèè èççàòðîíóòûõ ñåêòîðîâ, íàõîäÿùåéñÿ çà ïðåäåëàìè çàïèñûâàåìîãî ôðàãìåíòà,äëÿ ïîñëåäóþùåé çàïèñè ñåêòîðîâ öåëèêîì.Áàéò-îðèåíòèðîâàííûå óñòðîéñòâà îïåðàöèþ ïîçèöèîíèðîâàíèÿíå ïîääåðæèâàþò.
Ýòî, ïîæàëóé, îñíîâíîå îòëè÷èå áàéò-îðèåíòèðîâàííûõóñòðîéñòâ îò áëîê-îðèåíòèðîâàííûõ ñ òî÷êè çðåíèÿ ïðèêëàäíîãî ïðîãðàììèñòà.ßñíî, ÷òî óïðàâëåíèå óñòðîéñòâàìè íå ìîæåò îãðàíè÷èâàòüñÿ òîëüêî îïåðàöèÿìè ÷òåíèÿ è çàïèñè. Ïîýòîìó íàä ïî÷òè êàæäûì óñòðîéñòâîì îïðåäåëåíû òàêæå äîïîëíèòåëüíûå îïåðàöèè, ñïåöèôè÷åñêèå äëÿ äàííîãî óñòðîéñòâà.Ê òàêèì îïåðàöèÿì ìîæíî îòíåñòè, íàïðèìåð, îòêðûòèå è çàêðûòèå ëîòêàïðèâîäà CD-ROM; óñòàíîâêó ñêîðîñòè îáìåíà ïîñëåäîâàòåëüíîãî ïîðòà; íèçêîóðîâíåâóþ ðàçìåòêó ãèáêèõ äèñêîâ; óïðàâëåíèå ãðîìêîñòüþ âîñïðîèçâåäåíèÿ çâóêà çâóêîâîé êàðòîé, è ò.ï.Âñå îïåðàöèè ýòîé êàòåãîðèè âûïîëíÿþòñÿ ñ ïîìîùüþ ñèñòåìíîãî âûçîâàint ioctl(int fd, int request, ...);Ïàðàìåòð fd çàäàåò äåñêðèïòîð îòêðûòîãî ôàéëà óñòðîéñòâà, ïàðàìåòðrequest − êîä íåîáõîäèìîé îïåðàöèè. Ïðè íåîáõîäèìîñòè âûçîâ ìîæåò ïîëó÷àòü äîïîëíèòåëüíûå ïàðàìåòðû, íåîáõîäèìûå äëÿ âûïîëíåíèÿ äàííîé îïåðàöèè.
Òàê, íàïðèìåð, ñëåäóþùèé êîä84int fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);ioctl(fd, CDROMEJECT);ioctl(fd, CDROMCLOSETRAY);îòêðîåò, à çàòåì çàêðîåò ëîòîê ïðèâîäà CD-ROM.ÏàðàìåòðO_NONBLOCK çàäàåòñÿ,÷òîáû èçáåæàòü ïîèñêà äèñêà â óñòðîéñòâå è îøèáêè â ñëó÷àå, åñëè äèñê â óñòðîéñòâî íåâñòàâëåí.Åñëè æå âñòàâèòü â òî æå óñòðîéñòâî ìóçûêàëüíûé äèñê (òî åñòü äèñê âôîðìàòå audio CD), êîästruct cdrom_ti cti;cti.cdti_trk0 = 2;cti.cdti_ind0 = 0;cti.cdti_trk1 = 2;cti.cdti_ind1 = 0;ioctl(fd, CDROMPLAYTRAKIND, &cti);çàñòàâèò âàøå óñòðîéñòâî âîñïðîèçâåñòè âòîðóþ äîðîæêó äèñêà.85Ëåêöèÿ 713Ïðîöåññû: îáùèå ñâåäåíèÿ13.1Ñâîéñòâà ïðîöåññàÊàê óæå ãîâîðèëîñü, ïîä ïðîöåññîì íåôîðìàëüíî ìîæíî ïîíèìàòü ïðîãðàììó, êîòîðàÿ âûïîëíÿåòñÿ ïîä óïðàâëåíèåì îïåðàöèîííîé ñèñòåìû.Ïðîöåññ îáëàäàåò, ïî ìåíüøåé ìåðå, ñëåäóþùèìè ñâîéñòâàìè:• ñåãìåíò êîäà1 ;• ñåãìåíò äàííûõ;• ñòåê;• ñ÷åò÷èê êîìàíä;• ïðàâà è ïîëíîìî÷èÿ;• ðåñóðñû, âûäàííûå â ïîëüçîâàíèå ïðîöåññà îïåðàöèîííîé ñèñòåìîé (íàïðèìåð, îòêðûòûå ôàéëû);• èäåíòèôèêàòîð ïðîöåññà.Åñëè òðåáóåòñÿ áîëåå ôîðìàëüíîå îïðåäåëåíèå ïðîöåññà, ìîæíî â îïðåäåëåíèè ïåðå÷èñëèòü åãî ñâîéñòâà.Ôèçè÷åñêèé ïðîöåññîð â ñèñòåìå ìîæåò áûòü è îäèí.
 îáùåì ñëó÷àå, ïðîöåññîâ â ñèñòåìå ìîæåò áûòü áîëüøå, ÷åì ïðîöåññîðîâ. Ïîýòîìó â êîíêðåòíûéòè,1 Ñëîâîñåãìåíò çäåñü óïîòðåáëÿåòñÿ óñëîâíî; åñëè â ñèñòåìå èñïîëüçóåòñÿ ñòðàíè÷íàÿ ìîäåëü ïàìÿñåãìåíò êîäà ïðåäñòàâëÿåò ñîáîé ìíîæåñòâî ñòðàíèö, ñîäåðæàùèõ êîä, è ò.ï.оввыполнениенирсиплаестыйнмзвыиковщблокировкаготовностьнаступлениесобы ожидатия емогоÐèñ.
18: Óïðîùåííàÿ äèàãðàììà ñîñòîÿíèé ïðîöåññà86ìîìåíò âðåìåíè ïðîöåññ ìîæåò êàê èñïîëíÿòüñÿ, òàê è íå èñïîëíÿòüñÿ, ïðè÷åì ïðîöåññ, êîòîðûé â íàñòîÿùåå âðåìÿ íå èñïîëíÿåòñÿ, ìîæåò áûòü êàêãîòîâ ê âîçîáíîâëåíèþ èñïîëíåíèÿ, òàê è íå ãîòîâ (íàïðèìåð, ïðîöåññ ìîæåò îæèäàòü ðåçóëüòàòîâ îïåðàöèè ââîäà-âûâîäà). Òàêèì îáðàçîì, ïðîöåññìîæåò íàõîäèòüñÿ â îäíîì èç òðåõ ñîñòîÿíèé: âûïîëíåíèå, áëîêèðîâêà (â îæèäàíèè ñîáûòèÿ) è ãîòîâíîñòü (ñì.