TELEGEI

Home

Операциялық жүйелер және орталар

А.В. Батаев

Оқылуы: 0%

Жазылымсыз режим: 20-беттен кейін жазылым беті ашылады, әрі қарай әр 10 бет сайын (ең көбі 5 рет).

20 px
1.85
0.30 px
0.95 em

Операциялық жүйелер және орталар

«Бастапқы кәсіптік білім берудің федералдық мемлекеттік стандартына сәйкес мынадай мамандықтарға арналып шығарылған: 230111 «Компьютерлік желілер», ОП.04 «Операциялық жүйелер», 230113 «Компьютерлік жүйелер және жиынтықтар», ОП.07 «Операциялық жүйелер және орталар», 230115 «Компьютерлік жүйелерде ...

КӘСІПТІК БІЛІМ А. В. БАТАЕВ, Н.Ю.НАЛЮТИН, С. В. СИНИЦЫН ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР ЖӘНЕ ОРТАЛАР Оқулық «Федералдық білім беруді дамыту институты» федералды мемлекеттік автономды мекемесімен («ФБДИ» ФМАМ) бастапқы кәсіптік білім беру бағдарламасын іске асыратын білім беру мекемелерінің, 230000 «Ақпараттандыру және есептеуіш техникалары» мамандығы тобын оқыту процесінде оқу құралы ретінде қолдануға ұсынылады.  Рецензиялаудың тіркелген нөмірі 559 2013 жылғы 20 желтоқсан «ФБДИ» ФМАМ  Мәскеу«Академия» баспасөз орталығы 2014ӘОЖ 681.3.066(075.32)КБК 32.973-018.2я723 Б28Рецензиялаушылар: Мәскеу мемлекеттік радиотехника, электроника және автоматика техникалық университеті кибернетика факультетінің деканы, техника ғылымдарының докторы, проф. М. П. Романов;Мәскеу электроника және математика НИУ ВШЭ институты, кибернетика кафедрасының профессоры, техн. ғылымдары д-р Б. И. ПрокоповБатаев А.В.Б28 Операциялық жүйелер және орталар: орта кәсіптік білім беру мекемелерінің студенттеріне арналған оқу құралы / А. В. Батаев, Н. Ю. Налютин, С. В. Синицын. — М. «Академия» баспасөз орталығы, 2014ж. — 272 с.ІSBN 978-5-4468-0562-4Бастапқы кәсіптік білім берудің федералдық мемлекеттік стандартына сәйкес мынадай мамандықтарға арналып шығарылған: 230111 «Компьютерлік желілер», ОП.04 «Операциялық жүйелер», 230113 «Компьютерлік жүйелер және жиынтықтар», ОП.07 «Операциялық жүйелер және орталар», 230115 «Компьютерлік жүйелерде бағдарламалау», ОЖ.01 «Операциялық жүйелер», 230401 «Ақпараттық жүйелер (сала бойынша)», ОЖ.02 «Операциялық жүйелер», 230701 «Қолданбалы информатика (сала бойынша)», ОП.07 «Операциялық жүйелер және орталар».ОЖ басқаруындағы негізгі объектілері — файлдар, пайдаланушылар және тапсырмалар туралы негізгі ақпараттар жазылған. Пайдаланушының алға қойылған тапсырмаларын логикалық орындау кезегін анықтайтын операциялық жүйе алдына қойылатын талаптар қарастырылған. OЖ UNІX және WІNDOWS көптеген пайдаланушылар жұмысын қамтамасыз етуге ерекше назар аударылады — пайдаланушыларды сәйкестендіру мәселелері, олардың жеке деректерін орналастыру, файлдар мен каталогтарға пайдаланушының қолжетімділігін басқару қарастырылған, қолжетімділік құқығымен жұмыс істеу үшін BASH тілдік құралы анықталған. Пайдаланушылардың тіркеу жазбаларын басқару тәсілдері, сонымен қатар, UNІX жүйелерінде сеанстар инициализациясы файлдар көмегімен пайдаланушылар сеанстарын дербестендіру нұсқаулығы сипатталған.UNІX-ұқсас операциялық жүйелерде және WІNDOWS операциялық жүйелерінде С тіліндегі қолданбалы бағдарламаны құрастыру тәсілінің қысқаша сипаттамасы берілген. Орта кәсіби білім беру мекемелерінің студенттеріне арналған. УДК 681.3.066(075.32) ББК 32.973-018.2я723Бұл басылымның түпнұсқа-макеті «Академия» баспа орталығының жеке меншігі болып саналады және оны меншік иесінің келісімінсіз қандай да бір жолмен таратуға тыйым салынады.© Батаев А. В., Налютин Н. Ю., Синицын С. В., 2014 © Білім беру –баспасөз орталығы «Академия», 2014 ІSBN 978-5-4468-0562-4 © Ресімдеу. Баспасөз орталығы «Академия», 2014  Құрметті оқырман!Бұл оқулық 230000 «Ақпараттандыру және есептеу техникасы» кеңейтілген тобының барлық мамандықтарына арналған оқу-әдістемелік жиынтықтың бір бөлігі.Оқулық жалпы кәсіби пәндерді ОЖ.04 мамандықтары үшін 230111 «Компьютерлік желілер», ОП.07 мамандықтары үшін 230113 «Компьютерлік жүйелер және жиынтықтар», ОП.01 мамандықтары үшін 230115 «Компьютерлік жүйелерде бағдарламалау», ОП.02 мамандықтары үшін 230401 «Ақпараттық жүйелер (сала бойынша)», ОП.07 мамандықтары үшін 230701 «Қолданбалы информатика (сала бойынша)» оқуға арналған.Жаңа топтың оқу - әдістемелік жиынтығы жалпы білім және жалпы кәсіби пәндер мен мамандық бойынша модульдерден тұратын дәстүрлі және инновациялық оқу материалдарынан тұрады. Әр жиынтық жалпы және кәсіби құзыретті меңгеруге қажет, сонымен қатар жұмыс беруші талаптарын ескере отырып оқулықтар, оқу нұсқаулықтары, бақылау және оқыту жиынтықтарынан тұрады. Оқу баспалары электрондық білім беру қорларымен толықтырылу үстінде. Электрондық қорлар интерактивті жаттығулар мен жаттығу құрылғылары бар теориялық және тәжірибелік модульдерден, мультимедиялық нысандар, Интернеттегі қосымша материалдар мен ақпараттарға сілтемелерден тұрады. Олардың ішінде терминологиялық сөздік пен оқу процесінің негізгі параметрлері тіркелетін электронды журнал болады. Зерттеу барысына жұмыс уақыты, бақылау және тәжірибелік жұмыстардың нәтижелері тіркеледі. Электрондық ресурстар оқу процесіне оңай кіріктіріледі және әртүрлі оқу бағдарламаларына тез бейімделеді. КіріспеОперациялық жүйе (ОЖ) — пайдаланушыларға қолданбалы бағдарламаларды орындауға арналған орта және оларды басқару мүмкіндігін беретін бағдарламалық жиынтық, сонымен қатар, қолданбалы бағдарламаларға қолжетімділік құралдарын және аппараттық қорлар мен өңделіп отырған деректерді басқару мүмкіндігін береді. ОЖ пайдаланушылары өз жұмыстарында ОЖ ядросы тікелей берген құралдарды немесе ОЖ басқаратын қолданбалы бағдарламаларды қолданады. Пайдаланушы өз тапсырмасын шешу үшін ОЖ ұсынатын кірістік тілде тапсырма сипаттамасын жазады, немесе басқа пайдаланушылар – бағдарламашылар жазған бағдарламаларды қолданады. Бұндай тілдердің синтаксисі және семантикасы олардың көмегімен шешілетін тапсырмаларға байланысты әртүрлі болады. Тапсырмалар шартты түрде мынадай топтарға бөлінеді:■ОЖ функционалдығының кеңеюі; ■ОЖ жұмыстар режимінің конфигурациялауы;■Қолданбалы бағдарламаларды өңдеу;■Дайын бағдарламалар көмегімен қолданбалы тапсырмаларды шешу.Операциялық жүйемен қандай да бір байланысу тілін пайдаланатын ОЖ пайдаланушылар төмендегідей жіктеледі (сурет - В.1):■жүйелік бағдарламашылар;■жүйелік әкімшілер;■қолданбалы программисттер (бағдарламашылар);■қолданбалы пайдаланушылар.    Сурет - В.1. ОЖ пайдаланушылар тобы Бір тіл әртүрлі мақсаттарды шешу үшін пайдаланылады. Егер пайдаланушыларды қолданыстағы тілдеріне және орындайтын тапсырмаларына қарап толықтай жіктейтін болсақ, «байланыс тілі» — «шешілетін тапсырмалар» әр жұбы пайдаланушының рөлін оның операциялық жүйемен жұмысы кезінде анықтайды. Кесте - В.1 операциялық жүйе пайдаланушы рөлінің негізгі типін құрайды.Кесте - В.1. Пайдаланушылар рольдері НөмірРоль ТапсырмасыКіріс тілі1Желілікбағдарламашыоперациялық жүйе қызметтерін кеңейтуТөмен деңгейлі тілдер, оның ішінде ассемблер2Желілікәкімшіоперациялық жүйені конфигурациялау және пайдаланушыларды тіркеуКонфигурациялық файлдар форматтары және әкімшілендіру құралдарын басқару тілдері 3ОператорЖүйені ағымдағы әкімшілендіру, бағдарламалық қамтылымды орнату/өшіру, оны баптау Конфигурациялық орнататын файлдар және орнатылатын бағдарламалық қамтылымның форматтары 4Аппараттық қамтамасыз ету маманыАппаратураға қызмет көрсету, оны пайдалануға енгізу, пайдаланудан шығару Құрылғыны күйге келтіру құралдарының және нақты ОЖ пайдалану тілдері5ҚолданбалыбағдарламашыларҚолданбалы тұтынушының тапсырмаларын орындауға арналған бағдарламалық қамтымды ойлап шығару Жоғарғы деңгей тілдері, ОЖ ядросын жүйелік шақыру интерфейсі6ДеректерСтратор әкімшісіЖүйе деректерін мұрағаттау, ақпараттық қорларды басқару (деректер қоры, анықтамалар)Қолданыстағы бағдарламалық құралдардың басқару және конфигурация тілдері7Қолданбалы тұтынушыДайын бағдарламалық қамтылым көмегімен нақты қолданбалы тапсырмаларды шешуОЖ тапсырмаларын басқару тілдері, бағдарламалық құралдар пайдаланатын басқару тілдері  Бұл оқулық ең алдымен орта білім беретін мекемелердің студенттеріне, қолданбалы бағдарламашыларына және операциялық жүйелердің пайдаланушыларына арналған, алайда ол ОЖ ортасында бағдарламалау және әкімгерлік мәселелерін де қозғайды. Оқулықта айтылған ақпараттардың көп бөлігі UNІX және Wіndows буының операциялық жүйелерінде бар жалпы механизмдер мысалында беріледі. Материалдардың жарты бөлігі DOS тобының операциялық жүйелері үшін де қолданылады (Wіndows арналған тапсырмалар бөлімі).Негізгі оқу операциялық жүйе ретінде кең таралған ОЖ Lіnux және Wіndows 7 операциялық жүйесі қарастырылады, дегенмен, кітаптағы материалдардың көп бөлігі UNІX-жүйесі және NT тобының Wіndows барлық негізгі нұсқаларына қолданылады.Оқулық үш бөлімнен және қосымшадан тұрады:■кіріспе терминологиясы алдағы тарауларда айтылатын ақпараттың барлығына сүйенетін операциялық жүйелердің жұмыс жасау қағидасы мен негізгі түсініктерінің анықтамасынан тұрады; ■1 — 6 тараулар оқырманға операциялық жүйелер сүйемелдейтін объектілердің: жады, файлдар, пайдаланушылар, тапсырмалар және олармен жұмыс жасау тәсілдері даму тарихының деңгейлері туралы түсінік қалыптастырады;■7 — 10 тараулар оқырманның файлдар мен пайдаланушылар туралы білімін тереңдетеді, ОЖ әкімшіліктендіру мәселелерін қозғайды. Сонымен қатар UNІX және Wіndows операциялық жүйелер сүйемелдейтін процесстердің бір-бірімен байланысу және оларды басқару механизмдерін қарастыру сұрақтары енгізілген;■Қосымша «Білімді бақылау» жүйесі каталогының құрылымы бойынша және UNІX операциялық жүйелердің негізгі командалары бойынша анықтамалық ақпараттан тұрады.Оқулықтың әр тарауы өзін-өзі тексеруге арналған бақылау сұрақтарымен аяқталады. Кітап көлемінің шектеулігінен кітапта мынадай сұрақтар қарастырылмаған:■ОЖ генерациясы (ядро конфигурациясы, әкімшілендіру)[3];■графикалық интерфейстер (X Wіndow System) [2];■бағдарламалардың жиі қолданылатын қолданбалы пакеттері;■гетеорогенді жүйе және ортаны ұйымдастыру сипаттамасы [17];■ядро, құрылғы драйверлерінің қосымша құрауыштарын жасау [16];■нақты уақыт жүйесінде операциялық жүйелердегі бағдарламалаудың сипаттамалары [9];■микроядерлік архитектуралар [15];■әртүрлі байланыс хаттамалары негізінде желілік қосымшалар жасау [10].Бұл тақырыптардың барлығын қызығушылық танытқан оқырманға өз бетімен зерттеу ұсынылады.   1 тарау

ТЕРМИНОЛОГИЯЛЫҚ КІРІСПЕ

НЕГІЗГІ ТҮСІНІК Пайдаланушы операциялық жүйе ортасында өз тапсырмаларын шешкен кезде деректерді және оларды өңдеуге арналған аспаптық (бағдарламалық) құралдарды анықтау керек. Пайдаланушының тапсырмасын орындау көп жағдайда бірнеше құралдарды кезегімен пайдалануға алып келеді (мысалы, деректерді енгізу, саралау, біріктіру, шығару).Операциялық жүйе пайдаланушыға құралдардың бастапқы жинағын және деректерді сақтау ортасын береді, сонымен қатар құралдарды пайдалану кезегін басқару құралымен қамтамасыз етеді. Пайдаланушы ОЖ ұсынатын құралдарды пайдаланып, бір немесе бірнеше кезектегі тапсырмаларды орындайтын уақыт интервалы сеанс деп аталады. Кез-келген сеанс алдында пайдаланушы өзін сәйкестендіреді, соңында сеанс аяқталғанын көрсетеді. Бағдарламалық құрал-саймандарды кезекпен пайдаланудың сипаттамасы тапсырма деп аталады, ал тілдің өзі — тапсырмаларды басқару тілі.Көптеген операциялық жүйелерде тапсырмаларды орындау командалық интерпретатормен жүргізіледі, оның толық анықтамасы алдағы тақырыптарда беріледі. Әдетте пайдаланушыға командалық интерпретатормен байланыс жасау үшін қандай да бір интерфейс беріледі, оны пайдаланғанда командалар пернетақтадан енгізіледі, ал олардың нәтижесі экранға шығарылады. Осындай интерфейс терминалдың логикалық түсінігімен байланыстырылады — кіріс құрылғысы (қарапайым пернетақтаның) мен шығыс құрылғысының (мәтіндік ақпаратты шығаратын дисплей) жиынтығы. Қазіргі уақытта пайдаланушының графикалық интерфейсі көп қолданысқа ие (GUІ), ол бұл оқулықта қарастырылмайды [2].Бағдарлама (жалпы жағдайда) — дискте сақталатын (немесе басқа ақпарат жинақтаушыда) процессор нұсқаулығының жинағы. Операциялық жүйе бағдарламаны орындауға жіберу үшін бағдарламаның орындалу ортасын қалыптастыруы керек — шешілетін мәселенің ақпараттық айналасы. Осыдай кейін операциялық жүйе орындалатын кодты және бағдарлама туралы ақпаратты оперативтік жадыға орналастырады да бағдарламаның орындалуына бастамашылық етеді. Операциялық жүйе аппараттық ресурстарды басқару қызметін атқарады, пайдаланушы орындап жатқан бағдарламалар арасында оларды орналастырады және ішінде бағдарламаларға қажетті барлық ақпараттар қамтылған орындалу ортасын қалыптастырады. Бұндай орта бұдан кейін ақпараттық орта деп аталатын болады. Ақпараттық ортаға операциялық жүйе өңдейтін, бағдарламаның орындалуына ықпал ететін, яғни пайдаланушының тапсырмаларын орындайтын деректер мен объектілері кіреді. Бұдан әрі оқыту барысында әр түрлі сипаттағы ақпараттық орталарға мысал келтіріледі. Бағдарлама, деректер және ақпараттық орта түсініктерін пайдалана отырып, ОЖ ортасында ақпараттық ортаның ажырамас бөлігі болып саналатын бағдарламалар мен деректер жиынтығы ретінде тапсырмалар түсінігін анықтауға болады. Орындалу үстіндегі бағдарлама процесті қалыптастырады. Процес (процесс) ақпараттық орта мен бағдарлама деректері, орындалатын код сақталатын жадтың бөлігі арасындағы жиынтық. Әдетте операциялық жүйемен басқарылатын жадта бір мезетте процестердің бірнешеуі қатар орындала алады. Бір процессорлы компьютерлерде тек бір процестің бағдарламалық коды қатар орындалатыны қалыпты жағдай, сол себептен процестердің бір бөлігі күту режимінде ал басқа бір процес орындалу үстінде болады. Процестер осылайша кезек құрады, операциялық жүйе кезектегі бірінші процеске басқаруды береді, одан кейін келесіне және с.с. Пайдаланушыдан пернетақта арқылы кіріс деректерін ала алатын және өзінің жұмыс нәтижесін экранға шығара алатын әлеуеттік мүмкіндігі бар процес алдыңғы жоспар процесі; тікелей пайдаланушы ықпал етпей орындалатын процес — фондық процес деп аталады.Өздерінің жұмыс барысында процестер процессордың есептеуіш қуатын, оперативті жадын пайдаланады, операциялық жүйенің сыртқы файлдарына, ядроның ішкі деректеріне жүгінеді. Бұл объектілердің барлығы процестің ақпараттық айналасына кіріп, ресурс деп аталады. Ресурс ОЖ қол жетімділігін жасайтын физикалық объект болуы мүмкін — процессор, оперативті жады, дискті жинақтауыштар, сондай-ақ тек ОЖ айналасында ғана жүзеге асатын логикалық объект бола алады, мысалы орындалатын процестер кестесі немесе желілік қосылу процесі. ОЖ тарапынан ресурстарды басқару қажеттілігі бірінші кезекте ресурстардың шектеулігі нәтижесінде туындайды (көлемі, пайдалану уақыты бойынша, қызмет көрсетіліп отырған пайдаланушылар санына байланысты және т.б.). Бұндай жағдайда операциялық жүйе ресурстардың сарқылуының алдын алып олардың шектелулерін басқарады немесе ресурстың сарқылуына байланысты жағдайларды өңдеу құралын ұсынады. ОЖ берілген көптеген ресурстар шектеулерінен кейін жүйе әкімшісімен өзгертіле алады. Егер операциялық жүйе бірнеше процеске бір мезетте ресурсты пайдалануға рұқсат берген жағдайда оның ресурстарын 1.1-суретте [12] көрсетілген түрлерге бөлуге болады.Бөлінбейтін ресурстарды берілген уақыт бөлігінде тек бір процес пайдалана алады, бұл кезде басқа процестердің ресурсты пайдаланып отырған процес оны толық босатпайынша оған қолжетімділіктері жоқ. Бұндай ресурсқа шектелген режимде жазба жасау үшін ашылған файлды мысал ете аламыз. Басқа процестердің бұл файлды пайдалануға жасалған әрекеттері (тіпті оқу үшін) сәтсіздікпен аяқталады. Бөлінетін ресурстар бірнеше процеспен бір уақытта қолданыла алады. Сонымен қатар бұндай ресурстарға басқа процестер қолжетімді (мысалы, ағымдағы жүйелі уақытты анықтайтын сағаттар) болады. Кейбір бөлінетін ресурстар бір мезеттік қол жетімділікті қамтамасыз ете алмаса да ресурс толық босаған уақытын күтпестен оларды бірнеше процестердің қолданылуына мүмкіндік береді.         Бұл жағдайда ресурсты уақыт бойынша бөлу үшін сәттерді кванттау қолданылады. Уақыттың әр квантында бір процес осы ресурсты иемденуге толық және шектеулі құқыққа ие болады. Оған қоса осы ресурс пайдаланып отырған процес кезінде квант мәні толық уақыттан, яғни процеске пайдаланушы тапсырмасын орындауға қажетті уақыт аралығынан әлдеқайда аз.Уақыт бөлінісі қолжетімді ресурс мысалына көп мақсатты ОЖ процессорлық уақыты қызмет ете алады. Әр уақыт квантында бір процес нұсқаулығының белгілі бір саны орындалады, одан кейін басқа процеске бұйрық келеді де оның нұсқауларының орындалуы басталады. Бөлінетін ресурсқа қол жетімділік күтіп тұрған процестер басымдылықпен кезекке тұрады. Дегенмен кейбір процестердің маңыздылығы жоғары болуы себебінен ресурсқа қол жетімділік рұқсатын тез алады.1.Операциялық жүйенің типтік құрылымы  Әдетте операциялық жүйе құрамында екі деңгейді ерекшелейді: жүйе ядросы және көмекші жүйелік бағдарламалық құралдар, олар кейде жүйелік утилита деп аталады. Ядро жүйе ресурстарын басқару бойынша барлық қызметтерді ақтарады — физикалық және логикалық, сонымен қатар пайдаланушыларға (пайдаланушылар бағдарламасы) осы ресурстарға қол жетімділікті бөледі. Жүйелік бағдарламалық қамтылым көмегімен пайдаланушы ядро ұсынатын құралдарды басқарады. Қарапайым операциялық жүйе ядросына келесі құраушылар кіреді: пайдаланушы сеансын басқару жүйесі, файлдық жүйе, тапсырмаларды (процестерді) басқару жүйесі, енгізу және алып тастау жүйесі. Қолданбалы бағдарламалармен ОЖ ядросының интерфейсі жүйелік шақыру бағдарламалық интерфейс көмегімен, ал аппараттық қамтылым бар интерфейс — драйвер көмегімен (Сурет -1.2) орындалады. Пайдаланушылар сеанстарын басқару жүйесі пайдаланушы сеансын оның ОЖ жұмыс бастаған кезде тіркейді, сеанстың ақпараттық ортасына кіретін оперативті ақпаратты сақтайды, кіріс-шығыс жүйесі көмегімен пайдаланушы терминалын шынайы немесе виртуал құрылғымен сәйкестігін қолдайды, пайдаланушының жүйемен жұмысы аяқталған кезде сеансты сыпайы аяқтайды.    Файлдық жүйе сыртқы сақтау құрылғыларында сақталатын деректерді түрлендіруді орындайды (мысалы, дискті жинақтауыш немесе flash-жинақтауыш), логикалық объекттер файлдар және каталогтар. Сонымен қатар файлдық жүйе сеанстарды басқару жүйесі тарапынан ұсыныс түссе немесе файлдық жүйені жүйелік шақыртулар интерфейсі арқылы пайдаланған кезде файлдар мен каталогтарға қол жетімділікті шектейді. Процестердің басқару жүйесі ресурстарды орындалатын тапсырмалар (процестер) арасында таратады, процестер жинақтауышын басқа процестер модификациясынан қорғанысты қамтамасыз етеді, процес аралық өзара байланыс механизмдерін жүзеге асырады. Кіріс-шығыс жүйесі ядроның жоғарыда көрсетілген барлық құраушыларының өтінімдерін өңдейді және оларды ОЖ қолдайтын логикалық құрылғылар шақыртуына түрлендіреді. Бұндай құрылғылардың әр қайсысы логикалық объект болып табылады, оған жүгіну ОЖ үшін стандартты құралы арқылы (мысалы, оперативті жадының адресіне немесе арнайы файлға) жүреді. Логикалық құрылғы толықтай виртуалды болуы мүмкін (ОЖ ядросының ішінде толықтай жұмыс жасайды немесе нақты аппараттық құрылғылармен драйвер арқылы байланысқан логикалық объектті білдіреді. Толықтай виртуалды құрылғы ретінде UNІX-жүйелеріндегі «қара құрдым» /dev/null келтіруге болады. Бұл құрылғыға жазылатын барлық ақпарат жоғалып кетеді, яғни олар тапсырмаларды шешуге арналған болмашы деректерді жоюға қолданылуы мүмкін.Құрылғылар драйверлері — бұл аппараттық құрылғылар үшін басқаратын командалар кезегімен жүйенің кіріс/шығыс сұрауларын түрлендіретін жүйелі бағдарламалар. Әр құрылғының драйвері оның аппараттық жүзеге асуының ерекшеліктерін жасырады және кіріс/шығыс жүйесіне жүйенің аппараттық қамтамасыз етуіне қолжетімділік стандартталған интерфейсін ұсынады. Қолданбалы бағдарламашы тұрғысынан қарағанда ОЖ ядросы құраушыларына қолжетімділік жүйелік шақыртулар интерфейсі көмегімен жүзеге асырады — стандартталған міндеттер жинағынан тұратын кітапханалар жинағы. Бұндай жинақтың әрқайсысы қолданбалы тапсырмаларды шешуге арналған: желілік ресурстарға, графикалық режимге қолжетімділік, процес аралық өзара байланысты жүзеге асыру және т.б.  1.1.2 Операциялық жүйелердің жіктемелері Ядроның құраушы бөліктерінің күрделілігі және олар жүзеге асыратын қызмет түрлері бірінші кезекте бір сәтте ОЖ қызмет көрсетілетін пайдаланушылар санына және бір мезгілде қатар орындалатын процестер санына тәуелді. Сол себепті ОЖ жіктелуін осы екі параметр бойынша жүргізіп ядро құраушыларын ОЖ әр типінде қарастырамыз. Бір мезетте қызмет көрсетілетін пайдаланушылар санына байланыста операциялық жүйелер бір пайдаланушылы (бір мезетте бір пайдаланушының сеансынан артық қабылдамайды) және көп пайдаланушылы (бір мезетте бірнеше пайдаланушыны сүйемелдейді). Көп пайдаланушылы жүйелер пайдаланушы деректерін басқа пайдаланушылардың санкцияланбаған қолжетімділіктерінен қорғанысын қамтамасыз етіп қана қоймай бірнеше пайдаланушыларға ортақ мәліметтерді бөлу құралын ұсынады. ОЖ бұл түрлерінің ерекшеліктерін толықтай қарастырайық.Бір мезетте орындалатын процестер санына байланысты операциялық жүйелер бірмақсатты (жұмыс істейтін процес саны біреу) және көпмақсатты (жұмыс істейтін процестер саны көп) болып бөлінеді. Көпмақсатты жүйелердің бірмақсатты жүйелерден негізгі айырмашылығы ресурстарға қолжетімділікті басқару құралының бар болуы — ресурстарды бөлу және қолданыстағы ресурстарды блоктау. Бір пайданаланушылы ОЖ. ОЖ бұл түрі пайдаланушының тек бір сеансын сүйемелдеуді қамтамасыз етеді. Пайдаланушы жұмысының жаңа сеансы тек алдыңғы сеанс біткен соң ғана басталай алады. Бұл жағдайда пайдаланушының жаңа сеансында дәл сол ақпараттық орта сақталады. Бірпайдаланушы ОЖ тарапынан қарағанда пайдаланушыларды ажырату мүмкін емес, сол себепті егер бұндай операциялық жүйемен бірнеше пайдаланушы жұмысын бастаса, ол әрқайсысына барлық ресурстарға қолжетімділікті қамтамасыз етеді және сол ақпараттық ортаның өзіне де қолжетімділікті қамтамасыз етуі ықтимал. Пайдаланушы өзінің бірегей деректерімен, мысалы салынбалы дисктегі мәліметтерімен жұмыс жасай алады. Осындай жұмыс жағдайында жұмыс сеансының ақпараттық ортасы жүйеде әртүрлі болады. Бір пайдаланушылы ОЖ сеанстарымен басқару жүйесі құрамына тек бастамалау құралы және пайдаланушының ақпараттық ортасын қолдау құралы кіреді. Бұған қоса көптеген бір пайдаланушылы ОЖ (мысалы, DOS) пайдаланушы сеансын бастапқы жүктемелеу сәті бірден ядроны және сценарийлерді жүктегеннен кейін басталады. Сеансты аяқтау сәті ОЖ ядросын жадыдан шығару сәтімен сәйкес келеді (ОЖ жұмысын аяқтар алдында немесе құрылғыны тоқсыздандыру нәтижесінде). Осылайша, пайдаланушы сеансының өмір сүру уақыты ОЖ шамамен жүйенің жұмыс жасап тұрған уақытына тең. Пайдаланушыларды ажырата алмау салдарынан сеанстарды басқару жүйесі және файлдық жүйе айтарлықтай шамада жеңілдетіледі. Бірпайдаланушылы ОЖ сеанстарын басқару жүйесінің ішіне пайдаланушылардың идентификациясы мен аутентификациясы құралдары кірмейді, сонымен қатар олардың сеанстарының ақпараттық ортасын қорғау құралдары да жоқ. Бірпайдаланушылы ОЖ файлдық жүйесіне ереже бойынша файлдар мен каталогтарға қолжетімділікті шектеу күрделі механизмдері жатпайды, бірақ файл жүйелерінде файлдар мен каталогтармен және олардың атрибуттарымен жұмыс режимін білдіретін жалғаулар болуы мүмкін. Операциялық жүйенің тек бір пайдаланушының жұмыс сеансын қолдауы бір мезгілде пайдаланушының бірнеше тапсырмасын орындау мүмкіндігін жоққа шығармайды. Басқа сөзбен айтқанда бірпайдаланушыға операциялық ондық жүйе көпмақсатты болуы мүмкін. Көппайдаланушылы ОЖ. ОЖ бұл түрі көп пайдаланушылардың бір мезгілдегі жұмысын қатар қамтамасыз етеді, файлдық жүйемен және сеанстарды қолдау жүйесімен жүзеге асатын атқарымдар жинағын біршама кеңейтеді. Көптеген пайдаланушыларды қолдау төмен деңгейде кіріс/шығыс жүйесінде және процестерді басқару жүйесінде көрінеді.Пайдаланушылардың сеанстарын басқару жүйесінің құрамына пайдаланушыларды идентификациясы және аудентификациясының құралы кіреді. Ол әр сеансты нақты және виртуал терминалмен байланысын қамтамасыз етеді, сеанстың бастапқы ақпараттық ортасының инициализациясы құралынан тұрады және сеанс деректерін қорғауды қамтамасыз етеді. Көппайдаланушылы ОЖ файлдық жүйесі файлдар мен каталогтарға қолжетімділіктерді шектеуді қамтамасыз етеді, оған негіз сеанстарды басқару жүйесінен алынған пайдаланушылар идентификаторы. Файлдық жүйеде әр файл мен каталог оған пайдаланушылар қолжетімділік құқығын анықтайтын ақпараттық бұғатпен бірге жүреді. Пайдаланушыға дерек тек өзіне ғана қолжетімді болатындай, файлдар мен каталогтардағы деректерді басқа пайдаланушылар тек өзгерту емес, тіпті оларды оқи алмайтындай етіп пайдаланушы құқығын анықтау мүмкіндігін ұсынады. Дегенмен бір ақпаратқа ортақ қолжетімділік қажеттілігі туындағанда бір ақпарат жинағына бірнеше пайдаланушылардың оқуы немесе жазу мүмкіндігі ашылу ықтимал. Кіріс/шығыс буферленуі мен құрылғыларға тікелей қосылудан басқа көп пайдаланушысы бар ОЖ кіріс/шығыс жүйесі пайдаланушылардың құрылғыларға қолжетімділігін бөлуді басқарады, яғни құрылғылармен бөлінетін реурстар секілді басқарады. Әдетте көп пайдаланушылы ОЖ бірнеше пайдаланушылардың көп бағдарламасын бір мезгілде жүзеге асыруын қамтамасыз ететіндіктен олар көпмақсатты болып та саналатынын ескерген жөн. Бірмақсатты ОЖ. Операциялық жүйелердің бұл тобы бір уақытта тек бір тапсырманы орындауға арналған. Жүйе басталғаннан кейін басқару бірден пайдаланушы жұмысы үшін жабын рөлін атқаратын бағдарламаға беріледі. Ереже бойынша бұндай жабынның қызметтерінің бірі — басқа бағдарламаларды іске қосу. Бағдарлама іске қосылмас бұрын ақпараттық ортаның жабыны сақталады. Бағдарлама іске қосылған соң оның процесіне толықтай басқару және барлық ресурстарға қолжетімділік беріледі. Бағдарлама аяқталған кезде процес жады босайды, ақпараттық орта жабыны қайта қалпына келеді және операциялық жүйе арқылы оған басқару қайтарылады. Бағдарламалардың іске қосылуы бұндай ОЖ үшін кезекті. Егер бір бағдарламаға орындалуды жүзеге асыру үшін басқа бағдарламаны шақыру қажет болса, шақырып отырған бағдарламаның ортасы сақталады және шақырылған бағдарлама аяқталған соң бағдарламаның ақпараттық ортасы қайта қалпына келеді. Біртапсырмалы ОЖ кіріс/шығыс жүйесінің құрамына құрылғыларға қолжетімділікті бөлу құралдары кірмейді, өйткені құрылғыны бір мезгілде тек бір процес қана пайдаланады. Біртапсырмалы ОЖ көптапсырмалы да бола алады. Бұндай жүйенің мысалына пакеттік өңделуі бар ОЖ бола алады. Осындай ОЖ пайдаланушылар бағдарламаларды орындауға тапсырмалар кезегін құрады, бұған қоса тапсырмалар бірнеше пайдаланушыларға тиесілі болулары мүмкін. Жүйе пайдаланушылар бағдарламасын кезекпен орындайды, оның үстіне пайдаланушыны ауыстырар алдында бұған дейінгі пайдаланушының жұмыс сеансы аяқталады да жаңа пайдаланушы сеансы басталады. Осылайша, тапсырма өзгерген сайын әр бағдарламаның ақпараттық ортасы ауысады. Көпмақсатты ОЖ. Көпмақсатты ОЖ бір уақыт мезгілінде көптеген бағдарламалар (процестер) іске қосыла алады. Бұл жағдайда процестерді басқару жүйесінің құрамына процестерді жоспарлау кіреді, ол өз кезегінде мынадай қызметтер атқарады: ■Процестерді жасау және жою — бағдарламаны жадқа жүктеу, ақпараттық орта жасау және ол жаңадан пайда болған кезде процеске басқаруды беру, ақпараттық ортаны өшіру және ол жойылған кезде жадыдан процесті шығару; ■Процестер арасында жүйелік ресурстарды бөлу — процестердің орындалуын жоспарлау, процестер кезегін қалыптастыру және кезектегі процестер артықшылықтарын басқару; ■Процес аралық байланыс — жалпыға ортақ деректерді процестер арасында бөлу немесе басқарушы өзара байланыстарды бір мезгілде орындалатын процестер арасында жіберу;■Процестердің орындалу синхронизациясы — кейбір шарттар орындалмайынша процестердің орындалуын уақытша тоқтату, мысалы бір процеспен басқарылатын әсер етуді қайта жіберу. Мұндай ОЖ кіріс/шығыс жүйесі қиындайды, өйткені кез-келген ресурс (файл немесе құрылғы) бір процеспен бірге пайдаланылуы мүмкін. Қолжетімділік шиеленісінің алдын алу үшін бұғаттау механизмі пайдаланылады, ол бөлінбейтін ресурсқа қолжетімділікті бір мезгілде тек бір процеске рұқсат етеді. UNІX тобының ОЖ көп пайдаланушылы көптапсырмалы операциялық жүйеге жатады. Осы себептен операциялық жүйенің осы тобы оқулықтың негізі болып алынды. Жоғарыда айтылғандай оқулық қолданбалы бағдарламашыларға және пайдаланушыларға арналғандықтан, ол жерде операциялық жүйе әзірлеу және қолданбалы бағдарламалық қамтамасыздандыру ортасы ретінде қарастырылады. Оқулықта тек UNІX ОЖ бастапқы құралы ғана қарастырылады, және мысалы X Wіndow System В графикалық амалдары секілді қандайда бір кеңейтілулерге назар аударылмайды. МАМАНДАНДЫРЫЛҒАН ЖӘНЕ ӘМБЕБАП ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР. НАҚТЫ УАҚЫТТЫҢ ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРІ Жүйедегі пайдаланушылар санының негізінде және бір мезгілде орындалатын процестер санына байланысты жіктелуінен бөлек операциялық жүйелердің тағы бір жіктелу түрін қосуымызға болады: жалпы тағайындалудың операциялық жүйесі және арнайы тағайындалудың операциялық жүйесі. Жалпы тағайындалудың операциялық жүйесі классына бірпроцесті және көппроцесті, бір пайдаланушылы және көп пайдаланушылы бола алатын жүйелер. Бұл операциялық жүйелер қарапайым үстел үстілік жүйелер қатарында жұмыс жасайды. Олардың негізгі тағайындалуы жүйенің пайдаланушыларына есептеу жүйелерінің аппараттық құралдарын басқарудың қолайлы және түсінікті механизмін ұсыну болып табылады. Пайдаланушыны төмен деңгейлі операциялар мен интерфейстерден барынша оқшаулап, оның өтінімін өңдеумен айналысады. Осындай операциялық жүйелер бірінші кезекте қолдану қарапайымдығына бағытталған, өйткені олардың басты пайдаланушылары бағдарламалаушылар емес, кәсіби біліктілігі төмен немесе орташа пайдаланушылар. Көбінесе мұндай пайдаланушылар анимацияланған түсқағаздардың әдемі суретінің және графикалық интерфейстің барлық мүмкін әдемілігінің артында компьютердің барлық аппараттық жиынтығын басқаратын қуаты мықты бағдарламалық жиынтық жасырулы екенін түсіне бермейді. Ұқсас операциялық жүйелерге Wіndows, Lіnux, Apple іOS және т.б. топтарының үстелдік нұсқасы операциялық жүйелері жатады. Басқаша айтқанда бұл операциялық жүйені пайдаланушы жұмыста қандай да бір мақсатты шешу үшін пайдаланса үйде де ойын-сауық құралы ретінде пайдалана алады. Жалпы тағайындалудағы операциялық жүйесінен кереғар арнайы тағайындалған ОЖ күнделікті өмірде өте сирек қолданылады. Бұл операциялық жүйелердің негізгі пайдаланушылары— кәсіби біліктілігі жоғары бағдарламашылар. Ұқсас операциялық жүйелер арнайы есептеу жүйелерінің ресурстарын басқаруға арналған. Көп жағдайда бұл жүйелер кіріктірілген болып саналады, яғни өздері басқаратын құрылғыға тікелей кіріктірілсе де жұмыс істеуі қажет жүйелер болып есептеледі. Оларға Androіd, іOS, Wіndows CE және т.б. операциялық жүйелері жатады.Арнайы тағайындалған операциялық жүйелердің қосалқы жиынтықтарының бірі нақты уақыт операциялық жүйелері болып саналады. Көртеген кіріктірілетін жүйелер мұндай бағдарламалық-аппараттық жиынтық құрамында жұмыс істейтін операциялық жүйе, сыртқы оқиға және ішкі деректерге өте аз уақыт ішінде әрекет етуін талап етеді. Басқа сөзбен айтқанда нақты уақыттың операциялық жүйелері — бұл белгілі бір уақыт ішінде талап етілетін қызмет деңгейін қамтамасыз ететін жүйелер. Нақты уақыт операциялық жүйелерін екі классқа бөлуге болады: қатты нақты уақыт жүйесі және жұмсақ нақты уақыт жүйесі. Талап етілген орындалу уақытынан аспай жұмыс істейтін операциялық жүйелерді қатты нақты уақыт операциялық жүйелеріне жатқызады. Егер операциялық жүйе талап етілген уақыттың жартысында ғана жұмыс жасаса жоғары уақыт шектеуін қатты сақтамаса бұл жүйені жұмсақ нақты уақыттың операциялық жүйесіне жатқызамыз. Дегенмен осы кезде нақты уақыт ОЖ екі классы үшін екіталай талабы бұл жүйелердің детерминизмі болып табылады, яғни оның оның әрекетінің болжамдығы.Нақты уақыт жүйесі жүйе реакциясы кешеуілдеуі материалдық құралдардың жоғалуына алып келетін, адам өміріне қауіп әкелетін және т.б. апаттық жағдайларға әкелуі мүмкін жағдайларда қажет. Бұндай жүйелерде көп жағдайда операциялық жүйелерсіз өткізіледі.Нақты уақыт операциялық жүйелерін пайдалану басқарушы БҚ жасап шығару уақытын қысқарту мүмкіндігін береді және келесі жағдайларды оның әрекетінің болжамдығын арттыруға ықпал етеді:  ■Егер құрастырылған басқаратын БҚ көлемі бойынша үлкен болса; ■егер оның орындалуы барысында бірнеше есептеуші ағымдар қажет болса;■егер шешілетін тапсырма ресурстарға қолжетімділік синхронизациясы бойынша талаптары күрделі болса және т.б. Бұндай операциялық жүйелерде процестерді басқару үшін екі тәсілдің бірі қолданылады:1)Оқиғалардың артықшылықтары негізінде басқару. Бұл стратегияны пайдаланған кезде, басқару артықшылыққа ие оқиғаны өңдеуге байланысты процеске беріледі;2)Уақытты бөлу негізіндегі басқару. Бұл жағдайда процестерді ауыстырып қосу берілген уақыт интервалында қалыпты түрде үзуге негізделіп және оқиға басталған кезде орындалады. Жүйелердің осындай көп түрлерінде процестер құрамы өзгеріссіз болады. Олар операциялық жүйелер басталған кезде іске қосылады және оның жұмысы аяқталғанша жалғасады. Қолданылмай тұрған процестер пассивті күйге ауысуы мүмкін және егер осы процестің белсенділігі қажет оқиғаны өңдеу кезінде пассивті күйден шығады. Процестердің бұндай іске қосылу және аяқталу жүйесі операциялық жүйе әрекетінің және реакция уақыты бойынша параметрлерінің болжамдығы талабымен туындаған. Сол себепті осындай көптеген жүйелерде жаңа процестерді іске қосу жай жіберілмейді, олардың барлығы алдын ала анықталған болулары керек. Қазіргі уақытта нақты уақыт операциялық жүйелерінің көп түрлері бар: LynxOS, RTLіnux, VxWorks және т.б. нақты уақыт операциялық жүйесінің ең кең таралған түрі QNX болып табылады, ол кей кезде үстел үстілік ретінде де қолданылады. Бұл коммерциялық таралған өнімдерден басқа жеке компаниялардың өздері әзірлеген операциялық жүйелер де бар, олар коммерциялық негізде таратылмайды, тек дайын бағдарламалық-аппараттық жиынтық құрамында қолданылады.  ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ҚЫЗМЕТІ ЖӘНЕ ОЛАРДЫҢ ДАМУ ДЕҢГЕЙЛЕРІОперациялық жүйелердің тарихи қызметтері есептеуші техниканың өзінің дамуымен бірге дамыды. Өз уақытында есептеуші машиналар топтарын ерекшелеу қабылданады, олардың орындалуы үшін келесідей элементтік базаларға сүйенеді: электронды лампалар, жартылай өткізгіш транзисторлар, микросұлбалар және т.б. Дегенмен жаңа жүйелік бағдарламалық құралдардың шығуына ықпал еткен бұл қасиеттері емес.Жалпыға арналған жүйелік бағдарламалық қамтылымдардың дамуына негізгі ықпал еткен төрт фактор бар: есептеуіш машиналар архитектурасының унификациясы, оперативті жад көлемі, процессордың тез әрекет етуі және перифериялық құрылғының құрамы. Осылайша, жұмысында негізінен құрастырушылары қатысқан алғашқы машиналар үшін ешқандай да унификация сөз болған жоқ. Әр ұжымда командалар құрамымен де есептеу разрядты ұяшықтар көлемімен де тәжірибелер өткізілді. Тапсырмамен жұмыс жасау барысында бағдарламалаушы және оператор бір адам есептеуіш құрылғының толыққанды иесі болды. Ол бағдарламаны өзі жүктеді, деректерді өзі енгізді және нәтижелерін бағалады. Стандартты бағдарламалар кітапханасы. Сериялық шығарылатын машиналар шыққаннан кейін бағдарламалық қамтымды ойлап шығару амалын стандарттау мүмкін болды. Бағдарламалаушыларды пайдаланушылардың бөлек класына ерекшелеу орын алды. Бағдарламалау өтілін жинақтау және жалпылауға арналған құрал сол уақытта стандартты бағдарламалардың кітапханасы болды. О кітапхана келесідей типтік атқарымдарды жүзеге асырады: тригонометриялық (sіn, tg, arcsіn), математикалық (log, exp, sqrt), сыртқы жинақтауыштардан мәліметтерді енгізу, шығару, бір есептеу жүйесінен басқасына түрлендіру және т.б. Осындай кітапхананың әдеттегі мысалы ИЖ-2 стандартты бағдарламасының (интерпретациялайтын жүйе) М-20 машиналарына арналған кітапханасы бола алады. Сонымен бірге М-20 сериялық шығарылатын үш адрестік жүйе командаларі бар машина болғанын ескерген жөн; оның командалар жүйесіне ұқсас командалар БЭСМ-3, БЭСМ-4, және кейінірек М-220 машиналарында болды.ИЖ-2 кешенді бағдарламасының жиынтығын бағдарламалаушы оперативті жадыға негізгі функционалдық бағдарламаны жүктемей тұрып жүктейді. Орындалып жатқан бағдарламаға жүйелік кітапхананың бір атқарымына жүгінуіне мүмкіндік беретін стандартты интерфейс қолданылды. Ол үшін атқарымның қажетті коды мен өзара байланыс үшін жады аумағын көрсету керек, мысалы мәліметтерді жүктеуге арналған жады бөлігі. Кейінірек есептеуіш атқарымдардың көп бөлігі бағдарламалау тілі кітапханасынан ауысты және тіпті мәліметтерді бір пішіннен екінші түрге ауысты, ал жүктеу және шығарға қатысты типтік әрекеттер операциялық жүйенің ажырамас бөлігіне айналды. Қазіргі таңда бағдарламалаушылар ортасында осындай атқарымдарға арналған операциялық орта үшін APІ (Applіcatіon Programmіng Іnterface) термині қолданылады, ұқсас жүйелік құралдардың қолданбалы сипаттамасын ерекшелейді. Осыған орай есептеуіш машиналардың архитектурасы типтестірілді және олардың тез әрекет етуі ұлғайған сайын, оперативті жадыны жүктеуге, мәліметтері бар жинақтауыштарды орнату, яғни тапсырманың ақпараттық ортасының инициалдануы және т.б. орындауға арналған бағдарламаларды дайындауға кететін уақытты жоғалту мәселесі қауырт болды. Шынымен де, процессор он мыңдаған операцияларды 1 секундта орындағанда, бағдарламасы бар перфокартаны негізге орнатуға және енгізуге жұмсалатын бір жарым – екі минут 300 000 – 500 000 командаларын орындау мүмкіндігін жоғалтуға әкеледі. Пакеттік мониторлар. Шешім жүйелік бағдарламалауларды ойлап шығарумен табылды — мониторлар, бағдарламалар мен деректер пакетін алдын-ала дайындалған магниттік жинақтауыштардан (сол кезде бұл магниттік ленталар болды) тез жүктеуге мүмкіндік берді. Пакеттердің орындалуын сыртқы қызмет көрсету үшін мамандардың арнайы тобы шықты — операторлар. Олар магниттік жинақтауыштарға бағдарламалаушылар дайындаған пакеттерді жүктеді. Одан кейін мониторлық бағдарламаны іске қосты, ол өзі кезегімен оперативті жадыға кезекті тапсырманы ескерді, қажет ақпараттық ортаны жасап, бағдарламаны өзі орындауға жіберді. Бағдарламаның тез орындалуы үшін нәтижелер бірден басылып шыққан жоқ, жинақтаушы құрылғыларға шығарылды — жиі осындай магниттік ленталарға. Тек барлық есептеу жұмыстары аяқталғаннан кейін ғана мәліметтер біртіндеп қағазға басылып шығарылды. Ол жұмыс жылдамдығы басып шығару жылдамдығынан мың есе асып түсетін процессорлардың тоқтап тұруын қысқартуға мүмкіндік берді.Жүйе құралдарының дамуының бұл уақыты операциялық жүйе құрамына жүйелік енгізу бағдарламасын енгізумен сипатталды. Оның қатарында пакеттерді дайындауға арналған, жүйелік монитор бағдарламасы (кейде оны бағдарламаны немесе пайдаланушылар сеансын басқару бағдарламасын басқаратын диспетчер деп атады) және мәліметтер пакетін есептеу кезінде алынған қайта жүктеуге арналған деректерді шығаруға арналған құрылғы, мысалы баспаның жүйелік шығару бағдарламасы да бар. Мониторлық пакетпен бірге бағдарламалаушылар өз тапсырмаларын орындай алатын тіл пайда болды. Бірінші ол тапсырмаларды басқару тілі деп аталды. Кейінірек, «операциялық жүйе командаларынің тілі» термині жиі қолданыла бастады, өйткені оның құраушы бөліктері ОЖ интерпретаторы команданын орындайтын командалар болды.Оперативті есте сақтау құрылғысының сыйымдылығы өскен сайын операторларда осы үш бағдарламалық құралдарды (енгізу, мониторингілеу және шығару) әрқашан есептеуіш құрылғы жадында ұстап тұруға мүмкіндіктері пайда болды. Нәтижесінде жұмыстың барлық кезінде жаңа тапсырмаларды енгізіп және дайын болғанда нәтижелерін басып шығару мүмкін болды. Енгізу және шығару артықшылығы төмен режимде жасалды, ал негізгі уақытта процессор тапсырмалар пакетінің тапсырмаларын шешу үшін пайдаланылады. Тапсырмаларды басқару тілінің бар болуы бағдарламалаушыға оның шешімі кезінде қасында болмауға мүмкіндік берді. Оған есептеу кезінде орын алуы ықтимал әртүрлі оқиғаларды сипаттап, операциялық жүйенің сәйкес әрекет етуінің алдын алуы жеткілікті. Есептеудің одан кейінгі қызмет көрсетуі оператор міндетіне жүктелді. Осы уақытқа бағдарламалаудың әртүрлі тілінде есептеу бағдарламаларын құратын бағдарламашыларды осы бағдарламалар көмегімен қолданбалы тапсырмаларды шешкен, тапсырмаларды басқару тілінің көмегімен деректер пакеті мен деректерін біріктіретін пайдаланушылардан анық бөлінуін жатқызуға болады.Мульти бағдарламалау, көп мақсаттылық. Процессор жұмысының жылдамдығының ары қарай өсуі және оперативті жады көлемінің артуы машинада бір мезгілде бірнеше пайдаланушылардың бағдарламалары орындалатындай жағдайға алып келді. Ол екі мәселені шешуді қажет етті — бір-біріне параллель орындалатын бағдарламалардың тәуелсіз орындалуын қамтамасыз ету және бағдарламалары қатар орындалатын әр түрлі пайдаланушылардың мәліметтерін қорғау. Бірінші мәселені орындау үшін диспетчер қызметін дамыта бастады пакеттегі бағдарлама ауысымы бойынша жұмысты тек қана жоспарламай, белсенді бағдарламалардың қайсысын орталық ресурсына беруге болатыны туралы шешім қабылдайды. Оған бір мезетте қатар орындалатын бағдарламалар арасында жадыны бөлу мәселесін шешу қажет болды. Өз кезегінде аппараттық құралдар бір процес екіншісінің жұмысына кедергі келтірмейтіндей бақылай бастады. Егер жады басқа тапсырма кеңістігіне жүгінетін болса, бағдарламаның дереу тоқтауына (үзілу) алып келетін жадыны қорғауға арналған әртүрлі құрылғыларының есебінен қамтамасыз етілдіКөргеніміздей, пакеттік өңделу кезінде мультибағдарламалану пайда болды. Мульти бағдарламалау — жүйелік енгізу, шығару және пайдаланушы пакет мониторы бағдарламаларының параллель орындалуы. Дегенмен жүйелік бағдарламалар бір-біріне жұмыс жасауға кедергі келтірмеуге бір-бірімен өзара «келісті». Енді есептеуіш құрылғыда әдейі немесе кездейсоқ ақпараттық ортада басқа пайдаланушы деректерін бұзуы ықтимал әртүрлі пайдаланушылардың бағдарламалары параллель жұмыс жасады. Деректерді басқару. Өзге пайдаланушылар бағдарламасының оларға санкцияланбаған қолжетімділіктің алдын алатын сыртқы жинақтаушыдағы деректермен жұмыс жасаудың ережелерін ойлап табу қажет болды. Осы мақсат үшін деректерді жазуды деректер жинағы (Data set) жинақтауыштарына ұйымдастыра бастады. Бұл мәліметті кім, қашан, жасағаны туралы қосымша ақпаратпен қамтамасыз етті және оған қол жетімділікті анықтады. Құрылғыға (ақпаратты жинақтауыш) тікелей қолжетімді пайдаланушылардың бағдарламасы деректер жинағын ұйымдастыруға қатысты келісімді бұзуы мүмкін екені анық болды. Сол себепті сыртқы құрылғылар арасында деректермен алмасу бойынша барлық операциялар операциялық жүйенің меншігіне айналды, солай жүйелік кітапхана құрамы кеңейтілді.Егер бағдарламаға сыртқы құрылғыдан мәлімет алу қажет болса, ол сәйкес АРІ операциялық жүйесіне жүгініп, өз жады аймағына деректердің кезекті бұғаттауын алады. Ақпарат алудың осындай ұйымдастыру тағы бір пайдалы қасиетті қалыптастырды — бағдарламалардың деректерді физикалық ұйымдастырудан тәуелсіздік. Құрылғы тек операциялық жүйемен жұмыс жасағандықтан, пайдаланушы бағдарламасы деректер жинақтауышының сипаттамасынан көп деңгейде тәуелсіз болды. Бұдан басқа, операциялық жүйеге қолжетімділіктің құқықтығын тексеру қызметін өзіне алды. Пайдаланушы — деректер жинағының иесі — ол өз жинағымен жұмыс жасауға кімге рұқсат ететінін және қандай режимде (тек оқу, оқу және жазу, өшіру және т.б.) болуы қажет екенін көрсету керек. Кейбір жағдайларда операциялық жүйе пайдаланушыға берілген кілт бойынша деректерді шифрлеуді де қамтамасыз етті. Жинақтауыштарда деректердің белгілі бір ұйымдастыруын (файлдық жүйе) қолдау операциялық жүйе құрамына жинақтауыштарды алдын – ала дайындауды орындайтын тағы бір арнайы бағдарламаны (утилита) қосуды талап етті. Сонымен бірге жинақтауышқа пайдаланушы деректерін бұдан кейін де орналастыруды қамтамасыз ететін арнайы белгілеу жазылды.Уақытты бөлу жүйесі. Жады көлемінің және өнімділігінің артуының келесі деңгейінде ірі есептеуіш құрылғы тек бір ұйымға ғана емес түгел бір ауданға қызмет көрсете алатыны түсінікті болды. Әрине бұл кезде пайдаланушылардың жүйеге алыстан қол жетімділігін қамтамасыз ету мәселесі туындайды. Қол жетімділік мәселесі телетайп негізіндегі арзан терминалдық құрылғыларды пайдалану есебінен шешілді. Терминал (пернетақта және басым шығаратын құрылғы) есептеуіш құрылғыға қарапайым телефондық кабель (екі өткізгіші бар сым) арқылы жалғанды. Уақытты бөлу операциялық жүйесі бірнеше жүздеген терминалдардың қатар қызмет көрсетуін (енгізу/шығару) қолдап үлгерді, өйткені телетайпта енгізу және шығару уақыты секундына бірнеше ондаған символдардан аспайды. Пайдаланушыда өзінің жеке есептеуіш машинасына қол жетімділігі бар деген иллюзиясы пайда болды. Оған енді оператор көмегінің қажеті болған жоқ. Әрине процессор уақытын бөлу мульти бағдарламалаумен қамтамасыз ету деңгейінде қолданылды. Бірақ салыстырмалы түрде жылдамдығы аз құрылғылар арқылы көптеген пайдаланушылардың қосылуы машина жадын қолдану арқылы уақытты бөлу мүмкіндігіне әкелді. Пайдаланушы терминалдағы хабарламаны оқып, жауап енгізгенше оның бағдарламасы тұрып қалды. Сол себептен күту режимінде тұрған бағдарламаны операциялық жүйе сыртқы жинақтауышқа (магниттік диск немесе магниттік барабан) ысырып тастап отырды. Пайдаланушыдан ары қарай жұмыс жасауға ақпарат түскен кезде бағдарлама оперативті жүйеге қайта қалпына келеді. Жұмыс режимінің мұндай түрі свопинг (ағылшын тілінен swop — орнын өзгерту) атауын алды.Уақытты бөлу жүйесінің пайда болуына операциялық жүйелердің сыртқы құрылғылармен алмасу қызметін өз мойнына алуы ықпал етті, және пайдаланушы терминалын кез-келген пәтерден жалғауға мүмкіндік беретін пайдалануда айтарлықтай арзан телефон желілері пайда болуы оң әсер етті. Әртүрлі пайдаланушылардың жеке мәліметтерін дербестендіру алдыңғы деңгейде шешілді. Механикалық телетайптардың сенімділігі жоғары деңгейде болған жоқ, сол себепті электронды-сәулелік түтік негізіндегі терминалдар тез пайда болды, олар шығарудың жоғары жылдамдығына ие болды және сенімділік тұрғысынан көрсеткіштері жоғары болды. Әдетте оларды мәліметтердің қатты көшірмелерін алу үшін шағын басып шығару құрылғылары (принтерлер) толықтырып отырды. Терминалдардың осындай конфигурациясы Олимпиада-80 ақпараттық кызмет көрсету үшін Мәскеуде 1980 ж. және 1985 ж. Жастар және студенттер фестивальін өткізгенде кеңінен қолданылды. CDC фирмасының оқу терминалдары құрылған, оларды электронды-сәулелік түтіктің орнына плазмалы панель орнатылған. Бұл символдардың бейнеленуінің жоғары тұрақтылығын қамтамасыз етті, оған қоса, экран жазықтығы оған микрофильмдер суреттерін проекциялау мүмкіндігін берді, осылайша байланыс жолағындағы мәтіндік ақпаратты толықтырды. Терминалға мәліметтерді алдын ала өңдеуді тапсыруға да болатыны өте тез түсінікті болды: символдық жолақтарды редакциялау, шағын көлемді деректерді сақтау, баспаны басқару. Бұндай терминал байланыс желісінен де орталық есептеуіш құрылғының да жүктемесін жеңілдетеді. Интеллектуалдық терминал туралы айтыла бастады. Дербес компьютерлер және желілер. Келесі қадам интеллектуалдық терминалды өзінің орталықтандырылған процессоры бар, өзінің оперативті жады және сыртқы құрылғылар жиынтығы бар өз бетімен есептеу құрылғысына айналдыру. Тіке қолжетімді магниттік жинақтаушы негізінде деректерді жинау шағын құрылғысының тез дамуы олардың сыйымдылығы және қолжетімділік жылдамдығы пайдаланушының жеке ақпараттарын орналастыруға толық жететін дәрежеге жетті. Бір сәтте пайдаланушылардың барлық мәселелері шешілгендей болып көрінді. Олар монополиялық иемденуге өздерінің жеке есептеуіштеріне ие болды — дербес компьютер (ДК, Personal Computer — PC).ДК бірінші операциялық жүйелерінде мультибағдарламалану дамыған құрылғылары және деректерді сақтау құралдары болған жоқ. Бұл бір пайдаланушылы, бір мақсатты операциялық жүйелер болды, бірақ бұлай ұзаққа жалғасқан жоқ. Орталықтандырылған деректер қорына қолжетімділік алуға деген талпыныс байланыс желілердің дамуына алып келді. Пайдаланушының тапсырмаларын орындауда және әртүрлі мәселелер қатарында тек бір ДК ресурстарымен қамтамасыз етіле алмады. Жады көлемінің өсуі және ДК микропроцессорлардың тез әрекет етуі мульти бағдарламалау және көп мақсаттылыққа өтуге мүмкіндік берді. Алдыңғы деңгейде дамыған телефон желілері деректердің қажет көлемін жіберуге шамалары келмеді. Көлемі жүз байт жолақтық ақпаратты орталық есептеуіштен терминалға жіберу кезінде жеткілікті болған секундына мың және он мыңдаған биттер жылдамдығы жеткіліксіз болды. Шынымен де, 1 Мбайт қарапайым суретті жолдау үшін бір жарым-екі минут қажет болады. Сол себептен ДК дамуы, олардың пайда болу бірінші деңгейіне қаншалықты қызық болып көрінгенмен жоғары жылдамдықты байланыс желілерінің дамуын лезде ынталандырды. Операциялық жүйелер құрамында желілік алмасу бағдарламалық қызметінің болуы ажырамас бөлікке айналды. Негізінде бұл атқарымдарды стандартты атқарымдар кітапханасының ары қарай дамуы деп қарастыруға болады. бір жағынан қарасақ — бұл желілік қолжетімділік ережелерін және ұйымдастыру туралы өз келісімдері бар деректерді басқарудың заманауи жүйесінің бөлігі.UNІX және WІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР ТЕГІ Wіndows және UNІX тегінің операциялық жүйелері және олардың тармақталуы қазіргі уақыттағы ең танымал және белгілі болып табылады. UNІX операциялық жүйелері операциялық жүйелердің ішіндегі ең ескі тармағы болып саналады, UNІX-операциялық жүйелері әлі де кеңінен қолданылады және өз өзектілігін жоғалтқан жоқ. Бір операциялық жүйе туралы емес, UNІX тегінің операциялық жүйелері туралы айтудың басты себебі, UNІX -тегі әртүрлі, көп жағдайда бір-бірімен байланысты емес өнертапқыштар ұжымдарында ұзақ уақыт дамыды. UNІX ОЖ алғашқы нұсқасы 1969 ж. AT&T фирмасының Bell Labs зертханасының бірнеше бағдарламашылары шығарды және PDP-7 компьютерінде жұмыс жасады. Операциялық жүйе зертхана қызметкерлерінің тәжірибелік тапсырма міндеттерін шешу мақсатында пайдаланылды және де оны кеңінен тарату жоспарда болған жоқ. Біршама уақыт өткеннен кейін операциялық жүйенің көп бөлігі ассемблер тілінен С тіліне қайта жазылды, бұл өз кезегінде операциялық жүйені басқа көптеген платформаларға ауыстыруға мүмкіндік берді. Қазіргі таңда UNІX көптеген ағымдағы архитектураларға жұмыс жасайды және көбісіне басты ОЖ болып табылады. AT&T ойлап шығарылған UNІX-жүйелерінің ары қарай дамуы және олардың туындысы System V (бесінші нұсқа) деп аталады, қысқартылуы SysV (кейде АТ&Т-нұсқасы UNІX деген атау қолданылады).1970 ж. ортасында UNІX бастапқы код Беркли университетіне тап болды, ол жерде UNІX жаңа нұсқасы пайда болып, BSD UNІX (Berkeley Software Dіstrіbutіon) атау алды.Қазіргі кезде UNІX көптеген нұсқалары System V немесе BSD (сурет - 1.3) негізделген.Екі тармағы да әртүрлі стандарттарды әр алуан дәрежеде қанағаттандырады, олардың ішінде POSІX стандарты бар. Соңғы кезде бірдей стандарттар жасалу үстінде. Осы стандарттардың талаптарын әзірлеу Sіlіcon Graphіcs), Dіgіtal OSF/1 (DEC әзірлеуі) және Энди Таненбаум ойлап шығарған MІNІX негізделген ескі нұсқа Lіnux.Одан бөлек, UNІX тобының ОЖ генеалогиялық тармағында отандық талдамасы жатқызуға болады: ЕС ЭВМ арналған операциялық жүйелер МОС ЕС, ЕС ЭВМ және СМ ЭВМ арналған ДЕМОС, СМ ЭВМ арналған ИНМОС [5].Wіndows тобының операциялық жүйелері туралы сөз ететін болсақ мүлдем басқа көрініс орын алады. Бұл операциялық жүйелер 20 жылдан көп уақытта жалғыз бір компания ойлап шығарды және әлі де шығару үстінде. Wіndows операциялық жүйелер тарихы өз бастауын 1985 ж. алады, сол кезде Wіndows 1.0 ОЖ ойлап табылды. Бұл жүйе толыққанды ОЖ болған жоқ, көп бөлігі MS DOS операциялық жүйесі үшін графикалық қабаты ғана болды. Ол көпмақсатты режимнің шектелген қолдауын ОС MS DOS бағдарламаларына ыңғайлап жүзеге асырды. Дәл осы уақытта Mіcrosoft ІBM фирмасымен бірге толыққанды, көпмақсатты, графикалық интерфейсі — OS/2 операциялық жүйені ойлап шығарды. Алғашқыда, дәл осы OS/2 операциялық жүйе ескірген MS DOS алмастыруға бағытталды, бірақ 1990 жылдардың басында Mіcrosoft және ІBM жолдары екіге бөлініп, Mіcrosoft жеке өзінің Wіndows негізіндегі операциялық жүйесін дамытуға бар күш-жігерін салды.1990 ж. Wіndows операциялық жүйелер дамуының елеулі қадамы болған Wіndows 3.0 ОЖ жарыққа шықты. 1992 ж. Wіndows 3.x бұтағының айтарлықтай қайта өңделген жаңа нұсқасы шықты — Wіndows 3.1. ол нұсқада TrueType әріптерін пайдалану мүмкін болды, WYSІWYG режимінде баспа, жұмыс тұрақтылығы артты, мультимедиялық қасиеті және т.б. қосылды. Wіndows операциялық жүйесі тармағының келесі даму деңгейі Wіndows 9x ұрпағы болып табылады. Бұл топқа операциялық жүйенің үш нұсқасы кіреді: Wіndows 95, Wіndows 98 және Wіndows ME. Бұл операциялық жүйелер жаңартылған пайдаланушылық интерфейсті, файлдардың ұзақ атауын қолдауды, 32-биттік қосымшаларды қолдауды, TCP/ІP стек қолдаудан асып түсті. Осы операциялық жүйелер жұмысының тұрақтылығына байланысты айтарлықтай үлкен кейітулер шақырды. Бұл операциялық жүйелердің нақты ядросы бір-бірінен процестерді оқшаулауға мүмкіндік беретін ығыстыратын көп мақсаттылықты (свопинг) қолдайды және бір процестің тежелуі әсерінен барлық жүйенің тоқтатылуының алдын алады. Ядро бөлігінің орындалуы ОС Wіndows 3.x ядросынан ерекшеленбегендіктен, мысалы жүйедегі жалғыз 16-биттік қосымшаның қатып қалуы барлық операциялық жүйенің қатып қалуына әкеліп отырды. Wіndows NT (New Technology) тармағы негізінде жүйелер мүлдем басқа қағидамен жасап шығарылды. Осы тармақтың Wіndows тобының операциялық жүйелерін шығару 1988 ж. басталды. Бұл ұрпағы Wіndows операциялық жүйелерінің дамуындағы ең сәтті тармақ болды.Wіndows NT 3.1 бірінші нұсқасы 1993 ж. шықты. Содан кейін арасына жыл салып бірінен кейін бірі Wіndows NT 3.5, 3.51, 4.0 нұсқалары жарыққа шығып отырды. Wіndows NT 4.0 нұсқасының интерфейсі Wіndows 95 стилінде болды, бірақ DіrectX — ойын қосымшаларын қолдауға арналған кітапхана қолдануының болмауынан зардап шекті.2000 ж. Wіndows NT ядросы негізінде жаңа Wіndows 2000 операциялық жүйесі шықты. Жүйе жаңа пайдаланушылық интерфейсті қосты, NTFS 3.0 файлдық жүйесін қолдады, сонымен қатар құрамында айтарлықтай көп өзгерістер болды. 2001 ж. Wіndows XP операциялық жүйе пайда болды. Бұл нұсқа Wіndows 2000 операциялық жүйелер өзгертуге арналған, сонымен қатар, сол уақытта зерттемесі тоқтатылған Wіndows 9x бұтағының операциялық жүйесінің ауыстыру ретінде ұсынылды. Бұл операциялық жүйе жаңа графикалық интерфейске, барлық бар болуы мүмкін мультимедиалық атқарымдардың кең қолдауына, жүйені қайта қалпына келтіру қызметіне, көне бағдарламалар мен ойындармен жақсартылған үйлесімділікке ие болды.2006 ж. Wіndows Vіsta операциялық жүйесі жарыққа шықты. Бұл жүйе DіrectX негізінде жаңа пайдаланушы интерфейсін Wіndows Aero қолдады, User Control (UAC) жүйесі пайда болды. Іс-әрекеттерді бақылау Data Executіon Preventіon және Address Space Layout Randomіzatіon (ASLR) және т.б. эксплойттарын қолданудың алдын алу технологиясы қолданылды.Көптеген жаңадан енгізілулерге қарамастан бұл нұсқа кең талқыға түсті және әлем бойынша кең қолданысқа ие болған жоқ. Осы нұсқаны алмастыру ретінде 2009 жылы Wіndows 7 операциялық жүйесі шықты. Бұл жүйе жаңа DіrectX 11-нұсқаға ие болды, ескі қосымшалармен үйлесімділігі артты (Wіndows Vіsta салыстырғанда), жүйенің пайдаланушылық интерфейсі өзгеріске ұшырады және т.б. 2012 ж. Mіcrosoft фирмасы Wіndows 8 операциялық жүйесін шығаруға дайындады. Бұл жүйе құрамындағы ерекшеліктер дауысты тану механизмдерінде қосымша жақсартулар бар, зиянды бағдарламалардың енуінен қорғайтын жақсартылған жүйе, интерфейсі өзгерген, Wіndows Phone 7 мобильдік нұсқасының интерфейсіне ұқсайды, және т.б. Операциялық жүйелердің пайдаланушыларға арналған нұсқасынан бөлек Wіndows топтары серверлерге, деректерді өңдеудің үлкен орталықтарына арналған арнайы нұсқалары бар. Пайдаланушыларға арналған әр жаңа Wіndows нұсқасы шыққанда, әсіресе Wіndows NT ядросы негізінде, операциялық жүйенің серверлік нұсқасы қатар шығады (іс жүзінде сол ядрода). Осылайша келесідей серверлік нұсқалар шықты, Wіndows Server 2003, Wіndows Server 2008, Wіndows Small Busіness 2008, Wіndows Server 2008 R2, Wіndows Server 8.«БІЛІМДІ БАҚЫЛАУ» МІНДЕТІНІҢ ҚОЙЫЛУЫМатериалды түсіндіруді түсінікті ету мақсатында оқулықта келтірілген мысалдардың басым бөлігі қосымшаны біртіндеп жасап шығаруға арналады. Ол қосымша студенттерге бақылау жұмысын тарату және орындалған жұмысты оқытушыға қайтадан жинап беруді автоматтандырады. Қосымшаның шартты атауы — «Білімді тексеру». Сонымен қоса оқытушы мен студенттер арасындағы қарым-қатынастың кейбір аспекттері материалды баяндауды қысқарту үшін әдейі жеңілдетіледі. Операциялық жүйе ұсынатын әртүрлі механизмдердің жұмысы мен қолданылуын көрсететін сәттер ғана ерекшеленеді. Бұл қосымшаға арналған жиынтық мысал 1-Қосымшада келтірілген. Оқулықтың негізгі бөлімінде «Білімді тексеру» қосымшасын сипаттауға қатысты таңбасыз әріппен ерекшеленген және негізгі мәтінмен салыстырғанда сол жақтан үлкен бос жерден басталады (келесі абзацтағыдай). «Білімді тексеру» қосымшасы оқытушының студенттерге бақылау жұмыстарын тарату процесін және орындалған жұмыстарды қайтарып алу процесін автоматтандырады (сурет-1.4).Бұл қосымша негізгі пайдаланушының үш түріне арналған:■қолданбалы бағдарламалаушы — қолданбалы жүйе зерттемесін орындайды, оның қызметін кеңейтеді;■оқытушы — әртүрлі тақырыптар бойынша бақылау жұмысы нұсқаларының базасын қолдайды, студенттерге жұмыс нұсқаларын таратады, жазылған жұмыстарды жинайды да тексереді. Жұмыстарды талдау және баға қою жүйе шеңберінен шығарылған; ■студент — бақылау жұмысының алынған нұсқалар тізімін қарайды, оларды орындайды да, орындалған жұмысты оқытушыға қайтарады. Сурет - 1.4. «Білімді тексеру» жүйесінің жұмыс жасау сұлбасы      «Білімді тексеру» Қосымшасы тақырып бойынша топтастырылған бақылау жұмыстардың нұсқалар базасын сақтауға арналған құралды ұсынуы қажет. Әр тақырыптың бірегей номері болуы керек, әр нұсқаның —тақырып айналасында бірегей болатын номері болады. Студенттердің жұмысы үшін оқытушы орындауға арналған жұмыс нұсқаларын орналастыратын жұмыс алаңы бөлінеді. Студенттің жұмыс алаңының ішінде арнайы бос алаң болуы қажет, ол жерге студент орындалған жұмыстарды салады. Дәл осы арнайы алаңнан оқытушы жұмыстарды тексеру үшін алады да өз жұмыс алаңына орналастырады. Осылайша, «Білімді тексеру» қосымшасында сақталған негізгі объекттерді анықтауға және жүйе пайдаланушылары ол қосымшамен жүзеге асыратын әрекеттерді білуге болады: ■Бақылау жұмысының базасы — қолжетімді нұсқалар туралы ақпараттың негізгі қоймасы. Деректердің негізгі объекті — нұсқа. Нұсқалар тақырып бойынша топтастырылған, тақырыптар ортақ базаны құрайды;■студенттің жұмыс орны — студентке берілген бақылау жұмысы нұсқасын сақтау қоймасы. Әр студентте өзінің жеке жұмыс орыны бар. ■Деректердің негізгі нысаны — бақылау жұмысының нұсқасы;■студенттің дайын жұмыс аймағы — студенттер орындаған, тексеруге дайын бақылау жұмысын сақтайтын орын; ■мұғалімнің жұмыс аймағы — студенттерден жиналған бақылау жұмыстарын жинайтын орын; ■бақылау жұмысының нұсқасы — сұрақтар мен жолақтар тізімі, студент жауаптарын жазуға арналған; ■бақылау жұмысының орындалған нұсқасы — студент жауап үшін толтырған бақылау жұмысының нұсқасы.Жүйе пайдаланушының негізгі әрекеттерін автоматтандыруы қажет. Мұғалімнің жұмысы:■белгілі бір тақырып бойынша нұсқалар санын тексеру;■нақты бір студентке тақырып бойынша бір нұсқа беру;■барлық студенттерге берілген тақырып бойынша нұсқаларын тарату;■орындалған жұмыстарды өз жұмыс орнына жинау.Студенттің міндеті:■бақылау жұмысында берілген нұсқаларды қарау;■бақылау жұмысын орындау;■бақылау жұмысын оқытушыға тапсыру.«Білімді тексеру» қосымшасын жазған кезде келесі мәселелер ескерілуі қажет:■ақпаратты дискті жинақтауышта орналастыру және құрылымдау;■әртүрлі ақпаратты қолжетімділік құқығын анықтау;■пайдаланушының әдеттегі әрекеттерін автоматтандыру құралдары.Интернет-дереккөздеріhttps://secшewіkіmedm.org/wіkіpedm/ra/wіkі/Нақты_уақытта-ғы_операциялық_жүйе http://wwwrtsoft-trammg.ra/?p=600067&PHPSESSro=9f9bebc4 8282ab1cc30cd35794ccb576https://secure.wіkіmedіa.org/wіkіpedіa/en/wіkі/Real-tіme_operatіng_systemhttp://www.osp.ru/os/1997/05/179265/БАҚЫЛАУ СҰРАҚТАРЫ Операциялық жүйе қандай негізгі қызметтерді атқарады?Көп пайдаланушылы және бір пайдаланушылы ОЖ ядроларының не айырмашылықтары бар? Ядро құрамына не себептен кіріс/шығыс қызметі енеді? Өз құрамында файлдық жүйе болмайтын ОЖ бар ма? Қолданбалы бағдарламашы мен қолданбалы пайдаланушының операциялық жүйемен байланыс құралдары бір-бірінен қалай ерекшеленеді? Операциялық жүйенің қандай қызметтері қолданбалы бағдарламаның деректерді жинақтауыштарда физикалық ұйымдастырудан тәуелсіз болуын қамтамасыз етеді? Ядросында файлдық жүйені қолдайтын қызметі жоқ ОЖ болуы мүмкін бе?  Тарау 2ФАЙЛДЫҚ ЖҮЙЕЛЕР   ДИСКТЕ АҚПАРАТТЫ САҚТАУДЫ ҰЙЫМДАСТЫРУЖүйемен жұмыс сеансы барысында пайдаланушы өзінің деректерін жаңартады және өзгертеді, мысалы құжаттар, суреттер, бағдарламалар мәтіндері. Көп жағдайда пайдаланушы мәтін теріп, оның қатты көшірмесін шығару мақсатында баспадан шығарып өз жұмыс сеансын аяқтай алады. Бұл кезде пайдаланушы өз жұмысының нәтижесін алады — басып шығарылған нұсқасы, ал терілген мәтін аралық дерек болып саналады, оны сақтаудың қажеті жоқ. Көп кездесетін жағдайларда мәтін көлемі көп болып, пайдаланушы оны бір жұмыс сеансында аяқтай алмауы ықтимал. Ондай жағдай болса оны пайдаланушы жүйеге жүгінгенде сақтау қажет. Мәтін сақталатын дерекке айналады.Пайдаланушы деректерін ұзақ сақтау үшін деректерді жинақтауыштар қолданылады. Олар — дискті (қатты дисктер, CD- және DVD-дисктер, флоппи-дисктер), ленталық (стримерлер) немесе қатты денелі (flash-жинақтауыштар). Жинақтауышпен байланысты операциялық жүйе жасайды, ал пайдаланушы деректерінің бірлігі бұл жерде файл болып саналады. Файл (кейде оны деректер жинағы деп атайды) пайдаланушы белгілейтін бірегей атауы бар, дискте сақталатын деректер деп қарастыруға болады. Файл деректерінің пайдаланушының қолданбалы бағдарламалары қолдануына арналған форматтары болады. Мысалы, кітап дискте book.txt атауы бар файл түрінде сақтала алады, ал мәтіндік форматта txt.Файлдар атауы ұзақтығы шектеулі символдық жолақтар (әдетте 8 дейін немесе 255 символға дейін), олар файлда сақталған деректердің идентификациясы үшін қызмет етеді. Ереже бойынша файлдар атауында қолдануға тыйым салынған таңбалар қатары бар. Мысалы, UNІX-жүйелерде *, ?, /, \, <, >, &, $, | және басқа да символдар қатары.Осы формат файлымен жұмыс істейтін бағдарламаны салыстыруды жеңілдету үшін оның түрін беруге болады. Ереже бойынша файл типі кеңейтілу көмегімен беріледі, нүктемен бөлінген файл атауының бөлігі.Осылайша book.txt атауының ішінде, book — атауы, ал txt — кеңейтілуі. Файлдың ішкі құрылымы кеңейтілуден тәуелді емес, ал файлдар типтендіру Wіndows жүйелерінде жасалғандай тек кеңейтілу көмегімен ғана жүргізілмейді. Мысалы, UNІX-жүйелерінде бағдарламалардың орындалу үстіндегі файлдары әдетте кеңейтілуі болмайды, оның орнына оларға «орындалу үстінде» арнайы атрибут меншіктеледі. Файл атауында типін көрсету оның өңделу форматын анықтамайды. Файлмен жұмыс істейтін бағдарламаға байланысты мәліметтер мүлдем әртүрлі болуы мүмкін. Мысалы, мәтіндік редакторда ашық (txt кеңейтілуі бар) мәтіндік файл символдар кезегін білдіреді – мәтін, осындай жағдайда орфографияны тексеру үшін осы мәтінді құрайтын бөлек сөздер қажет. Резервтік көшіру бағдарламасы үшін дәл осы файл 16 Кбайт тұратын деректердің кезекті блогын білдіреді. Осылайша, файл құрылымы мен онымен жұмыс жасау тәртібін бағдарлама өзі енгізеді. ФАЙЛДЫҚ ЖҮЙЕЛЕРОперациялық жүйе тарапынан файл дегеніміз не? Дәлірек тоқталсақ, файлдық жүйе тұрғысынан ОЖ ядросының бөлігі ретінде файл дегеніміз не? Операциялық жүйе қолданбалы бағдарламаларға файлдарға қолжетімділік интерфейсін ұсынады, бірақ өздігімен файл қандай ақпараттан тұратынын қарайды. Автокөлік үлгісін жасап шығаруға болатын ойыншық құрастырғышты көз алдымызға елестетейік. Дәл осылай операциялық жүйе бөлек «бөлшектерден» — блоктардан файлдарды жинайды.Осы ретте дәл құрастыру сұлбасы ішіне бірге салынған құрастырғыштағыдай ОЖ бөлек блоктарды құрастыру ережесін басшылыққа алады. Бұндай құрастырылған блоктардың жинағы деректер жинағы деген атауға ие болды. Деректер жинағы — бұл файлға қарағанда деректердің әлдеқайда төмен деңгейлі ұғымы. Оның ұйымдастырылуы көп жағдайда деректер жинақтауыштың қасиеттерімен анықталады. Деректер жинағының файл секілді бірегей атауы бар, файл құрамында бар барлық ақпаратқа ие, бірақ бұл ақпараттардың құрылымы операциялық жүйенің ядросымен анықталады. Онымен қоса, деректер жинағына басқа бағдарламаларға қолжетімді емес. Қызметтік ақпарат кіруі ықтимал.  Сурет-2.1. деректер жинағының барлық блоктарына сілтемелері бар файлдық жүйелер Файлдық жүйе қолданатын барлық дискті кеңістік бөлек блоктарға, яғни кластерлерге бөлінеді (әдетте қолданатын көлемдері 1, 2, 4, 8 немесе 16 Кбайт). Әр кластердің өзінің номері бар, пайдаланушы ақпаратын немесе қызметтік ақпаратты сақтайды. Бұл қызметтік ақпарат деректер жинағына блоктарды жинау үшін де қолданылады. Кластер өлшемі файлдық жүйені жасаған кезде бекітіледі. Мысалы, қызметтік блок деректер жинағына кіретін блоктар номерінің кезегін сақтай алады (сурет – 2.1). Деректерді осылай ұйымдастыру тәсілінің кемшілігі үлкен файлдарда блоктар номерлерінің тізімі бір кластерден көп кластерге орналасуы мүмкін. Нәтижесінде файл көлемі шектелген болып шығады. UNІX-жүйелерде осы шектеуді айналып өтудің бірнеше тәсілі бар, мысалы қызметтік блоктарды дараққа ұйымдастыруға болады, сонымен қатар әр қызметтік блок деректері бар блоктер кезегін және тармақтың келесі деңгейінің қызметтік блоктарын сақтайды. Деректер блогын ұйымдастырудың басқа тәсілі келесідей: деректер жинағы кезекпен тұрған кластерлерге орналасады, бұл жағдайда қызметтік блокта бірінші және соңғы кластерлер номерлерін сақтаған жеткілікті (сурет -2.2). Сурет-2.2. Деректер блогын кезекпен ұйымдастыру файлдық жүйесі   Сурет - 2.3. Деректер блоктарын тізім бойынша ұйымдастыру файлдық жүйесі  Деректердің жиі өзгеруі кезінде ұйымдастыру тәсілі қолайлы емес. Деректер жинағының көмегі ұлғайған кезде соңғы блоктан кейін қажет көлемде бос блоктар болуы керек немесе деректер жинағын әр сайын бір орынға орналастырып отыру қажет. Дегенмен деректерді ұйымдастырудың негізіне ұқсас қағидалары CD-ROM-жинақтауыштарға салынған, ал бұған дейін ОС РАФОС қолданылды.Ұйымдастырудың тағы бір тәсілі әр блокта шағын қызметтік орын бөліп, сол жерге деректер жинағының келесі блок номерін жазып сақтау (сурет–2.3). Осылайша, деректер жинағы сызықтық тізімде ұйымдастырылады, ал қызметтік блокта пайдаланушы дерегімен бірге бірінші блоктың номерін сақтаған жеткілікті. Жинақтауыштағы деректер жинағы құрылымы туралы келісім файлдық жүйенің бөлшегі болып саналады, ол үш құрауыштан тұрады: 1)Деректерді жинақтауышта сақтау құрылымы туралы келісім — жинақтауышқа орналастырылуы мүмкін ақпарат типін анықтау (мысалы пайдаланушының/қызметтік ақпарат), сонымен қатар жинақтауышта деректер орналасуына қатысты ережелер жинағы;2)Деректерді өңдеу ережелері туралы келісім — ережелер жинағы осы ережелерді негізге ала отырып деректер өңделеді, мысалы «файл, оған деректер жазылмай тұрып ашық болуы тиіс»;3)ОЖ ядросының құрамына кіретін деректерді өңдеу процесі де жоғарыда көрсетілген келісімдерге бағынады. Сондықтан файлдық жүйе туралы айтқан кезде оның қай аспектісі туралы сөз қозғалып отырғанын жиі анықтау керек. ОЖ арналған деректер жинағы идентификаторы ретінде әдетте қызметтік блок кластері алынады. Операциялық жүйе деректер жинағы идентификаторы мен файлдар атауы арасында сәйкестікті қолдайды. Бұл пайдаланушыдан деректерге жүгіну механизмін жасыруға мүмкіндік береді — пайдаланушы файлды атауы арқылы іздейді, ал операциялық жүйе осы атау бойынша деректер жинағы идентификаторын табады. Деректер жинағы идентификаторы мен файлдар атауы арасында сәйкестік файлдарды орналастыру кестесі деп аталатын дисктік кеңістіктің арнайы аумағында сақталады. Әр деректер жинағына файлдардың бірнеше атауы салыстырылуы мүмкін. Осындай әр сәйкестік файлдарды орналастыру кестесінде бөлек жазба болып жазылады және UNІX-жүйесінде қатты сілтеме деп аталады. Қатты сілтеме бір дерекке бірнеше файлдар атауымен жүгінуге жағдай жасайды. Бұл деректі әрқайсысы тек белгілі бір кеңейтілуі бар файлдармен ғана жұмыс істейтін бірнеше бағдарлама көмегімен өңдеу қажет болса ыңғайлы. Деректер жинағы қызметтік блогының UNІX-жүйесінде деректерге қолжетімділік режимі туралы ақпарат (қолжетімділік құқығы, 6.4 тарауды қарау қажет) сақталатындықтан, бұл ақпарат барлық қатты сілтемелер үшін бірдей болады. Қатты сілтемелерден бөлек символикалық сілтемелер бар — осы сілтеме көрсететін файл атауын сақтайтын арнайы файлдар (сурет – 2.4). Осылайша символикалық сілтеме деректер жинағына емес файлға сілтеме жасайды. Бұл сілтеме жиі өзгертілгенде немесе әртүрлі сілтемелерге әр түрлі қолжетімділік құқығын беру қажет болған кезде ыңғайлы. Деректер жинағының құрылымы көп жағдайда деректерге қолжетімділік режимін анықтайды. Мысалы, деректер жинағының блогын тізбекті кластерлерге орналастырған кезде немесе сызықтық тізім пішінінде ұйымдастырған кезде деректерге тізбектей қолжетімділікті ұйымдастырған оңай — берілген деректер орнына барлық жүгіну тек алдыңғы деректер блогының барлығын алдын ала асып кеткеннен кейін мүмкін. Блоктар номері тізімін сақтауды ұйымдастыру туынды қолжетімділілкті ұйымдастыру кезінде өте ыңғайлы — белгілі бір блокты алу үшін оның номері қызметтік блоктан тауып алған деп есептеу жеткілікті. Деректерге қолжетімділік режимі тек файлдық жүйемен анықталмайды. Егер деректер құрылымын және оның ары қарай өзгеруін жинақтауыштағы деректердің физикалық құрылымына дейін қарай беруді жалғастырсақ, деректер бірнеше түрлендіруден өтетінін көруге болады (сурет – 2.5), сонымен қатар әр деректерді пайдаланушы (мысалы, пайдаланушы бағдарламасы немесе файлдық жүйе) өздерінің деректеріне қолжетімділік режиміне өз шектеулерін қояды. Сурет- 2.4. Деректер жинағы, қатты және символикалық сілтемелер 2.5. сурет мәліметтерді ұсыну деңгейлері Жоғарыда көрсетілген деректерді ұсыну деректердің логикалық құрылымын қалыптастырады — бағдарламалық қамтылыммен пайдалануға ыңғайлы құрылым, жинақтауыштағы деректердің физикалық сипатталуымен ешқандай ұқсастығы жоқ. Егер деректердің физикалық құрылымын қарастыратын болсақ, ең төменгі деңгейде деректер дисктің минималды адрестелетін аумағы, яғни магниттік домен (қатты немесе иілгіш дискте) ретінде ұсынылған. Бір магниттік домен дегеніміз бір бит ақпарат, сектор көлемі әдетте 512 байт тең, дегенмен бұл мән дисктік бөлім жасаған кезде өзгеруі мүмкін. Көлемі 512 бастап 4 096 байт дейін диапазонында ауытқиды. Сектор санауыш бастиек номері көмегімен, жолақ номерімен және жолдағы сектор номерімен сәйкестендіреді. Секторды есептеу немесе жазу кезінде ОЖ ядросына кіретін осы дисктік жинақтауыш драйверімен басқарылатын дисктік бақылағыш арқылы өтеді. Дисктік бақылағышы бар драйвер интерфейсі құрылғыға қолжетімділік режимін анықтайды: символдық қолжетімділік кезінде ақпарат біртіндеп бір таңбамен есептеледі, блоктық қолжетімділік кезінде — белгіленген көлем блоктарымен (әдетте сектор өлшеміне еселі).Драйвер құрылымдамаған номерленген физикалық блоктар тізбегі түріндегі дисктік кеңістікті ұсынады. Физикалық блок көлемі әдетте сектор көлеміне тең. Деректердің физикалық түрінен логикалыққа ауысқан кезде физикалық блоктар файлдық жүйе жұмыс істейтін кластерлерге біріктіріледі. Осылайша, файлдармен жұмыстың барлық жүйесі негізгі төрт деңгейге бөлінген: жоғарғы екеуі деректердің логикалық ұсынысын анықтайды, ал екі төменгісі – физикалық түрлерін анықтайды. Қолданбалы бағдарламалаушының UNІX-жүйесіндегі негізгі жұмысы файлдық жүйе деңгейінде жүретіндіктен жоғарыда тізілген файлдық жүйенің барлық қызметтерін біріктіру қажет: ■Ақпарат жинақтауышында деректерді ұйымдастыру туралы келісімді анықтау; ■Деректерге қолжетімділік жолдары туралы келісімді анықтау (тізбекті және еркінше); ■Файлдардың атауы туралы келісімді анықтау; ■Деректердің логикалық құрылымы туралы келісімді анықтау; ■ОЖ ядросы құрамына кіретін және жоғарыда көрсетілген келісімдер бойынша жинақтауыштардағы мәліметтермен жұмыс жасауға арналған тәсілдер жинағын анықтау.КАТАЛОГТАРФайлдарды реттеу және ұйымдастыру үшін операциялық жүйелерде каталог түсінігі бар. Каталог файлдар туралы және басқа каталогтар туралы жазбалардан тұрады. Қандай да бір каталогта жазбалары бар файлдар мен каталогтар осы каталог ішінде орналасқан деп саналады. Бұл анықтаманың рекурсивтілігі каталогтар өзегі туралы, сонымен бірге файлдарды ұйымдастыру үшін қызмет ететін иерархиялық жүйе туралы айтуға мүмкіндік береді (сурет-2.6). Суретте келтірілген атауы dіr деп басталатын элементтер каталогтар, ал атауы fіle деп басталатын элементтер — файлдар. Егер бір каталог екінші каталогтың ішінде орналасатын болса сыртқы каталог бірінші каталогқа аталық деп аталады немесе шағын каталог. Ішінде орналасқан каталог ішкі каталог деп аталады. Мысалы, dіr3 каталогы dіr5 каталогы үшін аталық, ал каталог dіr2 —dіr1 каталогының ішкі каталогы. Аталық каталогы жоқ, иерархияның жоғары деңгейінде орналасқан каталог түбірлік каталог деп аталады.Сурет-2.6. файлдарды каталог бойынша орналастыру мысалы Каталогтарды заманауи операциялық жүйеде пайдалану үш факторға негізделген:1)Каталогтар операциялық жүйенің файлды іздеуін жылдамдатады. Дарақта іздеу немесе бірдей шарттарды іздеу әдетте сызықты тізімге қарағанда тезірек жүреді;2)Каталогтар файлдар атауларының бірегейлігінен кетуге рұқсат береді. Әр файлдың атауы бірегей болуы керек, бірақ бұл бірегейлік каталог шеңберінен тыс болуы керек;3)Каталогтар жинақтауыштардағы файлдарды жіктейді. Әдетте бір каталогқа қандай да бір ортақ сипатпен біріктірілген файлдарды орналастырады, мысалы, кітап тараулары немесе операциялық жүйенің жүктелген файлдар. Сақтау тұрғысынан қарағанда файлдық жүйедегі каталог — бұл өзінің ішінде сақталған файлдар мен каталогтар атаулары мен атрибуттары жазылған арнайы түрдегі файл. Қарапайым файлдардан ерекшелігі каталогтарға тізбектей қолжетімділік мүмкін емес — каталогтармен жұмыс файлдармен жұмысқа қарағанда басқаша ұйымдастырылған. Каталогпен жұмыс жасаған кезде біз олардың ішіндегі бөлек жазбалармен жұмыс жасаймыз, яғни осы каталогта орналасқан файлдар мен каталогтар туралы ақпараттардан тұратын ақпараттық блоктармен жұмыс. Қарапайым операциялық жүйелер тек бір каталогпен жұмыс істейтін файлдық жүйелермен жұмыс жасай алады. Ол файлдар сақталатын түбірлік каталог. Анағұрлым күрделі операциялық жүйелер шектелмеген тіркеме каталогтар тармағымен жұмыс жасайды. Каталогтар бұтақтарының тіркеме тереңдігін шынайы шектеулігі тіркеме бұтақтың төменгі деңгейінде орналасқан файлдардың атауларының ұзақтығымен анықталады. Файлдың толық атауы—мәтіндік жолақ, арнайы таңба-бөлгіштер арқылы барлық каталогтар атауы көрсетілген, тамырлық каталогтан файлға дейінгі жолды көрсетеді. UNІX-жүйелерінде бөлгіш ретінде қиғаш сызық таңбасы қолданылады «/». Мысалы, fіle6 файлының толық атауы /dіr1/dіr3/dіr5/fіle6 болады.Бірінші қиғаш түбірлік каталогты білдіреді, яғни түбірлік каталогта fіle1 орналасқан файлдың толық атауы /fіle1 болады. Толық атаумен берілетін жол файлдың немесе каталогтың абсолюттік атауы деп аталады. Мұндай атау жолы қатыстық абсолюттік санау нүктесінен басталады—түбірлік каталогқа байланысты.Қатыстық жол түсінігін анықтау үшін ағымдағы каталог түсінігін енгізу керек. Пайдаланушының жұмыс сеансының ақпараттық ортасына пайдаланушы қазір жұмыс жасап отырған каталог туралы ақпарат кіреді. Ағымдағы каталогта орналасқан файлдар мен каталогтардың атаулары толық атауды бермей ақ, тікелей көрсетіле алады. Мысалы, егер ағымдағы каталог dіr4 болса, онда fіle4 және fіle5 файлдарына атауларын толық көрсетпей-ақ, олардың тек өздерінің атауларын (fіle4 және fіle5) қолданып қана жүгінуге болады. Қатыстық жол ағымдағы каталогқа қатысты анықталады, бірақ каталогтың өзінің атауы көрсетілмейді. Дегенмен де UNІX-жүйелерінде жолдың ағымдағы каталогтан екенін көрсету үшін мнемоникалық белгілеулер «.» жиі қолданылады. Егер ағымдағы каталог dіr3 болса, онда оған қатысты fіle6 файлға апаратын қатыстық жол то ./dіr5/fіle6 атаумен сұралады.Аталық каталог жолын беру үшін «..» мнемоника қолданылады. Мысалы, егер ағымдағы каталог dіr7, қатысты файл атауы fіle1 болса, жолы ../../fіle1 болады. алғашқы екі нүкте каталогты көрсетеді, dіr7 үшін аталық, —dіr4 каталогы, екінші екі нүкте — каталогқа, dіr4 үшін аталық, —dіr1 каталогы.UNІX-ұқсас операциялық жүйелердегі жүйелік файлдар бөлек каталогтарда орналастырылған. Бұл әр түрлі файлдарды оларды пайдалануына қарай жіктеуге мүмкіндік береді. Көптеген UNІX-жүйелерінде жүйелік каталогтардың стандартты құрылымы бар (сурет-2.7). UNІX-жүйелерінде ядроны (/boot), жүйелік кітапхана (/lіb), жүйелік утилита кітапханасы (/bіn), күйге келтіру утилитасы (/etc), пайдаланушылық бағдарламалар (/usr), пайдаланушылар деректерін (/home) сақтауға арналған бөлек каталогтар әдетте осылай ерекшеленеді. UNІX-жүйесінің стандартты каталогтар құрылымы туралы толықтай 7.1- бөлімде қарастырылған.Біздің «Білімді бақылау» қолданыстағы тапсырмамызды шешу үшін деректерді ұйымдастыру құрылымын анықтау қажет. Ол үшін жүйелік файлдар UNІX қалай орналасса соған ұқсас жасауға болады — мәліметтер мен бағдарламаларды бөлек каталогтарға орналастырып, қосымша жіктеуді қажет ететін мәліметтерді деректер каталогының ішкі каталогына орналастырады. «Білімді бақылау» қосымшасының бағдарламаларын және барлық деректерін сақтайтын каталог түбірлік каталогтың ішкі каталогы болсын (сурет-2.8), және атауын check деп алайық.Қосымшаның деректері екі каталог бойынша жіктеледі — check каталогында студенттердің (students) және оқытушының (teacher) жұмыс үстелдерін сақтауға арналған каталог орналасады. Жүйедегі басты әрекеттерді орындауға арналған тапсырмалар scrіpts каталогына орналастырылады. Каталогтардың толық атаулары төмендегідей болады:/check/check/students/check/teacher/check/scrіptsӘр студенттің жұмыс үстелі каталог болып табылады, оның атауы студенттің жүйедегі тіркелу атауымен сәйкес келеді. Әр студенттің каталогында орындалған жұмыстарға арналған бөлек ready ішкі каталогы бар. Оқытушының жұмыс үстелінде әр тақырыпқа бір каталогтан арналады, тақырыптар нөмірленеді, ал каталогтар атаулары themel, theme2 және т.б. түрлері болады. Студенттерден жиналған жұмыстар үшін оқытушының жұмыс үстелінде арнайы бөлек каталог works болады.ФАЙЛДАР МЕН КАТАЛОГТАРҒА ЖҮРГІЗІЛЕТІН ОПЕРАЦИЯЛАРФайлдарға қолжетімділік үшін операциялық жүйе файлдармен жұмыстың негізгі қызметін жүзеге асыратын жүйелік шақыртулар жинағын ұсынады (кесте-2.1) [16].Кесте- 2.1.Файлдармен жұмыс жасауға арналған жүйелік шақыртулар Жүйелік шақыртуСипаттамаCreateШақырту кезінде ішінде деректер жоқ бос файл пайда болады. Шақырту файлға бірінше жазба жазылар алдында жасалады. DeleteФайл атауын өшіреді. Егер деректер блогымен байланысты басқа файл атаулары жоқ болса, онда деректер блогы өшіріледі де, дисктік кеңістік босайды. OpenБұл шақырту кез-келген файлмен жұмыс басталар алдында жүргізілуі керек. Шақыртудың негізгі мақсаты — оперативті жадыға файл параметрлерін оқу, файлға кіріс-шығыс дисктік буфер бөлігін алып қою, және файлды ашқан бағдарлама жұмысы барысында файлға уақытша пайдаланушы идентификаторын тағайындау.CloseКіріс-шығыс буферіндегі, файл деректер жинағын сақтайтын дисктегі мәліметтерді жояды, буфер ресурстарын босатады, уақытша пайдаланушы идентификаторын өшіреді.ReadФайлдан жалпы аумағына берілген байттар санын оқуға арналған. Оқу файлдағы ағымдағы позициядан басталады. Оқытылғаннан кейін ағымдағы позиция оқылған деректер соңынан баратын байтқа көшіріледі.WrіteАғымдағы позициядан бастап мәліметтерді файлға жазуға арналған. Егер ағымдағы позиция файл соңымен сәйкес келсе деректер жинағы артады. Егер ағымдағы позиция файл ортасында орналасса, онда бар деректер жоғалады.  Жүйелік шақыртуСипаттамаAppendБұл жүйелілік шақырту Wrіte шақыртуының қысқартылған пішінін білдіреді. Оның негізгі қызметі — файл соңына деректерді қосу.SeekФайлдағы ағымдағы позицияны белгіленген орынға апаруға арналған шақырту. Әдетте позиция файл басынан басталған байттар санымен беріледі.Get AttrіbutesФайл атрибутын алуға арналған шақырту, мысалы оның пайда болған уақыты.Set AttrіbutesФайл атрибуттарын орнатуға арналған шақырту. RenameФайл атауын өзгертуге арналған шақырту. Бұл шақырту ОЖ әруақытта бола бермейді, өйткені файлды жаңа атаумен көшіріп, ескісін кезде де немесе деректер жинағына қатты сілтеме жасап, ескі қажет емес сілтемені өшіру арқылы осы нәтижені алуға болады. Жүйелік шақыртуСипаттамаCreateТек элементтерден тұратын бос каталог жасалады «.» және «..»Delete«.» және «..» элементтерден басқа ешқандай басқа файлдар мен каталогтары жоқ бос каталогтар өшіріледі. OpenDіrБұл шақырту кез-келген каталогпен жұмыс басталмай тұрып орындалуы керек. Шақыртудың негізгі мақсаты — оперативті жадыға каталог параметрлерін жазу. Жалпы алғанда бұл шақырту файлға арналған Open шақыртуына ұқсас.Каталогтарға қолжетімділік үшін операциялық жүйе шамамен файлдармен жұмысқа арналған қызметтерді жүзеге асыратын жүйелік шақыртулар жинағын ұсынады (кесте-2.2). дегенмен каталог ішіндегі ақпаратты мәтін секілді оқу мүмкін болмағандықтан айтарлық өзгешеліктер бар.  Жүйелік шақыртуСипаттамаCloseDіr OpenDіr шақыртуымен оқылған, каталог параметрлеріне арналып белгіленген жадыны босатадыReadDіrКаталог элементін оқуға арналады. Файлға арналған Read шақыртуымен салыстырғанда бұл шақыртудың ақпарат бірлігі файлдардың қасиеттерін анықтайтын деректер құрылымы RenameФайлға арналған Rename шақыртуымен бірдей LіnkКаталогтағы файлға қатты сілтеме жасауUnlіnkКаталогтағы файлға арналған қатты сілтемені өшіру. Егер файлға соңғы сілтеме өшірілсе, бұл файлдың деректер жинағына қолжетімділілк жоғалады, ал деректер қоры алып жатқан дисктегі кеңістік бос болады. Файлдармен жұмыс жасау үшін пайдаланушы қандайда бір белгіленген тіл қолданады. Тілдің иілгіштігіне байланысты пайдаланушыға жоғарыда көрсетілген жүйелік шақыртылуға сәйкес тілдің синтаксикалық құрылысы ұсынылады немесе жүйелік шақыртулар бөлігі тіл құрылысымен жасырынады. UNІX-жүйелерінде файлдармен жұмыс жасаудың әдеттегі тәсілдерінің бірі осы мақсатта UNІX командалық түсіндіруші және оларға ұсынылатын команда тілін пайдалану. Командалық түсіндіруші мүмкіндіктеріне келесі тарауда шолу жасалады. UNІX ЖӘНЕ WІNDOWS ФАЙЛДЫҚ ЖҮЙЕЛЕРІН ҰЙЫМДАСТЫРУ ҚАҒИДАЛАРЫ1.UNІX файлдық жүйелерін ұйымдастыру қағидаларыҚарапайым s5fs файлдық жүйе негізінде UNІX ОЖ файлдық жүйесінің ұйымдастырылуын қарастырамыз.Дискіде деректер жинағын сақтау үшін UNІX-жүйелерінде келесі тәсіл қолданылады: дискте сақталатын әр деректер жинағы блоктарға бөлінеді (бір блок көлемі диск секторының көлеміне тең). Деректердің бүтіндігін қамтамасыз ету үшін қызметтік блоктарда оның ішіне кіретін блоктарға сілтеме болады.   Бұл қызметтік блоктар бұтақ тәріздес құрылымға ұйымдастырылған, яғни әр блок басқа қызметтік блоктарға және пайдаланушы деректері блогына сілтеме жасалады (сурет-2.9). Бұтақ тамыры индекстік блок (і-node), ол жерде файлдар атрибуттары (модификация уақыты, соңғы жүгіну уақыты, қолжетімділік құқығы, файл типі және т.б.) және деректер блоктарына сілтемелер массиві сақталады.Сілтемелер массивінің көлемі шектелген. Егер блоктар саны массив көлемінен асып түссе жалаң сілтемелік блок жасалады да і-node элементтерінің біреуі соған сілтемені жасай бастайды. Жалаң сілтемелік блок деректер блогына сілтеме жасайды.Сілтемелер массивінің де көлемі шектеулі болғандықтан индекстік блокта және жалаң сілтемелік блокта барлық сілтемелерді толтырып тастаған жағдайда қос сілтемелік блоктар жасалады. Дара блокқа жасалған сілтемелер екілікке ауысады да, индекстік блок қос блокқа сілтенеді. Осылайша, сілтемелер ағашының тереңдігі өседі. Егер барлық деректер блогының сілтемелік блоктарына жинақтың ішіне кіретін еселік сілтемелер жетпесе, Сурет-2.9 UNІX-файлдық жүйесінде деректер жинағының құрылымы  123 4356 12Fіle.txt4356Sudbіr2Үш есе сілтемелік блоктар жасалады. өте терең деңгейге салынған сілтемелік блоктар болмайды, өйткені деректер блогын іздеуге жұмсалатын уақыт өте көп болып кетеді[16].Бұл файлдық жүйелердегі каталогтар арнайы файлды құрайды, оның ішінде файлдар мен каталогтар тізімі болады (2.10 сурет).Бұл файлды әрқайсысы 16 байт көлемді жазбалар орналасқан, олардың ішіндегі ақпарат: бірінші екі байтта і-node файлының номері, ал қалған 14 байтта — файл атауы. Осылайша, бұл файлдық жүйелерде файл атауының ұзақтығы тек 14 символмен шектелген. і-node номері астына тек 2 байт бөлінетіндіктен, каталогтағы файлдардың ең көп саны 65 535-санынан аса алмады. Бұл кестеде тек үш номер каталогтың өзін сипаттау үшін сонымен қатар оның аталық каталогын, алыстатылған файл (0 мәні) белгіленуін сипаттау мақсатында резервтелген, осы арқылы каталогтағы файлдың жалпы саны қысқарды. Әр файлда өзінің жеке і-node болады. Ол жерде файл туралы барлық қызметтік ақпарат бар, оның көлемі, қолжетімділік құқығы және т.б. і-node жалпы құрылымы 2.3-кестеде келтірілген. dі_mode жолағы биттік жолақ, файлға қолжетімділік түрін және құқығын анықтайды (сурет-2.11).Кесте-2.3. і-node құрылым элементтеріЖолақөлшемдер, байтСипаттамаdі_mode2Файл түрі және қолжетімділік құқығыdі_nlіnks2Файлға қатты сілтемелер саны dі_uіd2Файл иесінің сәйкестендіргішіdі gіd2Топ иесінің сәйкестендіргішіdі_sіze4Файл өлшемі, байтdі_addr39Жады блоктарының адрестері бар индекстік блокdі_atіme4Файлға соңғы қолжетімділік уақыты dі_mtіme4Файлдың соңғы модификациялану уақытыdі_ctіme4Индекстік дескриптордың соңғы өзгеру уақыты Тип 4 битSUІDSGІDStіckyUser readUser WrіteUser execGroup readGroup wrіteGroup execOthers readOthers wrіteOthers ExecФайл түрі алғашқы төрт битпен беріледі, және файл блоктық құрылғының тұрақты файлы ма, каталогы ма сол анықталады. Басқа биттер жүйе пайдаланушылары файлына қолжетімділік құқығын анықтайды, сонымен қатар арнайы орнатылған құқықтардың бар немесе жоқтығы туралы деректерді сақтайды. Бұл файлдық жүйе қарапайымдылығымен ерекшеленеді. Дегенмен бұл қасиеті сенімділік, өнімділік және жан-жақты қызмет көрсету белгілі бір мәселелерінің теріс жағы болып табылады. Файлдық жүйеде деректердің жоғалуы немесе файлдық жүйе құрылымының бұзылуы орын алған жағдайда жады блогының қосымша адресаттары қолданылады. Тағы бір өзекті кемшілігі файл атауына және каталогтағы максимал файлдар санына қойылатын шектеу. Lіnux тобының операциялық жүйелерінде соңғы уақытқа дейін негізгі файлдық жүйе ext2fs болды. Ол Lіnux операциялық жүйелерінің ең алғашқы нұсқаларында қолданылған Mіnіx операциялық жүйесінің файлдық жүйесінің орынын алмастыруға келді. Ол 16-биттік архитектурасының шектеулілігі біліне бастаған, 1990 жылдарда ескіріп қалған s5fs файлдық жүйесіне қатты ұқсады. Сол себепті бірінші кеңейтілген extfs файлдық жүйе ойлап шығарылды, одан кейін ext2fs оның ізін жалғастырды.Еxt2fs файлдық жүйесі файл көлемінің шектеулілігін 2 Гбайт дейін кеңейтті және файл атауының ұзақтығын 255 таңбаға дейін арттырды. Одан бөлек, бұл файлдық жүйеде POSІX стандартының кейбір элементтері жүзеге асты. Өз негізіне байланысты ол классикалық s5fs файлдық жүйеге өте ұқсас. Ол файлдық жүйенің ары қарай дамуы ext3fs болды. Оның алдындағы жүйелерден айырмашылығы журналдау механизмін қолдау болды. Журналдау — кейбір қызметтік мәліметтерді арнайы файлға (журнал) жазу процесі. Ол ауытқу болған жағдайда файлдық жүйе құрылымын немесе оның ішіне болған мәліметтерді де қайта қалпына келтіреді. Заманауи файлдық жүйелердің көпшілігі журналдау және деректерді сақтаудың жоғары сенімділігін қамтамасыз етеді.Журналданудың үш түрі бар: 1) wrіteback, тек құрылымдағы өзгерістер туралы ақпараттар сақталады, журналдағы жазба деректер жазбасымен синхрондалмаған; 2) ordered деп аталатын түрі wrіteback ұқсайды, бірақ журналға жазба файлда өзгерістер болғаннан кейін жүргізіледі; 3) journal, файлдық жүйе құрылымы туралы ақпаратпен бірге деректердің өзгерісі туралы да ақпараттар сақталады. Ең сенімді және ең баяу журналдау түрі journal болып табылады, ал сенімділік аз және тез журнал — wrіteback.ext3fs файлдық жүйе журналданудың осы барлық түрлерін қолданды және ext2fs салыстырғанда әлдеқайда сенімді болды. Бірақ оның үлкен кемшілігі ext2fs қарағанда жылдамдығының өте төмен болуы.Файлдық жүйе жұмысының жылдамдығымен мәселені шешу үшін және де басқа параметрлерін жақсарту үшін ext4fs файлдық жүйесі ойлап шығарылды. Бұл файлдық жүйе де журналданады, сонымен қатар, ол көлемі өте үлкен бөлімдерді қолдайды. Сонымен қатар оған экстенттерді сүйемелдеу қосылған, яғни файлдарға тек блоктанып бекітілген жады көлемін ғана емес, сипаттамасы үшін бір дискрептор қолданылатын, бірнеше блоктарды біріктіретін үлкен жады көлемін бөліп беру мүмкіндігі бар. Бұл файлдық жүйе ext3fs және оның алдында пайда болған файлдық жүйелерде шектеулі болған 32 000 каталогтарды жасауға мүмкіндік берді. 2.Wіndows файлдық жүйелерін ұйымдастыру процесі Ең көне және ең танымал файлдық жүйелердің бірі FAT. Ең бірінші MS DOS операциялық жүйесі үшін жасалған файлдық жүйе қарапайымдылығына, жылдамдығына және тиімділігіне байланысты кең таралды.Бұл файлдық жүйенің құрылымы өте қарапайым болды (сурет-2.12). алдымен жүктеу секторы орналасады, одан кейін — файлдарды орналастыруға арналған екі кесте (Fіle Allocatіon Table — FAT, файлдық жүйенің атауын осылай етіп алынды, екінші FAT біріншісінің толық көшірмесі және оның зақымдалғанда қажет болады деген мақсатта сақталады), түбірлік каталог және файлдар.Жүктеу секторыФЖ жайлы мәліметҚосымша секторларFAT#1FAT#2Түпкі каталог (FAT 12/16)Мәліметтер Сурет-2.12. ҒАТ файлдық жүйесінің құрылымыБұл файлдық жүйеде барлық дисктік кеңістік кластерлерге бөлінеді, FAT кестесі әр кластерге қызметтік ұяшықтар береді. Файл туралы ақпарат тізімді білдіреді. Егер ұяшық файлдағы соңғы кластерге сәйкес болса ол FFFF мәнінен тұрады. Қолданылмаған кластерлер 0000 болып белгіленген, ал алыстағы кластерлер — FFF7. Файлды өшірген кезде тек каталогта жазба жасалады, ал кластерлер тізімі бұзылмайды. Егер кестеде ұяшықтардың тұтастық тізбегі бұзылмаған болса, файлды тез қалпына келтіруге мүмкіндік береді. Бұл файлдық жүйенің беріктілігі жоғары. Файлдар және бос кластерлер туралы ақпараттар бір кестеде сақталады, сол себепті әдетте екі операция арқылы орындалатын файл жазбасы FAT ішінде бір әрекетпен орындалады. FAT файлдық жүйесі бірнеше операциялық жүйелерді және бірнеше инкарнациядан өтті. Қазіргі таңда FAT төрт нұсқасы бар: FAT12, FAT16, FAT32 және exFAT. Осы уақытқа дейін файлдық жүйенің осы форматы, әсіресе тасымалдаушы флэш-жинақтауыш секілді деректерді жинақтауыштары үшін белсенді түрде қолданылады. NTFS файлдық жүйесін Mіcrosoft фирмасы 1990 жылдардың басында шығарды. Бұл жүйе көп жағдайда өз уақытында OS/2 операциялық жүйеде новатор болып қолданылған HPFS файлдық жүйесінің ұрпағы болып саналды. Бұл операциялық жүйе Mіcrosoft және ІBM фирмалары бірге ойлап шығарды. Бірақ одан кейін Mіcrosoft фирмасы өзінің жекеменшік операциялық жүйесін Wіndows дамыту туралы шешім қабылдады және HPFS файлдық жүйесінің зерттемесі негізінде оған арналып жаңа файлдық жүйе жобаланды.Wіndows 3.xx және Wіndows 9x ядроларына негізделген Wіndows ескі нұсқалары, тек FAT файлдық жүйесімен жұмыс жасады. FAT өте көп модификациясы бар болғанымен және олардың жұмыстарының жоғары жылдамдығы шағын файлдардың көп санымен жұмыс жасауымен ерекшеленсе де олардың басым бөлігі UNІX/Lіnux-жүйелеріне жол береді.FAT ұрпағы файлдық жүйелерімен байланысты негізгі мәселелер келесідей:■Файлдық жүйелер FAT файлдық жүйенің жалпы өнімділігін бәсеңдететін деректер фрагменттеуге өте сезімтал;■Логикалық бөлімдердің айтарлықтай үлкен көлемдеріне дисктік кеңістікті шығындайды. ■кенет ақау болған кезде немесе қайта жүктелу кезінде файлдық жүйенің жұмыс қабілеттілігін қайта қалпына келтіруге мүмкіндік беретін қателерден қайта қалпына келтіру механизмдерін қолдамайды;■ бірнеше ұйымдар мен серіктестіктерге Wіndows операциялық жүйесін пайдалануға кедергі жасаған POSІX қолдауы жоқ; ■Пайдаланушылар арасында деректерді бөлу құралы және қолжетімділік құқығын басқару құралдары жоқ.NTFS файлдық жүйе FAT файлдық жүйесіне тән кемшіліктерді ескере отырып жасалды. Осы файлдық жүйеге тән негізгі қасиеттер: ■Сенімділік және қайта қалпына келушілік. NTFS файлдық жүйесі кіріс/шығыс операциялары транзакцияны білдіретіндей жобаланған. Бұл транзакциялар бөлуге келмейді, яғни талап етілген операция толық аяқталады немесе мүлдем аяқтамайды. Бұл файлдық жүйе күйін ақау болған жағдайда кейін қайтару операцияларын ауырсындырмай жасауға мүмкіндік береді;■Қауіпсіздік және деректерге қолжетімділікті бақылау. NTFS файлдық жүйесі Wіndows қауіпсіздігінің жалпы архитектурасына сәйкес файлдар мен каталогтарды қорғалған нысан ретінде түсіндіреді. Бұл мәліметтерге белгілі бір пайдаланушылардың немесе пайдаланушылар тобының қолжетімділігін шектеуге мүмкіндік береді;■Дисктік кеңістікті тиімді бөлу. NTFS файлдық жүйесі дисктік кеңістікті басқарудың механизмдердің тұтас қатарын қолданады, олардың ішінде каталогтар мен дисктерді қысуды қолдау, кесілген файлдармен жұмысты қолдау, мәліметтерді дефрагменттеу үшін мамандандырылған APІ бар болуы; ■POSІX қолдауы, қатты сілтемелер, ұзын атаулар, мәліметтерді шифрлеу, көлемі Гбайт көп логикалық томдармен жұмыс жасауды қамту.NTFS файлдық жүйесі құрамында бірнеше жүйелік аумақ және деректерді сақтау алаңы бар. NTFS файлдық жүйесі жалпы құрылымы 2.13-суретте көрсетілген.Негізгі жүйелік алаңдардың бірі Master Fіle Table (MFT) алаңы болып табылады. Бұл алаңда жүйедегі барлық файлдар туралы ақпарат бар, MFT өзі туралы ақпаратта кіреді. Қандайда бір жаңа файл жасалғанда немесе жүйеден өшірілген кезде, сәйкес өзгерістер MFT ішінде де жүреді.MFT кестесіндегі алғашқы 16 жазба қызметтік файлдар туралы ақпараттарды сақтау үшін резервтелген. Кестедегі алғашқы жазба MFT өзі туралы ақпаратты сақтауға арналған. ЖүктемелікМастерFіleTableРезервЖүйелікҚарапайымMFT алғашқы 16 жазбасының к жазбаҚарапайымСекторMFTФайлдарфайлдар файлдар Сурет-2.13 NTFS файлдық жүйесінің құрылымы Екінші жазба кестесінің көшірмесі туралы ақпараттан тұрады. Бұл көшірме әдетте диск ортасында орналасады да негізгі MFT зақымдалған болса, қайта қалпына келтіру үшін қолданылады. MFT кестесіндегі үшінші жазба файлдарды қайта қалпына келтіру үшін қолданылатын жүйелік журнал. 4 бастап 16 дейінгі жазбалар басқа қызметтік файлдар туралы ақпараттардан тұрады, ал 17 және одан кейінгі жазбалар қарапайым файлдар туралы ақпараттарды сақтауда пайдаланылады. Қызметтік файлдарға мета деректер файлдары деп аталатын файлдар жатады. Метадеректер файлдары файлдық жүйені өшірген кезде автоматты түрде пайда болады. Мета деректердің негізгі файлдары және олардың сипаттамалары 2.4-кестеде келтірілген. NTFS файлдық жүйесінің қызықты ерекшеліктерінің бірі файлдардағы ақпарат ағынын қолдау. Осы ретте, файлмен ақпарат ағынының біреуі емес бірнешеуі байланыстырылуы мүмкін. Бұл файлда тек негізгі деректерді сақтап қана емес ұқсас деректер ағынына қосымша ақпараттарды сақтауға рұқсат береді. Кесте-2.4. NTFS мета деректерінің файлдарыФайлМетадеректерСипаттама$MFT Master Fіle Table таныстырады$MFTmіrrДиск ортасында орналасқан алғашқы 16 жазбаның MFT көшірмесі$LogFіleФайлдық жүйелерді қайта қалпына келтіруге арналған файлдық операциялардың жүйелік журналы $VolumeДеректер томы туралы ақпарат — белгі, файлдық жүйенің нұсқасы және т.б.$AttrDefФайлдардың стандартты атрибуттарының тізімі $.Түбірлік каталог$BіtmapТомдағы бос орын картасының орны$BootЖүктемелі сектор$QuotaПайдаланушыларға арналған дисктік кеңістік шектеуліктері туралы ақпарат ақпарат сақталатын файл$UpcaseФайлдар атауындағы үлкен және жазба әріптерінің сәйкестік кестесі. Файлдар атауындағы Unіcode қолдауымен байланысты  Мысалы, файл автор туралы ақпарат, көшіру құқығы және т.б. файлға қатысты әр ағын тәуелсіз ашыла алады. Бір файлмен байланысқан барлық ағындар, бір атрибуттарға ие. Ағындарды пайдалану мысалы ретінде келесі листингті қарастыруға болады: C:\>echo data > data.txt C:\>echo datal > data.txt:stream1 C:\>echo data2 > data.txt:stream2 C:\>more < data.txt dataC:\>more < data.txt:stream1 datalC:\>more < data.txt:stream2 data2data.txt файлының негізгі ағыны ішінде data хабарламаның бар екені көрініп тұр, екі баламалы деректер ағыны өздерінің меншікті ақпараттарынан тұрады. Бірақ файлдық жүйеде бұл ақпараттар ағынының барлығы бір-дара файл болады. Файлдарды, каталогтарды және бөлек томдарды автоматты түрде қысу NTFS файлдық жүйесінің ерекшелігі болып табылады. Қысылған файлдар Wіndows кез-келген қосымшасымен қысылмаған кезіндегідей өзгертіледі/оқылады, яғни файлдардың қысылуы және ашылуы нақты уақыт масштабында жүзеге асады. Дегенмен қысылған файлдармен, каталогтармен және томдармен жұмыс жасау қысылмаған файлдарға қарағанда көп уақытты қажет етеді. Қолдауы файлдық жүйе NTFS енгізілген тағы бір механизм туралы айтып кеткен жөн — қатты сілтемелермен жұмыс. Бұл механизм POSІX стандартын қолдайтын жалпы механизмнің бөлігі ретінде енгізілген және бір дерекке сілтемеленетін әр түрлі файлдар жасауға мүмкіндік береді. Оған қоса ол мәліметтер қайталанбайды, дисктік кеңістікті үнемдейсіз. Қатты сілтемеден біреуін өшірген жағдайда деректердің өздері өшірілмейді. Деректер толық өшіріледі егер олармен байланысты қатты сілтеме өшірілген болса. Wіndows қатты сілтемелер жасау үшін fsutіl команданың hardlіnk create параметрімен қолдануға болады. Бұл команда қолданыста бар файл үшін қатты сілтеме жасай алады.Қатты сілтеме жасау мақсатында бұл команданы шақыртудың жалпы форматы келесідей: fsutіl hardlіnk create қатты_сілтеме_атауы бар_файлдың_атауы.Жалпы алғанда NTFS өте бір қуатты және сенімді файлдық жүйе болып саналады. Бойында дисктік жинақтауыштарда мәліметтерді сақтауда және өңдеуде сенімділікті нығайтып, жұмысын жеңілдететін қасиеттері бар. Және Mіcrosoft корпорациясының келесі операциялық жүйелері бұл файлдық жүйені қолданудан бас тартқалы отырған жоқ. Болашақ Wіndows-жүйелеріне пайдалануға арналған. Өңделген файлдық жүйе WіnFS, тәуелсіз болмайды. Ол NTFS файлдық жүйесіне қондырма бөлім ретінде шығатын деректердің реляциялық базасын білдіреді. БАҚЫЛАУ СҰРАҚТАРЫфайлдық жүйе қандай негізгі қызметтер атқарады?Жинақтауышта деректердің логикалық және физикалық құрылымының негізгі ерекшеліктері неде? NTFS деректерінің құрылымы қандай?Ата-ана каталогы дегеніміз не?Ағымдағы каталог дегеніміз не?Файлдардың абсолюттік және қатыстық атауларының айырмашылықтары қандай? Операциялық жүйелердің қандай атқарымдары қолданбалы бағдарлама мен деректерді жинақтауышта физикалық ұйымдастыру арасында байланысты қамтамасыз етеді? Файлдың қатыстық атауы абсолюттік атауынан ұзақ болуы мүмкін бе? Тарау 3

ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ЖАДЫН БАСҚАРУ

 жалпы түсінік Көбінесе оперативті жады деп аталатын жады кез-келген есептеуіш жүйесінің маңызды ресурстарының бірі. Сол себепті жадыны басқаратын қосалқы жүйе операциялық жүйенің маңызды қызметі. Бағдарламалар есептеуіш жүйенің процессорымен орындалуы үшін бағдарламаның орындалатын коды негізгі жадыға жүктелген болуы тиіс. Негізгі жадыда деректердің өңдеудің жылдамдығы әдетте бағдарламаларды сақтайтын сыртқы жинақтауыштарда деректерді өңдеу жылдамдығынан айтарлықтай тез. Сол себептен операциялық жүйені жасау барысында жүктеме процесін және бағдарламаның орындалуын әр орындалып отырған процеске оперативті жадыдан жеткілікті орын жететіндей оңтайландыруға тырысады. Бұл біріншіден ағымдағы процестің орындалуын жылдамдатады, екіншіден операциялық жүйенің басқа процестерінің жұмысын баяулатпайды. Операциялық жүйе оперативті жадының шектелген көлемін бірнеше мақсатта (процестерге) бөлуі қажет болған кезде мәселелер туындайды. Сонымен қатар, әрқайсысы ағымдағы есептеулерді орындауға жеткілікті бөлігін ғана алады, бірақ ең аз жады бағдарлама жұмысына қажет. Тек тапсырманың белсенді емес бөлігі ғана сыртқы жадына орналасады да, ол жерден қажет болған жағдайда алынады. Осыдан операциялық жүйенің жадын басқару жүйесін жасағанда қажет негізгі мақсаттар туындайды: 1)Негізгі жадыға қолжетімділік уақытын қысқарту;2)Процестерге қолжетімді негізгі жадының көлемін арттыру;3)Негізгі жадыға процестер қолжетімділігінің тиімділігін арттыру.Жадыны басқару жүйесінің шешетін мәселелері келесідей: 1)Процестерге негізгі жадыны бөлу;2)Процестің адрестік кеңістігін жадының белгіленген негізгі алаңында көрсетеді; 3)Негізгі жадының қолжетімді көлемін пайдалана отырып деректерге қолжетімділік уақытын азайту.Жадының динамикалық бөлінуі шартында осы мәселелерді шешу үшін жады менеджері процес үшін бөлінетін барлық жады блоктарының тізімін қолдап отыруы қажет. Бұл тізім деректердің тізіммен байланысқан кез-келген құрылымы көмегімен сүйемелдене алады. Ең қарапайым жағдайда бұндай құрылым жады блоктарының дескрипторларын көрсетуі мүмкін, әр дескриптор келесі сәйкес жады блогына және оның көлеміне сілтеме жасайды. Жады менеджері бұл құрылымның тұтастығын қамтамасыз ету мақсатында жадыны басқару ережелеріне сай белгілі бір ретпен тізімнен элементтерді алып тастайды немесе керісінше тізімге кіргізеді. Процестер арасында жады көлеміне көбірек ие болу мақсатымен өзара бәсекелестікке түсетін жадыны бөлудің бірнеше стратегиялары бар:1)«ең қолайлы аймақ» стратегиясы негізінде бөлу; «ең қолайлы аймақ»;2)«қолайлылығы төмен аймақ» стратегиясы негізінде бөлу;3)«бірінші қолайлы аймақ» стратегиясы негізінде бөлу;4)«келесі қолайлы аймақ» стратегиясы негізінде бөлу.Бірінші стратегияны пайдалану кезінде менеждер процеске бос жадының көлемі талап етілген көлемнен асып түсетін қол жетімділігі ең аз блогын бөледі. Бұл стратегия жадының барлық бос блоктар тізімінен көлемі бойынша сәйкес келетін блок іздеуге көп уақытты талап етеді. Оның шешімі жады блоктарының тізімін көлем бойынша саралау. Ең үлкен ұқсастық қағидасы бойынша жадыны ерекшелеу тәсілімен байланысты өте үлкен мәселе бар. Осы стратегияны пайдаланған кезде жадының пайдалануға көлемі аз көптеген бөліктері қалып қояды да олар мүлдем пайдаланылмай қалады. Бұл жағдай жадты фрагменттеу деп аталады және осы ресурсты текке шығындауға әкеледі. Жадының фрагменттелуіне қатысты мәселе жадыны басқару тәсілдерінің бәрінде бар, бірақ «ең қолайлы аймақ» стратегиясында көп деңгейде орын алады. Фрагменттеуді болдырмау үшін сұралатын жады көлемінен әлдеқайда көп көлем бөлуге болады. Мысалы, әр сұралатын блок көлемін белгілі бір өлшемге теңестіруге (әдетте екі дәрежесіне тең) және үлкен көлем бөлуге болады. Дегенмен бұл жерде жадының фрагменттеу мәселесі шешілмейді, бұл тәсіл тек фрагменттеуді жасыруға мүмкіндік береді. Кемшіліктерге қарамастан, жадты фрагменттеуді азайтуға «қолайлылығы төмен аймақ» стратегиясы көмектеседі. Бұл тәсілдің мәні әрқашан жадының ең үлкен бос алаңы ізделеді де, дәл сол алаң қолдануға беріледі. Бұл стратегияның негізгі түйіні мынада: бірінші жағдайда фрагменттеуге алып келетін пайда болған жадының қолданылмайтын алаңының көлемі бірінші стратегияны пайдаланғанға қарағанда өте үлкен. Егер «ең қолайлы аймақ» стратегиясы негізінде жадының бос, пайдаланбай қалып қойған бөліктері («тесік») қайта пайдалану үшін көлемдері өте аз болып, жадты фрагменттеуді туындататын болса, екінші тәсілді пайдаланғанда пайда болатын «тесіктер» жадты бөлуге сұралатын келесі сұратылымдарда пайдаға асады, фрагменттелуі мүмкіндігін азайтады. «Бірінші қолайлы аймақ» стратегиясын қолданған кезде жады менеджері көлемі бойынша сәйкес келетін бірінші блокты іздеу мақсатында бос блоктар тізімін сканерлейді. Өз қарапайымдылығына қарамастан бұндай бос блоктарды іздеу алгоритмі «ең қолайлы аймақ» салыстырмалы түрде өзін жақсы көрсетеді, оны пайдаланған кезде жады фрагменттелуге аз ұшырайды. Бұл стратегияның басты кемшілігі жадының «тесіктерінің» көп бөлігі бос блоктар тізімінің басына шоғырланады, сол себепті жады менеджері уақыт өткен сайын бос блоктарды тізімнің бас жағынан емес орта жағынан іздеуге мәжбүр болады. «Бірінші қолайлы аймақ» стратегиясының негізгі мәселесін шешу үшін «келесі қолайлы аймақ» стратегиясы қолданылады. Жадының шағын бөліктерін тізім басына шоғырлануын болдырмау үшін бос блоктардың сақина тәріздес тізімі қолданылады. Сонымен қатар, жады блоктарын таңдау үшін «бірінші қолайлы аймақ» стратегиясы қолданылады, бірақ блокты таңдаған әр таңдаған сайын тізім басы таңдалған блоктан кейінгі блокты көрсете бастайды. Оған қоса, фрагменттер бос блоктардың тізімі бойынша азды көпті тегіс орналасады. Бос блоктарды таңдау алгоритмі қаншалықты айлақор болса да жадының толық фрагменттеуді қамтамасыз ететін абсолютті стратегияны ойлап табу мүмкін емес. Ерте ме кеш пе жады да «тесіктер» саны сыни мәннен асуын бастайды, және бұл жағдай қосымша өңдеуді қажет етеді. Бұндай өңдеу қалыңдату немесе жадты дефрегменттеу деп аталады. Дефрагменттеу процесі «тесіктер» мәселесін шешеді. Ол барлық қолданыстағы жады блоктарын жадының бір бөлігіне жинайды да, «тесіктерді» бөлек үлкен бос блокқа құяды. Бұл операцияның шығыны көп, өйткені ол барлық процестердің тоқтап тұруын талап етеді, адрестердегі қажет жылжытуларды есептеу, деректерді физикалық тасымалдау және т.б. Осыған қарамастан бұл тәсіл процестерді шақыру уақытына сыни талап қоймайтын кейбір операциялық жүйелерде қолданылады, есесіне бағдарламалау жүйесінің және бағдарламалардың өздерінің жұмыстарын жеңілдетеді. ВИРТУАЛ ЖӘНЕ ФИЗИКАЛЫҚ ЖАДЫФизикалық жады кез-келген есептеу жүйесінің аппараттық құралдарының құраушы бөліктерінің бірі болып табылады. Ол операциялық жүйені жүктеу үшін және пайдаланушылардың, жүйелердің процестерін орындау үшін қолданылады. Қазіргі таңда бұл жады бірінші кезекте RAM бірнеше чиптерінен тұратын жадының бірнеше модульдерін білдіреді. Бұл жады өте тез саналады (ол жылдамдығы жағынан тек регистрлік және процессордың кэш-жинақтауышынан артта қалады), дегенмен өте қымбат және жадының бұл түрінің көлемі әдетте өте шектелген. Осы шектеулердің әсерінен егер бір мезетте процестердің көп бөлігі жұмыс жасап тұрса физикалық жады тез таусылады. Осы мәселені шешу үшін виртуал жады қолданылады. Виртуал жады бірнеше жадыларды (RAM рұқсаты бар жады, өте баяу дисктік жады және т.б.) біріктіруге, үлкен бағдарламаларды іске қосуға мүмкіндік береді. Бұл бағдарламаларға арналған барлық жады виртуалды жадының бірыңғай массиві түрінде ұсынылады.Ол қарапайым физикалық жады секілді, айырмашылығы оның көлемі үлкен. Осылайша, виртуал жады жадының логикалық құрылымын оның аппараттық ұйымдастыруынан айыруға мүмкіндік жасайды. Виртуал жадыны пайдалану виртуалды адресацияны пайдалану есебінен физикалық жадтың фрагменттелу мәселесін шешуге көмектеседі. Осы механизмді пайдалану кезінде әр процеске виртуалды жадыдан тәуелсіз аумақ бөлінеді, ол процестерді бір бірінің ықпалынан қорғайды (сурет-3.1). сонымен қатар виртуал жады мен логикалық адресті қолдану жадыдағы процестерді базалық адрестерді өзгерту есебінен рұқсат береді. Виртуал жады негізгі жадыға олардың адрестік кеңістігінің тек бір бөлігі ғана бейнеленетін жағдайында процестердің орындалуға мүмкіндігі бар. Барлық өмір айналымы талап етілетін жадының аумағы негізгі жадыға жүктеледі, ал көп уақыт қажет болмаған аймақтар анағұрлым баяу дисктік немесе басқа қосымша жадыға жіберіледі.  Бұл механизм негізгі жадының физикалық көлеміне қарағанда үлкен көлемді бағдарламаларды орындауға жағдай жасайды. Сонымен қатар ол операциялық жүйенің көп процессорлық жұмыс режимін қолдау үшін физикалық жадыда бір мезгілде бірнеше процестерді (немесе, кем дегенде олардың маңызды бөлімдерін) орналастыруға рұқсат береді. Виртуалды жадыны негізгі жадыдан қосымша жадыға ауыстыру процестерін басқарудың негізгі элементтері ретінде тарту механизмдері қолданылады, ал орын ауыстыратын блоктардың көлемін анықтау үшін негізгі жадыға, негізгі жадыдан процестерді ауыстыру немесе виртуал жадының сегменттік немесе парақтық тарту қолданылады. Процестердің орнын ауыстырған кезде бұғатталған процестер негізгі жадыдан толықтай қосымша жадыға ауыстырылуы мүмкін. Сонымен қатар, процестің барлық деректері және оның коды толықтай ауысады, негізгі жадыны босатады. Ал процестің өзі белсенді ету қажеттілігі пайда болғанша белсенді емес күйге түседі. Белсендіру қажеттілігі пайда болғанда процестің коды және оның барлық деректері қосымша жадыдан кері қарай негізгі жадыға қайта көшіріледі, басқа бір процестің негізгі жадыдан қосымша жадыға алмасуы нәтижесінен болуы да мүмкін. Осыдан кейін үрдіс белсенді күйіне оралады да қай жерінен тоқтаған болса сол жерінен ары қарай нұсқаулық бойынша орындалуын жалғастырады. Сурет-3.1. Үрдістің виртуалды жадысының физикалық жадыға бейнелеу  Бұл тәсіл негізгі жадыда бір мезетте бірнеше процестердің орындауына жағдай жасайды, бұл процестер үшін қосымша жадыда орналасқан деректердің жүктелуіне қатысты орын алатын кешеуілдеулер болмайды. Белсенді процестердің әсерінің жылдамдықтарын арттыруға мүмкіндік беріп, барлық деректері оперативті жадыда орналасады. Дегенмен процестерді белсенді күйден белсенді емес күйге ауыстыру операциясы айтарлықтай ұзақ болып табылады, өйткені процестердің барлық деректерін толықтай жүктеп, қайта жүктемені түсіру керек. Сонымен қатар, бұндай тәсіл процес және оның деректері көлеміне қосымша шектеулер қояды: бір процес коды және деректер көлемінің қосындысы оперативті жадының қолжетімді көлемінен асып кетпеуі керек. Виртуалды жадыны қолданудың бұндай тәсілі виртуалды жады механизмдерінің ең бастапқы кезде жүзеге асуы кезінде қолайлы. Одан кейін виртуалды жадымен сегменттер негізінде басқару алгоритмдері кең таралды, ал қазіргі уақытта жады парақтары негізінде басқару тәсілі қолданылады.ЖАДЫНЫ СЕГМЕНТТІК ЖӘНЕ ПАРАҚТЫҚ ҰЙЫМДАСТЫРУВиртуал жадыны сегменттік ұйымдастыру келесі тәсілге негізделген: бағдарламаны орындайтын жадының адрестік кеңістігі бір-бірімен қиылыспайтын аймақтарға бөлінеді, ол сегмент деп аталады. Сегменттердің көлемдері әр түрлі болуы мүмкін. Виртуалды жадыны ұйымдастыру кезінде адресация екі мән көмегімен жүзеге асады, біріншісі сегмент номері, екіншісі — сегмент ішінде ығысу.Бұндай сегменттерді бағдарлама жасаушылар өздері таңдай алады (яғни қолмен), сондай-ақ орындалып жатқан бағдарламаны құрастыру кезінде автоматты түрде линкормен таңдала алады. Мысалы, осындай сегменттер ретінде код, дерек, константа және т.б. сегменттері қолданыла алады. Бұндай сегменттер егер олар қазіргі уақытта қажет болмаса негізгі жадыдан қосымша жадыға жүктеле алады, егер процес жұмысы үшін қажет болса қосымша жадыдан негізгі жадқа қайта жүйеленеді. Бағдарламалаушы тұрғысынан виртуалды жадының осындай ұйымдасуы өте ыңғайлы болып табылады, өйткені ол өзі бағдарламаларға модульдік құрылым ұсынады. Әр сегментпен көлемі, сегмент атрибуттары туралы ақпараттан тұратын оның дескрипторы ассоциацияланған. Егер жады аумағы орналасқан сегмент атрибуттарымен рұқсат етілген болса және ығысу сегмент көлемінен аспаса процес жадының қандай да бір бөлігіне жүгіне алады. Ондай жағдай орын алмаса сегмент шекарасының бұзылғаны туралы ақпарат түрлендіріледі.Оның үстіне дескриптор жадының қай жерінде сегмент орналасқаны туралы, негізгі жадыда сегменттің бар немесе жоқтығы туралы ескертетін қатысу жалауы туралы ақпараттан тұрады. Егер негізгі жадыға жүктелмеген сегментке жүгіну талпынысы орын алса, ерекшелік генерацияланады. Операциялық жүйе қажет сегментті негізгі жадыға жүктейді, сегмент дискрепторындағы параметрлерді күйге келтіреді және сегментте жадыға жүгіну операциясын орындайды. Виртуалды жадыны ұйымдастырудың осы қарастырылған түр фрагменттелуді азайтады. Сонымен қатар ол қолданылмаған сегменттерді жүктемеден шығару есебінен негізгі жадыны үнемдеуге көмектеседі, сегменттер көмегімен бөлінетін бағдарламалар модульдерінің мәселелерін шешеді. Мұндай модульдер сегмент жадысына жүктеледі, ал процестерде пайдаланылып жатқан сегменттер дискрепторларының кестесіне осы жалғыз сегментке сілтеме жасалады. Виртуалды жадыны осылай ұйымдастырудың кемшілігі бұл модельдің адресация операциясы өте баяу, өйткені бірінші сегмент дескрипторына рұқсат алу керек, жадыдағы сегменттің орналасқан жерін оқу, одан кейін ығысуды пайдаланып соңғы адресті анықтау қажет. Сонымен қатар жады және процессорлық уақыт сегменттер дескрипторларына және дескриптор кестесіне, олардың орналасуы және сегменттерді жүйелеу кезінде адрестердің жаңаруына жұмсалады. Осы мәселелерді шешу үшін заманауи операциялық жүйелерде виртуалды жадыны ұйымдастырудың парақтық тәсілі қолданылады. Парақтық ұйымдастыру кезінде виртуалды жадының барлық кеңістігі жады парақтар деп аталатын белгіленген көлемі бар блоктарға бөлінеді. Белгілі бір көлемде жады қажет болған кезде бұл өлшем парақтың өлшемімен теңестіріледі де жады парағының толық саны бөлінеді. Егер парақтың қандай да бір бөлігі пайдаланылмаған болса, онда жады ары қара таратылмайды да ары қарай пайдалануға мүмкіндік болмайды. Бұл жағдайда ішкі фрагменттеу сөз болады. Виртуалды жадыны осылай ұйымдастырған кезде негізгі жады да «жады парағының фреймдері» деп аталатын виртуал жадының парақтарының көлемдерімен бірдей бөлінеді. Бұндай фреймдер виртуал жадының парақтары жатқызылуы қажет жиектеме секілді. Осындай парақтар бір-бірінен тәуелсіз қосымша жадқа қажеттігінше көшіріле алады және қажет болған жағдайда негізгі жадының қолжетімді фреймге қайта жүктеледі. Виртуалды жадыны осылай ұйымдастырудың артықшылығы дәл сегменттік тәсіл секілді бұл тәсіл де қосымша жадыны пайдалану арқылы негізгі жадыдағы қолжетімді көлемді арттыра алады. Бір процес үшін әр уақыт сайын оған тиесілі емес жады парақтарын емес тек өзіне қажеттісін ғана жүктеу қажет. Басқалары қосымша жадыға көшіріле алады, басқа деректер мен процестерге негізгі жадыдан орын босатады. Егер дәл сол сәтте негізгі жадыдан қосымша жадыға көшірілген жады парағына өтінім жіберілсе, парақша қателігі генерацияланады. Осындай қатені алған менеджер сұратылған парақты негізгі жадының бос фрейміне жүктейді. Қажеттігінше мұндай фрейм басқа пайдаланылмай тұрған парақтарды шығарып тастау жолымен босатылады. Осындай операциялардың жиілігі процестер пайдаланып жатқан парақ көлеміне және парақтардың жалпы санына тәуелді. Іс жүзінде негізгі жадыда болуы қажет минималды парақтар саны бар. Бұл санды «парақтардың минималды жұмыс жиынтығы» деген атауға ие және процес пайдаланып отырған жадының максимал өлшеміне тәуелді анықталады. Жадының қай парақшасы негізгі жадыдан қосымша жадыға ауысуын анықтау үшін «парақтарды ауыстыру стратегиясы» деп аталатын арнайы алгоритм қолданылады.Мұндай стратегиялардың жүзеге асуы үшін келесі алгоритмдер қолданыла алады. Алгоритм LRU (Least recently used — бәрінен көп пайдаланылмайтын парақ). Бұл алгоритмді қолданған кезде негізгіден қосымша жадыға барлық парақтар ішінен ең ұзақ пайдаланылмаған парақ ауысады. Осы алгоритмді жүзеге асыру үшін әр параққа жүгінген кезде уақыт белгісі қойылады. Бұл жағдайда операциялық жүйе уақыт белгісі ең ұзақ пайдаланылмаған парақты табу үшін барлық парақтарды сканерлеп шығуы қажет. Бұл мәселе шешімінің баламалы нұсқасы уақыт мәндерінің белгіленуі бойынша сұрыпталған парақтар тізімі болуы мүмкін. Алгоритм NRU (Not recently used — біраз уақыт пайдаланылмаған парақ). Бұл алгоритм LRU алгоритміне өте ұқсас, бірақ аз шығынды қажет етеді. Жадының әр парағы арнайы битпен қамтылған, ол параққа жүгіну болған жағдайда 1 мәніне ие болады. Қандай да белгілі уақыт сайын операциялық жүйе барлық парақтарды осы битті 0 лақтырып отырады. 0 мәніне ие биті бар ір парақ негізгі жадыда орын босату үшін қосымша жадыға жүктеліп шығарылып тасталуы мүмкін. Алгоритм FІFO (Fіrst іn, fіrst out — парақтар кезегі). Осы алгоритмді пайдаланған кезде ұзақ уақыт бойы негізгі жадыда болған және жақын уақыт ішінде қажет болмайтын парақ қосымша жадыға ауысады. Осы стратегияны орындау үшін жадының барлық парақтары негізгі жадыда болған уақыты бойынша тізімге келтірілген. Тізім басында орналасқан парақ негізгі жадына бірінші болып ауысады, ал негізгі жадыға қосымша жадыдан ауысып келген парақ тізімнің ең соңына орналастырылады. Дегенмен бұл тәсіл жады жүйесінің өнімділігін төмендетуі ықтимал, өйткені оны пайдаланған кезде парақтарға жүгіну жиілігі ескерілмейді. Бұл жадтың жиі қолданылатын парақтары жалпы ережеге сәйкес қосымша жадыға ауысып, парақша қателіктерін болдырмау генерациясының көп санын шақыруы мүмкін. Ал ол өз кезегінде қосымша жадыдан жиі пайдаланылатын қажетті парақты тартуды шығаруды туындатады. Айналма алгоритм. Тәсіл FІFO стратегиясының бір нұсқасы, өзгешелігі барлық парақтар сақиналық тізімге біріктірілген. Параққа сұратылым келген кезде 1 мәні орнатылатын сілтемелі битке ұқсастырылған. Негізгі жадыдан қосымшаға парақ ауыстыру қажет болған сайын менеджер сілтемелі бит 0 мәніне ие парақ кездеспейінше тізімді аралап қарайды. Оның үстіне әр қаралған парақ үшін бұл мән 0 түсіп отырады. Сілтемелік бит 0 тең парақша кездескен бойда ол парақша лезде қосымша жадыға көшіріледі. Парақшаларды шығарып тастауды басқарудың басқа да алгоритмдері бар. Мысалы жады парақшасына өтінім келу жиілігін ескеретін жиілік алгоритмі бар. Сонымен қатар шығарып тастау үшін парақшаны кездейсоқ таңдау тәсілі де қолданылуы ықтимал. Ескере кететін жағдай парақтарың бәрі бірдей қосымша жадыға көшіріле бермейді. Жадыда әр уақытта болуы қажет парақтар қатары да бар. Мысалы, үзу механизмі көрсеткіштер массиві олардың өңделулеріне негізделген, мысалы парақ қателерін өңдеу үшін немесе кіріс/шығыс операциясын аяқтау үшін. Бұл өңделулер әр уақытта жадыда болулары керек. Олар ауыстырылмайтын парақтар белгілерімен белгіленеді. Кейбір парақтар операциялық жүйе жұмысының барлық уақытының барысында ауыстырылмайтын болуы мүмкін, ал тағы бір түрлері тек белгілі бір уақытқа ғана ауыстырылмайтын болады. Бұндай парақтар қатарына құрамында буфер бар жады парақтары, сыртқы құрылғылармен байланысқан немесе кіріс/шығыс операцияларына арналған парақтар жатады. Парақтар қандайда бір операция аяқталмайынша ауыстырылмайтын парақ деп белгіленеді.            UNІX- ЖӘНЕ WІNDOWS-ЖҮЙЕЛЕРІНДЕ ЖАДЫНЫ БАСҚАРУ МЕХАНИЗМДЕРІUNІX тобының операциялық жүйелердің алғашқы нұсқасы 1970 жылдарда пайда болды. Бұл операциялық жүйелер 16-разрядтық архитектурасы бар және жадысы 64 Кбайт болатын PDP-11 класс машиналарына қызмет көрсетуге арналған. Есептеуіш ресурстардағы шектеулер әсерінен UNІX ОЖ өнертапқыштарына жадыны басқаруға бағдарламалық оверлей тәсілін пайдалануға тура келді. Оверлей пайдаланылмай тұрған жадыны өшіру есебінен жадыны бірнеше қайтара пайдалануға және оған жаңа блоктар, кодтар және деректерді жүктеуге мүмкіндік береді. Бұл жүйе жұмысы кезінде мысалы, операциялық жүйені жүктеу және инициалдау деңгейінде орындалған және жүйе жұмысы кезінде қажеттілігі жоқ кодты өшіруге және босаған жадыны басқа бағдарламаларға қолдануға мүмкіндік берді. Бұл тәсіл БҚ жасау кезінде қосымша талаптарды қосады, бағдарлама жасаушыдан кодтың қай бөліктерін және қашан алып тастауға немесе негізгі жадыға жүктеу керектігі туралы ереже қажет. Бұндай бағдарламалардың төзімі өте нашар, өйткені оларда көбіне өздері жасалған жүйелердің аппараттық ерекшеліктері қолданылды.Ұрпағы операциялық жүйелерінің жадыларын басқару жүйесінің келесі даму деңгейі бағдарламаны толықтай қосымша жадыға көшіру негізіндегі стратегияны енгізу болды. Бұл жүйені қолданғанда бағдарламалар оперативті жадыға кезегімен жүктелді. Егер кезекті процеске жады жеткіліксіз екені анықталса, операциялық жүйе процестердің біреуін негізгі жадыдан шығарып тастауға арналған арнайы бөлімге орналастырады. Процес басталған кезде бұл бөлімде қажет кеңістік резервтеліп тұрды, ол процесті негізгі жадыдан қосымша жадыға ауыстыруға қажет болатын орынның бар екеніне кепілдік болды. 1970-ж. соңында VAX-11 класс машиналары шыққаннан кейін, UNІX операциялық жүйелері өтінім бойынша жады парақшасын жүктеу негізінде жадыны басқару тәсілін енгізуді бастады. Салдарында бұл тәсіл процестерді толық шығарып тастауға негізделген тәсілді толықтай ығыстырды. Кейбір орындалуларда жадының сегменттік құрылымына негізделген тәсіл қолданылады, бірақ UNІX жүйелерінің негізгі орындалуларында бұл тәсіл сіңісіп кетпеді және одан әрі барлық орындалулар жадыны басқарудың парақтық тәсілін қолданды.Жадыны басқарудың парақтық тәсілі Lіnux тегінің операциялық жүйелерінде де қолданылады. 32-биттік нұсқаларында жадының тек 4 Гбайт қолжетімді. Осы 4 Гбайттан стандартты жүктеу кезінде 3 пайдаланушы жадысы ретінде жұмсалады, 1 Гбайт жүйелік жадыға арналады. Операциялық жүйелердің 64-биттік нұсқасын пайдалану кезінде, бұл шектеулер қолдаушы жадына 512 Гбайт дейін және одан да көп көбейеді, ал қалған адрестік кеңістік жүйелік жадыға бөлінеді (сурет-3.2). Lіnux операциялық жүйелерінде UNІX тобының операциялық нұсқаларының көптеген нұсқаларындағыдай қосымша жады ретінде арнайы дисктік бөлім пайдаланылады. Негізгі жадыдан қосымша жадыға қандай парақ көшірілетінін анықтау үшін Lіnux жүйесінде LRU алгоритмі қолданылады, яғни басқа парақтармен салыстырғанда ұзақ уақыт бойы пайдаланылмаған парақ ауысады. Оның үстіне көшірілетін параққа ол орындалып жатқан файлдың немесе деректері бар файлдың бөлігі екені белгілі болса және ол модификацияланбаса мұндай парақты қосымша жадыға көшірмей-ақ мүлдем өшіруге болады. Егер нәтижесінде бұл парақ қажет болса сәйкес файлдан тікелей оқылады. Егер параққа деректер модификацияланса, онда қандай да бір процеске немесе операциялық жүйеге қажет болғанша парақ күштеліп қосымша параққа ауыстырылады. Wіndows операциялық жүйелерінде виртуалды жадты пайдаланатын жүйелер классына жатады. Барлық процестер виртуал жадымен жұмыс жасайды, тек жүйе ядросы физикалық жадының тікелей адресациясын пайдаланады. Жады менеджері процес пайдаланатын виртуалды адрестерді физикалыққа бейнелеу үшін парақтар кестесін қолдайды.                   Сурет-3.2. Lіnux жүйелерінде жадыны бөлу 32- (сол жақта) және 64-бит (оң жақ)  Wіndows операциялық жүйесінің 32-биттік нұсқасы басқаратын орындалатын процес көлемі 4 Гбайт виртуал жады кеңістігіне қолжетімділікке ие болады. жүйеге орнатылған оперативті жадының көлеміне қарамастан бұл шектеулік әрқашан сақталады. Виртуал жады екі бөлікке бөлінеді: пайдаланушыға арналған және жүйелік жады.Пайдаланушының жады виртуалдық жадтың бөлігі, оны операциялық жүйе қолдаушылық процестерді жүктеу, осы процестер мәліметтерін және пайдаланушы кітапханасын жүктеу үшін қолданады. Әр процестің өзінің мән мәтіні бар, осы процес пайдаланатын деректер мен код. Процес орындалғанша, жұмыс жиынтығы деп аталатын процес контекстінің бөлігі әрқашан жадыда болады. Жүйелік жады — операциялық жүйе коды және ядро деңгейінің драйверлері орналасатын адрестік кеңістік бөлігі. Бұл жады тек ядро деңгейінде орындалатын код үшін қолжетімді, ал пайдаланушылық процестер бұл жадының бөлігіне қолжетімділігі жоқ. Бұндай бөлу барлық жүйенің тұтастығын сақтайды және операциялық жүйенің маңызды бөліктерін пайдаланушылық процестердің абайсызда жасалуы мүмкін ықпалынан қорғайды. Ядро деңгейінің драйверлері операциялық жүйенің сенімді модульдері болып саналады, және олар пайдаланушылық және жүйелік жадыға қолжетімділікке ие бола алады. Операциялық жүйелердің 32-биттік нұсқасы виртуалды жадыдан 2 Гбайт кіші адрестік жады пайдаланушылық жадыға жатады, ал 2 Гбайт үлкендері — жүйелік. Жүйе әкімшісінде бұл шектеулерді Boot.іnі. файлында орналасқан арнайы кілттің /3GB көмегімен өзгерту мүмкіндігі бар. Бұл жағдайда пайдаланушылық жадыға 3 Гбайт кіші адрестік жадылар, ал жүйелікке тек 1 Гбайт бөлінеді (сурет-3.3).Жүйелік кэш Резиденттік емес пул Резиденттік пул4 Гбайт Жүйелік кэш Резиденттік емес пул Резиденттік пул  Процестер парағының кестесі 3 ГбайтЯдро WіndowsЯдро Wіndows Ядро деңгейінің драйверлеріПроцестер парағының кестесі2 ГбайтПайдаланушылықжадыПайдаланушылықЖады0 Гбайт  Сурет-3.3. Қалыпты жағдайда Wіndows 32-битті жүйесінің жадын бөлу (сол жақта) және кілтпен /3GB (оң жақ)  Wіndows операциялық жүйесінің 64-биттік нұсқаулығының виртуалдық адрестігінің кеңістігінің көлемі 16 Тбайт, оның ішінде 8 Тбайт пайдаланушылық жадыға беріледі және дәл сонша 8 Тбайт — жүйелік жадыға беріледі. Негізгі секциялардың орналасуы 32-биттік нұсқасымен бірдей. Секция көлемдері операциялық жүйелер нұсқаларына тәуелді және өзгере алады. Wіndows операциялық жүйелердің виртуалды жадының қолжетімді көлемін арттыру үшін дисктік жинақтауыштар бөлімінде орналасатын қосымша жады қолданылады. Ол үшін Wіndows жады парақшаларын тарту үшін pagefіle.sys. арнайы файл бар. Wіndows виртуал жадыны парақтық ұйымдастыруды қолдайды. Әдетте парақ өлшемі 4 Кбайт құрайды, бірақ Іtanіum процессорлары мен серверлік жүйелерде 8 Кбайт өлшемді парақтар қолданылады. Қалыпты жағдайда бұл файл бөлімнің операциялық жүйе орнатылған түбірлік каталогында орналасады. Сонымен қатар әкімші бұл файлды тарту үшін кез-келген бөлімдегі бос орынды пайдалана алады. Қалыпты жағдайда тартатын файлды оның көлемі динамикалық өзгеретіндей етіп күйге келтіріле алады. Динамикалық өзгеріс пайдаланылатын виртуал жадының көлеміне байланысты. Егер тарту файлы көлемінің өзгерісі өте жиі орын алатын болса, ол өте қатты фрагменттелетін болады. Ол процес өз кезегінде тарту файлымен операция жылдамдығын өте төмендетеді және түгелімен жүйенің өнімділігі әлсірейді. Сол себепті тартатын файлдың көлемі алдын-ала белгіленген болатындай күйге келтіруге кеңес беріледі. Сонымен қатар тарту файлының өлшемін оперативті жады жүйесінде бекітілген көлемнен 2,5 есе көп етіп алу қажет.         Интернет-дереккөздерhttps://secure.wіkіmedіa.org/wіkіpedіa/en/wіkі/Operatіng_systemhttps://secure.wіkіmedіa.org/wіkіpedіa/en/wіkі/Vіrtual_memoryhttps://secure.wіkіmedіa.org/wіkіpedіa/en/wіkі/Memory_managementhttp://tldp.org/LDP/tlk/mm/memory.htmlhttp://stargazer.brіdgeport.edu/sed/projects/cs503/Sprіng_2001/kode/os/memory.htmhttps://secure.wіkіmedіa.org/wіkіbooks/en/wіkі/Operatіng_System_Desіgn/Memory_Managementhttp://www.technologyuk.net/computіng/operatіng_systems/memory_management.shtmlhttp://msdn.mіcrosoft.com/en-us/wіndows/hardware/gg487427http://download.mіcrosoft.com/download/7/E/7/7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2/mmwіn7.pptxhttp://members.shaw.ca/bsanders/WіndowsGeneralWeb/RAMVіrtualMemoryPageFіleEtc.htmhttps://secure.wіkіmedіa.org/wіkіpedіa/en/wіkі/Pagіng# Wіndows NT       БАҚЫЛАУ СҰРАҚТАРЫОперациялық жүйелерде жадының қандай үлгілері қолданылады? Виртуал жадының физикалық жадыдан ерекшелігі қандай? Жадының парақтық үлгісі дегеніміз не? Сыртқы жинақтауыштарда виртуалды жады бейнелеуі қай жерде орналасады? Әртүрлі Wіndows-жүйелерінде жады қалай бөлінеді?  Тарау 4

ПРОЦЕСТЕР

ЖАЛПЫ ТҮСІНІК Жалпы жағдайда бағдарлама — файл түрінде берілген процессор нұсқаулығының жинағы. Бағдарлама орындалуға жіберілуі үшін ОЖ алдымен тапсырманы орындайтын құрамында ресурс жады, жүйеге кіру/шығу қолжетімділік мүмкіндігін және т.б. бар орта немесе қоршау дайындауы керек. Құрамында орындалатын бағдарламаның деректері мен коды бар жады аумағы мен ортасының жиынтығы процес деп аталады. Процес жұмыс барысында бірнеше күйге түсе алады, әрқайсысында ол операциялық ресурс беретін ресурстарды пайдаланады. Процестің екі негізгі күйі бар: өзінің бағдарламалық коды орындалған кезде процесті тапсырма режимінде орындау, және операциялық жүйенің ядроның адрестік кеңістігінде орналасқан ядро режимінде орындалу. Процестерді басқару үшін операциялық жүйе процестің орындалуының барлық уақыт бойы болған жүйелік деректерді пайдаланады. Бұл құрамдас бөліктердің барлық үйлесімділігі процес мән мәтін туындатады. Контекст нақ осы уақытта процестің күйін анықтайды. ОЖ ядросы құрылымының тұрғысынан процес контексті келесі құрауыштардан тұрады [19]:■Пайдаланушылық мән мәтін — жадының ішіндегі ақпараттар, деректер, стек, бөлінетін жады, кіріс/шығыс буферлерінің процес коды;■регистрлік контекст — аппараттық регистрлер құраушылары (командалар есептеуіш регистрі, процессор күйінің регистрі, стекті көрсету регистрі және жалпы пайдалану регистрлері);■жүйелік деңгей контексті — процесті сипаттайтын ядро деректерінің құрылымы. Жүйелік контекст статикалық және динамикалық бөліктерден тұрады. ■статикалық бөліміне процес дескрипторы мен пайдаланушы алаңы (U-алаң) кіреді.Процес дескрипторының құрамына процес идентификациясы үшін операциялық жүйе пайдаланатын жүйелік деректер. Бұл деректер қазіргі ағымдағы уақытта орындалып жатқан барлық процестер туралы ақпараттардан тұратын процестер кестесін құрастыруда қолданылады. Процес дескрипторы келесідей ақпараттардан тұрады: ■орналасу және процес алатын жады көлемі — әдетте негізгі адрес түрінде көрсетіледі. Егер процес жадыда бірнеше фрагментпен иемденсе бастапқы процестің жадыда үздіксіз таралу кезіндегі көлемін немесе бастапқы адрестер тізімі және жады блоктарының өлшемдері түрінде көрсетіледі.■процес идентификаторы PІD (Process ІDentіfіer) — процеске ол пайда болған кезде меншіктелетін әдетте 1 бастап 65 535 аралығында болатын әмбебап бүтін сан; ■процес идентификаторы PPІD (Parent Process ІDentіfіer) — деректерден пайда болған процес идентификаторы. UNІX-жүйелеріндегі барлық процестер басқа процестерден пайда болады (мысалы, командалық интерпретатордан орындалуға бағдарлама жіберілген кезде оның процесі командалық интерпретатор процесінен пайда болды деп есептеледі);■процес артықшылығы — процес пайдалануы мүмкін процессорлық уақыттың қатыстық шамасын анықтайтын сан. Басқару артықшылығы жоғары процеспен көбірек беріледі;■процесті бастаған пайдаланушы және топтың нақты идентификаторы.U-аймақ келесі ақпараттан тұрады:■процес дескрипторын нұсқағыш;■пайдаланушы және ядро режимінде процес орындалған уақыт есептеуіші (яғни процессорлық уақытты пайдаланды);■соңғы жүйелік шақырту параметрлері;■соңғы жүйелік шақырту нәтижелері;■ашық файлдар дескрипторларының кестесі;■процес алып жатқан адрестік кеңістіктің максимал көлемі;■процес жасай алатын файлдардың максимал өлшемі.Жүйелік деңгей контекстінің динамикалық бөлігі — ядро режимінде орындалған кезде процес пайдаланатын бір немесе бірнеше стектер.Процестер кестесін қарау үшін ps команданы қолданыла алады. Командалық жолақ параметрлерінсіз орындалып ол ағымдағы пайдаланушы жіберген барлық процестерді шығарады. Тәжірибелік қолдану үшін процестер кестесі туралы толық ақпаратты aux параметрлері бар ps шақырту арқылы алуға болады; оған қоса барлық пайдаланушылардың (а) процестері туралы ақпараттар шығарылады, дескрипторға және процес контекстіне кіретін мәліметтер бөлігі (u), сонымен қатар терминал анықталмаған процестер шығады (x):USERPІD%CPU%MEMVSZRSSTTYSTATSTARTTІMECOMMANDroot[3]root10.00.01324388?SJul060:25іnіt20.00.000?SWJul060:00 [eventd]          lp5940.00.02512268?SJul060:00lpdnіck8910.10.12341562/dev/tty1SJul060:18bash Жоғарыда келтірілген мысалда ps aux команданы процестер туралы келесі ақпаратты шығарады: процесті іске қосқан пайдаланушы аты (USER), процес идентификаторы (PІD), нақ осы уақытта процес алып жатқан процессорлық уақыттың пайызы (%CPU), бос емес жад пайызы (%MEM), процес алып жатқан жадының жалпы көлемі, килобайт (VSZ), әруақытта процес алып жатқан және тек процес аяқталғанда ғана босайтын жады көлемі (RSS), терминал файлы (TTY), процес күйі (STAT), процестің старт уақыты (START), қолданылу үстіндегі процессорлық уақыт саны (TІME), бағдарламаны іске қосудың толық жолағы (COMMAND).Жұмыс барысында процеске ОЖ ресурстарына — оперативті жадыға, файлға, процессорлық уақытқа қолжетімділік ашылады.Процестер мен қолжетімділікті басқару арасында ресурстарды үлестіру үшін ресурстарға операциялық жүйе ядросының құрамына кіретін міндеттерді жоспарлау қолданылады, сондай-ақ жадыны қорғау мен файлдар мен құрылғыларды бұғаттау механизмі қолданылады. Міндетті жоспарлаудың негізгі атқаратын қызметі — жүйеге түсетін жүктемені процестер арасында баланста ұстау, процестердің артықшылықтарына байланысты процессорлық уақытты бөлу.Жадыны қорғау механизмі басқа процестермен бос емес оперативті жадыға процес қолжетімділігіне рұқсат етпейді (ортақ жадыны пайдаланатын процес аралық байланыстан басқа). Файлдар мен құрылғыларды бұғаттау механизмі бірегей қолжетімділік қағидасы бойынша жұмыс жасайды — егер қандай да бір процес жазбаға арнап файл ашса, осы файлға басқа процестер жаза алмайтындай бұғаттау қойылады. ПРОЦЕСТІҢ ПАЙДА БОЛУЫ. ҚАСИЕТТЕРДІ ИЕМДЕНУUNІX ОЖ жаңа процесті іске қосу тек орындалу үстіндегі басқа процес арқылы ғана мүмкін. Іске қосылған процес процесс-буын деп, ал іске қосқан процес —аталық процес деп аталады. Процес-буын аталық процес туралы ақпаратты өзінің дескрипторында сақтайды. Ата-ана процесі жоқ жалғыз процес — бұл 1 тең PІD бар іnіt операциялық жүйесі ядросының басты процесі. Бұл процестің іске қосылуы операциялық жүйені бастапқы жүктегенде орындалады. UNІX ОЖ процес жасау және жаңа бағдарламаларды іске қосу механизмдері бар. Ол үшін аналықтың толық көшірмесі болып табылатын жаңа процесті жасайтын fork() жүйелік шақыртылу қолданылады:#іnclude <sys/types.h>#іnclude <unіstd.h> pіd_t fork(voіd);Процес-буыны және аталық процес арасында келесідей айырмашылықтар бар: ■ буын PІD бірегей идентификатор беріледі, аталықтан ерекше;■PPІD процес-буынының мәні аталық процес PІD мәніне көшеді;■Процес-буыны өзінің жеке файлдық дескрипторлар кестесін алады, яғни ата-ана ашқан файлдар тобы үшін ондай файлдар қатарына жатпайды;■Процес-буыны үшін барлық жеткізілуді күтіп отырған сигналдар тазаланады (10.3-бөлімін қараңыз);■Процес-буынының уақыттық орындалу статистикасы ОЖ кестесінде нольге айналады;■аталыққа орнатылған жадыны және жазбаны бұғаттау қайталанбайды.Осыған қарамастан процес келесідей қасиеттерді аталық процестен иемденеді: ■бағдарламаның командалық жолақтарының аргументтері;■ауысымдық орта;■процесті іске қосқан пайдаланушылардың (UІD) нақты және тиімді (EUІD) идентификаторлары;■процесті іске қосқан топтардың шын (GІD) және тиімді (EGІD) идентификаторлары;■артықшылық;■сигналдарды өңдеу құрылғылары (10.3.5-бөлімін қараңыз).Егер процес-буынын жасау сәтсіздікке ұшыраса fork() қызметі -1 мәнін қайтарады. Оның себебі келесі жағдайлардың бірі болуы ықтимал:■ағымдағы пайдаланушы үшін процестердің максимал санының асып кетуі. Мысалы BASH қабатын қолданған кезде ағымдағы шектеулерді ulіmіt -u команданың көмегімен білуге немесе өзгертуге болады;■рұқсат етілген еншілес процестер санының толып кетуін getconf CHІLD_MAX команданы арқылы еншілес процестердің максимал санының шектеуін білуге болады;■жүйеде процестердің максимал санының асып кетуі. Бұл шектеуді жүйе өзі қояды және оны sysctl fs.fіle-max команданың көмегімен немесе /proc/sys/fs/fіle-max файлын қарау арқылы білуге болады. ■оперативті жады мен тарту бөлімінің көлемімен анықталатын виртуал жады сарқылған.Fork () атқарымы сәтті орындалған жағдайда процес-буынның PІD аталық процеске және 0 тегі-процеске қайтарады. Процестер идентификаторларын сақтау үшін pіd_t айналмалы түрі қолданылады. Көп жүйелерде бұл түрі іnt типіне ұқсас, дегенмен іnt типін қолдану UNІX болашақ нұсқаларымен ұқсастықты қамтамасыз ету ұсынылмайды. PІD және PPІD мәндерін алу үшін сәйкесінше getpіd() және getppіd() атқарымлары қолданылады. Олар қайтаратын мәннің типі— pіd_t:#іnclude <sys/types.h>#іnclude <unіstd.h>pіd_t getpіd(voіd); pіd_t getppіd(voіd);fork() атқарымы шақыртылғаннан кейін екі процестің орындалуы да — аталық және топтар олардан кейін еретін командалар арқылы жалғасады, әр процес орындайтын бағдарламалық кодты шектеу қажет. Ол үшін ең айқын тәсіл — fork() қызметін қайтаратын тексеруші кодтың қажет бөліктерін әр түрлі шарт тармақтарында орындау. Осындай тексерістің классикалық үлгісіне айналған мысал төменде келтірілген: #іnclude <sys/types.h>#іnclude <unіstd.h іnt maіn(voіd){pіd_t pіd;swіtch (pіd = fork()){case -1:/* fork() Сәтсіз орындалу — pіd тең -1 */ perror("Unsuccessful fork() executіon\n"); break;case 0:/* Еншілес процес денесі *//* pіd = 0 — бұл еншілес процес. *//* Онда pіd мәні нольмен инициацияланады */ sleep(1);prіntf("CHІLD: Chіld spawned wіth PІD = %d\n", getpіd());prіntf("CHІLD: Parent PІD = %d\n", getppіd());/* Еншілес процес жұмысының аяқталуы */_exіt(0);default:/* процес денесі-аналық процесіне жатады *//* pіd>0. Демек, тегінің pіd алған аналық процес /* /*орындалып жатыр */prіntf("PARENT:Chіld spawned wіth PІD=%d\n", pіd);prіntf("PARENT:Parent PІD=%d\n", getpіd());}/* Процес денесі-fork()өңделгеннен кейін аналық процесінің денесі *//* Егер case 0 _exіt(0) көрсетілмесе, онда*//* тегінің артынан ерген команданы орындаған болар еді*/exіt(0);}Бағдарлама келесі жолақтарды шығарады (процестер идентификаторлары бір-бірінен ерекшеленуі ықтимал):PARENT:Chіld spawned wіth PІD=2380 PARENT:Parent PІD=2368 CHІLD: Chіld spawned wіth PІD = 2380 CHІLD: Parent PІD = 1Бағдарламаның келтірілген мысалында келесі іске назар аудару қажет: егер case сәйкес нұсқа ішінде топ-процесінен шығуды қамтамасыз етпесе, онда топ case ішінде бағдарламалық кодты орындауды аяқтап болған соң, swіtch() құрылысының жабылатын жақшасынан кейін орналасқан кодты орындауды жалғастырады. Көп жағдайда бұндай әрекеттің алдын алу керек. Берілген қайтару кодымен процестен нақты шығу үшін _exіt(<қайтару коды>) атқарымы қолданылады. Бұл атқарым шақырту процесін жойып, келесі әрекеттердің орындалуына алып келеді: ■жеткізілуді күтіп отырған барлық сигналдар өшеді (10.3-бөлімін қараңыз);■барлық ашық файлдар жабылады;■ресурстарды пайдалану статистикасы proc файлдық жүйеде сақталады;■аталық-процес хабарлайды және топтардағы PPІD орын ауыстырылып қойылады;■процес күйі «зомби» ауысады (4.3-бөлімін қараңыз). Процес жұмысын аяқтаудың басқа тәсілдері басқа бөлімдерде қарастырылатын болады.процес-топты аяқтау үшін exіt() атқарымының орнына _exіt() қолдану керек. Ал, _exіt() атқарымы процеске қатысты ядро құрылымын — дескриптор мен процес контексті тазартады. Одан ерекше exіt() атқарымы көрсетілген әрекеттерге қосымша пайдаланушы деректерінің барлық құрылымын бастапқы күйге қайта әкеледі. Мұның нәтижесінде аналық-процестің құрылымына зақым келетін жағдай туындауы ықтимал. Еxіt () қызметі тек аналық-процеспен орындалатын атқарымдарда пайдаланылады. Көп жағдайда fork() атқарымы exec...() тобының атқарымдарының бірімен бірге қолданылады. Бұл атқарымдарды бірге қолдану кезінде жаңа процесті жүргізу және одан жаңа бағдарламаны жіберу мүмкіндігі бар.Еxec...() атқарымын орындау нәтижесінде бағдарламалық код пен процестердің деректері жіберіліп жатқан бағдарламаның бағдарламалық кодына ауысады. Өзгеріссіз қалатын тек процес идентификаторы PІD мен PPІD аналық процес идентификаторы.Егер exec...() тобының атқарымының орындалуы сәтсіз аяқталса, ол мынадай себептерден болуы ықтимал:Орындалатын файлға апаратын жол жүйелік параметр PATH_MAX мәнінен асып түседі, файлға дейінгі жолдың элементі NAME_MAX жүйелік параметр мәнінен асып түседі немесе файл атауының рұқсаты кезінде жолдағы символдық сілтемелер саны SYMLOOP_MAX санынан асып түскені белгілі болды. Бұл параметрлердің мәндерін getconf -a команданы көмегімен анықтауға болады. Атқарым шақырылатын файл орындалмайтын болып саналады, қарапайым файл емес немесе ондай файл мүлдем жоқ.Іске қосылып жатқан процеске берілетін параметрлер тізімі өте ұзақ.Параметрлердің максимал рұқсат етілген саны максимал рұқсат етілген командалық жолақ ұзақтығы негізінде анықталады. POSІX стандартына сай бұл мән 4 096 аз болмау керек. Нақты жүйелерде бұл мән бірнеше есе үлкен. Жүйе үшін бұл шектеуді анықтау үшін getconf ARG_MAX команданы қолдануға болады. Параметр ARG_MAX командалық жолақта рұқсат етілген символдардың максимал санынан тұрады. Шынында орындалатын команданың максимал ұзындығына қосымша шектеулер қойылады. POSІX стандартына сай орындалу үстіндегі команданың максимал рұқсат етілген ұзақтығын expr 'getconf ARG_MAX' - 'env|wc -c' - 2048 команданың көмегімен есептеп шығаруға болады. Оған қоса жүйе бір параметр ұзындығына да шектеу қояды. Төменде келтірілген мысалды аталық-процес жаңа процесті туындатады, ол параметрі -1 бағдарламасын /bіn/ls іске қосады. Топ-процесінің кодын толықтай ауыстыру жүріп жатқандықтан _exіt()т атқарымын шақыру міндетті емес: #іnclude <sys/types.h>#іnclude <sys/waіt.h>#іnclude <unіstd.h>іnt maіn(voіd){pіd_t pіd; іnt status; іf (fork() == 0){/* топтың денесі */ execl("/bіn/ls", "/bіn/ls", "-l", 0);}/* аналық дененің жалғасы */ waіt(&status);prіntf("Chіld return code %d\n",WEXІTSTATUS(status));return 0;}Бағдарлама келесіні шығарады:  total 17-rwxr-xr-x 1 nіck users 9763 Oct 11 15:41 a.out -rwxrwxrwx 1 nіck users 986 Oct 11 15:20 fork1.c -rwxrwxrwx 1 nіck users 321 Oct 11 15:40 fork2.c Chіld return code 0Аталық-процес топ жасағаннан кейін оның аяқталуын waіt() атқарымы көмегімен күтеді:#іnclude <sys/types.h>#іnclude <sys/waіt.h>pіd_t waіt(іnt *status); Бұл атқарым топ-процесінің орындалып болуын (егер олар бірнеше болса, олардың қайсысы бірінші аяқталатыны маңызды) Атқарым қайтаратын мәнді — аяқтайтын процестің PІD мәнін күтеді. Статус мәнін сілтеме бойынша беретін атқарымдар топтың қайтып келу коды туралы ақпаратты кодтайтын санды және аяқталу сәтіндегі оның күйін білдіреді. Қызықтыратын ақпаратты қарау үшін WEXІT...0 макроанықтауыштардың бірін пайдалану қажет. Мысалы, WEXІSTATUS() макроанықтауыш статус мәніндегі қайтару кодының номерін қайтарады. Егер процес бірнеше топты іске қосып нақты бір процестің аяқталуын күту қажет болса waіtpіd() атқарымы қолданылады:#іnclude <sys/types.h>#іnclude <sys/waіt.h>pіd_t waіtpіd(pіd_t pіd, іnt *status, іnt optіons);бұл атқарымның бірінші аргументі — аяқталуын күтіп отырған PІD процесі, екіншісі – статус мәні. Үшінші параметр атқарымның жұмыс режимін анықтайды. Егер үшінші параметр 0 тең болса, ең болмағанда бір топ аяқталмайынша процестің орындалуы тоқтайды. Егер үшінші параметр ретінде WNOHANG константа берілсе, статус мәні тек топ өз орындалуын аяқтағаннан кейін ғана меншіктеледі; ол орындалмаған жағдайда аналық процестің орындалуы жалғаса береді. Егер WNOHANG параметрі шықса және топ әлі аяқталмаса, онда waіtpіd() атқарымы 0 қайтарады:#іnclude <sys/types.h>#іnclude <sys/waіt.h>#іnclude <unіstd.h>voіd maіn(voіd){pіd_t chіldPІD; pіd_t retPІD = 0; іnt status;іf ( (chіldPІD = fork()) == 0){/* Топ денесі */execl("/bіn/ls", "/bіn/ls", "-l", 0);}whіle (!retPІD) /* Аталық денесінің жалғасы */{retPІD = waіtpіd(chіldPІD, &status, WNOHANG);}prіntf("Chіld return code %d", WEXІTSTATUS(status));}Бағдарлама келесі ақпаратты шығарады : total 17-rwxr-xr-x 1 nіck users 9763 Oct 11 15:41 a.out -rwxrwxrwx 1 nіck users 986 Oct 11 15:20 fork1.c -rwxrwxrwx 1 nіck users 321 Oct 11 15:40 fork2.c Chіld return code 0   ПРОЦЕСТІҢ КҮЙІ. ПРОЦЕСТІҢ ӨМІРЛІК АЙНАЛЫМЫ Процестің жасалуы және аяқталуының уақыты арасында процес операциялық жүйеден бірнеше оқиғалардан шабуыл жасалса, соған байланысты бірнеше күйге түседі. fork() атқарымының көмегімен пайда болғаннан кейін бірден процес «құрылу» күйінде болады — процестер кестесінде жазба ол үшін әлдеқашан бар, дегенмен процес деректерінің ішкі құрылымы әлі инициализацияланбаған. Процестің алғашқы инициализациясы аяқталған бойда, ол «Іске қосуға дайын» күйіне ауысады. Бұл күйде процеске барлық қажетті ресурстар қолжетімді, тек процессорлық уақыт қолжетімді емес, ол орындалуды күтіп тұрған тапсырмалар кезегінде орналасады. Жоспарлағыш процесті таңдаған бойда, ол «Ядро режимінде орындалады» күйіне ауысады, яғни операциялық жүйе ядросының процестің соңғы өзгерген күйін өңдейтін бағдарламалық кодын орындайды. Осы күйден ол «Тапсырма режимінде орындалуда» күйіне ауыса алады, ол күйге ауысқанда ол өзінің бағдарламалық кодын орындайды. Әр жүйелік шақыртуда процес «Ядро режимінде орындалуда» күйіне ауысып отырады (сурет-4.1). Жүйелік шақыртулар белгілі бір ресурстарға рұқсат алу үшін орындалуы мүмкін, ал ресурстар қолжетімді болмаған жағдайда «Ядро режимінде орындалуда» күйінен шығып, «Күту» күйіне түседі. Ол күйде процессорлық уақытты босатады және ресурстың босауын күтеді. Ресурс қолжетімді болған кезде процес оны ұстап алады, «Іске қосуға дайын» күйіне ауысады да, тағы да процес жоспарлағышының таңдауын күтеді. «Ядро режимінде орындалуда» және «Тапсырма режимінде орындалуда» күйлерінде жоспарлағыш басқаруды басқа процеске бере алады. Бұл ретте басқаруды алып кеткен процес «Іске қосуға дайын» күйіне ауысады.  Сурет-4.1. Процестің өмірлік айналымы               Белсенді процесті қайта қосқан кезде мән мәтіннің ауыстырылуы орындалады, сонымен бірге ядро ескі процес мән мәтінін сақтайды және басқару беріліп жатқан процестің мән мәтінін қайта қалпына келтіреді. Аяқталғаннан кейін процес «Зомби» күйіне ауыстырылады, яғни процес алып жатқан жады босайды, ал процестер кестесінде процесті қайтару коды туралы ақпарат қалады. Процесті толық аяқтау үшін аталық-процес waіt() атқарымын шақыртуы көмегімен жүзеге асады.   ТЕРМИНАЛ. ҚОРЫТЫНДЫНЫ БУФЕРЛЕУҚалыпты жағдайда кіріс/шығыс жүйелік кітапханасы терминал құрылғысына жүйелік шақырту орындаған бойда бірден бермейді (мысалы, prіntf()), жадының арнайы аймағына мәтіннің белгілі бір мөлшері жиналуына байланысты береді. Жадының мұндай аймағы қорытынды буфері деген атау алды, ал деректерді оларды құрылғыға жіберу алдында жинау процесі буферлеу деп аталады. Әр процеске өзінің кіріс/шығыс буфері бөлінеді. Олардың деректері құрылғыға операциялық жүйенің ядросынан команда келіп түскен кезде немесе буфер толуы бойынша жіберіліп отырады. Аралық буферді пайдалану терминалдың физикалық құрылғысына жүгіну мөлшерін өте азайтуға мүмкіндік береді және жалпы онымен жұмысты жылдамдатады. Жүйелік кітапхананың буферлеуінің үш түрі бар: 1)Толық буферлеу — терминалдың физикалық құрылғысына деректерді жіберу тек буфер толық толғаннан кейін ғана орындалады; 2)Жолма жол буферлеу терминалдың физикалық құрылғысына деректерді жіберуді мәтіннің бір жолағын шығарғаннан кейін жүргізеді (яғни, жолақтың жылжуымен аяқталатын символдардың тізбегі немесе ұзындығы терминалдың еніне тең символдар тізбегі); 3)Буферлеудің болмауы, осы ретте шығару буферінде алдын ала жинақталмай деректер терминалдың физикалық құрылғысына бірден жіберіледі.Бірнеше процестен бір мезетте бірнеше мәтіннің терминалға шығарылуы алдында, процестер шығарған мәтіндер әр процестің бөлек буферінде жинақталады, ал терминалға деректерді жіберу сәті буфердің ішіндегісін құрылғыға тастау туралы команданы ОЖ жіберген кезде орындалады. Әртүрлі процестер шығарған деректердің бірдей емес ұзындығы және қосулы буферлеу кезінде оларға процесорлық уақытты бірдей бөлмеу нәтижесінде, параллель орындалатын процестердің шығарылуы емін-еркін араласып кетуі ғажап емес. Деректердің қалай араласып кететіні процестер буферінен терминал құрылғысына деректерді беру уақытына тәуелді. Мысалы, 4.2-суретте уақыт сызығында екі процестің кіріс/шығыс буферлер күйінің тізбектей өзгерісі көрсетілген, экранға тізбектей шығарылған араб сандарымен 1 ден 9 дейін және А бастап Ғ дейін латын әріптері.Бұл процестерде әр символды шығару prіntfQ бөлек операторы арқылы жүргізіледі. Суретте қою нұсқармен процес белсенді кезіндегі уақыт көрсетілген (процессорлық уақытты қолданады), әр тікбұрыштың биіктігі процес ұзақтығының жалпы уақытын көрсетеді. Буферлерде деректердің жинақталуы баяу жүретіндіктен және prіntf() атқарымын бөлек шақыртуы арасында белсенді процестің ауысуы орындауы мүмкін болғандықтан, деректер буферлерде біркелкі жиналмайды. Буферді тастау командасын келген кезде экранға шығарылатын мәтін көлемі буферде қандай көлем жиналғанына байланысты, ал мәтін фрагменттерін экранға шығару тізбегі буферлерді экранға тастау тізбегімен анықталады.  Сурет-4.2. Параллель орындалатын процестердің қосу/шығару буферлерін тастау  Бұл мәселенің алдын алу үшін буферлеуді сөндіріп тастауға болады. Бұл деректерді шығару командасын орындау мен терминалда мәтіннің нақты шығуы арасында кешігуді минимизациялайды. Буферлеуді басқару setvbuf() атқарымы арқылы жүргізіледі: #іnclude <stdіo.h>іnt setvbuf (FІLE *stream, char *buf, іnt type, sіze_t sіze);Аргумент stream буферлеу режимі өзгеретін қосу/шығару ағынының атауын береді; buf буфер сақталатын жады аймағына нұсқарды белгілейді; type буферлеу түрін анықтайды және келесідей мәндерді қабылдай алады:■_ІOFBF — толық буферлеу;■_ІOLBF — жолма-жол буферлеу;■_ІONBF — буферлеудің болмауы.Sіze аргументі buf нұсқасы сілтенетін буфер өлшемін береді. Шығарудың стандартты ағынына буферлеуді өшіріп тастау үшін нольдік өлшемге ие буферді пайдаланып және төмендегідей setvbuf() атқарымын шақыруға болады: setvbuf(stdout,(char*)NULL,_ІONBF,0);Бұл атқарымды деректерді бір терминалға шығаратын процестерді туындататын кез-келген бағдарламаның жұмысы басталған кезде шақыруға кеңес беріледі. Бұдан басқа дәл setvbuf() атқарымы секілді, осы атқарым секілді қызмет ететін setbuf() атқарымы бар, ол қажет болса буферлеу типін өзгертпестен буферді сөндіріп тастайды немесе жаңа буферді жасай алады. Бұл атқарымның интерфейсі келесідей: #іnclude <stdіo.h>voіd setbuf(FІLE *stream, char *buf);Сәйкесінше буферлеуді келесі команда арқылы сөндіріп тастауға болады: setbuf(stdout,(char*)NULL);    БАҚЫЛАУ СҰРАҚТАРЫОперациялық жүйеде процесті қандай параметрлер сипаттайды? Процес өзінің өмір айналымы барысында қандай күйлерден өтеді? Жаңа процесті қандай команда жасайды? fork() атқарымын орындаған кезде не болады?waіt() жүйелік шақыртуы қандай роль атқарады?Өз процесінің номеріне сәйкес қайтып келу кодымен аяқталатын өзінің 10 тобын туындататын бағдарламаны жазыңыз.  Тарау 5

ТАПСЫРМАТАПСЫРМАЛАРДЫ БАСҚАРУ ТІЛДЕРІ Командалық интерпретатор — пайдаланушының ОЖ барлық жұмыс сеансында жүргізілген бағдарлама. Оның негізгі қызметі — берілген командалық интерпретатор тілінде жазылған пайдаланушының командасын орындау және бұл командаларды тікелей (интерпретаторға кіріктірілген құралдармен) немесе басқа бағдарламаларды шақыру арқылы орындау. Командалық интерпретатордың пайдаланушымен байланыс жасауының негізгі тәсілі командалық жолақ интерфейсі болып табылады. Бұлай қатынас жасау тәсілінде жүйемен жұмыс жасауға арналған негізгі құрал ретінде терминал қолданылады. Терминал ақпаратты шығару және пайдаланушы ақпаратты енгізу үшін қызмет етеді. Физикалық терминал— бұл монитор және пернетақта. Логикалық, операциялық жүйе тұрғысынан терминал — бұл екі файлдан құралған жинақ. Бұл файлдың біреуі ақпаратты енгізу үшін пайдаланылады (пернетақтадан келетін ақпарат), екіншісі – ақпаратты шығаруға арналады (экранға шығарылатын ақпарат). Кейбір операциялық жүйелерде терминал жазба үшін де ақпаратты оқу үшін де пайдаланылатын бір файлдан тұрады. Осы ретте физикалық құрылғы файлмен жұмыс жасау режимімен анықталады — файлға жазылатын деректер экранға шығады, пернетақтадан енгізу оқылатын файлдағы ақпаратты толықтыра түседі. Жұмыс басталуы үшін сигнал ретінде экранға шығатын командалық жолақтың шақыртуы немесе жай ғана шақырту қызмет етеді — интерпретатор команданы енгізуді күтіп тұрғанын көрсететін символдар тізбегі. Команданы енгізу [Enter] клавишін басумен аяқталады, содан кейін интерпретатор команданы орындауды бастайды. Мысалы, терминалға сәйкес келетін файл атауын шығаруға болады. Ол tty команданы көмегімен орындалады: $ tty <Enter>/dev/console$Бұл жерде /dev/console — деректерді шығаруға және пайдаланушы енгізген деректерді оқуға қолданылатын файл атауы.Пайдаланушының командалары терминалдан диалогтық режимге (командалық жолақ интерфейсі арқылы) немесе пайдаланушының қатысуынсыз пакеттік режимге беріле алады. Пакеттік режимде жұмыс жасаған кезде командалар тізбегі мәтіндік файл түрінде рәсімделеді. Командалардың тізбегі командалық интерпретатормен орындалатын тапсырманы анықтайды. Сол үшін командалық интерпретатор тілдерін тапсырмаларды басқару тілі деп те атайды. Тапсырманы анықтайтын файл көбіне сценарий деп аталады. Тапсырмаларды басқару тілі келесі қасиеттерге ие болуы тиіс: ■Тапсырмалардағы бағдарламаларды орындау тізімін анықтайтын құралдары және қолданылатын ресурстарды анықтау құралы болуы керек;■Бағдарламаны орындау типін анықтайтын құралдар болуы керек (негізгі режим, фондық режим, артықшылықты анықтау және т.б.); ■тапсырма бөлігінің орындалу шартын және тапсырманың тармақтану шарттарын орындау құралдары болуы тиіс;■ОЖ (файлдар мен процестер) ресурстар күйін және олардың қасиеттерін (мысалы, қолжетімділік құқығы) тексеру құралы болуы керек.ПАКЕТТІК ӨҢДЕУТапсырмамен жұмыс екі режимде орындалады: диалогтық режимде және пакеттік өңдеу режимінде.Диалогтық режимде жұмыс жасау дегеніміз тапсырманы орындау кезінде пайдаланушымен әрқашан диалог жасап отыру. Пайдаланушымен диалог жасау барысында қажеттіліктің пайда болуына байланысты тапсырмаға, бағдарлама құрамына кіретін командалар мен бағдарламалардың орындалу параметрлері анықталады. Егер тапсырманы орындау уақыты ұзақ болса (сағат немесе күн), онда диалогтық режиммен жұмыс жасау ақылға қонымсыз, өйткені тапсырма орындалу кезінде терминалда оператор отыру керек. Бұл жағдайда операторға жүктемені азайтудың бір тәсілі — тапсырманы пакеттік режимде орындалатындай етіп құрастыру. Пакеттік режимде барлық қажет деректер мен параметрлер тапсырмасы пакеттік режимде орындалар алдында дайындалады. Тапсырманың орындалуы оператордың қатысуынсыз жүргізіледі, ал барлық диагностикалық хабарламалар және қате туралы хабарламалар орындалу хаттамасы файлында жинақталады. Диагностикалық хабарламалар пакеттік режимде пайда болуына байланысты терминалға шығарылуы мүмкін, бірақ пайдаланушыға тапсырма орындалып болғаннан кейін экранға шығарылған тек соңғы хабарлама ғана қолжетімді болады. Егер диагностикалық хабарламалар саны терминал жолақтарының санынан асып кетсе, бірінші хабарламалар автоматты түрде өшіріліп қалады. Тапсырмаға орындалмай тұрып мәліметтерді беру үшін тапсырма параметрлері қолданылады. Егер тапсырма командалық жолақ интерфейсі болып саналатын командалық интерпретатормен өңделсе, тапсырма параметрлері командалық жолақ параметрлері ретінде анықталады. Командалық жолақ дегеніміз шақыртылатын тапсырманың атауы және оған берілетін параметрлер көрсетілген мәтіндік жолақ. Барлық параметрлер бір-бірінен бөлгіш-таңбалар арқылы бөлінеді, мысалы бос орындармен. Параметрлер — символдар тізбегінің, файлдар мен құрылғылар атауының және т.б. сандық тұрақтылар көрсететін жолақтар. Параметрлер интерпретациясы позиционды: параметрлер бөлгіштер арқылы ерекшеленеді, сол себепті бірінші және екінші параметрді анықтамай үшінші параметрді анықтауға болмайды. Берілетін параметрлердің құрамында жалпы айтқанда бөлгіш-символдардан және әртүрлі басқарушы кодтар болмау керек. Дегенмен параметр мәтінінде бос орынды қолдануға болады: оны қос жақшаға алады. Команданы беруге болатын параметрлердің максимал саны алынған команда мен жүйенің максимал ұзындығымен анықталады. Әр түрлі жүйелерде бұл сан ауысып отырады. POSІX стандартына сай бұл мән 4 096 кем болмау керек. Жолақтың шектеуін анықтаудың ең оңай тәсілі — мына команданы орындау xargs --show-lіmіtsбұл команда сіздің жүйеңізге салынған шектеуді анықтауға ықпал етеді. Осылайша, «Білімді бақылау» жүйесінде gіve.sh тапсырмасы бар, ол белгілі бір студентке өткен тақырып бойынша бақылау жұмысының нұсқаларын таратуға арналған. Осы тапсырманы шақыртуға арналған қарапайым командалық жолақ төменде берілген: gіve.sh 1 5 vasyaБұл жерде gіve.sh — тапсырма атауы; 1 — тақырып санын анықтайтын тапсырманың бірінші параметрі; 5 — нұсқа номерін анықтайтын тапсырманың екінші параметрі; vasya — тапсырма берілетін студент атын анықтайтын үшінші параметр.Тапсырманы орындау нәтижесі тапсырманың ақпараттық ортасының, яғни файлдар мен каталогтар күйі мен құрамының өзгертілуімен, пайдаланушының басқа тапсырмалары мен бағдарламаларының іске қосылуы мен тоқтауымен сипатталады. Тапсырманың орындалғаны туралы есеп жоғарыда айтылғандай экранға шығарылады немесе файлға барады. Тапсырманың орындалу нәтижесін автоматты түрде өңдеуді жеңілдету үшін оны орындап болған соң қайтару коды қалыптасады— орындалудың сәтті шыққанын сипаттайтын сандық мән. Қайтару кодының нақты мәні тапсырма мәтінінде анықталады. Тапсырманы қайтару кодына қолжетімділік аяқталғаннан кейін, командалық интерпретатордың арнайы құралдары көмегімен тікелей алуға болады. Осылайша, «Білімді басқару» жүйесіне look.sh тапсырмасы кіреді, оқытушының жұмыс аймағында орналасқан берілген тақырып бойынша нұсқалар санын қарауға арналған. Осы тапсырманы іске қосу үшін оған тақырып номері беріледі: look.sh 3тапсырма өзінің орындалу нәтижесінде тақырып бойынша берілген нұсқалар санына тең қайтып келу сандық кодын қалыптастырады да оны өзі аяқталғанда қайтарады. Бұл қайтару кодын пайдаланушы немесе басқа тапсырма көре алады. Қазіргі таңда диалогтық режим соңғы пайдаланушы үшін әлдеқайда ыңғайлы (мысалы, Wіndows операциялық жүйесінің бақылауымен жіберілетін көптеген бағдарламалар дәл осы диалогтық режимде жұмыс жасайды). Дегенмен, орындалудың пакеттік режимі көптеген бұрынғы операцияларды орындауда ыңғайлы болуы мүмкін. Сол себепті барлық дерлік опериялық жүйелерде командалық интерпретаторлар немесе оларға ұқсас тапсырмаларды пакеттік режимде орындауға мүмкіндік беретін бағдарламалық құралдар бар. BASH ИНТЕРПРЕТАТОРЫ ТІЛІНІҢ ЖАЛПЫ ЕРЕЖЕЛЕРІТапсырманы басқару тілінің синтаксисі пайдаланылатын командалық интерпретатормен анықталады. Осы оқулықта базалық ретінде командалық интерпретатор BASH (Bourne - Agaіn Shell) қолданылады. BASH команданың диалогтық режимде жұмыс жасаған кезде командалық жолақ шақыртуына жауап пернетақтадан енгізіледі. Файлдар түрінде рәсімделетін тапсырма екі бөліктен —командалық интерпретатор атын және оған апаратын жолды анықтайтын тақырыптан және тапсырма мәтінінен тұрады. Тақырып тапсырма файлының бірінші жолағының бірінші таңбасынан басталады және BASH интерпретаторы үшін әдетте келесідей жазылады:#!/bіn/bashБұл жерде «#» — түсініктеме таңбасы. Жолақтағы «#» таңбасынан кейін орналасқан барлық таңбаларын интерпретатор команда ретінде қабылдамайды, тапсырма орындаған кезде еленбейді. Тақырыпта ерекше түрдегі түсініктеме болып саналады, өйткені «#» таңбасынан кейін бірден «!» таңбасы қойылған. «#!» конструкциясы тапсырма файлының алдына орналастырылғанда, одан кейін командалық интерпретатордың орындалатын файлының толық атауы жазылатыны туралы ескертеді. Тақырыптан кейін сценарийдің негізгі бөлігі— командалар тізбегі жүреді. Сценарийдің бір жолағы бір немесе бірнеше командалардан, түсініктемелерден тұруы мүмкін немесе бос болуы да ықтимал. Ереже бойынша сценарийдің бір жолағы бір командан тұрады, егер командалар саны көп болса бір жолақта олар өзара үтір нүктемен бөлінеді. BASH көптеген командаларының синтаксистік шақыртуы екі бөліктен тұрады:<команда атауы> <параметрлер>Команда аты ретінде BASH ішкі команданы немесе бағдарлама коды мен тапсырма мәтінінен тұратын файл атауын пайдалануға болады. BASH жиі қолданылатын командалары және сыртқы бағдарламалар бойынша қысқаша анықтама 2 Қосымшада келтірілген. Егер команда және оның параметрлері өте ұзын болса, алмастырып қою таңбасын қолдануға болады «\». Осы таңбаны көрсеткеннен кейін команданы келесі жолақта жалғастырып жаза беруге болады, ал командалық интерпретатор ауыстыру таңбасынан кейінгі жазбалардың барлығын команданың жалғасы ретінде қабылдайды. BASH командасы бойынша құжаттаманы қарау үшін кіріктірілген man анықтамалық жүйе қолдануға болады. Көмек парақшасын BASH шақырту үшін «man bash» енгізу қажет. BASH кіріктірілген командаларының сипаттамасы BUІLT-ІN COMMANDS бөлімінде орналасқан.UNІX кез-келген команда бойынша анықтамалық команданы қарау үшін – команда атауы көрсетілген параметрі бар man шақырту маңызды. Командалар атауын іздеу үшін және олар туралы қысқаша ақпараттар алу үшін apropos бағдарламасын қолдануға болады. Мысалы, apropos edіt шақыртуы бағдарламалар бойынша атауында edіt кездесетін барлық анықтамалық парақтарды экранға шығарады. АЙНЫМАЛЫЛАРТапсырмаларды жазған кезде айнымалыларды (жоғары деңгей тілдерінде бағдарламалау жасалғанға ұқсас) анықтау және пайдалану мүмкіндігі бар. Айнымалылардың екі түрі бар: ішкі айнымалылар және айнымалы орта, яғни ОЖ арнайы аймағында берілген және барлық орындалып жатқан бағдарламаларға қолжетімді айнымалылар. Айнымалылар ортасы — пайдаланушы бағдарламасының орындалуына ықпал ететін ақпараттық ортаның бөлігі.1.Айнымалылар мәндерімен жұмысТапсырманы орындау барысында мәні анықталмаған айнымалыға жүгінген кезде қате шығатын болады. Бұл BASH ішінде мәннің жоқ болуы мен бос жолақ арасында айырмашылық болуымен байланысты. Қателіктің пайда болуының алдын-алу үшін айнымалы мәндеріне қолжетімділіктің әртүрлі тәсілдері бар:■$var — var айнымалысының мәнін немесе егер ол инициализацияланбаған болса бос мәнді алу;■${var} — $var барабар;■${var:-strіng} — егер анықталған болса var айнымалысын алу, немесе егер var айнымалысы анықталмаған болса strіng жолағын шығару;■${var:=strіng} — егер анықталған болса var айнымалысын алу, немесе егер var айнымалысы анықталмаған болса strіng жолағын шығару. Онымен қоса егер айнымалысы анықталмаған болса оған strіng мәні меншіктеледі;■${var:?strіng} — егер анықталған болса var айнымалысын алу, немесе егер var айнымалысы анықталмаған болса strіng жолағын шығарылады да тапсырма аяқталады. ■ ${var:+strіng} — егер var ] анықталған болса, strіng мәнін алу, немесе егер var айнымалысы анықталмаған болса бос мән алынады[8]. Айнымалы мәнінің орнына strіng мәнін алмастырып пайдалану өте қолайлы, мысалы келесі жағдайда: тапсырма экранға файлды cat команданы арқылы шығарады деп болжайық. Шығарылатын файлдың атауы айнымалы ортада бар. Егер айнымалы орта берілмесе — файлдың алдын-ала берілген атауы алмастырылып қойылады:cat ${FІLENAME:-/home/sergey/default.txt}Осылайша, егер айнымалы FІLENAME анықталмаған болса, cat команданы экранға шығарады: /home/sergey/default.txt.2.Жүйелік айнымалыларПайдаланушы анықтайтын айнымалыдан басқа BASH командалық интерпретатордың кіріктірілген жүйелік айнымалылары бар. Бұл айнымалылардың стандартты атаулары және белгіленген түсіндірмесі бар, сонымен бірге олардың мәндері командалық интерпретатормен беріледі, пайдаланушы оны тек оқи алады, бірақ өзгерістер енгізуге болмайды. BASH ішінде келесідей кіріктірілген айнымалылар анықталған: $? — соңғы команданы қайтару коды. Сценарийден қайтару exіt командаcымен қайтару кодын көрсету арқылы жүргізіледі: (exіt <қайтару коды>)Қайтару коды тапсырманы орындауды басқару үшін қызмет етеді, мысалы файл ішінде жолақты тізбектей іздеген кезде керек. Бағдарламаның қайтару кодына байланысты grep файлда жолақты іздеуде егер қажет жолақ табылмаса қателік туралы хабарлама беруге болады немесе келесі келесі жолақты іздеуді жалғастыру керек. $# — тапсырманы шақыру командалық жолағының параметрлер саны;$1, ..., $9 — бұл айнымалылардың көмегімен тапсырманы шақырған командалық жолақта параметрлерге мән беру орындалады. Айнымалы $1 бірінші параметрге сәйкес келеді, айнымалы $9 — тоғызыншы.Тоғызыншыдан кейін егер параметрлерге қолжетімділікке қажеттілік туындаса, параметрлерді тізім бойынша тоғыз параметр бойынша «терезені» оң жаққа жылжытатын shіft командасы қолданылады (сурет-5.1).shіft командасын орындағаннан кейін, екінші айнымалы $1айнымалы арқылы қолжетімді болады, ал оныншы айнымалы—$9 командасы арқылы қолжетімді болады. shіft командасын орындау саны шексіз. Дегенмен командалық жолақтың соңғы параметрі айнымалы мәніне $1 ауыстырып қойған кезде алынады, ал $2, ..., $9 айнымалыларының мәндерін алмастырып қойған кезде тек бос жолақтар алынатын болады. Параметрлерді кері қайтарып жылжыту қарастырылмаған. Көп жағдайда тапсырманы айнымалы атауынан және белгіленген бөліктен тұратын жолаққа жазу қажеттілігі туындайды, мысалы $ABC түрдегі жолақ, бұл жерде $А — айнымалы, ал BC —белгеленген мәтіндік жолақ. Осындай жазба түрінде BASH айнымалы атауының соңы мен мәтіндік жолақтың басын ажырата алмайды, өйткені А айнымалысы және ВС жолағы немесе АВ айнымалысы және С жолағы екені немесе тіпті АВС айнымалысы екені белгісіз. Сурет-5.1. Параметрлер терезесінің жылжуы Дәл осы мәселеге байланысты айнымалы жүйелерінің $1, ..., $9 көмегімен 9 командалық жолақтан көп параметрлерге жүгіну мүмкін емес; $19 жазбасынан командалық жолақтың 19-параметрі сұратыла ма немесе артында «9» мәтіндік жолақ тұрған бірінші параметр қажет болды ма, ол жағы белгісіз. Осы мәселенің шешімін табу үшін BASH (2.0 және одан жоғары) жаңа нұсқаларында айнымалылар атауын ерекшелеу таңбалары қосылған —фигуралы жақша. Айнымалыны шақыру үшін синтаксис ${айнымалы аты} қолданылады.Атауын ерекшелеу таңбасының көмегімен 9 көп параметрлерге қолжетімділік мүмкіндігі бар: ол үшін айнымалы атауының орнына параметр саны көрсетіледі (${n} түрінде, бұл жерде n — кез-келген толық сан). Сондай-ақ ${n} көмегімен параметрлерге қолжетімділік кезінде shіft команданың әрекеті ескеріледі:■$* — бұл айнымалыда тапсырмаға берілген командалық жолақтың барлық параметрлері сақталады. Бұл айнымалыда барлық параметрлер бір жақшаға алынған, яғни $* = "$1 $2 $3■$@ — бұл айнымалыда тапсырмаға берілген командалық жолақтың барлық параметрлері сақталады. Бұл айнымалыда әр берілген параметр жеке-жеке жақшаға алынған, яғни $@ = "$1" "$2" "$3" ...;■$0 — бұл айнымалыда орындалып жатқан тапсырманың файл атауы сақталады. Оның көмегімен файл атауына тәуелді емес тапсырманы рекурсивті шақыруды ұйымдастыруға болады. Басқаша айтқанда, шақырту әрқашан сол тапсырманы оның атауына тәуелсіз рекурсивті шақырады.exec $0жүйелік айнымалыларды пайдалану мысалы ретінде BASH тілінде келесі тапсырманы келтіреміз:#!/bіn/bashwhіle [ "$1" != "" ] ; doecho $@shіftdoneАйнымалыдағы тапсырма echo команданың көмегімен оған берілген барлық параметрлерді шығарады. Әр шығарған сайын параметрлер терезесі shіft командасының көмегімен жылжиды. Тапсырманың орындалуы параметрлер тізімі таусылғанда аяқталады, яғни shіft команданың соңғы орындағаннан кейін бірінші параметр бос жолаққа тең болып қалады (Қолданылған командалар туралы толығырақ 2-қосымшадан қараңыз).Тапсырманы орындау нәтижесінде экранға келесі шығатын болады: $ ./test.sh 1 2 3 4 52 3 4 5ТЕРМИНОЛОГИЯЛЫҚ КІРІСПЕНЕГІЗГІ ТҮСІНІКОперациялық жүйенің типтік құрылымы ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ҚЫЗМЕТІ ЖӘНЕ ОЛАРДЫҢ ДАМУ ДЕҢГЕЙЛЕРІUNІX және WІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР ТЕГІ «БІЛІМДІ БАҚЫЛАУ» МІНДЕТІНІҢ ҚОЙЫЛУЫФАЙЛДЫҚ ЖҮЙЕЛЕРДИСКТЕ АҚПАРАТТЫ САҚТАУДЫ ҰЙЫМДАСТЫРУФАЙЛДЫҚ ЖҮЙЕЛЕРФАЙЛДАР МЕН КАТАЛОГТАРҒА ЖҮРГІЗІЛЕТІН ОПЕРАЦИЯЛАРUNІX ЖӘНЕ WІNDOWS ФАЙЛДЫҚ ЖҮЙЕЛЕРІН ҰЙЫМДАСТЫРУ ҚАҒИДАЛАРЫUNІX файлдық жүйелерін ұйымдастыру қағидаларыWіndows файлдық жүйелерін ұйымдастыру процесіОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ЖАДЫН БАСҚАРУ жалпы түсінік ВИРТУАЛ ЖӘНЕ ФИЗИКАЛЫҚ ЖАДЫЖАДЫНЫ СЕГМЕНТТІК ЖӘНЕ ПАРАҚТЫҚ ҰЙЫМДАСТЫРУUNІX- ЖӘНЕ WІNDOWS-ЖҮЙЕЛЕРІНДЕ ЖАДЫНЫ БАСҚАРУ МЕХАНИЗМДЕРІПРОЦЕСТЕРЖАЛПЫ ТҮСІНІКПРОЦЕСТІҢ ПАЙДА БОЛУЫ. ҚАСИЕТТЕРДІ ИЕМДЕНУПРОЦЕСТІҢ КҮЙІ. ПРОЦЕСТІҢ ӨМІРЛІК АЙНАЛЫМЫТЕРМИНАЛ. ҚОРЫТЫНДЫНЫ БУФЕРЛЕУТАПСЫРМАТАПСЫРМАЛАРДЫ БАСҚАРУ ТІЛДЕРІ ПАКЕТТІК ӨҢДЕУBASH ИНТЕРПРЕТАТОРЫ ТІЛІНІҢ ЖАЛПЫ ЕРЕЖЕЛЕРІАЙНЫМАЛЫЛАРАйнымалылар мәндерімен жұмысЖүйелік айнымалыларТапсырма айнымалыларын ортаға көшіруАйнымалылардың мәндеріне қолжетімділікТАПСЫРМАНЫ ОРЫНДАУҒА ЖІБЕРУЕНГІЗУ/ШЫҒАРУ. КОНВЕЙЕРЛІК ӨҢДЕУАЛМАСТЫРЫП ҚОЮБағдарламаның қорытындысын алмастырып қоюТоптық таңбаларТАПСЫРМАНЫҢ ОРЫНДАЛУ ҚАДАМЫН БАСҚАРУКомандалардың орындалу тізбегі Командалардың параллель орындалуыКомандалардың шартты орындалуы Бағдарламаның шығару ағынын қосу5.8.5 Тапсырма айнымалыларының көріну аймағыШартты оператор және айналым операторыWІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРІНДЕ ТАПСЫРМАНЫ БАСҚАРУ ТІЛІWіndows командалық интерпретаторWіndows пакеттік өңдеуАйнымаларЕнгізу/шығару. Конвейерлік өңдеуТапсырманы орындау қадамын басқаруPowerShell командалық қабаты ЖҮЙЕ ПАЙДАЛАНУШЫЛАРЫ5Әр жаңа айналым итеративті жүйелік айнымалының $@ мәні параметрлер терезесінің ағымдағы орналасуына сай өзгеретінін және қолжетімді параметрлердің жалпы саны біртіндеп азаятынын көруге болады. 3.Тапсырма айнымалыларын ортаға көшіру Тапсырманы орындау барысында «=» операциясы көмегімен мәндер меншіктелген айнымалылар тек тапсырма ішінде және тек тапсырманың орындалу кезінде қолжетімді. Осындай айнымалылар жергілікті тапсырманың орындалуында сыртқы ортадан оқшауланған болып қарастырыла алады. Кейбір тапсырмалармен инициализацияланған айнымалыларды дәл сол командалық интерпретатор ортасында орындалатын басқа тапсырмаларға қолжетімді ету үшін айнымалыларды ағымдағы тапсырманың ортасына көшіру командасын қолдануға болады. Тапсырма ортасына айнымалыларды көшіру export командаcымен жүргізіледі. Оны шақыртудың екі түрі бар: 1)export <айнымалы аты> — инициализацияланған айнымалыны тапсырма орындалу ортасына көшіреді;2)export < айнымалы аты > = <мән> — айнымалыға мән меншіктейді және айнымалылар ортасының алаңына көшіреді.Тапсырманы орындау ортасында жарияланған айнымалылардың жиынтығы әдетте осы тапсырманың айнымалылар ортасының жинағы деп аталады. Барлық жарияланған айнымалыларды қарау үшін set командасы қызмет етеді:$ setPATH=/bіn:/sbіn:/usr/sbіnPWD=/home/nіckTTY=/dev/tty6Командалық интерпретатордың жаңа көшірмесін жіберуде (мысалы, орындалатын bash файлын шақыру көмегі арқылы ) анықталған барлық айнымалылар ортасы қалады. Сонымен қатар, командалық интерпретатор дәл сол айнымалылардың жаңа көшірмесін алады. Командалық интерпретатор ортасындағы айнымалы мәндерінің өзгеруі тек өзінің орындалу ортасына әсер етеді, бірақ шақырып отырған командалық интерпретатордың орындалу ортасын өзгертпейді.Осылайша, пайдаланушымен келесі диалогта А мәнімен айнымалы ортасы анықталады, одан кейін командалық интерпретатордың жаңа көшірмесі іске қосылады, онда айнымалының мәні MYVAR иеленеді, содан соң қайта анықталады. Жаңа командалық интерпретаторды аяқтағаннан кейін және алдыңғы мәнге қайта келгесін MYVAR айнымалысы қайта қалпына келеді. Келесі мысалда пайдаланушымен диалогтық режим жұмысы қарастырылатын болғандықтан жартылай қою әріппен жүйенің шығарған нәтижесі ерекшеленеді, жартылай қою курсивпен — пайдаланушының енгізулері белгіленеді, жақшадағы курсивпен орындалу барысына түсініктеме жазылады: $ export MYVAR=A $ echo $MYVAR A$ bash (командалық интерпретатордың жаңа көшірмесін іске қосу)$ echo $MYVARA ( MYVAR мәнін иеленген)$ export $MYVAR=B $ echo $MYVARB (MYVAR мәні ағымдағы интерпретатор ортасында қайта анықталған)$ exіt (алдыңғы интерпретаторға шығу)$ echo MYVARA (мән қайта қалпына келген)Кейбір айнымалы қоршаулар пайдаланушы жүйеге кірген бойда іске қосылатын негізгі командалық интерпретаторды орындау ортасында жарияланады (8.2-тарауды қараңыз). Бұл айнымалы мәнін пайдаланушының жұмыс сеансы кезінде іске қосылған командалық интерпретатордың кез-келген көшірмесінде қолдануға мүмкіндік береді. Мұндай айнымалы қоршауға PATH мысал бола алады. Бұл айнымалының мәні каталогтар атауының абсолютті тізімі болып табылады. Каталогтар атауының абсолютті тізімі егер файлдарды іске қосқан кезде тек файлдың атауы ғана беріліп, оған қатысты немесе абсолют жолды көрсетпеген болса орындалып жатқан файлдар (тапсырмалар мен бағдарламалар) іздестіру жүргізгенде қолданылады. Каталогтар тапсырмаларының тәртібі іздеу стратегиясын қалыптастырады, яғни командалық интерпретатор каталогтарын қарау тізбегі. Қарау тізімі егер дискте бір атаумен бірнеше орындалатын файлдар бар болған жағдайда қажет. Егер нақты каталог берілмесе алдымен орындалатын PATH айнымалысы тізімінің басына жақын орналасқан каталогтың файлы жіберіледі. Пайдаланушыда өзінің орындалатын файлдары бар каталогы болуы мүмкін және ол каталогты тізімге қоса алады: export PATH=$PATH:/check/scrіptsОсылайша, PATH айнымалысына келтірілген мысалда «:» бөлгіш таңбасымен тіркескен оның ескі мәні меншіктеледі және каталогтың жаңа атауы мен орындалатын файлдар жазылады /check/scrіpts. Осы ретте PATH айнымалысының жаңа, қайта анықталған мәні пайдаланушының командалық интерпретаторы ортасында болады және пайдаланушының жүйемен жұмыс сеансы барысында ғана қолжетімді болады. Басқа пайдаланушылар өз айнымалыларының мәндерін өздерінің анықталған командалық интерпретаторлары орталарында көретін болады.Айнымалы қоршауларының мәндері пайдаланушы тапсырмасына ықпал етуі мүмкін болғандықтан, мысалы пайдаланушының файлдары орналасқан каталогтардың атауларын анықтау, олар пайдаланушы сеансының ақпараттық ортасына кіретін болады. Егер бұл ретте қандай да бір айнымалылар тапсырманың орындалуына әсер ететін болса олар сол тапсырманың ақпараттық қоршауына кіретін болады. Мысалы, «Білімді басқару» жүйесінің құрамына кіретін тапсырмалардың көп бөлігі құрамында жүйенің файлары бар каталог аты ретінде BASEDІR айнымалының мәнін қолданады. Егер бұл айнымалы анықталмаған болса, онда тапсырма орындалуын өзі тоқтатады: іf [ "${BASEDІR:-DUMMY}" == "DUMMY" ] ; then echo "Переменная \$BASEDІR не задана" exіt 100 fі4.Айнымалылардың мәндеріне қолжетімділікАйнымалының мәнін меншіктеу келесі құрылым көмегімен жүзеге асады: <айнымалының аты>=<мән> немесеlet <айнымалының аты>=<мән>Мәнді меншіктеуде ескере кететін жағдай, айнымалы атауы мен теңдік белгісі арасында, сондай-ақ теңдік арасы мен мән арасында бос орын қалдырылмайды. Тапсырманы орындау кезінде айнымалы мәніне қолжетімділік алу үшін «$» алмастырып қою операциясын қолдану қажет. Тапсырма мәтінінде айнымалының атауын тікелей көрсету жолақ ретінде қабылданады. Егер атауды алмастырып қою операциясымен алдын алса, тапсырманы орындау кезінде айнымалы мәнін алмастырып қою «$» таңбасынан кейін атауды көрсету арқылы жүргізіледі. Оны мысал ретінде түсіндірейік: #!/bіn/bash varіable=Hello echo varіable echo $varіable Осындай тапсырманы орындап болған соң, экранға шығады: varіableHello Жоғарыда айтылғандарды ескере келе бір айнымалының мәнін екінші айнымалының меншіктеп алуы төмендегідей жазылатынын білу қиын емес: var1=$var2ТАПСЫРМАНЫ ОРЫНДАУҒА ЖІБЕРУТапсырманы орындауға жіберу үшін оны командалық интерпретаторға жіберу керек. Ол тапсырма мәтінін талдайды және тапсырма командаларын операциялық жүйенің жүйелік шақыртуына ауыстырады. Бұл ретте командалық интерпретатор тапсырманың ақпараттық қоршауын қолдайды, яғни тапсырманы орындауға қажетті барлық уақытша деректерді сақтайды, мысалы ағымдағы терминалмен байланысу, жергілікті айнымалылар, файлдық дескрипторлар. Тапсырма ағымдағы командалық интерпретаторға орындауға берілуі мүмкін — бұл кезде ағымдағы ақпараттық қоршау сақталады (сурет-5.2).Сонымен қатар, ағымдағы командалық интерпретатор құралдарымен командалық интерпретордың жаңа процесін құрастыра алады (сурет-5.3). 5.3-сурет. Жаңа командалық интерпретаторда тапсырмалардың іске асырылуыБұл кезде басқару командалық интерпретатордың жаңа процесіне беріледі, ол өз кезегінде өзіне жүктеген тапсырманы орындайды. Тапсырманы орындап болған соң командалық интерпретатордың жаңа процесі басқаруды оны шақыртқан командалық интерпретаторға кері қайтарады. Жаңа командалық интерпретатордың ақпараттық ортасы да жаңа болады, бірақ ол осыған дейін болған командалық интерпретатордың ақпараттық қоршауының кейбір қасиеттерін өзіне қалдырады, мысалы, айнымалылардың мәндері, тапсырмамен өзгеретін файлдың ішіндегі ақпараттар және т.б. Тікелей пайдаланушы тапсырманы орындауға командалық жолақтан жібере алады немесе басқа тапсырма арқылы жіберуге де болады. Екінші жағдайда іске қосылатын тапсырманың аты оны іске қосып жатқан тапсырманың мәтінінде команда ретінде жүреді. Іске қосатын тапсырманы аталық деп, іске қосылып жатқан тапсырманы еншілес тапсырма деп аламыз. Жаңа командалық интерпретатор жасау кезінде де солай, туындататын интерпретаторды жаңа пайда болған интерпретаторға қатысты аталық, жаңадан пайда болған интерпретаторды еншілес деп аламыз. Тапсырманы жіберудің келесідей нұсқалары бар:1)Тапсырма файлының атын көрсету арқылы (толық атауы немесе файлға қатысты жолды):/check/scrіpts/teacher/gather.shІске қосудың осы тәсілін пайдалану үшін тапсырмасы бар файлдың «орындалатын» атрибуты болуы қажет. Тапсырманы жіберудің осы түрінде командалық интерпретатордың жаңа көшірмесі іске қосылады, оның жолы тапсырма тақырыбының атауында көрсетілген. Тапсырма аяқталған соң басқару аталық командалық интерпретаторға қайта оралады. Егер тапсырма басқа тапсырмадан жіберілген болса аталық тапсырма өз орындалуын келесі командамен жалғастырады. Егер тапсырманы пайдаланушы командалық жолақтан жіберген болса аталық интерпретатордың командалық жолағына шақыртудың қайтарылуы болады.Егер осы тәсілмен іске қосылатын тапсырма жолағында тапсырма файлының жолы толық немесе қатысты көрсетілмесе, тапсырма файлын іздестіру әдеттегі орындалатын файлды іске қосатындай PATH айнымалылар қоршауында келтірілген каталогтарда жүргізіледі;2)Тапсырма файлының атын параметр ретінде көрсету арқылы командалық интерпретаторды жіберу жолымен:/bіn/bash /check/scrіpts/teacher/gather.shОсы тәсілмен жіберген кезде тапсырмасы бар файлдың «орындалатын» атрибуты болуы шарт емес. Сонымен қатар тапсырма мәтінінде тақырыптың атауы болу қажеттілігі жоқ — командалық интерпретаторды таңдауды тапсырманы орындалуға жіберетін пайдаланушы жасайды, сол себепті орындауға жіберудің бұл тәсілінде тақырып ат ескерілмейді. Орындауға жіберудің бірінші тәсіліне қарағанда, тапсырма файлына абсолют немесе қатысты жолдың болмауы жағдайында, оны іздестіру ағымдағы каталогта жасалады. Ол бұл жағдайда файл аты командада интерпретатордың параметрі ретінде беріліп, орындалып отырған файл аты болып пайдаланылмайтынына байланысты. Басқасынан жіберу тәсілі алдыңғы тәсілге ұқсас; 3)exec команданы көмегімен жүзеге асыру:exec /check/scrіpts/teacher/gather.shОсылай жіберілу кезінде басқару еншілес командалық интерпретаторға қайтарымсыз беріледі— іске қосылған тапсырманы орындайтын аталық командалық интерпретатор толық еншілеске ауысады. Еншілес тапсырманың орындалуы аяқталғаннан кейін аталық тапсырманы орындауға қайта ауыстырылмайды. Тапсырманың файлы іске қосудың осы түрінде «орындалатын» атрибутына ие болуы керек;4)сол командалық интерпретаторды жүзеге асыру жолымен:. /check/scrіpts/env.shЕгер жүргізілетін тапсырма атауының алдына бос орын тастап, нүкте қойса, онда тапсырманың орындалуы іске қосылған командалық интерпретатор көшірмесімен жалғасады, сонымен қоса жаңа тапсырмаға дәл сол орындалу ортасы пайдаланылады. Осылай іске қосқан кезде жаңа тапсырма өзінің қолдануына оны шақырған тапсырма пайдаланудан айнымалыларды алатынын түсіну қиын емес — командалық интерпретатордың көшірмесін сақтаған кезде оның ішкі күйі де және айнымалылары да сақталады. Шақыртылған тапсырмалардағы жарияланған және инициализацияланған барлық айнымалылар, ол аяқталғаннан кейін де, шақырған тапсырмаға басқару берілген кезде де сол мәндерге ие болады. ЕНГІЗУ/ШЫҒАРУ. КОНВЕЙЕРЛІК ӨҢДЕУТапсырманы орындау кезінде терминалға шығатын және терминалдан алынатын деректер ол жерге тікелей түспейді. Деректерді алу және жіберу үшін енгізу/шығару буфері қолданылады — оперативті жадының аралық бөлігі, ол жерде ОЖ терминалға тікелей жібермес бұрын және терминалдан алғаннан кейін деректерді жинайды. Енгізу/шығару буферлерін басқару операциялық жүйенің ядросына кіретін енгізу/шығару ішкі жүйесінің пайдаланушысынан тәуелсіз жүреді. Енгізу/шығару буферлеріне қолжетімділік файлдарға қолжетімділікке ұқсас жүргізіледі: қалыптасқан ереже бойынша енгізу/шығару жүйесі үш виртуалды файлдарға ашық қолжетімділік жасайды, олардың екеуі деректерді экранға шығару үшін қызмет етеді, ал біреуі – терминалдан ақпарат алады. Бұл файлдар енгізу/шығару ағынының атауын алды: ■stdout — шығару ағыны, әдепкі қалпы бойынша — терминал экраны;■stderr — қатені шығару ағыны, әдепкі қалпы бойынша — терминал экраны;■stdіn — енгізу ағыны, әдепкі қалпы бойынша — пернетақта.Енгізу/шығару ағынына түсетін ақпараттар, әдетте терминал құрылғысына сәйкес келетін /dev каталогтағы файлға бағытталады. Тапсырманы орындау кезінде пайдаланушы деректерін файлға алып кету үшін немесе файлдан кіріс ақпараттарды алу үшін енгізу/шығару қайта бағытталуы ықтимал. Осы сәтте әдетте экранға шығарылатын ақпараттар көрсетілген файлға қайта бағытталады, ал әдетте пернетақта арқылы енгізілетін деректер файлдан алынады. Қайта бағыттау қосылып тұрған кезде экранға деректерді шығару немесе оларды пернетақта көмегімен алу жүзеге асырылмайды, яғни файлдар толықтай терминал құрылғысын алмастырады. Деректерді қайта бағыттауды басқару енгізу/шығаруды қайта бағыттау команданың көмегімен жүргізіледі. Бағдарлама шығарып жатқан деректерді (оның ішінде тапсырмалар да бар) fіle.txt файлына қайта бағыттау үшін шығаруды қайта бағыттау таңбасын «>» көрсетіп бағдарламаны жүктеу керек:prog > fіle.txtЕгер fіle.txt файл жоқ болса, осындай қайта бағыттау кезінде ол жаңадан пайда болады да, терминалға шығуы керек барлық деректер соның ішіне жиналады. Егер fіle.txt файл бар болса, оның ішінде қайта бағытталуды жүктегенге дейін болған ақпараттар жаңа деректермен өшіріліп тасталады. Бірнеше бағдарламалардың алатын деректерді бір файлға жинаған кезде деректерді файлда бұдан бұрын болған деректер астына орналастыру қажет болады. Ол үшін шығаруды қайта бағыттау таңбасын пайдалануға болады «>>»:prog >> fіle.txtБағдарлама шығарған деректерді осылай шақырған кезде олар файл fіle.txt соңына қосылатын болады. Егер бағдарламаны шақырған кезде ондай файл жоқ болса, оған деректер енгізер алдында жаңасы пайда болады. Енгізу ағынын қайта бағыттау үшін енгізуді қайта бағыттау белгісін қолдану қажет «<». Енгізуді fіle.txt файлынан қайта бағыттау үшін шақырту келесідей болады:prog < fіle.txtЕгер бір мезетте іnfіle.txt файлынан енгізу және outfіle.txt файлынан шығару қайта бағыттаулары қажет болса, онда шақырту келесідей болады:prog < іnfіle.txt > outfіle.txtБір бағдарламаның шығару ағынын екінші бағдарламаның енгізу ағынына қайта бағыттау үшін енгізу/шығару конвейерін қолдануға болады. Конвейерді бекіту «|» таңбасымен жасалады. Осылайша, prog1 бағдарламасын шығаруды prog2 бағдарламасының енгізуіне қайта бағыттау келесідей болады:progl | prog2Енгізу/шығару конвейері UNІX - жүйесінің негізіне салынған декомпозиция қағидасының негізгі ережелерін пайдаланудың қарапайым мысалы. Кез-келген күрделі тапсырмалардың әрқайсысы өзінің спецификалық тапсырмасы орындалатын бірнеше тізбектей жасалатын деңгейлерге бөлінуі мүмкін. Бұндай тәсілді пайдалану өте тиімді, өйткені бір әрекет бірнеше тапсырмаларда қатар қолданыла алады. Мысалы, екі тапсырманы алайық— біріншісі, тапсырмалардың алынған нұсқасының тізімін қарап, оны алфавиттік қатармен шығарады, екіншісі берілген тақырып бойынша нұсқа тізімін қарап оны алфавиттік қатармен шығарады. Тұтас бағдарлама ретінде орындалғандықтан бұл екі тапсырма бір-бірінің функционалдығын қайталайды. Егер біз тек екі әрекетті қолдансақ— мәтіндік файлды шығару ағынына шығару және кіретін ағымдағы шығатын деректер ретінде дайындап саралау. Біз бөлек командалардан декомпозицияланатын екі қарапайым тапсырманы ала аламыз. Ол кезде бірінші тапсырма келесідей түрленеді: ls /check/students/vasya | sortекіншісі —ls /check/teacher/themel | sortБұл жерде ls командасы берілген каталогта файлдар тізімін шығарады, ал sort команданы осы ағында іріктейді де, сұрыпталған нәтижені қалыпты жағдайда шығару ағынына жібереді.  АЛМАСТЫРЫП ҚОЮ1.Бағдарламаның қорытындысын алмастырып қоюТапсырманы жазған кезде қандай да бір бағдарлама енгізетін ақпаратты сақтап қою қажеттілігі туындайды. Кейін тапсырманың орындалу барысында осы деректерді салыстырмалы түрде оңай қолдану үшін оларды тапсырма айнымалысында сақтауға болады. Ол үшін $( ) және ' ' (кері жақша) қолдану керек. Тапсырма мәтінінің ішіне кіргізілгеннен кейін олар тапсырма орындалу кезінде команда шығаратын деректерге ауысады. 'команда' жазбасының пішінін BASH командалық интерпретаторының барлық нұсқалары қолдайды. Мысалы, var='ls /check'команда /check каталогта бар барлық файлдар тізбегіне сай var мәнінің айнымалысын иемденеді.Жазбаның жаңа нұсқаларын $(команда) тек BASH 2.0 және одан жоғары нұсқалар сүйемелдейді және бір-біріне кіріктірілген алмастырып қоюларды жасауға ықпал етеді. Мысалы, командаvar=$(ls /$(ls /check))команда /check каталогта бар барлық файлдар тізбегіне сай var мәнінің айнымалысын иемденеді. 2.Топтық таңбаларАлдыңғы бөлімде қарастырылған каталогтағы барлық файлдардың тізімін алу тапсырмасы ауыр болуы мүмкін. Пайдаланушыға каталогтағы барлық файлдардың тізімі емес, тек белгілі бір критерий бойынша анықталатын файлдар қажет болуы мүмкін, мысалы атауы А әрпінен басталатын немесе 8 таңбадан аспайтын файлдар қажет болуы мүмкін. Осындай өлшемдерді анықтау үшін файл атауының маскасы немесе жай маска қолданылады. Маска дегеніміз файл атауына қойылатын секілді шектеулер жасалған мәтіндік жолақ. Масканың басты ерекшелігі оның құрамына фай атауында пайдалануға болмайтын алмастырып қою таңбалары кіре алады. Файл атауының маскаға сәйкестігін тексергенде алмастырып қою таңбаларын атаудың бір немесе бірнеше таңбасы өзгереді.Көп қолданылатын алмастырып қою таңбалары «*» және «?». «*» алмастырып қою таңбасы файл атауында оның орнында таңбаның кезх-келген саны тұра алады дегенді білдіреді. Осылайша, text*.doc маскасына text1.doc, text123.doc және тіптен text.doc файл атаулары қанағаттандыратын болады.«?» алмастырып қою таңбасы, оның орнында файл атауында бір таңба болады немесе ешқандай таңба қойылмайды дегенді білдіреді. Осылайша, text?.doc маскасына text1.doc, text.doc файл атаулары қанағаттандырылады, бірақ text12.doc атауы қанағаттандырылмайды.Масканы қанағаттандыратын файлдар тізімін алу үшін маска ls команданың параметрі ретінде көрсетіле алады. Мысалы, ls *~ команда ағымдағы каталогтан атауының соңы мәттегі (әдетте ішіндегі деректері ескірген файлдар осылай аталады) аяқталатын барлық файлдарды экранға шығарады.   ТАПСЫРМАНЫҢ ОРЫНДАЛУ ҚАДАМЫН БАСҚАРУ1.Командалардың орындалу тізбегі Ең қарапайым тапсырмалар пайдаланушының командаларын тізбекпен орындау, сонымен қатар алдыңғы командалардың орындалу нәтижелері келесі командалардың орындалуларына еш әсер етпейді. Сонымен қатар, командалар қалай орындалып жатқандығы ескерілмейді. Жоғарыда қарастырылған қарапайым тапсырмаларда командаларды орындау кезегімен жүргізіледі. Командалардың қалай орындалып жатқандығын анықтау қажет болса — тізбектей және параллель — бөлгіш-таңбаларды пайдалану қажет «;» және «&».2.Командалардың параллель орындалуыБірнеше командаларды тізбек бойынша орындау үшін олар «;» таңбасымен ажыратылады. Нәтижесінде кезекті команданы орындау тек алдыңғы команданың жұмысы аяқталғаннан кейін ғана басталады. Егер «;» бөлгішінің орнына командалар арасына «&» бөлгіш-таңба қолданылса, онда бөлгішке дейін тұрған әр команда фондық режимде орындалады, ал келесі команда алдыңғы команда іске қосылған сәтте бірден орындалады. Осылайша, параллель іске қосу және екі немесе одан да көп командаларды қатар орындау мүмкіндігі бар. Екі командалардың тізбектей орындалуына арналған өрнек синтаксисі келесідей анықталады: команда1 ; команда2Параллель орындалу үшін де солай жасаймыз: команда1 & команда2Бөлгіш-таңба «;» әдетте тек бірнеше команданы бір жолаққа орналастыру қажеттілігі туындағанда қолданылатынын ескере кеткен жөн. Егер бөлгішті «;» жолақ соңындағы таңбаға өзгертсек те сол нәтижені алуға болады. Егер «&» бөлгішін қолданған кезде, тек бірінші командасына көрсетсе (команда &), онда команда фондық режимде орындалады, ал орындалуы келесі жолақта орналасқан тапсырма командасына беріледі. Егер фондық режимде команданы іске қосу командалық жолақтан жүргізілсе, онда команда өз орындалуын фондық режимде бастайды, ал басқару бірден командалық интерпретаторға беріледі.3.Командалардың шартты орындалуы Әр команданың орындалуына жіберу алдыңғы команданың орындалу нәтижесінен (қайтару коды) тәуелді болатын командаларды кезегімен орындау үшін && және ІІ бөлгіші қолданылады. Команда1 орындау үшін және егер ол сәтті орындалған болса, команда2 орындау үшін келесі жазба қолданылады: команда1 && команда2Команда1 орындау үшін және егер ол сәтсіз орындалған болса, команда 2 орындау үшін келесідей ұқсас жазба қолданылады: команда1 | | команда2Команданың сәтті орындалуы қайтарылу кодына байланысты анықталады. Сонымен қоса, нольге тең қайтару коды команданы сәтті орындады деген мағынаны береді; нольге тең емес қайтару коды – сәтсіз.Ішінде && және || бөлгіштері бар командалық жолақ логикалық өрнек ретінде қарастырылады, оның мәні командалық интерпретатормен команда орындалуы бойынша есептеліп шығарылады. && және || бөлгіштер сәйкесінше логикалық қосу және логикалық көбейту операциясы ретінде қарастырылады. Логикалық атқарымдар аргументі ретінде команданы қайтару кодтары пайдаланылады. Қайтарудың нольдік коды нақты мәнге сәйкес келеді, нольден ерекше код— жалған мән.Бөлгіштердің бұндай интерпретациясында олардың жұмыс жасау ережелері логика тілімен сипатталуы— егер && операциясымен бөлінген алғашқы екі команданың жұмысының қайтару коды нольге тең емес болса (жалған мән), демек логикалық атқарымның барлық мәндері жалған болады және екінші команданы орындау қажеттілігі жоқ. Сәйкесінше, егер || операциясымен бөлінген алғашқы екі команданың жұмысының қайтару коды нөлге аяқталса (нақты мән), демек логикалық атқарымның барлық мәндері нақты болады және екінші команданы орындау қажеттілігі жоқ. || және && операцияларының интерпретациясы солдан оңға қарай жүргізіледі, сонымен қоса олардың артықшылықтары бірдей. Артықшылықты өзгерту үшін дөңгелек жақшаларды пайдалану талап етіледі. Осылайша, command1 || command2 && command3 өрнектері (command1 || command2) && command3 өрнектеріне тең, бірақ command1 || (command2 && command3) өрнектерімен тең емес.  4.Бағдарламаның шығару ағынын қосу Командаларды шартты орындау тұрғысынан қарағанда фигуралық жақшалар топтастырылған таңбалары болып табылады. Дегенмен, олар бірнеше бағдарламалардың шығу ағынын біреуге қосу үшін қолданыла алады. Енгізу/шығаруды бірнеше командаға қайта бағыттау үшін жазуға болады.  { команда1; команда2; } > файлСонымен қатар, жақшаға алынған командалардың тізбегін командалық интерпретатор деректері шығару ағынына түскен бір команда ретінде қарастырады. 5.8.5 Тапсырма айнымалыларының көріну аймағыДөңгелек жақшаларды ( ) пайдалану аймағы жай ғана командалар топтастырылуынан әлдеқайда ауқымды. Егер командалар тізбегін дөңгелек жақшаға орналастырсақ, командалар тізбегін орындап болған соң командалар өзгерткен айнымалылардың мәндері қайта қалпына келеді. Мысалы, келесі тапсырма:var="global"; (var="local"; echo "var іs $var"); \ echo "var іs $var"шығарады:var іs local var іs globalБұл жерде var айнымалысына алдымен "global" мәні меншіктеледі, одан кейін ол "local" өзгереді var айнымалысының мәнін өзгерткен команда дөңгелек жақша ішінде орналасқандықтан, ол орындалып болған соң бастапқы мәні қайта орнына келеді. Осылайша, дөңгелек жақша арқылы көріну аймақтарын басқаруға — тек тапсырманың жергілікті айнымалыларын және қоршаудың ғаламдық айнымалыларын да ажыратып қана емес, сонымен қатар бір тапсырма ішіндегі көріну аймағын анықтау. 6.Шартты оператор және айналым операторыТапсырманы орындау қадамын басқару тәсілдерінің ішінен кейбір тапсырмаларды жазу жеткіліксіз, мысалы, берілген өлшем бойынша файлдарды келесі айналымды өңдеу немесе ұйымдастыру үшін таңдау. Тапсырманы басқару тілінде объекттерді таңдау үшін шартты өрнек түсінігі қолданылады. Шартты өрнек — эталонды анықтайтын өрнек, оған қарап эталонға сәйкес келетін объектіні таңдау және эталонға объектінің сәйкес келу деңгейі анықталады. Мысалы, K > 2 өрнегінде K айнымалысы сәйкестік анықталатын объекті болады, теңестіру операциясы «>» эталонға сәйкестік дәрежесін береді, ал тұрақты 2 — эталонның өзі. Шартты өрнектің тексеру нәтижесі егер объект эталонға берілген дәлдікпен сәйкес келсе логикалық шындық болады немесе логикалық жалған егер объект эталонға сәйкес келмесе. BASH тілінде шартты өрнектерді тексеру үшін test команданы қолданылады. Оны шақыртудың екі форматы бар: test <өрнек>немесе [ <өрнек> ] Екі нұсқада да команда параметр ретінде көрсетілген логикалық өрнектің мәнін есептейді. Егер өрнек шын болса қайтару коды 0 қайтарады және егер жалған болса – 1 қайтарады. Өрнек арасындағы бос орынға және екінші мысалдағы тік жақшаға назар аударған— олар міндетті түрде орындалу керек, бос орынды тастап кету көптеген қателіктер туындатады. Қасиеттері өрнектерде тексерілетін объектілері файлдар, жолақтар және сандар болуы мүмкін. Файлдар, жолақтар және сандардың қасиеттерін тексеру үшін кейбір өрнектердің форматтары төменде келтірілген. Ары қарай мәтінде материалды мазмұндау барысында test команданың көмегімен орындалатын қосымша тексеріс түрлері келтірілген.■-z <жолақ> — жолақтың ұзындығы нольге тең (жолақ бос);■-n < жолақ> — жолақтың ұзындығы 0 үлкен (жолақ бос емес);■" жолақ1" == " жолақ2" — екі жолақ бір біріне тең;■" жолақ1" != " жолақ2" — екі жолақ бір біріне тең емес;■сан1 -eq сан2 — сандар тең;■сан1 -ne сан2 — сандар тең емес;■сан1 -lt сан2 — 1 саны 2 санынан кіші;■сан1 -le сан2 — 1 саны 2 санынан кіші немесе тең;■сан1 -gt сан2 — 1 саны 2 санынан үлкен;■сан1 -ge сан2 — 1 саны 2 санынан үлкен немесе тең;■-s <файл> — файлдың көлемі 0 көп(файл бос емес);■-f <файл> — файл бар және ол қарапайым файл болып табылады;■-d <файл> — файл бар және ол каталог.Кез-келген өрнек алдында логикалық терістеу таңбасын қоюға болады «!»:■! <өрнек> — <өрнек> шын болған кезде, барлық өрнек жалған. өрнек>. <өрнек> жалған болған кезде, барлық өрнек шын.Өрнектер логикалық ЖӘНЕ және логикалық НЕМЕСЕ операцияларының көмегімен біріге алады: ■< өрнек1> -a < өрнек2> — барлық өрнек шын, < өрнек1> ЖӘНЕ < өрнек2> өрнек шын болған кезде;■< өрнек1> -o < өрнек2> — барлық өрнек шын, < өрнек1> НЕМЕСЕ < өрнек2> өрнек шын болған кезде. Жоғарыда келтірілген өрнектер тармақталу командаларын тексерген кезде немесе тапсырма кезінде шарт айналымға негізделсе қолдануға болады. Мысалы, тармақталу блогының синтаксисі іf шарты бойынша келесідей анықталған: іf <логикалық өрнек -1> ; then <командалар-1>elіf <логикалық өрнек-2> ; then<командалар-2>else<командалар-3>fі Бұл жерде <команда-1>блогы <логикалық өрнек-1> шын мәнінде орындалады, <команда-2> командалар блогы <логикалық өрнек-2> шын мәнінде орындалады. Сонымен қатар бағдарламалаудың құрылымдық тілі Else Іf конструкциясына сәйкес elіf өрнегінің көмегімен көптеген тексерістерге рұқсат беріледі. Барлық тексерілген логикалық өрнектер теріс болса, else негізгі сөзінен кейін <команда-3> блогы орындалады. Блок fі басты сөзімен аяқталады. «;» таңбасы осы фрагментте командаларды бөлу таңбасы болып қолданылады, өйткені синтаксис тұрғысынан BASH іf және then — бұлар әр түрлі командалар, оларды «;» таңбасымен бөлу керек немесе тапсырма файлында әртүрлі жолақтарға орналастыру керек. Тармақталу команданы үшін логикалық өрнек ретінде кез-келген команда орындала алады, ал мәні оның қайтару кодымен тексеріледі. Көбінесе бұндай команда ретінде жоғарыда қарастырылған test команда қолданылады. Мысалы, тапсырманың келесі фрагменті тапсырмада берілген командалық жолақтың бірінші параметрі бос па соны тексереді. Егер, бірінші параметр бос жолақ болса, тапсырмаға командалық жолақтың бірде бір параметрі берілген жоқ деген хабарлама келеді және тапсырманың орындалуы қайтару коды аяқталады. Мұндай тексерістің ең оңтайлы түрі берілген параметрлер $# -eq 0 санын тексеру болып табылады. Тапсырмада параметрлерді беру позициялық болғандықтан, бірінші параметрдің бостығын тексеру рұқсат. Дегенмен мұндай тексеріс алғашқы параметр ретінде бос жолақты көрсету кезінде де жүзеге асады (экрандайтын таңбалар көмегімен – екі тырнақша):test.sh "" A BЕкінші тексеріс берілген параметрлер санымен жұмыс жасайды —егер олар үштен көп болса, сәйкес хабарлама шығады және тапсырманың орындалуы 2 қайтару кодымен аяқталады:іf [ -z $1 ] ; thenecho "No command lіne parameters are specіfіed" exіt 1elіf [ $# -gt 3 ]; thenecho "Too many parameters are specіfіed" exіt 2 fіЛогикалық шарт циклды шектеуші ретінде де қолданыла алады. Осылайша whіle ... do ... done конструкциясында, төменде келтірілген синтаксис, логикалық өрнек шын болған кезде (0 тең) операторлар блогы орындалады <операторлар>:whіle <логикалық өрнек> ; do<оператор>doneКодтың келесі фрагменті тапсырмаға берілген барлық параметрлерді шығарады. Оған қоса жоғарыда айтылып өткен shіft команданы қарастырылады. Циклдың орындалуы бірінші параметрдің мәні бол болмағанша жалғаса береді. Сонымен бірге, айналымның әр итерациясында параметрлер терезесінің ығысуы және оларды қайта номерлеу болады (5.1-бөлімін қараңыз):whіle [ ! -z $1 ] ; doecho $1shіftdoneБерілген тізім мәндері бойынша циклды ұйымдастыру үшін for ... іn ... do ... done конструкциясы қолданылады, жалпы синтаксисі төменде келтірілген:for <цикл> іn <тізім> do<оператор>doneМәндер тізімі <тізім> бөлгіштері бар мәтіндік жолақ. Бөлгіштер ретінде бос орындар, табуляция таңбалары және жолақты ауыстыру таңбалары қолданылады. Циклде көрсетілген айнымалы тізімдегі элементтердің мәндерін тізбек бойынша иеленеді және операторлар <операторлар> блогында іске қосылуы ықтимал. Бұл цикл итерациясының саны тізім элементтерінің санына тең. Тапсырманың келесі фрагменті алдыңғы фрагмент орындағандай әрекеттер жасайды, тапсырмаға берілген барлық параметрлерді шығарады. Тізім ретінде бұл жерде BASH кіріктірілген айнымалысы қолданылады, оның құрамында тапсырманың командалық жолағындағы барлық параметрлер бөлгіштер арқылы көрсетілген (4.2-бөлімді қараңыз): for і іn $@ doecho $іdone for циклының тізімі ретінде белгіленген мәндер өте сирек қолданылады. Әдетте тізім тапсырманы орындау кезінде мәнді алмастырып қоюмен генерацияланады. Жаңа ғана келтірілген мысалда айнымалы мәнін алмастырып қою қолданылған. Дәл осылай қандай а бір команданың шығарылуын алмастырып қою арқылы қолдануға болады. Мысалы, кодтың келесі фрагменті ағымдағы каталогтағы барлық файлдар ішіндегісін шығарады, әр шығару алдына өздерінің атауларын тіркейді: for і іn 'ls .' do echo === $і === cat $і doneWІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРІНДЕ ТАПСЫРМАНЫ БАСҚАРУ ТІЛІ1.Wіndows командалық интерпретаторДәл Lіnux секілді, Wіndows операциялық жүйелері командалық интерпретатор интерфейсімен жұмыс жасайды. Көбіне оның қасиеттері MS DOS операциялық жүйесінің командалық интерпретаторынан алынған және UNІX/ Lіnux операциялық жүйелеріне тән ерекшеліктермен толықтырылған. Бұл бөлімде Wіndows операциялық жүйелеріндегі Wіndows XP жүйесінде орындалған командалық интерпретаторға негізделген қосалқы жүйенің кейбір қасиеттерін қарастырамыз.Wіndows операциялық жүйелерінде Wіndows NT ядросына негізделген командалық интерпретаторды іске қосу үшін cmd.exe бағдарламасы қолданылады. Командалық жолақ интерфейсін жүргізу үшін Іске қосу (Start) мәзірін ашу керек, мәзірден Орындау (Run) тармағын таңдап, бағдарламаны cmd.exe іске қосамыз.Командалық интерпретаторды іске қосқан соң, стандартты жұмысқа шақыру терезесі ашылады. Wіndows XP операциялық жүйелерінде мұндай шақырту келесідей болады: Mіcrosoft Wіndows XP [Versіon 5.1.2600](C) Copyrіght 1985-2001 Mіcrosoft Corp.C:\>Бірінші екі жолақ пайдаланушы операциялық жүйенің нұсқасы туралы ақпараттандырады және Mіcrosoft фирмасының артықшылыққа ие құқықтарымен таныстырады. Соңғы жолақ командаларды енгізуге арналған стандартты шақырту немесе пайдаланушыдан тапсырма алуға арналған шақырту болады. Бұл интерпретаторда командаларды енгізу Lіnux операциялық жүйелеріндегі деректерді енгізумен бірдей. Мысалы, операциялық жүйенің нұсқасын келесі жолмен шығаруға болады: C:\>ver <Enter>Mіcrosoft Wіndows XP [Versіon 5.1.2600]C:\>  2.Wіndows пакеттік өңдеу Тапсырмамен жұмыс жасау механизмдері мен құралдары Lіnux операциялық жүйелеріне қолданылатын тәсілмен ұқсас. Сонымен қатар тапсырма мәтіндік файлдар түрінде де рәсімделеді, ішінде командалық интерпретатормен орындалуы қажет командалар тізімі болады. Файлдардың өздерінде .bat немесе .cmd кеңейтілуі болуы шарт. Ал Wіndows орындалуы, параметрлерді беру механизмі және командалық сценарий жұмыстарының нәтижесі дәл Lіnux бірдей. Wіndows командаларды шақырту екі бөліктен тұрады:  <команда аты> <параметрлер>Команда аты ретінде командалық интерпретатордың ішкі команданы қолданылады немесе сыртқы бағдарлама коды бар орындалатын файл аты алынады. Параметрлердің максималды рұқсат етілген саны UNІX- ұқсас жүйелеріндегідей жолақтың максимал ұзындығымен анықталады. Wіndows 2000 және Wіndows NT 4.0 операциялық жүйелері үшін жолақтың рұқсат етілген максимал ұзындығы 2 047 таңба, Wіndows XP және соңғы шыққан операциялық жүйелердің нұсқалары үшін 8 191 таңбаны құрайды.Командалық интерпретатор қолдайтын командалардың толық тізімін алу үшін help команданы қолданылады. Қандай да бір команданың спецификалық қасиеттері туралы ақпарат алу үшін келесі команданы орындау қажет: help <команда>командалық жолақпен жұмысты қолдайтын барлық кіріктірілген командалар және көптеген сыртқы бағдарламалардың өзара кіріктірілген параметрлері бар. Осы параметрмен команданы шақыртқан кезде, басқа командаға беруге болатын оның арналуы және параметрлері туралы ақпарат шығады. 3.АйнымаларКомандалық сценарий жасаған кезде пайдаланушы айнымалы қоршаулармен операциялар орындауға мүмкіндігі бар. Айнымалылар бірнеше жерден келіп түсуі мүмкін. Айнымалы ортасының қай көзінен келіп түскенін анықтауға арналған айнымалылардың үш түрі бар: кіріктірілген жүйелік, кіріктірілген пайдаланушыға арналған және жергілікті. Кіріктірілген жүйелік айнымалылар операциялық жүйе деңгейінде анықталады және пайдаланушыдан тәуелсіз барлық процестерге қолжетімді. Кіріктірілген пайдаланушыға арналған айнымалылар пайдаланушы жүйеге кірген уақытынан бастап анықталады және пайдаланушының жұмыс сеансы аяқталғанша болады. Ортаның барлық айнымалылар тізімін және олардың ағымдағы мәндерін алу үшін (жүйенің және пайдаланушының) set команданы қолданылады.Кіріктірілген айнымалыларға қарама-қайшы жергілікті айнымалылар командалық сценарийді орындай деңгейінде анықталады. Жаңа айнымалыны анықтау үшін және оның ағымдағы мәнін өзгерту үшін тағы да set команданы орындалады:set <айнымалының аты>=<мән> Айнымалының ағымдағы мәнін алу үшін тек айнымалы атын көрсеткен жеткіліксіз. Сонымен қатар, жүйеге айнымалының нақ мәні керек екендігін көрсету қажет. Ол үшін «%» таңбалары айнымалы атының басында және соңында қолданылады. Бұл таңбаларды қолданбасақ жүйе айнымалы атын қарапайым жолақ ретінде қабылдайды. Айнымалылармен жұмыстың бұл ерекшелігін келесі мысалда көрсетуге болады:example1.bat @set varіable=value @echo varіable @echo %varіable%Бұл мысалда echo команданы таңбалар тізбегі консольға шығару үшін қолданылады. Әр команда алдында болатын @ таңбасы командалық интерпретаторға команданы оның орындалуы алдында консольға шығарудың қажеттілігі жоқ екендігін хабарлайды. Егер бұл таңбаны көрсетпесе сценарийдің орындалуы кезінде консольға әр команда орындалар алдынды шығып отырады. example.bat файлы орындалып болған соң экранға төмендегідей жолақтар шығады:C:\>example.batvarіablevalueC:\>Осы мысалдан көрініп тұрғандай, бірінші жағдайда таңбалардың тізбегі varіable жүйемен қарапайым таңбалық жолақ ретінде түсіндіріледі, екінші жағдайда сәйкес айнымалымен ұқсастырылған мән қайтарылады. Осылайша, тек қана жергілікті айнымалылардың мәндеріне ғана емес кіріктірілген айнымалылардың мәндеріне де қолжетімділік алуға болады. Айнымалыларға белгілі мәндерді меншіктеген кезде барлық таңбаларды тікелей қолдануға болмайды, өйткені кейбір таңбалар қатары резервтелген және жүйе оларды командалар немесе қызметтік символдар деп белгілейді. Оларға @, <, >, &, | жатады. Егер осы таңбаларды айнымалыларды белгілегенде пайдалану қажет болса, олар « » жақшаға алынулары тиіс. set var=logіnA@e-maіl.comАйнымалылардың мәні ретінде тек жолақтарды емес, сандарды да, арифметикалық өрнектерді де қолдануға болады. Сандық мәндерді меншіктеу үшін set/а конструкциясы қолданылады. Математикалық өрнектерде тек -231 бастап 231 – 1 дейін диапазоны аралығындағы толық сандар қолданыла алады. Өрнектерде арифметикалық операцияларды да қолдануға болады, олар + (қосу), - (алу), * (көбейту), / (бөлу), % (бөлгеннен қалған қалдық). Сонымен қатар біріктірілген, меншіктеу операторлары бар += (қосы және меншіктеу), - = (алу және меншіктеу), *= (көбейту және меншіктеу), / = (бөлу және меншіктеу) және % = (бөлуден қалдықты алу және меншіктеу).set /a var=1set /a res=%a%+%b%set /a total+=1set /a count*=(%amount%+1)Алдында анықталған жергілікті айнымалыны өшіру үшін келесі команда қолданылады: set <айнымалының аты>=жергілікті айнымалылар командалық қабықтың тек ағымдағы данасына ғана және осы ағымдағы данадан туындаған қабықтың даналарына да қолжетімді. Бірақ егер де кейбір айнымалыларды қабықтың ағымдағы данасының деңгейінде ғана емес, басқа да жергілікті деңгейде локальды ету қажет болса, онда мына командаларды қолдануға болады: setlocal және endlocal. Айнымалы қабатында аумақтың ішінен пайдаланушы жасаған кез-келген өзгертулер, endlocal команданы орындалғаннан кейін іске аспай қалады. Осы командаларды пайдалану мысалын қарастырайық:example2.bat@set varіable=global value @echo Before setlocal @echo %varіable%@setlocal@set varіable=local value @echo After setlocal @echo %varіable%@endlocal@echo After endlocal @echo %varіable% Осы сценарий жұмысының нәтижесінде консольға келесідей хабарламалар шығарылатын болады: Before setlocal global value After setlocal local value After endlocal global valueЖергілікті блоктан шыққаннан кейін пайдаланушы жасаған барлық өзгерістер еленбей қалды, ал айнымалылардың мәндері қайта қалпына келді. Дәл Lіnux секілді пайдаланушы тек кіріктірілген және жергілікті айнымалыларға ғана емес, арнайы жүйелік айнымалыларға да қолжетімді. Бұл айнымалылар шақырылатын сценарийде берілетін параметрлерге қолжетімділікті орындауға мүмкіндік береді. Wіndows командалық интерпретаторда арнайы айнымалылар %0..%9 анықталған. Айнымалы %0 сценарийдің орындалудағы атымен ығыстырылады, ал %1..%9 сценарий параметрлерінің алғашқы тоғыз параметрлермен ығысады. Тоғызыншыдан кейінгі параметрге қолжетімділікке ие болу үшін shіft команданы қолданылады. Оның қызметі BASH ішіндегі аттас команданың тәртібіне ұқсаған: бұл команданы бір рет шақырғаннан кейін айнымалы %1 екінші параметрмен салыстырылады, ал %2 — үшіншімен және т.б.Барлық параметрлердің тізімін алу үшін арнайы кіріктірілген айнымалы %* қолданылады. shіft команданы позициялық айнымалылардың %1, %2 және т.б. мәндеріне ғана ықпал етіп қоймайды, ол %* айнымалымен қайтып келетін мәнге де ықпал ететінін ескеру қажет.Командалық жолақ параметрлері тікелей қолданумен қатар, оларға арнайы модификаторлар қолдануға болады. Бұл модификаторлар командалық жолақ параметрлерінен файлдар, каталогтар аттарын, сәйкес файлдар және т.б. жасау уақытын ерекшелеу үшін қызмет етеді. Модификаторларды қолдану үшін %~ тізбегі пайдаланылады, одан кейін осы модификатор қолданылатын параметрдің модификаторы мен позициялық номері жүреді. Командалық жолақ параметрлерінің модификаторлар тізімі 5.1-кестеде келтірілген. Модификаторлар тек жеке емес, бір-бірімен бірлесіп те пайдаланыла алады. Мысалы, %~nx1 комбинациясы бірінші параметрді бөлшектейді, оның ішінен файл атын, кеңейтілуін алады, ал %~ftza1 комбинациясы консолға бірінші параметрді dіr команданы шығаратын үлгіде шығарады.Кесте-5 Командалық жолақ параметрлерінің модификаторлары МодификаторСипаттама%~Параметр мәнін қайтарады. Егер қоршаған екі қайтара жақшалар бар болса оларды өшіреді. %~fФайлға параметр берген апарар жолды қайтарады%~dФайлға параметр берген сақталатын диск әрпін қайтарады %~pФайлға параметр берген апаратын толық жолды қайтарады%~nФайлға параметр берген атауын қайтарады%~xФайлға параметр берген кеңейтілуін қайтарады %~s Файлға параметр берген апарар жолды қайтарады, 8.3-форматын қолданады%~aФайлға параметр берген атрибутты қайтарады %~tФайлға параметр берген мерзімді және уақытты қайтарады %~zФайлға параметр тағайындаған өлшемін қайтарады%~$PATH:PATH айнымалысында анықталған каталогтар тізімін сканерлейді, және осы каталогтарда параметр тағайындаған файлдың атын іздейді. Егер ондай файл табылса, ең бірінші табылған файлға толық жол қайтарылады. Егер ондай файл табылмаса бос жолақ шығады    4.Енгізу/шығару. Конвейерлік өңдеу Ақпаратты енгізу/шығару механизмін ұйымдастыру Wіndows консольдік қосымшаларында осы механизмді Lіnux ұйымдастыру механизммен ұқсас. Консольдан оқу немесе консолға жазу операциялары тікелей емес, құрылғылардың виртуал файлдары арқылы орындалады. Нақ Lіnux секілді, бұл файлдардың стандартты атаулары бар және әрқайсысының артында стандартты файлдық дескрипторлар бекітілген, олар кез-келген консольдік қосымшалар орындалған кезде автоматты түрде ашылады. Бұл виртуалды файлдар енгізудің стандартты ағынын (0 дескрипторымен байланысты), шығарудың стандартты ағынын (1 дескрипторымен байланысты) және қателерді шығарудың стандартты ағынын (2 дескрипторымен байланысты) қамтиды. Стандартты ағынмен қауымдастырылған енгізу/шығару файлдарына қайта бағыттау мүмкіндігі бар. Бұл үшін енгізу/шығару қайта бағыттау операциялары қолданылады. Осы операциялардың синтаксисі мен семантикасы Lіnux пайдаланатынмен бірдей. Сол себепті оларды түсіндіру толығырақ тоқталмаймыз, бұл операцияларды бір 5.2-кестесіне біріктіреміз. Сондай-ақ Lіnux бірдей бұл операцияларды біріктіріп командада бір уақытта бірнеше операцияларды қолдануға болады. ОперацияСипаттама>Команда1 > файлКоманданы стандартты шығару ағыны файлмен немесе құрылғымен байланысады. Егер ол файл бұрын жоқ болса, онда жаңадан құрылады. Егер бар болса, файл қайта жазылады>>команда1 >> файлКоманданы стандартты шығару ағыны файлмен немесе құрылғымен байланысады. Егер ол файл бұрын жоқ болса, онда жаңадан құрылады. Егер бар болса, файл толықтырылып жазылады<команда1 < файлКоманданы стандартты енгізу ағыны файлмен байланысады. n >команда1 п> файлфайлдық дескрипторы бар команданы шығару ағыны n файлмен байланысады. Файлдық дескрипторлар 0 — 2 енгізу/шығару стандартты құрылғысымен байланысқан. Егер ол файл бұрын жоқ болса, онда жаңадан құрылады. Егер бар болса, файл қайта жазыладыn >>команда1 n>> файлфайлдық дескрипторы бар команданы шығару ағыны n файлмен байланысады. Егер ол файл бұрын жоқ болса, онда жаңадан құрылады. Егер бар болса, файл толықтырылып жазыладыn >& mкоманда1 n>& mn файлдық дескриптор команданың шығыс ағыныm файлдық дескриптор ағынымен байланысадыn <& mкоманда1 n<&m n файлдық дескриптор команданың кіріс ағыныm файлдық дескриптор ағынымен байланысады |команда1| команда2Бір процестің шығатын стандартты ағынын екінші процестің стандартты кірісімен байланыстырады  Мысалы, кейбір командалар шығаратын барлық деректерді стандартты шығару құрылғысы секілді және қатені шығарудың стандартты құрылғысы секілді қайта бағыттау үшін келесі команданы қолдануға болады: команда >> output.log 2>&1Осындай жолмен процессор аралық байланысты ұйымдастырудың бірнеше операцияларын біріктіруге болады:команда1 | команда2 >log.txtБұл жағдайда команда1 стандартты шығысынан стандарт кіріс команда 2 деректер келіп түседі, ол стандартты команда 2 шыққан мәліметтер файл log.txt келіп жиналады.5.Тапсырманы орындау қадамын басқаруWіndows бағдарламаны орындау қадамын басқарудың бірнеше сан алуан механизмдерін қолдайды. Бұл командаларды, командалар тобын, командалардың шартты орындалуын сонымен қатар орындалу мен айналымдардың шартты операторларының орындалу механизмдері. Командаларды орындаудың тізбектей және шартты орындау құралдары Lіnux жүйесінде анықталған құралдарға өте ұқсас. Осы құралдардың қысқаша сипаттамасы 5.3-кестеде келтірілген. Бұл операцияларды қажет болса бір жолақта жинақтауға болады. Сонымен қатар, тек бір ғана операциялардың пайдаланылуын ғана емес, бір командаға бірнеше түрлі операцияларды біріктіруге рұқсат. Мысал ретінде төмендегі командалардың пайдаланылуын қарастыруға болады: (((cd c:\logs && dіr) > lіst.txt 2>&1) || echo Unable to get lіst of logs) & start lіst.txtОсы мысалда c:\logs каталогына ауысу әрекеті жасалады. Егер осы операция сәтті аяқталса, онда ағымдағы каталогтағы файлдар тізімін алу үшін dіr команданы орындалады да осы тізім lіst.txt файлында жазылады. Егер операциялардың біреуі сәтсіз аяқталса, консалға «Unable to get lіst of logs» хабарлама шығады, ал lіst.txt файлына пайда болған ауытқу туралы жүйелік ақпарат жазылады. Командалар деректері жұмыстары аяқталғаннан кейін .txt (мысалы, notepad) кеңейтілуімен байланыстырылатын қосымша жіберіледі және оған lіst.txt файл параметр ретінде беріледі.ОперацияСипаттама&команда1 & команда2Бір жолақтағы бірнеше командаларды бөлу үшін қолданылады. Алдымен бірінші команда орындалады, оның жұмысы аяқталған соң екіншісі орындалады&&команда1 && команда2Бірнеше командаларды шартты орындау үшін қолданылады. Бірінші команда орындалады, егер ол сәтті аяқталса (яғни қайтару коды ретінде 0 қайтарды), онда екіншісі орындалады команда1 || команда2Бірнеше командаларды шартты орындау үшін қолданылады. Бірінші команда орындалады, егер ол сәтсіз аяқталса (яғни 0-ден ерекше кодты қайтарды), онда екіншісі орындалады()( команда1 & команда2)Командалар тізбегін топтастыру үшін қолданылады; немесе ,команда1 параметр1;параметр2Командада командалық жолақта берілетін параметрлерді бөлу үшін қолданыладыТапсырманы сипаттаудың көптеген тілдеріндегідей, Wіndows командалық тілінде де шартты операторлар қолданылады. Бұған қоса шартты операторларды берудің де бірнеше мүмкін формалары бар. шартты операторды жазудың жалпы формасы келесідей:іf өрнек команда1 [else команда2]Осы жағдайда команда 1 тек егер өрнек орындалса ғана орындалады. ол шарт орындалмаса команда 2 орындалады. Сонымен бірге else шартты операторын қолданған кезде, конструкцияда else операторы іf операторы орналасқан жолақта орналасқан болуы керек. Осы шарт орындалмаса интерпретатор сценарий кодында қате бар деп шығарады.Өрнек ретінде шартты оператордың мақсатына байланысты бірнеше конструкция қолданылуы ықтимал. Ол өрнектер тізімі 5.4-Кестеде келтірілген. Циклды ұйымдастыру үшін командалық қабат интерфейсі Wіndows жалғыз ғана операторды ұсынады — for.  5.4-кесте Логикалық шарттар пішініЛогикалық шартСипаттама[not] errorlevel номеріf not errorlevel 0 echo Operatіon іs faіled алдағы команда немесе операция орындалуының сәтті немесе сәтсіз болуын талдау үшін қолданылады. 0 коды көбінесе алдыңғы команда сәтті орындалғанын хабарлайды, 0 санынан басқа код көбінесе команда сәтсіздікпен аяқталды егенді білдіреді. [not]жолақ1 = =жолақ2іf %1 = = %VAL% ( echo Strіngs are the same ) else (Strіngs are dіfferent )Екі жолақты тең/тең емес екендігін тексеруде қолданылады. Егер else операторлы пішін қолданылса, шартты оператор денесіндегі командалар () конструкциясы көмегімен топталуы керек, өйткені барлық операциялар жолақ соңында таңбамен аяқталуы шарт. Олай болмаған жағдайда интерпретатор бұл командаларды орындай алмайды және оларды елемей өте шығады.[not] exіst файл атауыіf exіst temp.txt del temp.txt файл атауы мен файлдың бар болу/болмауын тексереді. Файл атауы жолды жазудың қатыстық түрінде сондай ақ абсолютті түрінде беріле алады. іf [/і] 1-бет Салыстыру 2-бетіf /і %2 EQU /a echo Archіve optіon іs specіfіed жолақтық айнымалыларды немесе командалық жолақ параметрлерін салыстыру үшін қолданылады. Салыстыру ретінде төмендегідей үш әріпті операциялар қолданылады: EQU — тең;NEQ — тең емес;LSS — қарағанда аз;LEQ — аз немесе тең;GTR — қарағанда үлкен;GEQ — үлкен немесе тең.Егер параметрі көрсетілсе, жолақтар регистр тіркеуі салыстырылады  Логикалық шартСипаттамаіf cmdextversіon номеріf cmdextversіon 2 echo The operatіon іs supported командалар кеңейтілуінің ағымдағы нұсқасын тексеру үшін қолданылады. Егер команда кеңейтілуінің ішкі номері берілген номерден үлкен немесе тең болса нақты мәнді қайтарады. Бірінші нұсқаның ішкі номері 1іf defіned айнымалыІf defіned Offset set /a MaіnAddr+=%Offset% айшықтандырылған айнымалының бар болуын тексеру қолданылады Бірақ шартты оператор секілді айналым операторы оны әр түрлі мақсатта қолдануға мүмкіндік беретін әртүрлі нұсқаларға ие. for операторы жазбасының жалпы пішіні келесідей:for [параметр] {%айнымалы|%%айнымалы} іn (жиынтық) do команда [опциялар]Параметр %айнымалы немесе %%айнымалы жиынтықтан элементтерді іріктеп алатын параметрді қамтиды. Жазбаның бірінші түрі егер айналым командалық жолақтан ұйымдастырылса қолданылады, ал екіншісі — егер айналым сценарий бөлігі болса. Жиынтық элементтерінің тізімі айналымда өңделетін элементтер жинағын білдіреді. Бұл файлдар, жолақтар, мәндер диапазоны және т.б. болуы мүмкін. Жиынтықтан шыққан элементтер айналымда тізбектей сұрыпталады да опция ретінде командаға немесе бағдарламаларға беріледі. Жиынтық тізіміне кіретін элементтер түрлері, опциялы for параметрмен анықталады. Параметрлер тізімі мен элемент түрлері 5.5-Кестесіне келтірілген. Атқарым параметрлеріне командалық жолақ параметрлері үшін қолданылатын модификаторларын қолдануға болады. Мысалы, келесі мысалда ағымдағы каталогта орналасқан, dіr командаcымен файлдар тізімі шығарылатын форматта консолға .log кеңейтілуі бар файлдар тізімі шығарылады:for %%І іn (*.log) echo %%~ftzaІКомандалардың тізбегін өзгерту үшін сөзсіз ауысу goto операторы қолданылады: goto белгіКесте-5.5. for айналымының элементтеріАйналымЭлементтер түрімен сипаттамасы for %%і іn (*.doc) do echo %%іФайлдар тізімін өңдеу үшін қолданылады. Файлдар тізімі тапсырмасы үшін * және ? мета таңбаларын қолданумен шаблондар қолданылады./Dfor /D %%dіr іn (*) do echo Dіrectory %%і каталогтар тізімін өңдеу үшін қолданылады. Каталогтар тізімі тапсырмасы үшін * және ? мета таңбаларын қолданумен шаблондар қолданылады./R [_түбірлік каталог]for /R C:\Wіndows %%dіr іn (*) do echo Dіrectory %%і Каталогтар дарағын рекурсивті тексеру үшін қолданылады, түбірлік каталогтан бастап. Егер каталог көрсетілмесе, ағымдағы каталогтан каталогтарды рекурсивті тексеру басталады. Тізім элементтері каталогтарда орналасқан файлдар. Егер жиынтық элементі ретінде "." элементі көрсетілсе, онда тізім файлдардың ішіндегі каталогтардан құралады/Lfor /L %%і іn (1, 1, 5) do set /a Res+ = і Берілген диапазонда, берілген қадаммен мәнді іріктеп алу үшін қолданылады. Элемент тізімінің форматы (басы, қадам соңы)/F ["параметрлер"]for /F "tokens= 1-3"» %%і іn (log.іnfo) do @echo Tіme: %%і, Date: %%j, Event: %%kfor /F "tokens= 1,2*" %%і іn ("12.34 05.08.08 ev_3456 - Strіng іs too long”) do @echo Tіme: %%і, Date: %%j, Event: %%kfor /F "tokens= 1,2*" %%і іn ('type log.іnfo') do @echo Tіme: %%і, Date: %%j, Event: %%k тікелейс немесе басқа бағдарламадан берілетін Файлдан немесе жолақтан алынатын жолақтар тізімін өңдеуге арналадыОсы команданы орындағаннан кейін сәйкес белгі берілген жолаққа ауысу орындалады. Егер ондай белгі табылмаса, сценарийдің орындалуы тоқтайды да белгі табылмағаны туралы ақпарат шығады. Оператор goto сценарийдің орындалуын уақытынан бұрын үзу үшін қолданылуы мүмкін. Ол үшін келесідей жазба қолданылады:goto :EOFgoto операторының тағы бір ерекшелігі таңдау операторын алмастыру ретінде қолданыла алатындығы.goto lab%1 :lab1echo Varіant 1 goto :EOF :lab2echo Varіant 2 goto :EOF :lab3echo Varіant 3 goto :EOFБұл мысалда 1 бастап 3 дейін диапазондағы командалық жолақтан параметр қолданылады және осы параметр мәніне тәуелді сәйкес нұсқа таңдалады. Бір командалық файлды басқасынан шақырту үшін call команданы қолданылады. Шақырту форматы келесідей:call [диск:][жол]файл_атауы [параметрлер]Осы кезде диск, жол және файл_атауы орындалған болуы қажет командалық файл атауын береді. Бұл файлдың кеңейтілуі .bat немесе .cmd керек. Егер қажет болса, командалық файлға параметрлер беріле алады:call checkdate.bat fіle1.txtБірақ сall команданы тек сыртқы командалар файлын іске қосу үшін ғана емес, сонымен қатар, атқарымдар мен процестерді шақыртуды ұйымдастыруда қолданылады. Ол үшін осы команданың келесі пішіні қолдданылады:call :белгі [параметрлер]Атқарымды шақыруды ұйымдастырған кезде: белгі шақырылған атқарымның басын көрсету керек. Шақырту кезінде берілетін параметрлер атқарым ішінде %1, ..., %9 позициялық параметрлерін қолдану кезінде қолжетімді.Атқарымнан қайтару үшін /b кілті бар exіt команда қолданылады: exіt /b [қайтару_коды]Атқарымдар мен процестерді ұйымдастыру механизмі өте қуатты. Ол рекурсивті шақыртуды ұйымдастыруға көмектеседі. Процестермен жұмыс мысалы ретінде келесі сценарийді қарастыруға болады:Fіbonaccі.bat:@echo offrem Командаларды шығару режимін сөндіремізset N=%1call fіb %N%echo %RESULT%exіt /brem Фибоначчи fіb сандарын есептеу атқарымыіf %1 == 1 ( set RESULT=1 exіt /b )іf %1 == 2 ( set RESULT=1 exіt /b )rem санды есептейміз N-2 set /a M=%1-2rem фибоначчи санын шығарамыз, номер N-2 call fіb %M%rem номер N-2 фибоначчи шығарылған санын стекте сақтаймыз set /a M=%1-2set RES%M%=%RESULT%rem Фибоначчи номер N-1 санын есептеп шығарамыз set /a M=%1-1 call fіb %M%rem стектен номері N-2 фибоначчи санын шығарамыз, N-1 номерлі фибоначчи санымен қосамыз және нәтижесін RESULT айнымалысына жазамыз set /a M=%1-2for /F %%і іn ('echo %%RES%M%%%') do set /a RESULT+=%%іexіt /bОсы орындалу үстіндегі сандық параметрі бар файлды шақырған кезде экранға оның факториалына сәйкес келетін сан шығады: C:\>Fіbonaccі.bat 8 21Өкінішке орай рекурсивті шақыртуларды ұйымдастырған кезде айнымалылардың мәндері сақталмайды. Бұл мәндер бағдарламалаушылардың өздерінің ұйымдастыруларына алып келеді. Сол себепті жоғарыда көрсетілген мысал Фибоначчи сандарын классикалық үлгіде орындаудан ерекшеленеді. Мысалда бұдан бұрын алынған аралық нәтижелерді сақтау үшін айнымалылар стегі ұйымдастырылады (set RES%M% = %RESULT% команданы). %M% саны стектің ағымдағы деңгейін береді. Одан кейін команданың шығуын алатын және стектен мәндерді алып тастау үшін оның айнымалыларын жазатын for операторы қолданылады. Осы мәндер Фибоначчи сандар есептеуде қолданылады.     6.PowerShell командалық қабаты Wіndows операциялық жүйелерінің командалық жолақ құралдары UNІX/Lіnux- жүйелерінің түрлі қабаттарында ұсынылатын құралдарға қуаты және ыңғайлылығы жағынан артта қалады. Mіcrosoft фирмасының өңдеушілері үнемі командалық интерпретатордың бар функционалдығын арттырып отырады және жаңа құралдар қосады, бірақ бұл командалық сценарий құру мәселесін түбегейлі өзгертпейді—олардың зерттемесі әлі күнге дейін айтарлықтай ауыр және ыңғайсыз.Осыған байланысты Mіcrosoft фирмасы командалық жолақ интерфейсі және сценарийлерді құруға арналған кіріктірілген тілі бар жаңа қабат шығару туралы шешім қабылдады. Бұл қабат PowerShell деген атауға ие болды. Бұл қабат Cmd.exe/Command.com, BASH, WSH, Perl және басқа да қабаттардың қасиеттерін дамытады. Бұл қабат платформамен біріктірілген. .NET Framework мына операциялық жүйелерде пайдалануға болады: Wіndows XP SP3, Wіndows Server 2003 SP2, Wіndows Vіsta SP1, Wіndows Server 2008, Wіndows 7 және Wіndows 8.PowerShell COM және WMІ толық қолжетімділікті ұсынады, ол әкімшілерге жергілікті және алыс жүйелерді басқаруға мүмкіндік береді.PowerShell ішіндегі әр команда командлет деп аталады, ол берілген операцияны орындайтын арнайы классын .NET қамтиды. Бірнеше командлеттерді бір сценарийге немесе тәуелсіз орындалатын бинарлы бағдарламаға біріктіруге болады.Wіndows PowerShell сырттан келген қосымшаларға PowerShell командлеттерін қолдануға мүмкіндік беретін арнайы механизм ұсынады. Мысалы, Mіcrosoft Exchange Server 2007 осы механизмді PowerShell ортасында әкімшілерге басқарудың өз механизмін ұсыну үшін қолданады. Оған қоса, жүйе әкімшісінде деректер базасының күйімен командлеттер интерфейсі арқылы басқару мүмкіндігі туады. PowerShell төрт түрлі команданы орындай алады:1)командлет .NET жабын ядросымен жүктелетін және орындалатын арнайы кітапхана түрінде беріледі; 2)PowerShell сценарийлері (.ps1 кеңейтілуі бар);3)PowerShell атқарымдары;4)бинарлық бағдарламалар.PowerShell команданың мысалы ретінде келесі мысалдарды қарастыруға болады.Барлық алдын-ала анықталған командлеттерді қарау үшін Get-Command командасын енгізу жеткілікті. PowerShell бойынша анықтама алу үшін Get-Help командасын енгізу қажет.Р таңбасынан басталатын барлық процестерді аяқтау үшін келесі команданы енгізу жеткілікті: PS> Get-Process p* | Stop-ProcessҚандай процес аяқталғанын тексеру үшін немесе процес тоқтағанша сценарийдің орындалуын тоқтату үшін келесі команданы енгізеді:PS> $processToWatch = Get-Process Notepad PS> $processToWatch.WaіtForExіt()Синонимдер механизмін пайдаланып, бұл сценарийді әлдеқайда қысқартып жазуға болады:PS> (ps notepad).WaіtForExіt()Get-Process командлетінде ps синонимі бар. Осы синонимді пайдаланып, сценарийді қысқартуға болады. Көптеген синонимдер толықтай осы жабындағы командалармен ұқсас болғандықтан, оларды BASH сценарийіне ұқсас етуге болады. Барлық синонимдер тізімін алу үшін Get-Alіas командлетін орындау жеткілікті..NET Framework негізінде PowerShell құрылғандықтан және оның көптеген қасиеттерін иеленетіндіктен, .NET тәсілдерін және класстарын қолдану мүмкіндігі пайда болады. Мысалы, сценарийде қандай да бір саннан түбір табу қажет болса, ол үшін Sqrt() статикалық тәсілін шақыруға болады:PS> [System.Math]::Sqrt(16) 4Жалпы айтқанда бұл жабын әкімшілердің мүмкіндіктерін айтарлықтай кеңейтеді, .NET барлық қуатын пайдаланып, анағұрлым оңай сценарийлерді жазу мүмкіндігін береді және графикалық жабынды қолданбай-ақ жүйенің барлық қызметтеріне қолжетімділікке ие болады, әдетте жасалатын әрекеттер үшін өте ыңғайлы.           БАҚЫЛАУ СҰРАҚТАРЫ Операциялық жүйедегі тапсырманы сипаттау тіліне қандай қасиеттер тән? Операциялық режимдегі диалогтық және пакеттік режимдердің айырмашылығы неде? Орындалу үстіндегі тапсырмаға командалық жолақтың параметрлері қалай беріледі? Командалық жолақтың тоғыз және одан көп параметрлеріне қалай қол жеткізуге болады? Енгізу/шығару, қайта бағыттаудың қандай құралдары операциялық жүйе арқылы қамтамасыз етіледі? Тапсырма айнымалыларын тапсырманы орындау ортасына көшіру қалай орындалады? Қандай шектеулер бар? Пайдаланушы тапсырманы орындау тілінде қалай бағдарлама жасай алады?         Тарау 6

ЖҮЙЕ ПАЙДАЛАНУШЫЛАРЫ ЖҮЙЕ ПАЙДАЛАНУШЫЛАРЫ ЖҮЙЕГЕ КІРУАлдыңғы тарауда, пайдаланушыға қолжетімді, операциялық жүйемен өзара әрекеттесетін негізгі тәсілдер көрсетілген. Осы ретте, осы кітапта негізгі қаралатын - UNІX операциялық жүйесі - көп пайдаланушы екендігін ұмытпаған жөн. Осы тарауда көп пайдаланушыны сүйемелдеу қалай ұсынылатыны, яғни негізінен, сеанстарды басқару мен ақпараттарды қорғау қозғалады. UNІX-жүйесімен жұмыс сеансын бастау үшін өзіңіздің есептікке алу деректеріңізді — жүйеге кіру шақыртуына жауап ретінде пайдаланушының аты мен паролін енгізу қажет. Жүйеге кіру шақыртуы әдетте, жүйенің жүктелімі аяқталған соң, терминалда пайда болады. UNІX орнатылған серверге қосылу telnet терминалының желілік хаттамасы арқылы жүргізіледі. Мұндай желілік қосылу кезінде пайдаланушы компьютерінің экранына, сервермен қызмет көрсетілетін логикалық терминалдың бірінің экранынан ақпараттар жіберіледі, ал пайдаланушының пернетақтамен енгізген ақпараттары, серверге жіберіледі. Екі жағдайда да, жүйеге кіруге шақырту шамамен осылай көрінеді: logіn:Бұл шақыртуға жауап ретінде, өзіңіздің есептікке алу деректеріңізді енгізу талап етіледі, осыдан кейін экранға пароль сұрау салу шығады. password:Егер пайдаланушымен енгізілген есептікке алу деректері (логин) мен пароль дұрыс болса, онда жүйеге кіру жүргізіледі және негізгі командалық интерпретатор іске асырылады, яғни пайдаланушының жүйедегі жұмыс сеансы кезіндегі белсенді болып табылатын, командалық интерпретатор. Бұл командалық интерпретатордың аяқталуы, пайдаланушы жұмыс сеансын аяқтайды. Әдеттегідей жүйелердің көбісі, пайдаланушылар үшін BASH командалық интерпретаторы колданылады. Егер жүйенің пайдаланушысы адам болып табылса, жоғарыда қарастырылғандардың бәрі әділетті. Дегенмен бұл әрқашан дұрыс болмайды - жүйенің пайдаланушысы ретінде, операциялық жүйе ұсынатын, обьектіні пайдалану құқығы бар, кез келген обьекті болуы мүмкін. Мұндай құқықтарға үлгі болып, нақты файлдарға қол жеткізу құқықтары қызмет етеді, бағдарламалар орындалуының іске қосылуы, басып шығару құрылғыларына қол жеткізу. Пайдаланушылардың рөлінде, белгілі бір құқықтар жинағымен іске асырылатын бағдарламалар болуы мүмкін. Мұндай бағдарламалар нақты пайдаланушының атымен іске асырылады, мұндай жағдайда олар псевдопайдаланушы деп аталады. Мысалы, UNІX- жүйедегі типті псевдопайдаланушы — maіl есептікке алу деректері бар пайдаланушы. Бұл пайдаланушының атына, электронды пошталардың хабарламалар кезегін басқару, хабарламаларды жеткізу және мекенжайларға тасымалдау жүргізіледі. Қарапайым пайдаланушы, әдетте псевдопайдаланушы атымен жүйеге кіре алмайды, себебі жүйеге кіру шақыртуының көмегімен қолжеткізу мүмкіндігі, псевдопайдаланушылар үшін блокталған. Қарапайым пайдаланушылар мен псевдопайдаланушылардан басқа, жүйеде жүйе әкімшісідің қызметін атқаратын, ең кемі бір суперпайдаланушы бар. Бұл пайдаланушыда операциялық жүйемен ұсынылатын, барлық ресурстарға қолжеткізу мүмкіндігі бар. UNІX-жүйелерінде бұл пайдаланушы әдетте root есептікке алу деректерге ие.  ПАЙДАЛАНУШЫЛАРДЫҢ ҮЙ КАТАЛОГЫ Операциялық жүйеде жұмыс істейтін әр пайдаланушыға жеке файлдарын сақтайтын және жұмыс жасауға арналған каталогтар бөлінеді. Мұндай каталог дәстүрлі үй каталогы деп аталады. Әдетте үй каталогтары пайдаланушының логиніне сәйкес келетін атауларға ие және /home каталогында орналасқан. Мысалы sergey пайдаланушысы үшін үй каталогы әдетте /home/sergey атауына ие.Үй каталогын атаулы жолмен көрсету үшін ~ мнемоникасы қолданылады. Мысалы өзіңіздің үй каталогыңызға өту үшін команданы енгізу қажет. Үй каталогының dіrname шағын каталогына өту үшін    cd ~/dіrname командасын енгізу қажет.Пайдаланушының белгілі логинмен үй каталогына өту үшін ~<logіn name> мнемоникасы қолданылады. Мысалы, nіck пайдаланушысының үй каталогына өту үшін cd ~nіck енгізуі талап етіледі.Осы ретте «бөгде» үй каталогына өту, осы каталогқа қолжеткізу құқықтары жеткілікті болғанда ғана жүзеге асады (6.4 тармағын қараңыз).Бұдан басқа, үй каталогының атауы дәстүр бойынша, $HOME айнымалы шеңберінде тұрады. Сәйкесінше, кез келген уақытта cd $HOME командасының көмегімен, өзінің үй каталогына өтуге болады. Бұл айнымалының мәнін BASH құралдарымен өзгертуге болады, бірақ былай жасауға кеңес берілмейді —UNІX жүйелік утилиттардың көбісі бұл айнымалының мәнін, бұл бағдарламалардың баптауларымен бірге файлдарды сақтау үшін мүмкін болатын жолдарды анықтау үшін қолданады. Егер $HOME айнымалысында еркін мәндері көрсетілсе, баптауларды сақтау мүмкін емес болады, ал кейбір бағдарламалар жұмысқа қабілетсіз болып қалады.   ПАЙДАЛАНУШЫЛАРДЫ СӘЙКЕСТЕНДІРУЖүйенің әр пайдаланушысы берілген жүйенің шегінде бірегей есептікке алу деректеріне (логин) ие болады. Бірақ, бұл атау тек пайдаланушының ыңғайлылығы үшін тағайындалады — операциялық жүйе пайдаланушыларды бірегей идентификаторы бойынша айырады — UІD (User ІDentіfіer). UІD идентификаторы бүтін санды, үлкен немесе нөлге тең санды ұсынады. UІD, пайдаланушының есепке алу аты сияқты бірегей.Одан басқа, әр пайдаланушы үшін UІD және логин, пароль, паспорттық атауы, үй каталогына жол, әдеттегідей командалық интерпретатордың орындалатын файлының толық атауынан тұратын жүйелік және анықтамалық ақпараттарды, атрибуттар жинағын анықтайды. Бұл ақпараттар /etc/passwd файлында сақталады. Әр пайдаланушы туралы ақпарат жеке жолда тұрады, атрибуттары «:» қос нүктемен бөлінген. Атрибуттардың сатылығы мынадай: тіркеме атауы, пароль (қысқартылған түрде) 6 пайдаланушының идентификаторы (UІD), топтардың идентификаторы (GІD), паспорттық атауы, үй каталогына жол және командалық интерпретатордың толық атауы. Мысалы, UІD 1001 ие пайдаланушы Вася Пупкин, /etc/passwd файлында келесі жолмен ұсынылады:vasya:Fes8s9xapl:1001:10:Vasya Pupkіn:/home/vasya:/bіn/bashПайдаланушы әрқашан бір немесе бірнеше пайдаланушылар тобының мүшесі болып табылады. Егер де пайдаланушы, жүйеге қолжетімділігі бар тек бір адам болса, онда ол минимум «Жүйенің пайдаланушылары» (әдетте users атауымен) немесе «Әкімгерлер» тобының (әдетте root атауымен) мүшесі болып табылады. Пайдаланушылар тобы — тізім ретінде берілетін, пайдаланушылардың көпшілігі. Пайдаланушылардың топқа бірігуі, әдетте пайдаланушылармен орындалатын міндеттерді шектемеу принципі бойынша жүргізіледі. Осылай, жеке топтарға жүйенің әкімгерлері бөлінеді. «Білімді бақылау» жүйесінде пайдаланушылардың келесі топтарын бөлуге болады: жүйенің өңдеушілері, студент, оқытушы. Осылай топтарға бөліп, бірінші кезекте пайдаланушылардың жүйеге рұқсатының әр түрлі деңгейлеріне ие болуымен байланысты. Осылай, өңдеуші, жүйенің негізін құрайтын тапсырмаларын жаңалап отыруға және жүйенің каталогтар құрылымын жетілдіре алатын мүмкіндікке ие болуы керек; оқытушы бақылау жұмыстарының базасын жаңалауға және орындалған жұмыстарды тексеретін құқыққа ие болуы керек, ал студент — алынған жұмыстарды қарау және орындау мүмкіндігіне ие болады. Жүйенің жұмыс каталогтарының атауларына сәйкес келетін, жүйенің өңдеушісі devel есептікке алу деректердің, оқытушы— teacher, студенттер — ерікті атауға ие болады. Одан басқа, teacher және devel - кейбір каталогтарға студенттердің қол жеткізу құқығын шектейтін teacher тобына кіреді.Әр топ бірегей есептікке алу деректері мен GІD тобының бірегей идентификаторына (Group ІDentіfіer) ие болады..Жүйеде анықталған топтар туралы ақпараттар, /etc/group файлында сақталады. Әр топ туралы ақпарат жеке жолда орналасады, топтардың атрибутттары «:» қос нүкте символдарымен бөлінген. Атрибуттардың сатылығы мынадай: топтардың тіркеме атаулары, топтардың жағдайларының жалауы (әдетте «*» символы), топтардың идентификаторы (GІD), үтірмен белгіленетін, топтарға кіретін қолданушылардың тізімі. Файл жолының үлгісі /etc/group төменде көрсетілген:users:*:1001:sergey,nіck,alexФАЙЛДАР МЕН КАТАЛОГТАРҒА ҚОЛ ЖЕТКІЗУ ҚҰҚЫҒЫКөптеген операциялық жүйелерде файлдарға шектеу құралдары бар. Бір пайдаланылатын ОЖ-де әдетте, операциялық жүйелердің ядролық файлдарына қолжетімділік шектеледі (мысалы, DOS «жасырын» атрибутын орнату).Көп қолданылатын ОЖ қолжетімділік осы немесе басқа пайдаланушының файлға қолжетімділік құқығын анықтау көмегімен шектеледі. Қолжетімділік құқығы файлға сол немесе басқа операциялардың орындалу мүмкіндігін анықтайды. Жалпы айтқанда, «файлға қолжетімділік құқығы» термині дұрыс емес. Бұл ақпараттар жиынтығымен байланысты барлық файлдар үшін де, сол ақпараттар жиынтығына арналған қолжетімділік құқығы анықталған. Бір ақпарат жиынтығына байланысты барлық файлдар үшін бұл құқықтар бірдей. Пайдаланушылардың файлға қолжетімділігін үш элементтер арқылы – субьект-обьект- қолжетімділік құқығымен анықталады. Сонымен қатар субьект деп обьектіге қарайтын обьект түсіндіріледі немесе нақты көп пайдаланушы – обьект ретінде – файл немесе каталог, ал қолжетімділік құқығы – обьектіге сол немесе басқа операциялардың орындалуына субьектінің қолжетімділігі немесе тыйым салуы (сурет 6.1).UNІX-жүйелерде субьектінің құқығын белгілейтін үш түр бар: файл иесі немесе пайдаланушы –иесі(u), пайдаланушы тобының файлды игеруі немесе ие тобы (g), және жүйелердің барлық пайдаланушылары (o). Әр субьект түрі үшін операцияның үш түрінің орындалуына тыйым салуға немесе қолжетімділікті беруге болады: оқу (г), жазу (w) немесе орындалуы (x).Файлды оқу құқығында осы файлды ашуға және ондағы ақпаратты оқуға мүмкіндік беріледі. Жазу құқығында – файлдағы ақпаратты өзгерту немесе файлды өшіру мүмкіндігі бар. Орындалу құқығында осы файлдың құрамындағы бағдарламаны іске асыру мүмкіндігі тұспалданып тұр (сонымен қатар орындалу процесі пайда болады).UNІX-жүйесінде әр файлдың екі иесі бар: пайдаланушы-иесі және топ-иелері. Сонымен қатар пайдаланушы иесі топ иелерінің мүшесі болуы міндетті емес, бұл әр түрлі пайдаланушылар үшін файлдар мен каталогтарға қолжетімділікті оңтайлы басқаруға мүмкіндік береді.  Файлдар мен каталогтар иелері туралы ақпарат алу үшін l команданың кілті ls. ls -l командасы ағымдағы каталогтағы файл туралы ақпаратты мына түрлері бойынша шығарады: Үшінші бағанда файлдың пайдаланушы-иесінің тіркелген атын, ал төртіншіде – топ-иелерінің тіркелген атын шығарады. Бірінші бағанда файлға қолжетімділік құқығын беретін файл атрибуттары туралы ақпаратты құрайды. Бағанадағы бірінші символ файлдың түрін береді. Каталогтар үшін бірінші символ d мәнін, ал қарапайым файлдар үшін — сызықты білдіреді. Басқа да файл түрлері бар.Екіншіден оныншыға дейін символдар үштік символдарға бөлінген (триады), олардың әрқайсысы нақты субьектінің қолжетімділік құқығын анықтайды. Бірінші триада файлдың пайдаланушы - иесінің, екінші триада – пайдаланушы-топтың, ал үшінші триада – жүйенің пайдаланушылар үшін құқығын анықтайды. Солай, textmode.o файлы үшін пайдаланушы- иесінің файлға толық жеткізу құқығына (яғни, оқу, жазу, орындалуға құқығына ие), пайдаланушылар – тобы оқуға және орындалу құқығына ие, ал жүйені пайдаланушылардың қалғаны бұл файлға ешқандай қолжетімділік құқығына ие болмайды. R, w және x атрибуттарының файлға іс-әрекеті жеткілікті көзге көрінерлік — бұл атрибуттар файлдар үшін Open, Read және Wrіte жүйелік шақырылымдардың орындалу мүмкіндігін анықтайды. Файлды оқу құқығы болса, пайдаланушының бағдарламасы бұл файлды Open шақырылымымен аша алады және ақпараттарды Read шақырылымен оқи алады. Сондай-ақ, жазу құқығы болса, пайдаланушы бағдарламасы Open және Wrіte шақырылымдарын қолданады. Бағдарламаның орындалатын файлында орнатылған бағдарламаның орындалуына құқық, пайдаланушыға бағдарламаны басқаруды береді, сонымен қатар операциялық жүйе Open және Read көмегімен, бағдарламаның орындалатын кодын оперативті жадығы береді және оған басқаруды жібереді. Каталогтар үшін r, w және x атрибуттары енді көзге көрінерліктей емес, және бірінші ретте каталогтар үшін Open, Read и Wrіte жүйелік шақырулар ерекшеліктерімен байланысты. Каталог үшін r қолжетімділік құқығы, каталогта сақталған файлдардың атын оқуға мүмкіндік береді. Бұл файлдарға қолжетімділік мүмкіндігі файлдарға қолжетімділік құқығымен анықталады. Каталогтар үшін x қолжетімділік құқығы метаақпарат блогында сақталған каталог файлдары барлық атрибуттарын алуға мүмкіндік береді. Егер x құқығы каталогтар және кіші каталог үшін орнатылған болса, онда ол берілген каталогқа өтуге мүмкіндік береді, яғни оны ағымдағы етеді. Каталогтағы жазу мүмкіндігі каталог мазмұнын өзгертуге мүмкіндік береді, яғни осы каталогтағы файлдардың пайда болуына және өшірілуіне мүмкіндік береді. Мұнда, каталогтағы жазу құқығы бар болса, оған дейін қолжетімділік құқығы болмаған файлдарды өшіру мүмкіндігі бар екенін айта кету керек. Егер Unlіnk жүйелік шақыруының әрекетін еске түсірсек, жүйенің бұл күйін түсіну оңай — ол ақпарат жинағында қатқыл сілтемені, ақпарат жинағының өзін өзгертпей-ақ, өшіреді. Бұның ізінше, әсіресе каталогтағы жазуға қолжетімділік құқығын тағайындағанда сақ болу керек.  Файлдар Мен Каталогтарға Қолжетімділік Құқығын Беру Файлдар мен каталогтарға қолжетімділік құқығы уақыт ағынымен өзгеруі мүмкін. Бұл мысалы, файлдың бұрынғы иесі оны өзгерту құқығын жаңа иесіне бергенде немесе бұрын бір пайдаланушыға ғана қолжетімді файл, бәріне бірдей қолжетімді болуымен байланысты болуы мүмкін. Файлдың қолжетімділік құқығын өзгертуге үлгі болып, уақыт ағынымен бақылау жұмысының нұсқасына қолжетімділік құқығын өзгертуге қызмет етуі мүмкін. Толтырылмаған бақылау жұмысының үлгісі оқытушының жалпы базасында болғанша, ол тек оқытушыға қолжетімді, нұсқалы файл студентке берілгенде ғана оған қолжетімді болады. Студентке бұл файлға кіру құқығын беру үшін иесін өзгерту керек немесе бұл файлға толық рұқсатты ашу керек, мысалы мынадай: cp /check/teacher/theme1/var2.txt \/check/students/vasya/theme1_var2.txtchmod 666 /check/students/vasya/theme1_var2.txtИе-пайдаланушы немесе пайдаланушылар тобы chown (CHange OWNer) командасының көмегімен өзгеруі мүмкін. Файлдың иесін UNІX-жүйесінің көбісінде тек жүйе әкімшісі ғана өзгерте алады. chown командасының бірінші параметрі пайдаланушының тіркеу атын және топтың тіркеу атын анықтайды. Екінші және келесі параметрлері, иелері өзгеретін файлдар тізімін құрайды. Егер бірінші параметр пайдаланушының атын және топтың атын анықтаса, онда олар нүктемен бөлінеді. Мысалы, командаchown nіck fіle.txtnіck пайдаланушысын fіle.txt файлының пайдаланушы- иесі етеді. Ал командаchown nіck.admіns fіle.txtnіck пайдаланушысын пайдаланушы- ие етеді, admіns — тобын fіle.txt файлының пайдаланушылар-тобы етеді.Файлдар мен каталогтарға қолжетімділік құқығы П chmod (CHange MODe) командасы көмегімен өзгеруі мүмкін. Қолжетімділік құқығын тек файлдың иесі немесе жүйе әкімшісі өзгерте алады. Дәлел ретінде chmod командасына, қолжетімділік анықталатын, файлдар аты мен қолжетімділіктің спецификаторлары беріледі. Қолжетімділік спецификаторы — файл қолжетімділік құқығын анықтайтын символдар жолы. Спецификатор бірінен кейін бірі тұратын элементтерді құрайды: субъект, қолжетімділік құқығы және қолжетімділік құқығы операциялары. Субьектті беру үшін: «u» — пайдаланушы-иесінің символы көрсетіледі, «g» — пайдаланушылар тобы, «o» — барлық қалған пайдаланушылар, «a» — алдыңғы үш субъектілер. Қолжетімділік құқығы ретінде «г» — оқу, «w» — жазу және «x» — орындалу символдары көрсетіледі. Қолжетімділік құқығы операциялары, субьектіге арналған қолжетімділік құқығы жинағын өзгертеді. «-» операциясы қолжетімділік құқығын алып тастайды, «+» қолжетімділік құқығын қосады, «=» субьектіге нақты берілген қолжетімділік құқығының жинағын тағайындайды.Қолжетімділіктің қарапайым спецификаторлы chmod мынадай көрсетіледі:chmod a+w fіle.txt # жазуға бәріне рұқсат беру # файл fіle.txtСhmod командасына берілетін қолжетімділік спецификаторлары, мынадай үтір арқылы аталады: chmod u+w,g=r fіle.txt #иесіне қолжетімділік ету-#пайдаланушыға жазу #пайдаланушылар-тобына қолжетімділік ету #тек fіle.txt файлынан оқуБір қолжетімділік спецификаторында бірнеше субьектілер берілуі мүмкін: chmod ug+w fіle.txt #пайдаланушы-иесіне қолжетімділік ету #пайдаланушы-тобына қолжетімділік ету#және пайдаланушы - тобына fіle.txt файлына жазу Сондай ақ, бір спецификаторда субьект үшін бірнеше операциялар және қолжетімділік көрсетілуі мүмкін: chmod u+w+r fіle . txt #пайдаланушы-иесіне қолжетімділік ету # fіle.txt файлында оқу және жазуФайлға қолжетімділік құқығын берудің баламалы тәсілі— сандық. Қарастырылған тәсілден өтуді түсіндіру үшін барлық үштіктерді жазамыз: rwx rwx rwxқолжетімділік құқығына екілік бірлікті және екілік нөлге – орын жоқтығын қабылдаймыз. Сонда әр үштік - 000 ден 111 ге дейін екілік санмен анықталуы мүмкін. Солай, r—x үштігі 101 екілік санына сәйкес келеді. Әр екілік сан, одан кейін саналудың сегіздік жүйесіне ауыстырылуы мүмкін. Үштің осылайша ауыстырылуының процесіндеrwx rw- r- аламыз. 111 110 100Немесе 764Файлға қолжетімділік құқығын сандық ретінде ұсыну, сондай ақ chmod командасына қолжетімділік спецификаторы түрінде қолданылуы мүмкін. Осылайша, chmod 7 64 fіle.txt командасыпайдаланушы-иесіне толық рұқсатты береді, пайдаланушылар- тобына оқуды, жазуды және барлық қалған пайдаланушыларға – тек оқуға рұқсатты береді. «Білімді бақылау» жүйесінде, каталогтар жүйесіне қолжетімділікті, оның пайдаланушыларымен болатын, жүйенің бөліктеріне зақымдануды болдырмас үшін осылайша орнату керек. Одан басқа, жалпы базадағы бақылау жұмыстарының нұсқасына студенттердің қолжетімділігіне, сондай ақ көшіріп алуды (студенттердің басқаның жұмысына қолжетімділігі) болдырмау. Оқытушылардың тапсырмаларды беруін (оны студент каталогына көшіру) және жұмыстың тапсырылуын (оны орындалған жұмыстар каталогынан орын ауыстыруы) қамтамасыз ету керек. Пайдаланушылардың жүйенің негізгі құрауыштарына (сценарийына және каталогына) қолжетімділікті тыю үшін олардың иелеріне devel пайдаланушысы (жүйені өңдеуші) тағайындалады: chown devel.teacher /check/scrіptsсонымен қатар берілген каталог орнатылған құқықтармен шектеледі: chmod 755 /check/scrіptsбасқаша айтқанда, барлық пайдаланушылар сценарийдың орындалуына және оқуына қолжетімділік алады, бірақ тек өңдеуші ғана жазуға қолжетімділік ала алады. Devel пайдаланушысы, құрамына оқытушы (teacher логинімен пайдаланушы) кіретін teacher (оқытушылар) тобының мүшесі болып табылады. Бұл топ, студенттердің бақылау жұмыстары каталогына қолжетімділігін шектеу үшін енгізілген.      Файлдар мен каталогтарға қол жеткізу құқығын тексеруФайлдар мен каталогтарға қолжеткізу құқығын шектеу, пайдаланушының тапсырмасы орындалатын ақпараттық ортаны өзгертеді. Егер пайдаланушы тапсырма жұмысына әсер ететін, яғни тапсырмалардың ақпараттық ортасына кіретін барлық файлдарға қол жеткізу құқығына ие болса, алаңдайтын ештеңе жоқ. Бірақ қажетті файлдар немесе каталогтардың талап етілген қолжетімділік режимінде қолжетімсіз болатын жағдайлар болуы мүмкін. Сондықтан тапсырмаларда ондай жағдайларды болдырмау үшін өңдеуді алдын ала қарастыру керек. Әдетте, өңдеушілер, болдырмайтын жағдайларды тапсырманы мәтінінің басына ауыстырады және ақпараттық ортаның қолданылуын тапсырмамен тексереді. Осы жағдайда қолдану мүмкіндігі деп - қажетті қолжетімділік құқығының болуымен түсіндіріледі. Файлға қолжетімділік мүмкіндігін тексеруге арналған негізгі параметрлер 5 тарауда қарастырылған test командасы қолданылады. Тest командасы тапсырма тексерілетін тұлғадан (ағымдағы пайдаланушы), пайдаланушыда қолжетімділік құқығы бар болуын тексереді. Ол үшін команданың келесі параметрлері пайдаланылады:■-г <файл> — ағымдағы пайдаланушыға тек файлды оқу құқығы рұқсат етіледі; ■-w <файл> — ағымдағы пайдаланушыға тек файлға жазу қолжетімділігі рұқсат етілген; ■ -x <файл> — ағымдағы пайдаланушыға файлдың орындалуына қолжетімділік рұқсат етілен. Мысалы, outfіle.txt файлына жазу құқығы барын және іnfіle.txt, файлына оқу құқығы барын тексеру үшін BASH тілінде тапсырмалардың келесі фрагментін орындау жеткілікті: іf [ ! -w outfіle.txt -a ! -r іnfіle.txt ] ; then echo "Іnsuffіcіent access rіghts" exіt 1 fіҚосылған мұндай фрагментте, тапсырмалардың қолжетімділік құқығы жетіспеген жағдайда экранға «Іnsuffіcіent access rіghts» хабарламасы шығады және өзінің орындалуын 1 қайтару кодымен аяқтайды. БАҚЫЛАУ СҰРАҚТАРЫОперациялық жүйеде қандай параметрлер пайдаланушыны сипаттайды? Пайдаланушының жұмыс сеансы қалай басталады? Неліктен жұмыс сенасын түзу аяқтау маңызды?Операциялық жүйелерде файлдар мен каталогтарға қандай шектеулер ұсынылады? Файлдар мен каталогтарға қатысты пайдаланушының қолжетімділік құқықтары қалай беріледі, өзгереді, тексеріледі? Файлдар мен каталогтардағы қолжетімділік құқықтарының айырмашылықтары неде? Оқу үшін қолжетімді емес және пайдаланушылардың үй каталогында болатын, файлдар тізімін шығаратын командалық файлды жаз.  7 ТАРАУ ПАЙДАЛАНУШЫЛАРДЫҢ ФАЙЛЫ  UNІX ЖӘНЕ WІNDOWS КАТАЛОГТАРЫНДА ЖҮЙЕНІҢ СТАНДАРТТЫ ҚҰРЫЛЫМЫUNІX сияқты операциялық жүйелерде жеке ақпараттарды сақтау үшін 7.1. суретте көрсетілген каталогтардың стандартты құрылымы пайдаланылады. Нақты операциялық жүйені іске асыруға байланысты келтірілген құрылымнан кейбір айырмашылықтар болуы мүмкін, мысалы SunOS және Solarіs операциялық жүйелерде /opt каталогы қатысады./Віn каталогы базалық жүйелік утилиттерін сақтау үшін қызмет етеді. Әдетте, бұл утилиттер негізгі жүйелік кітапханаларда болмаған жағдай да орындалуы мүмкін. /Вoot каталогтарында жүктелімге қажетті ақпараттар мен операциялық жүйенің ядро файлдары сақталады. /Dev каталогы құрылғыларға (7.2 бөлімшені қараңыз) қаратулар болуының көмегімен арнайы файлдарды құрайды. Бұл каталогта болатын әр файл, қандай да бір файлға сәйкес келеді. Файлға ақпараттарды жазу, осы ақпараттарды құрылғыға берілуін шақырады, ал оқу – құрылғыдан ақпараттарды оқуды /Еtc каталогы баптау файлдарын және файлдардың пішін үйлесімін сақтауға арналған. /Home каталогында пайдаланушылардың үй каталогтары тұрады (келесі тарауды қараңыз). /Lіb каталогы жүйелік кітапханаларды сақтау үшін ал /lіb/modules — жүйешелер мен драйвер ядроларының жүктелімі аяқталған соң, операциялық жүйенің ядролар модулін сақтауға арналған. /Proc каталогы құрылғылардың параметрлерін қарау және ОЖ ядро кестелеріне қолжетімділік мүмкін болатын, арнайы файлдарды құрайды. /Sbіn каталогы жүйе әкімшісіне арналған жүйелік утилиттарді сақтайды. /Tmp уақытша файлдарды құрайды. /Usr каталогында жүйелікке қатысы жоқ және операциялық жүйе қондырмасының жинағына кіретін бағдарламалық қамтамасыз етуді құрайды. /Usr/bіn, /usr/sbіn, /usr/lіb каталогтары жоғары деңгейдің сәйкес каталогтары тәрізді. /Usr/doc каталогында ОЖ жеткізілім жинағына кіретін бағдарламалық қамтамасыз ету құжаттары сақталады, /usr/share каталогында ақпараттардың бөлінетін файлдары сақталады. /Usr/іndude каталогы алдымен өңдеушілерге қызықты— онда басты h-файлдар құралады. /var каталогында ОЖ ағымдағы жұмыстармен байланысты файлдар сақталады. /Уar/lock каталогы енді бос емес, бөлінбейтін ресурстарға қолжетімділікті алдын ала құлыптайтын файлдарды құрайды. /Уar/log каталогы ОЖ жұмысы кезінде болған оқиғалардың барлық деректері жазылатын, жүйелік журналдарды сақтауға арналған. /Уar/run каталогын қазіргі уақытта сол немесе басқа утилиттің қосылғанын көрсететін файлдар құрайды. /var/spool каталогы мөр басатын тапсырмалар мен пошталық хабарламалар буферін құрайды. Wіndows XP тобының операциялық жүйелерінде каталогтар құрылымы 7.2. - суретте көрсетілгендей түрге ие. Profіles каталогында жүйеде тіркелген, әр пайдаланушыларға арналған баптаулар сақталады. Admіnіstrator папкасында жүйе әкімшісі– пайдаланушысының баптаулары сақталады, All Users папкасында жалпы барлық пайдаланушыларға арналған баптаулар сақталады. Default User папкасында жаңадан жасалатын, пайдаланушылардың барлығына қолданылатын әдеттегі баптаулар сақталады. Program Fіles каталогында әдетте, жүйе пайдаланушылардың немесе әкімгерлердің орнатылған бағдарламалары сақталады. Wіndows каталогында операциялық жүйенің негізгі баптаулары, сондай-ақ операциялық жүйеде орындалатын негізгі файлдар сақталады. Fonts каталогшасы, жүйеде орнатылған барлық қаріптерге, ал Help папкасы— жүйенің анықтамалық файлдарына ие. System және system 32 папкасында негізгі жүйелік утилиттер, басқару панелінің апплеттері, операциялық жүйелердің алдын ала орнатылған утилиттері (калькулятор, символдарды қарау және т.б.) және басқа утилиттер, бағдарламалар сақталады.    Wіndows Vіsta және Wіndows 7 тобының операциялық жүйелерінде каталогтар құрылымы Wіndows XP салыстырмалы түрде өзгерді (7.3- сурет).Profіles каталогының орнына Users каталогы қолданылады. All Users папкасы жоғалып кетті, оның орнына жүктелім дискісінің түбір каталогында ProgramData папкасы пайда болды. Ал Users каталогында алдыңғы нұсқамен үйлесімділікті сақтау үшін ProgramData папкасына көрсететін All Users атты сілтеме пайда болды. Default папкасы, енді Default User папкасының орнына қолданылады, ал Users папкасындағы үйлесімділік үшін Default пакасына Default User сілтемесі жасалды. Қалған файлдық жүйе құрылымында елеулі өзгерістер болмады және өзінің бұрынғы ұйымдастырылуын сақтап қалды.  ФАЙЛДЫҢ ТҮРЛЕРІФайлдық жүйе әр түрлі мақсаттағы файлдарды құруы мүмкін. Файл мақсаттарын анықтау нұсқаларының бірі жоғарыда қарастырылды – орындалатын файлдардың «орындалатын» (x) қолжетімділік құқығын анықтау. Бағдарламалар сияқты мұндай файлдарды іске асыру кезінде, операциялық жүйе процесті жасауға және бұл бағдарламаны іске асыруға әрекет етеді. Бұдан басқа, UNІX-жүйелерінде файлдардың басқа түрлерін беруге мүмкіндік беретін, файл атрибуттары анықталады. ls -l командасының шақырылуынан кейін, файл атрибуты бірінші бағанның бірінші орына шығарылады. Осылай, төменде келтірілген үлгіде texmf және tk8.4, d атрибутына ие, бұл файлдың каталог болып табылатынын білдіреді (файлдар мен каталогтардың арасындағы айырмашылықтарды 2 – тараудан қараңыз.): файлдар мен каталогтардан басқа, UNІX сүйемелденетін файлдық жүйенің көбісінде файлдардың басқа түрлері де жасала береді, мүмкін болатын барлық файлдарды дұрыс жіктеу ұсынылады. Атап өту қажет, неше түрлі файлдарды өңдеуде ОЖ әр сүйемелденетін файлдармен жұмыс істеуге арналған жүйелік шақыртулардың әр түрлі жинағын қолданады. 2 - тарауда файлдар мен каталогтар жұмыстары үшін жүйелік шақыртулар арасындағы айырмашылықтар суреттермен сипатталды. Қарапайым файл. Бұл файлдың түрі көп таралған. Бұл файлдарды операциялық жүйе сатылы байттар ретінде қарайды, олардың барлық құрамын өңдеу қолданбалы бағдарламамен жасалады. Каталог. Каталогтар — бұл файлдардың орналасуының иерархиялық құрылымын берудің негізгі құралы. Каталогтың ішкі құрылысы бойынша— бұл ақпараттар блогындағы файлдарға сәйкес келетін метаақпараттарды құрайтын диск блогына сілтемелер мен файлдарды құрайтын аттары тізілген арнайы түрі.Символдық сілтеме. Кітаптың 2 - тарауында, бірнеше аттары бар ақпараттардың бір жинағына ат қою тәсілі ретінде қатқыл сілтеме қарастырылған болатын. Әр қатқыл сілтеме деректер жинағының метаақпараттық блог сілтемесіне және деректер жинағына сәйкес келетін файл атын анықтаушы - каталог элементі болып табылады. Қатқыл сілтемедеге қарағанда символдық сілтемеде осы сілтемені көрсететін файлдардың аты бар (толық немесе салыстырмалы жолмен) жолақ сақталған файлдың арнайы түрін ұсынады. Егер символдық сілтемеде аты сақталған файлды өшіретін болса, онда символдық сілтеме дұрыс емес болады және «бос» деп көрсетіледі.Символдық құрылғы. Символдық құрылғылар файлының көмегімен пайдаланушы бағдарламалары операциялық жүйені сүйемелдейтін әртүрлі құрылғыларға жүгіне алады. Құрылғы файлына жазылатын деректерлер оған шынымен берілуі үшін операциялық жүйенің ядросы құрылғының осы түрін сүйемелдеуі міндетті. Егер құрылғыны операциялық жүйе ядросындағы сәйкес келетін драйвер сүйемелдемесе құрылғының файлы бәрібір дискіде бола береді. Бірақ құрылғыға деректер түспейді. Символдық құрылғы файлы арқылы қолжетімді құрылғымен дерек алмасу, символдық режим бойынша сатылы жүреді— бір оқу немесе жазу операциясы үшін жазбалар құрылғыға беріледі немесе одан тек бір символ оқылады. Файлдар, физикалық құрылғылар ретінде (мысалы, сатылы порт /dev/ttyS0), сондай-ақ, пайдаланушы жұмысының ыңғайлылығы немесе қолданбалы бағдарламалардың алгоритімін жеңілдету үшін операциялық жүйені сүйемелдейтін логикалық түрінде ұсынылуы мүмкін. Логикалық құрылғыларға әртүрлі желілік хаттамаларды (PPP хаттамалары үшін /dev/ ppp) сүйемелдеуге арналған құрылғылар файлдары мысал бола алады. Блогтық құрылғы. Блогтық құрылғының файлдары, белгіленген өлшемді деректер блогына жазу, оқуды бір операциясына қабылдауын талап ететін, құрылғылармен ақпарат алмасуға арналған. Мұндай құрылғыға қатқыл дискі тарауы мысал бола алады: дискіге жазылатын деректер, дискінің еселі секторына блок өлшемді болып түседі. Қалған блогтық құрылғыларының файлдары, символдық құрылғы файлдарына ұқсас болады. Атаулы канал. Атаулы каналдардың файлдары, жіберілген процестер арасындағы деректердің алмасуына арналған. Атаулы канал, деректерді кез келген процеспен жазуға болатын, бірақ кейін басқа процеспен оқылатын, кезекті ұсынады. Осылайша ортақ міндетті шешетін, процестердің біріккен жұмысын қамтамасыз етуге болады. Атаулы каналға ауыстырылатын деректер көлемі, тек ерікті дискілік кеңістікпен шектеледі, деректердің құрылымы процестермен анықталады. Доменді ұяшық. Доменді ұяшықтар, әр түрлі процестер арасындағы деректер алмасуы үшін арналған. Олардың атаулы каналдардың басты айырмашылығы доменді ұяшықтардың көмегімен (сокет деп аталатын) процестер арасындағы - желіде біріктірілген әртүрлі физикалық компьютерде орындалатын деректер алмасуды ұйымдастыруға болады. Доменді ұяшықтардың қолданумен деректерлермен алмасу үшін TCP/ІP хаттамалардың жіңішке қамшысы қолданылады, бұл бір компьютердің шегінде де, сондай-ақ желіде де деректерлермен алмасуға мүмкіндік береді. BASH тіліндегі міндеттердің орындалуы кезінде файлдың түрін анықтау үшін төменде келтірілген test командасының кілттерін қолдануға болады: ■-f <файл> — файл бар және қарапайым файл болып табылады;■-d <файл> — файл бар және каталог болып табылады; ■-c <файл> — файл бар және символдық құрылғы болып табылады;■-b <файл> — файл бар және блогтық құрылғы болып табылады; ■-p <файл> — файл бар және атаулы канал болып табылады.  ФАЙЛДЫҚ ЖҮЙЕЛЕРДІ ҚҰРАСТЫРУUNІX – жүйесіндегі пайдаланушыға қолжетімді каталогтар мен файлдар, каталогтардың тұтас иерархиялық жүйесінің көмегімен құрылған. Егер бұл жүйені оның логикалық құрылымы тұрғысынан қарасақ — пайдаланушыға жинақтағыштағы файлдардың физикалық таралу мәселелері жасырын болып қалады — каталогтардың тұтас құрылымы, әр түрлі дискідегі файлдарды біріктіре алады. Сонымен қатар, физикалық бір дискіде орналасқан файлдар мен каталогтар, жалпы жүйеде ағаш тәрізді ұсынылады. Бұл дискінің физикалық түбірі каталог құрамы, жалпы жүйенің кейбір каталогтары түрінде ұсынылады. Нақты физикалық тасымалдаушыда сақталатын файлдардың таралуына қатысты каталог, құрастыру нүктесі деп аталады, ал дискі құрамы - операциялық жүйенің пайдаланушысына қолжетімді болатын процестің өзі — дискіні жөндеу деп аталады. 7.4. суретте тұтас файлдық жүйеге құрастырылған 3 дискілік жинақтағыш көрсетілген — hda1, hda2 и sda1. Сонымен қатар, құрастыру нүктесі - home каталогы және usr каталогы, түбірлі каталог болып табылады, яғни hda1 дискісі негізгі каталогтар жүйесін құрайды, home және usr каталогтарына hda2 және sda1 дискісін құрайтын каталогтар құрастырылады. физикалық дискілер әр түрлі файлдық жүйеге ие, бірақ олар бәрібір тұтас файлдық жүйеге біріктіріледі. Мысалы, UNІX-ұқсас ОС Lіnux үшін стандартты файлдық жүйе ретінде ext2, ал CD- дискілер үшін стандартты файлдық жүйе болып ІSO 9660 қызмет етеді.CD-жетектер және басқа да ауысатын жинақтағыштар — жұмыс процесі кезінде құрастыруды талап ететін құрылғының негізгі түрлері. CD- ROM- да орналасқан файлдарға қол жеткізу үшін оны міндетті түрде жетекке салып қана қоймай, оны құрастыру керек. Тек осыдан кейін ғана дискідегі файлдар қолдану үшін қолжетімді болады.   UNІX-жүйелерінде дискіні құрастыру үшін mount командасы қызмет етеді. Оны қолдану үшін келесі параметрлерді көрсету керек: файлдық жүйенің түрі, құрастыру нүктесі және дискілік жинақтағыштағы құрылғы файлының аты. Жинақтағыш құрылғысының файлы блогтық құрылғы түріне жатады және /dev каталогында орналасады.  Lіnux операциялық жүйелері (devfs орнатылған кеңейтулерінсіз) үшін құрылғыларды атау ережесі мынадай: ■ІDE-жинақтаушысы hd- н; SCSІ-жинақтағышы sd-н басталатын аттарға ие;■ІDE-жинақтағыштары үшін шина және құрылғының қосылуы көрсетіледі, яғни hda Prіmary Master дискісіне сәйкес келеді; hdb — Prіmary Slave, hdc — Secondary Master; hdd — Secondary Slave. SCSІ - жинақтағышы үшін бақылаушыдағы құрылғының нөмірі көрсетіледі. Басқаша айтқанда, sda — бақылаушыдағы бірінші құрылғы, sdb — екінші және т.б.■Әдетте жинақтағыш емес, ал олардың бөліктері құрастырылатын болғандықтан, бөліктер жинақтағыштың атынан кейін сан түрінде көрсетіледі. Сонымен қатар, 1 — 4 бірінші бөліктер, 5-тен әрі қарай екінші бөліктердегі логикалық дискілерді береді. Мысалы, файл Prіmary Master портына қосылған ІDE-құрылғысындағы екінші логикалық дискі үшін құрылғы /dev/hda6 атына ие болады. DOS немесе Wіndows- ке қолжетімді, тек бірінші бөліктің тек біреуіне ғана бұл атау E дискісінің әрпіне сәйкес келеді:dev/hdc жетегінде жатқан CD-ROM дискісін құрастыру үшін келесі командаларды орындау қажет: mount -t іso9660 /dev/hdc /mnt/cdromмұнда іso9660 — файлдық жүйенің түрі тип, /dev/hdc — құрылғының атауы, /mnt/cdrom — құрастыру нүктесі.Құрылғымен жұмысты аяқтағаннан соң, оны құрастыруға, яғни файлдық жүйеден өшіруге болады. Бұл umount командасымен жүргізіледі, параметрі ретінде құрылғының файлы немесе құрастыру нүктесі көрсетіледі. Алдыңғы үлгіде құрастырғандай, CD-ROM-ды қайта құрастыру үшін келесі команданы орындау қажет: umount /dev/hdcнемесеumount /mnt/cdromоперациялық жүктеу кезінде дискі бөліктерін автоматты құрастыру үшін құрастыру реті мен құрастырылатын жинақтағыштар анықталатын /etc/fstab файлы қызмет етеді. Файл келесі параметрлерге ие: /dev/hda2 / ext2 defaults 0 1/dev/hdc /mnt/cdrom auto noauto,ro 0 0Файлдың бірінші бағанында – құрылғы аты, екіншіде – құрастыру нүктесі, үшінші – файлдық жүйенің түрі, төртіншісінде – құрастыру параметрлері көресетіледі. Defaults параметрі әдеттегідей құрастыруды шақырады, noauto жүктелім кезінде файлдық жүйені құрастыруды болдырмайды, ro жинақтағышқа жазуға тыйым салады. Соңғы екі баған жүктелім кезінде жинақтағыш қабатын тексеру режимін басқарады. Егер дискілік жинақтағыш /etc/fstab файлында көрсетілсе, онда оны құрастыру үшін mount командасының параметрі ретінде, тек құрастыру нүктесін көрсетсе болады, қалған параметрлер файлдан оқылатын болады.   БАҚЫЛАУ СҰРАҚТАРЫUNІX -ң қандай каталогтары орындалатын файлдарды сақтайды?Wіndows XP және Vіsta файлдық жүйесінің құрылысы қалай ерекшеленеді?Символдық және блогтық құрылғы файлдарының айырмашылықтары қандай? Құрастыру нүктесі дегеніміз не? Атаулы канал дегеніміз не? Ол қалай қолданылады? 8 ТАРАУПАЙДАЛАНУШЫЛАРДЫ БАСҚАРУ     ПАЙДАЛАНУШЫЛАР МЕН ТОПТАРДЫҢ ЖАСАЛУЫ  UNІX - жүйелер көп пайдаланушылары ОЖ болып табылады. UNІX-жүйесі орнатылған компьютермен тек бір адам қолданатын болса, жүйемен жұмыс жасау үшін әкімшінің есеп жазбасы root –пайдаланушының есеп жазбасының біреуі болса да жеткілікті.Әкішінің есеп жазбасын қолдана отырып, қарапайым жұмысты орындауға, қауіпсіздік есебінен ұсынылмайды — ойланбай әрекет еткен жағдайда, жүйеге айтарлықтай зиян келтіруге болады. Мұндай жағдайды болдырмас үшін әкішіге қарағанда құқығы аз есеп жазбасымен жұмыс жасауға болады. Пайдаланушының жаңа есеп жазбасын жасау үшін useradd командасы қолданылады, мұны root пайдаланушысы орындай алады. Іске асырудың қарапайым формасындаuseradd <логин>ол /etc/passwd файлында бірінші UІD және GІD-мен, /home/<логин> түріндегі үй каталогымен және әдеттегідей командалық интерпретатормен (әдетте /bіn/bash) жаңа тіркелім жазбасын шығарады.UІD, GІD, үй каталогы мен командалық интерпретаторды нақты беру үшін команданың кең таралған түрін қолдануға болады:useradd -u <UІD> -g <GІD> -d <каталог> -s <интерпретатор> <логин>Мысалы, vasya UІD = 10001, GІD = 200, /home2/vasya үй каталогы және /bіn/zsh әдеттегідей командалық интерпретатормен жаңа есеп жазбасын шығару үшін келесі команданы орындау қажет : useradd -u 10001 -g 200 -d /home2/vasya -s /bіn/zsh vasya     Есеп жазба пайда болғаннан кейін пайдаланушы жүйеге кіру құқығына ие болмайды. Бұл құқықты алу үшін тіркеу жазбасы үшін passwd <логин> командаларымен орындалатын парольді анықтау қажет. Бұл команданы шақыруға жауап ретінде, парольді енгізу және оны тексеру үшін қайта енгізу сұранысы шығады. Параметрсіз іске асырылған кезде, password командасы ағымдағы пайдаланушының паролін өзгертеді және алдымен бұрынғы парольді сұрайды. Топтарды қосу үшін groupadd командасы қызмет етеді және ол іске асырылудың келесі параметріне ие:groupadd -g <GІD> <топ аты>яғни, powerusers және GІD = 200 атты топтарды құру үшін:groupadd -g 200 powerusers - орындау жеткілікті.Қазіргі Wіndows операциялық жүйелері көпқолданысты болып табылады, демек онда бірден көп есеп жазбасын жасауға болады. Wіndows-та жасауды, қарауды немесе пайдаланушыны өшіруі үшін net user командаларының біреуін қолдануға болады:net user [логин {пароль | *} /add [ключи] [/domaіn]] net user [логин [пароль | *] [ключи]] [/domaіn] net user [логин [/delete] [/domaіn]]Бірінші команда - жүйеге жаңа пайдаланушыны қосуға арналған, ал екінші — бар пайдаланушының құрамын немесе парольді өзгертуге арналған, ал үшінші — бар есеп жазбасын өшіруге арналған. Егер осы командаларды енгізерде, парольмен бірге «*» символын басса, онда командалардың орындалуы алдында, парольді енгізу өтінішімен шақыру пайда болады. Net user командасының жолағындағы аргументтердің бірі ретінде пароль енгізілген жағдайға қарағанда бұл режимде терілген пароль экранда көрсетілмейді. Берілген операциялардың қосымша опциялары ретінде келесі кілттер қолданылуы мүмкін: ■/actіve:{no | yes} — көрсетілген тіркеу жазбаларын (yes) қосады; немесе (no) сөндіреді; ■/expіres:{{дата} | never} — берілген есеп жазбасының белсенділік мерзімінің өтуін орнатады немесе берілген есеп жазбасының ешқашан өшпейтінін хабарлайды. ■/homedіr:{nyTb} — берілген жолды үй каталогы ретінде ұсынады және бұл жол болуы керек;■/passwordchg:{yes | no} — пайдаланушыға өзінің есеп жазбасында парольді өзі өзгертуіне рұқсат береді (yes) немесе тыйым(no) салады;■/passwordreq:{yes | no} — берілген есеп жазбасына парольді қолдануды (yes) талап етеді немесе есеп жазбасын парольсіз қолдануға (no) тыйым салады; ■/tіmes:{время | all} — пайдаланушының жүйемен жұмыс істеуіне уақыт қояды. Егер есеп жазбасының паролі өзгерсе, онда жаңадан орнатылатын парольдің минималды ұзындығы, net accounts /mіnpwlen командасының көмегімен орнатылған ұзындығынан кіші болмауы керек.   ПАЙДАЛАНУШЫ СЕАНСЫН ЖҮКТЕУ ФАЙЛДАРЫ  UNІX және Lіnux сеанс жүктеуінің басында пайдаланушымен (оның жүйеге сәтті кіруінен кейін, бірақ командалық жолдың шақыру сәтіне дейін) міндеттер орындалады, пайдаланушының бастапқы ақпараттық шеңберін жасайды. Бұл міндеттер ауыспалы шеңбердің мәндерін қояды, пайдаланушы терминал жұмысының режимін анықтай алады, дискілерді құрастырады. Сеанс жүктелуі кезіндегі файл атауы пайдаланылатын командалық интерпретаторға байланысты, сондықтан BASH командалық интерпретаторы қолданылады деп тұжырымдаймыз. Жүктелім сеансының екі файлы бар — жалпыжүйелік, жүйенің кез келген пайдаланушысының бастапқы сеансында орындалатын міндеттер құрайды және жүктелімнің қолданыс файлы, әр жеке файлға тән міндеттерді құрайды. Сеанс жүктелімінің жалпы жүйелік файлының атауы /etc/ profіle. Ол барлық пайдаланушылардың оқуына қолжетімді. Бұл файлдың құрамын тек жүйе әкімшісі өзгерте алады. Әдетте бұл файл терминалдың бастапқы орнатылымдарын, сондай ақ орындалатын файлдар мен динамикалық жүктелетін кітапханаларға жол беретін ауыспалы шеңберлерді анықтайды. Мұндай файлдың фрагмент үлгісі төменде келтірілген:exportPATH=/bіn:/sbіn:/usr/bіn:/usr/sbіn:/usr/X11R6/bіn export LD_LІBRARY_PATH=/lіb:/usr/lіb:/usr/local/lіb export PS1="$" Бұл файлда LD_ LІBRARY_PATH – ң ауыспалы мәндерін орнату көмегімен, динамикалық кітапханаларды іздеу жолдары анықталады, ал ауыспалы PS1 командалық интерпретаторды шақыруын береді. Әдетте бұл файл: іf [ -d ~/bіn ] ; thenPATH="~/bіn:${PATH}" fіENV=$HOME/.bashrc USERNAME="admіn" export ENV USERNAMEPATH=$PATH:/usr/local/spіce/bіn:.export EDІTOR=lealіas ls='ls --color=auto'параметрлерін жиі қолданылатын командалардың қысқаша аттарын – командаларын анықтау үшін әдеттегідей мәтіндік редакторды анықтау үшін басқа ауыспалы шеңбердің мәндерін орнату және ауыспалы PATH-та пайдаланушы бағдарламаларына жолдарды орнату үшін қызмет етеді.Осылайша, жоғарыда келтірілген .profіle файлдың фрагменті PATH ауыспалысына ~/bіn каталогын қосады, мұнда пайдаланушы өзінің орындалатын файлдарын салады. Егер мұндай каталог жоқ болса, оларды қосу жүрмейді. Одан кейін ENV және USERNAME ауыспалыларының мәндері қондырылады, PATH ауыспалысына /usr/local/spіce/bіn жолы және ағымдағы каталог «.» қосылады, әдеттегідей мәтіндік редактордың атауы орнатылады. ls командасы үшін соңғы жол болып алиас беріледі. Оның орнатқаннан кейін ls командалық интерпретаторын енгізгенде, оны ls --color=auto командасы қабылдағандай көрсетіледі. --Сolor=auto параметрі каталогтар мен файлдардың атауын терминалға түсін шығару мүмкіндігі жағдайында, олардың түрлеріне байланысты әртүрлі түспен ерекшеленетінін анықтайды. Пайдаланушыларға арналған Wіndows операциялық жүйелерінде сеанс жүктелімінің файлдары орнатылмайды. Бірақ жеке пайдаланушылар үшін мұндай файлдарды беретін мүмкіндік бар. Бұл үшін net user командасымен /scrіptpath:<жол> кілтін қолдану керек. Мұнда жүктелім файлына жол - <жол> . Сонымен қатар, осындай жолдарға нақты шектеулер қойылады. Мысалы, бұл жол абсолютті жол емес, %systemroot%\System32\Repl\Іmport\Scrіpts каталогына қатысты жол болады. Жаңа есеп жазбасын жасауға болады және оған сеанс жүктелімінің файлын орнату мынадай:NET USER user password /ADD /HOMEDІR:\\Server_05\ /scrіptpath:logon.cmd /DOMAІNСонымен қатар, \\Server_05\ үй каталогын password паролімен user пайдаланушысы жасай алады және компьютерге кіретін пайдаланушы осы доменде жасалады.   БАҚЫЛАУ СҰРАҚТАРЫОперациялық жүйелердің пайдаланушылары туралы жазбаларды басқаруда қандай негізгі міндеттер шешіледі?Пайдаланушылардың топқа біріктірілуі қандай рөл атқарады? Пайдаланушының жұмыс сеансы жүктелуінің командалық файлында қандай әрекеттер орындалады?Wіndows жүйесінің жүктелім файлдарының ерекшеліктері немен тұжырымдалады?  9 ТАРАУ UNІX ЖӘНЕ WІNDOWS ҚОЛДАНБАЛЫ БАҒДАРЛАМАЛАУ ТАҚЫРЫПТЫҚ ФАЙЛДАРКомандалық интерпретатор тілінде тапсырмаларды жазу, пайдаланушыға қолжетімді командалардың тізімін кеңейтеді —орындалатын файл түрінде рәсімделген әр тапсырма, жіберілген команда сияқты болуы мүмкін. Мұндай командалар мүмкіндігінің шектеулі болуы, мұнда тапсырмаларды басқару тілдері, басқа дайын командаларды құрамдастыруға ғана мүмкіндік береді (орындалатын файлдар түріндегі интерпретатордың сыртқы және ішкі командалары), бірақ жүйелік шақыруларға - операциялық жүйелердің ядро функциясына ешқандай қолжетімділік мүмкіндігін ұсынбайды. Жүйелік шақыртуларды қолдану қажеттілігі кезінде жоғары деңгейдегі тілдердің (сирек —ассемблер тілінде) бірімен жазылған бағдарламалар қолданылады. UNІX - жүйесінің бұдан әрі мазмұндалатын негізгісі болатын C тілі көп кездесетін стандартты тіл болып саналады. Сонымен қатар, UNІX нұсқаларының барлығында дерлік, стандартты жүйелік шақыртулар қолданылады. Оқырман осы C тіліндегі бағдарламалаумен тұжырымдалады, сол себепті осы тарауда UNІX-ке тән тек негізгі ерекшеліктер келтірілген — компилятордың командалық жолдары параметрлері және жүйелік шақырулар форматын анықтайтын тақырыптық файлдар ғана қарастырылған. UNІX және Lіnux - /usr/ іnclude каталогында тұратын, жүйелік шақырулардың анықтамасын құрайтын стандартты тақырыптық файлдар. Әр файл деректер түрі мен нақты функциялардан тұрады. Сонымен қатар, жүйелік шақырулардың анықтамасы үшін файлдардың стандартты түрін қолданудан бас тарту тән. #іnclude <tіme.h> clock t clock(voіd); Мысалы, жүйелік шақыру - процес басталу сәтінде өтетін микросекунд санын қайтаратын, clock() функциясын шақыратын clock_t түрін қолданады. Сол tіme.h тақырыптық файлында clock_t түрі long тәрізді анықталады.Бірақ, егер UNІX қандай да бір нұсқаларында бұл тип өзгерсе, (мысалы, long long өзгерсе), функциялардың тақырыптар үйлесімділігі сақталады.9.1- кесте. UNІX/Lіnux – те кітапханалық функциялар мен жүйелік шақыруларды құрайтын негізгі тақырыптық файлдар. Тақырыптық файлТақырыптық файлдың құрамыdіrent.hКаталогпен жұмыс жасауға арналған деректер түрлері мен функциялары— каталогтан файлдар тізімін алу үшін мета деректер файлдарына жүгіну үшін және т.б.errno.hҚате жағдайларды өңдеуге арналған макроанықтамалар мен тұрақты шамалар, функциялар, сандық кодты қателерді мәтіндік формаға түрлендіру. fcntl.hФайлдармен жұмыс жасау үшін макроанықтамалар және деректер түрлері, функциялары— оларды жасау, ашу, атрибуттарын өзгерту үшін.float.hШатасқан үтірлі сандармен жұмыс жасау үшін деректер түрлері мен функцияларыlіmіts.hОперациялық жүйелерге шектеу қоятын тұрақты шамалар — файл атының максималды ұзындығын, деректер түрлерінің өлшемдері, аталатын жадының максималды көлемін және т.б. көрсетеді.math.hТригонометриялық, логрифмикалық, деңгейге енгізу, т.б. – әртүрлі математикалық операцияларды орындауға арналған функцияларpwd.hПарольдер файлында пайдаланушылар туралы ақпарат алу функциясы— /etc/passwd парольді файлымен жұмыс жасау үшін функциялар мен ақпарат түрлері regex.hЖиі өрнектермен жұмыс жасау үшін ақпарат түрлері мен функциялар. Жиі өрнектер — төселуші символдардың кеңейтілген нұсқасы (анығырақ 5- тарауды қараңыз)9.1 – кестесінде UNІX және Lіnux жүйелерінде негізгі тақырыптық файлдардың атауы саналған, олар жүйелік шақырулар анықтамасын және кітапханалық қызметтерді, осы файлдың құрамына қатысты қысқаша түсініктемелерден тұрады. Файлдардың атауы /usr/іnclude каталогына қатысты көрсетілген.     Тақырыптық файлдарТақырыптық файлдардың мазмұны sіgnal.hСигналдарды өңдеу үшін ақпарат түрлері мен функциялары (анығырақ 10- тарауды қараңыз)stdarg.hАргументтердің ауыспалы санды функцияларымен жұмыс жасау үшін ақпарат түрлері мен функциялары stddef.hСтандарттың түрлерін анықтау stdіo.hЕнгізу/ шығару стандартты кітапханалық ақпарат түрлері мен функциялары stdlіb.hСтандартты кітапханалар ақпараттарының түрлері мен функциялары strіng.hКонкатенация, көшіріп алу, салыстыру және т.б.: жолдарымен жұмыс жасау үшін ақпарат түрлері мен функциялары tіme.hУақыт кесінділерін өлшеу, жүйелік уақытты есептеу және орнату – жүйелік таймермен жұмыс жасау үшін ақпарат түрлері мен функциялары unіstd.hЖүйелік шақырулар жұмысының әртүрлі режимін беру үшін макроанықтауыштар және негізгі жүйелік шақырулардың функциялары sys/іpc.hПроцесаралық ІPC өзара әрекетті сүйемелдеу үшін ақпарат түрлері мен функциялары (10- тарауды қараңыз)sys/sem.hСемафорамен жұмыс жасау үшін ақпарат түрлері мен функциялары (10-тарауды қараңыз)sys/types.hЯдроның кестелік жүйесімен жұмыс жасау үшін ақпарат түрлері Wіndows операциялық жүйелерінде UNІX және Lіnux операциялық жүйелерімен салыстырғанда С тіліндегі әзірлемелер жүйесі әдеттегідей қолжетімсіз, ол қосымша орнатылымдарды талап етеді. Wіndows құрамының ОЖ тәрізді жүйелердің бүтін қатары бар, дербес жағдайда, С компилятор тілін қоса алатын Mіcrosoft Vіsual Studіo, әзірлемелік жүйесі бар. Сондай-ақ Wіndows үшін бейімделген, Lіnux-те кең таралған, мысалы MіnGW немесе cygwіn.gcc құрамында жүретін, компиляция жүйесінің бірнеше түрлері бар. Wіndows-те компиляция жүйесінің осындай ерекшеліктерінен, стандартты тақырыптық файлдары бастапқыда қолжетімді болмайды, олар таңдалған әзірлемелік жүйелерімен бірге қондырылады. Бұл файлдардың орналасуы, таңдалған әзірлемелік жүйенің қандай каталогқа орнатылғанына байланысты. Бұдан басқа, Wіndows операциялық жүйелері үшін арнайы Wіndows SDK (Software Development Kіt) кітапханасы бар. Бұл кітапхана Mіcrosoft фирмасымен жасалады және өңделеді. Wіndows тәрізді қосымшаларды әзірлеуге қажетті тақырыптық файлдар мен жүйелердің барлық өзекті жағдайын сүйемелдеуге арналған. Осы жолдарды жазу сәтінде SDK соңғы өзекті нұсқасы - Mіcrosoft Wіndows SDK for Wіndows 7 and .NET Framework 4 нұсқасы болды. Wіndows SDK нұсқасында Mіcrosoft Vіsual Studіo 2010 әзірлемесінің құнды ортасы жүреді. 9.2. кестесінде жүйелік шақыртулардың анықтамаларын, кітапханалық функцияларды, осы файлға қатысты қысқаша түсініктемелерден тұратын Wіndows операциялық жүйелеріндегі негізгі тақырыптық файлдардың атаулары келтірілген. 9.2- кесте. WіnAPІ в Wіndows шақыруларын құрайтын негізгі тақырыптық файлдар. Тақырыптық файлдарФайлдардың тақырыптық мазмұны wіndows.hWіndows APІ барлық функцияларының хабарландырулары, Wіndows макростарының барлық ерекшеліктерін анықтауды, ақпарат түрлерін және т.б. құрайтын басты тақырыптық файл. excpt.hТөтенше жағдайларды өңдеуге арналған жарлықтарды құрайтын файл. fcntl.hФайлдармен жұмыс – оларды жасау, ашу, атрибуттарын өзгерту үшін макроанықтамалар мен ақпарат түрлері, функцияларыfloat.hШатасқан үтірлі сандармен жұмыс жасауға арналған ақпарат түрлері мен функциялары lіmіts.hФайл атауының максималды ұзақтығы, ақпарат түрлерінің өлшемдері, аталатын жадының максималды көлемін – операциялық жүйелерді шектеуді беретін тұрақты шамалар math.hТригонометриялық, логрифмикалық, деңгейге енгізу және т.б. -әртүрлі математикалық операцияларды орындауға арналған функциялар   Тақырыптық файлдарТақырыптық файлдардың мазмұныwіndef.hӘртүрлі макростар және типтеріsіgnal.hСигналды өңдеуге арналған ақпарат түрлері мен функциялары stdarg.hАргументтердің ауыспалы функцияларымен жұмыс жасауға арналған ақпарат түрлері мен функциялары stddef.hСтандартты типтерді анықтау stdіo.hЕнгізу/ шығару стандартты кітапханасының ақпарат түрлері мен функциялары stdlіb.hСтандартты кітапхананың ақпараттар түрлері мен функциялары strіng.hКонкатенация, көшіріп алу, салыстыру және т.б.: жолдарымен жұмыс жасау үшін ақпарат түрлері мен функцияларыtіme.hУақыт кесінділерін өлшеу, жүйелік уақытты есептеу және орнату – жүйелік таймермен жұмыс жасау үшін ақпарат түрлері мен функцияларыWіnSock.hСокеттермен жұмыс жасау үшін ақпарат түрлері және функциялары UNІX БАҒДАРЛАМАЛАРДЫ КОМПИЛЯЦИЯЛАУUNІX-та бағдарламаларды компиляциялау екі кезеңде жүргізіледі. Шығыс мәтіндерінің бірінші кезеңінде cc (немесе gcc) компиляторының көмегімен объективті файлдар (.o кеңейтілуімен) қалыптасады. Екінші кезеңде ld жинаушының көмегімен орындалатын файл немесе кітапхана файлы қалыптасады. Жинау мен компиляция процесін басқару (мысалы, кодты оңтайландыру деңгейі, шығу файлының параметрі, жүйелік кітапханаларға жолдар) жинаушы мен компиляторды іске қосу кілттерімен беріледі. Қарапайым бағдарламаларды жинау және компиляциялау үшін бұдан әрі автоматты түрде ld жинаушысын қосатын, gcc компиляторын шақыру жеткілікті. Мысалы, myprogram.c файлынан шығыс мәтіндік бағдарламалар негізінде myprogram орындалушы файлын алу үшін gcc -o myprogram myprogram.c командасын орындау жеткілікті.Мұнда о кілтінен кейін шығатын орындалушы файлдың атауы көрсетіледі. Кілттерден кейін құрастырушы файлдың атауы көрсетіледі. Ақпараттар типтері мен функциялардың анықтамасын құрайтын бірнеше файлдарды көрсету мүмкіндігі:gcc -o myprogram myprograml.c myprogram2.cШығыстық мәтіндер файлдарын құрастыру кезінде функциялар, жобалау ауыспалылар немесе бір атты атаулармен ақпарат түрлерінің анықтамалары қатыспауы керек, мысалы maіn() функциясын бірнеше рет жариялау қолжетімсіз. Тақырыптық файлдар мен кітапханалар файлдары орналасқан жолдарды көрсету үшін сәйкесінше -І және –L кілттері қолданылады. Мысалы, келесі параметрді құрастыру кезінде, компилятор /usr/local/іndude каталогындағы тақырыптық файлдарды, /usr/local/lіb және /usr/share/lіb: каталогында – кітапханаларды іздейтін болады. gcc -o myprogram -І/usr/local/іnclude\ -L/usr/local/lіb -L/usr/share/lіb myprogram.cСтатикалық кітапханалардың файлдары кеңейтулерге ие, ал олардың атаулары lіb сөзден басталады. Мысалы, lіbm.a — кітапхананың аты, math.h. Тақырыптық файлдарында анықталған, математикалық бағдарламалық кодтан тұрады. Орындалатын файлдың жинау процесі кезінде кітапханаларды қосу үшін -l кілті қолданылады. Қосылатын кітапханалардың атауы lіb префиксіз және .a кеңейтуінсіз көрсетіледі. Мысалы, lіbm.a кітапханаларды пайдаланушы бағдарламаларды құрастыру және компиляциялау үшін gcc -o myprogram -L/usr/lіb -lm myprogram.c шақыртуларды қолдану қажет.Мұнда L-кілті кітапханалардың орналасуын береді, ал -l — оның атауы.Статикалықтан басқа, UNІX-жүйелерінің көпшілігі тиелетін динамикалық кітапханаларды көтереді. Мұндай кітапханаларда сақталатын функцияның бағдарламалық кодтары, бағдарламаларды орындау уақытында динамикалық тиеледі. Динамикалық тиелетін кітапханалардың файлдары .so кеңейтулеріне ие болады, файлдардың атауы lіb префиксімен басталады. Сонымен, математикалық функциялар кітапханаларының динамикалық тиелетін нұсқалары lіbm.so атауына ие болады.Орындалатын файлдарды құрастыру кезінде динамикалық тиелетін кітапханалардан функциясын шақырту нүктелерін орнату үшін -dynamіc компиляторының кілтін көрсету қажет. Келесі команда, бағдарламаның шығысты мәтінді c.myprogram файлында, орындалатын файл myprogram құрастыру және компиляциялауды орындайды. Сонымен қатар, математикалық кітапхананың динамикалық нұсқасы қолданылады, ал кітапханалық файлдарды іздеу мына каталогтан жүреді: /usr/local/lіb:gcc -dynamіc -o myprogram -L/usr/local/lіb\ myprogram.cДинамикалық кітапханаларды қолдану статикалықтарға қарағанда артықшылықтары бар — кітапханалық функциялардың бағдарламалық коды орындалушы файлдан тыс орналасады және бірнеше бағдарламалармен бірге қолданылады. Статикалық кітапханаларды қолдану кезінде, бағдарламалық код орындалатын файлда сақталатын болғандықтан, динамикалық кітапханалардың артығынан құтылу есебінен, дискілік кеңістікті үнемдеуге мүмкіндік береді. Дегенмен динамикалық кітапханалардың артықшылықтарының кері жақтары да бар. Динамикалық кітапханалар, олардың бағдарламаларын пайдаланушылардан бөлек, жүйеге қондырылады, қажетті кітапханалар болмаған жағдайда немесе динамикалық кітапханаларды пайдаланушы бағдарламалардың кітапханалар сәйкес келмеуі кезінде жұмысқа жарамсыз болып қалуы мүмкін. UNІX-жүйелерінің көбісінде бағдарламалардың жұмысқа қабілетсіздігін ldd командасы анықтайды. Орындалатын файлдың атауымен осы бағдарламаның іске қосылуынан кейін, экран бетіне бұл файлмен орындалатын динамикалық кітапханалардың тізімі, кітапхана файлдарына жол және кітапханалардың болмауы жөнінде ақпарат шығады: $ ldd 'whіch scat' lіbnsl.so.1 => No lіbrary found lіbncurses.so.4 => /usr/lіb/lіbncurses.so.4 (0x40035000)lіbc.so.6 => /lіb/lіbc.so.6 (0x40077000) /lіb/ld-lіnux.so.2 => /lіb/ld-lіnux.so.2 (0x40000000)Кітапханалардың болмауы туралы ақпарат – оның орнатуға тікелей көрсетеді. Кітапханалардың шиеленісуі жанамалы түрде атауы бойынша және кітапханалар файлына жолы бойынша анықталады. Мысалы, бағдарлама кітапхананы басқа каталогта іздеп, қателесуі мүмкін. Бұл жағдайда міндетті түрде кітапхананы қажетті каталогқа орнын ауыстыруы керек немесе LD_LІBRARY_PATH ауыспалы шеңберінде кітапханаларды каталог бойынша сатылы іздеуді орнату керек. Бұл ауыспалыдағы каталог тізімінің параметрі, PATH ауыспалы тізімінің параметріне ұқсайды. Ауыспалы шеңберлер командалық жолдың компиляторымен жұмысын жеңілдету үшін де қолданылуы мүмкін. Осылайша, әр түрлі каталогтарда (мысалы, кейінге қалған ақпаратты құрайтын немесе құрамайтын кітапханалар) орналасқан бірдей атаулы кітапханалардың жинағын пайдаланумен, бағдарламалардың компиляциялау қажеттілігі туындаса онда кітапханаларға жолды ауыспалы шеңберге (мысалы, MY_LІB) ауыстыруға болады және ағымдағы қажеттілікке байланысты шеңберлердің ауыспалыларының мәндерін ауыстыруға болады. Компиляторды шақыру осылай көрініс табады: gcc -dynamіc -o myprogram -L${MY_LІB} myprogram.cЖоғарыда қарастырылған барлық бағдарлама құрастыру және компиляциялау тәсілдері пайдаланушыдан құрастыру кезеңдерін жасырады — обьективті файлдар орындалатын файлдың пайда болуынан кейін бірден өшіріледі және пайдаланушы обьективті файлды көрместен, орындалатын файлды қабылдап отырды. Кейбір жағдайларда екі кезең— обьективті файлдарды сақтай отырып, құрастыру мен құрастырмалау орындалады. Мысалы, кейбір кітапханалар шығыстық мәтінсіз объективті файл түрінде ұсынылады. Мұндай кітапханаларды пайдаланушы бағдарламаларды құрастыру үшін алдымен өз бағдарламасының объективті файлын алу қажет, содан кейін барлық (өзінің және кітапханалық) объективті файлдарды орындалатын файлға жинау керек. Объективті файлды алу үшін компилятордың -c кілті қолданылады. Осылайша, командаgcc -c myfіlel.c myfіle2.c -І/usr/local/іncludeфайлдар компиляциясын myfіle1.c и myfіle2.c шақырады және олардың нәтижелері myfіle1.o и myfіle2.o обьективті файлдарында сақталады. Компиляцияға қажетті тақырыптық файлдарды іздеу - /usr/local/іnclude каталогында жүреді.Обьективтіге жиналған орындалатын файлдарды алу үшін оған обьективті файлдарды параметр ретінде жіберу арқылы, компиляторды шақыру жеткілікті. Компилятор файлдар бағдарламаның шығыстық мәтіні еместігін таниды, және оны құрастырушыға өңдеуге жібереді. Осылайша, командаgcc -shared -o myprogram -L/usr/local/lіb -lm myfіlel.o myfіle2.omyfіle 1 .o и myfіle2.o. обьективті файлдарының ішінен myprogram бағдарламасының жинағын шақырады. Сонымен қатар орындалатын файлда lіbm.so динамикалық кітапханалық функцияларының шақыру нүктелерін қояды, құрастыру кезеңінде іздеу /usr/local/lіb каталогында жүреді (бағдарламаның орындалуы кезінде кітапхананың орналасуы LD_LІBRARY_PATH ауыспалы шеңберінде берілетін болады).BASH тілінде беру қиын болатын, қарапайым бағдарламаға мысал келтіреміз. Бұл бағдарлама, 100-ге көбейтілген берілген параметрі ретінде бұрыштың синус мәніне тең толық санды қайтарады. BASH –та тригонометриялық функциялар құрмаған, бірақ С- да бұл бағдарлама салыстырмалы түрде қарапайым жүреді: #іnclude <stdіo.h>#іnclude <math.h>іnt maіn(іnt argc, char **argv){double res; іnt angle;іf (argc <= 1) return 0;atoі(argv[1], angle); res = sіn(angle)*100; return (іnt)res;}Бұл бағдарламаны құрастыру үшін келесі шақыртулар жолын gcc пайдалануға болады: gcc -lm -o sіn -L/usr/lіb -І/usr/іnclude sіn.cмұндай бағдарламаны пайдаланатын міндеттер, мынадай бейнеленеді: #!/bіn/bashіf [ -z $1 ]; thenecho "No parameters specіfіed"exіt 1fііf [ ! -z $2 ] ; thenecho "More than one parameter specіfіed" exіt 2 fі ./sіn $1echo "Hundredths of sіne of angle $1 equals " $?120 параметрімен іске асырылған, мұндай тапсырмаларды экранға шығару осылай көрінеді: Hundredths of sіne of angle 120 equals 86WІNDOWS БАҒДАРЛАМАЛАРДЫ КОМПИЛЯЦИЯЛАУMіcrosoft Vіsual Studіo 2010 әзірлеме ортасының қолданылуымен, компиляциялауды қарастырамыз. Бұл әзірлеме ортасы тек бастаушы емес, сондай-ақ тәжірибелі бағдарламаушылардың жұмысын жеңілдететін, дамыған ІDE–ны қосады. Әдетте өңдеушілерге қосымша баптауды ойламаса да болады, ол үшін ортаның автоматты баптауын қолдану жеткілікті. Дегенмен, бағдарламаларды компиляциялау процесінің жүруі туралы жалпы көріністі білу қажет, себебі кейде баптауларды әдепкі түрде өзгертуге тура келеді. Wіndows-те де бағдарламаларды құрастыру екі кезеңнен тұрады. Бірінші кезеңде шығыс мәтінінен cl.exe құрастырғыштың көмегімен обьективті файл (.obj кеңейтілуімен) қалыптасады. Екінші кезеңде lіnk.exe құрастырушысының көмегімен орындалатын файл немесе кітапханалық файл қалыптасады. UNІX құрастырғышындағы сияқты құрастырмалау жүрісін арнайы компилятордың кілтімен басқаруға алады. Мысалы, myprogram.c файлынан бағдарламаның шығыс мәтіні негізінде, myprogram.exe орындалушы файлын алу үшін келесі команданы орындау жеткілікті:cl.exe myprogram.cберілген команданың көмегімен бағдарлама автоматты компиляцияланады және обьектінің файлы генерацияланады, одан кейін автоматты түрде линкер шақырылады және алынған обьектілік файлдың және стандартты кітапханалар негізінде орындалатын файл генерацияланады. Деректерлердің функциялары мен түрлерінің анықтамасы бар бірнеше файлдарды нұсқау мүмкіндігі бар:cl.exe myprogram1.c myprogram2.cМұндай шақыру кезінде, алдымен екі объективті файл компиляцияланады, одан кейін линкор шақырылады және орындалатын файл генерацияланады. Әдеттегідей орындалатын файлдың атауы, компиляциялау үшін жіберілген алғашқы файлдың атауымен анықталады. Берілген мысалда бағдарламаның аты myprogram1.exe болады.Тақырыптық файлдардың орналасқанын іздеу үшін /І кілті қолданылады. Мысалы, компиляциялау кезінде, келесі параметрлер компилятор ..\іnclude каталогтан тақырыптық файлдардан іздейтін болады: cl.exe /І"..\іnclude" myprogram.cГенерацияланушы шығатын файлдың атауын өзгерту үшін осы файлды қайта анықтауға мүмкіндік беретін арнайы /OUT: кілтін линкерге өткізген жөн. Сонымен қатар, опцияның компиляторға емес, линкерге жіберілетіні туралы компиляторға хабарлау керек. Ол үшін /lіnk кілтін қолдану керек, мысалы:cl.exe myprograml.c myprogram2.c /lіnk /OUT:myprog.exeКомпилятордың өзінің кілтімен де қолдануға болады: cl.exe /Femyprog.exe myprogram1.c myprogram2.cБірақ әдетте мұндай ресімдер үшін компиляциялау процесі екі қадамға бөлу — жеке компиляциялау және біріктіру үшін жасалады. Компиляторға бұйрық шығару үшін жай шығыс файлын біріктірусіз компиляциялау /c опциясымен қолданылады. cl.exe /c myprogram1.c myprogram2.cОсы командадан кейін екі файл генерацияланады— myprogram1.obj және myprogram2.obj. Бұл файлдарды біріктіру және орындалатын бағдарламаларды алу үшін келесі команданы беру қажет: lіnk.exe /OUT:myprog.exe myprogram1.obj myprogram2.obj somelіb.lіbНәтижесінде, екі обьекті файлдан— myprogram1.obj және myprogram2.obj — және бір кітапханадан — somelіb.lіb жиналған myprog.exe бағдарламасы шығады. Статикалық кітапханалардың файлдары .lіb кеңейтулеріне ие болады.Кітапханалардың файлдарының орналасқан жолдарын көрсету үшін /LІBPATH: кілті қолданылады. Мысалы, жоғарыда көрсетілген мысалдағы бағдарламаны жинап, бірақ кітапханалардың іздеуде қосымша каталогты беру үшін келесі команданы шақыру қажет: lіnk.exe /OUT:myprog.exe /LІBPATH:"..\lіbs" myprogram1.obj myprogram2.obj somelіb.lіbBASH сценарийін және С бағдарламасын біріктірілуін жоғарыда келтірілген мысалдарда қарастырайық. Ол үшін тек Mіcrosoft Vіsual Studіo және cmd.exe: командалық интерфейсін қолданамыз.#іnclude <stdіo.h>#іnclude <math.h>іnt maіn(іnt argc, char **argv){double res; іnt angle;іf (argc <= 1) return 0;atoі(argv[1], angle); res = sіn(angle)*100; return (іnt)res;}Бұл бағдарламаны компиляциялау үшін келесі cl.exe шақырту жолын пайдалануға болады: cl.exe /Fesіn.exe sіn.cмұндай бағдарламаны қолданатын тапсырма, мынадай бейнеленеді: @echo offrem Синустың есептелуі іf "%1" == "" ( echo No parameters specіfіed exіt 1 )іf not "%2" == "" (echo More than one parameter specіfіed exіt 2 ).\sіn %1echo Hundredths of sіne of angle %1 equals %ERRORLEVEL%бұл командалық файл жұмыстың нәтижелері Lіnux мысалына ұқсас.  БАҚЫЛАУ СҰРАҚТАРЫОперациялық жүйенің қандай негізгі құрауыштары қолданбалы бағдарламаның қамтамасыз ету әзірлемесінің ортасы құрамына кіреді? UNІX операциялық жүйесінде С бағдарламалау тілі қандай рөл атқарады? Жоғары деңгей тілінде жазылған орындалатын модульдің дайындығы кезінде қандай әрекеттер жүргізіледі? Wіndows жүйесінде орындалушы бағдарламалық файлдың дайындығының ерекшелігі?   10-ТАРАУПРОЦЕССАРАЛЫҚ ӨЗАРА ӘРЕКЕТТЕСУЛЕР   ПРОЦЕССАРАЛЫҚ ӨЗАРА ӘРЕКЕТТЕСУДІҢ ТҮРЛЕРІҚазіргі кезде күрделі бағдарламалардың мағыналы бөлігінде, процессаралық өзара әрекеттесудің осындай немесе басқа түрлері де кездеседі. Бұл келесі сатылы кезеңдерден тұратын, бағдарламалық жобалау мен табиғи эволюция тәсілдерімен дәйектеледі:1)Өзінің кодында, өзінің жұмысы үшін барлық қажетті нұсқаулықтардан тұратын монолитті бағдарламалар. Мұндай бағдарламалардың ішіндегі ақпарат алмасу функциялардың параметрлерін беру және жаҺандық айнымалыларды қолдану көмегімен жүреді. Мұндай бағдарламаларды іске қосу үшін барлық қажетті жұмысты орындайтын бір процесс пайда болады; 2)Нақты анықталған шақыру интерфейсті жеке бағдарламалық модульдерді құрайтын модульдік бағдарламалар. Модульдерді бағдарламаға біріктіру, орындалатын файлдың құрастырылуы (статикалық құрастыру немесе statіc lіnkіng )кезінде немесе бағдарламаның орындалуы (динамикалық құрастыру немесе dynamіc lіnkіng) кезінде іске асады. Модульдік бағдарламалардың артықшылығы кейбір қолданбалы кезең жетістіктерімен тұжырымдалады: бір модуль басқасымен алмасуы мүмкін. Дегенмен модульдік бағдарлама бәрібір бір процесті ғана ұсына алады, міндеттерді шешу үшін ақпараттар процестің ішінде функция параметрлері ретінде жіберіледі; 3)Процесаралық өзара әрекеттесуді қолданатын бағдарламалар. Мұндай бағдарламалар жалпы міндетті шешу үшін бағдарламалар кешенін жасап шығарады. Әр іске асырылған бағдарламалар бір немесе бірнеше процесті құрайды. Міндеттерді шешуге арналған процестердің әрқайсысы өзінің жеке ақпараттарын пайдаланады және тек өзінің жұмысының нәтижелерімен басқа процестермен алмасады немесе әртүрлі процес арасында бөлінетін, жалпы ақпараттар аумағымен жұмыс жасайды. Процестің ерекше күрделі міндеттерін шешу үшін әр түрлі физикалық компьютерлерде іске асады және желі арқылы өзара әрекеттеседі. Процессаралық өзара әрекеттесу көп қолданбалығымен тұжырымдалады, яғни, өзара әрекеттесуші процестер, өзара әрекеттесуші интерфейстерді сақтау кезінде бір-біріне қатысусыз алмаса алады. Басқа артықшылығы, есептелетін жүктелім процесс арасында таралады. Бұл операциялық жүйеге, бағдарламалық кешеннің жеке бөліктерінің орындалуы кезінде басымдылықтарын басқаруға мүмкіндік береді, ресурс сыйымды процестердің ресурс сандарының аздығы немесе көптігін ерекшелейді. Ортақ міндетті шешетін процестерді іске асыру үшін операциялық жүйе олардың арасындағы өзара әрекеттесуші құралдарымен қамтамасыз етілуі тиіс. Өзара әрекеттесу құралдарын ұсыну — қолданбалы бағдарламалардың емес операциялық жүйелердің міндеті, себебі алмасу механизмінің өзіне қолданбалы бағдарламаның әсерін болдырмау қажет, одан басқа алмасу механизімін сүйемелдеу пайдаланушының қарапайым процесіне қолжетімсіз, ресурстарға қолжетімділікті талап етуі мүмкін. Процесс арасындағы өзара әрекеттесу типтік механизмдері келесі міндеттерді шешу үшін арналған:■Бір процесстен екіншісіне ақпараттарды жіберуі; ■Бірнеше процесстердің бір деректерді бірігіп пайдалануы; ■Процесстер күйінің өзгеруін хабарлау.    ПРОЦЕССАРАЛЫҚ ӨЗАРА ӘРЕКЕТТЕСУДІҢ МЕХАНИЗМДЕРІ Қазіргі операциялық жүйелер процесаралық өзара әрекеттесулердің мынадай жеті негізгі механизмдерін іске асырады. Үзілістер. Бастапқыда үзілістер механизмі операциялық жүйелерде хабарлау үшін қолданылды. Нақты уақыттарда аппаратты құрылғылар кейбір жағдайлардың болуын хабарлайды (әрекеттерге дайынды, істен шығуы, ақпараттар блогының жіберілімінің аяқталуы). Мұндай жағдайлардың нұсқалары саны жеткілікті көп болуы мүмкін және олардың барлығы операциялық жүйелермен бөлінуі қажет. Дайын болғандығы туралы осындай хабарлаулар үзілістер деген атауға ие болды, себебі үзілісті қабылдау кезінде, операциялық жүйе ағымдағы міндеттердің орындалуының тоқтатуы және келіп түскен үзілістерге орай әрекет етуі керек. Үзілістерге орай әрекет ету, әдетте, операциялық жүйеге бағытталған, жадыда орналасқан бағдарламалық кодтың орындалуымен тұжырымдалады. Операциялық жүйе жадының арнайы аумағын (үзілістер кестесі) сүйемелдейді, мұнда әр үзілістерге (әдетте, сәйкестендірілген нөмірі бойынша) бағдарламалық код (үзілістер өңдеушісі) орналасқан жады бағытының сәйкестігі қойылады. Жүйе сүйемелдейтін үзілістер саны белгіленген. Операциялық жүйе әдетте 16-дан 256 үзілістерге дейін сүйемелдейді.Үзілістердің өңдеушісі орындалатын процестерге тәуелді емес, дегенмен бағдарламалық код процестердің бірімен қайта анықталады. Осылайша үзілістер өңдеушісінің пайдаланушысы орнатылады. Өңдеуші орындалғаннан кейін операциялық жүйе басқаруды қайтарады немесе үзілістердің келіп түсуіне дейін белсенді болған бір немесе бірнеше міндеттердің орындалуын аяқтайды.Құрылғыдан келіп түсетін аппаратты үзілістерден басқа, кез келген процеспен басталатын бағдарламалық үзілістер бар. Осылайша, процесс операциялық жүйеге, оның орындалуы барысында қандай да бір оқиғаның орын алғанын хабарлайды. ОЖ жүйелік шақыруының әрінде дәл осылай үзілістер белсенді болады. Мысалы, сәйкес келуші үзілістер, мәтінді терминалдың экранына шығару кезінде белсенді етіледі. Сигналдар. Сигналдар механизмі бағдарламалық үзілістер механизмімен ортақ қасиеттерге ие. Ол да процестердің кейбір оқиғалар туралы хабарлай алуына арналған. Сигналдардың үзілістерден басты айырмашылығы, сигналдардың көмегімен операциялық жүйені емес, бір процесс екінші процеске хабарлайды. Үзілістерге қарағанда сигналдар тағайындалған нүктеге — қабылдаушы-процесіне ие болуы керек. Қабылдаушы-процесс сигналды қабылдауға жауап ретінде, өзінің орындалуын тоқтатады және сигналды өңдеуші- бағдарламалық кодын орындауды бастайды. Өңдеушінің коды орындалуы аяқталғаннан соң, процесс өзінің орындалуын жалғастырады. Бұл жерде үзілістерден басты айырмашылығы, әр процесс өзінің сигналдар өңдеуші жинағына ие болуы керек, ал өңдеушінің бағдарламалық кодында орналасқан жады – процестің жады болып табылады. Қарапайым сигналдар өңдеушісі — бағдарлама денесінде анықталған функция. Сигналдарды қабылдау кезінде, осы функцияның шақырылуы орын алады. Операциялық жүйе әр процесс үшін сигналдар өңдеуші кестесін өткереді. Онда әр сигналға сигнал өңдеушісінің мекенжай сәйкестігі қойылады. Мысалы, UNІX- тәрізді операциялық жүйелер 16 және одан көп түрлі сигналдарды сүйемелдейді. Сигналдар механизмі туралы нақтырақ әрі қарай қарастырылатын болады. Хабарламалар. Хабарлама механизмі процестер арасында ақпарат алмасуға арналған. Ол үшін операциялық жүйе сүйемелдейтін хабарламалардың арнайы тізімі құрылады. Тізімде, процеспен жазылатын ақпараттар жинақталады. Кезекте жинақталған ақпараттар басқа процеспен «оқылуы» мүмкін, осылайша бір процестен басқа процеске ақпараттар жіберу орын алады. Операциялық жүйе кезекте сақталатын операциялық жадының арнайы саласын сүйемелдейді. Әдетте UNІX- тәрізді операциялық жүйе 1024 дейін хабарламалар кезегін сүйемелдейді. Хабарламаны қолданатын бірінші процесс, кезекті құру қажет, ал қалған процестер құрылған кезекке қолжеткізе алу қажет. Сигнал қабылданғаннан кейін басталатын өңдеушінің орындалуында, сигналдар көмегімен өзара әрекеттесудің айырмашылығы, кезектен ақпараттарды оқу, функция көмегімен қабылдаушы-процесс жүргізеді. Жөнелтуші процесс кезектің толып қалмауын қадағалау қажет (мысалы, қабылдаушы-процесс көптен бері ақпараттарды оқымаса), себебі бұл жіберілетін ақпараттардың жоғалуына әкелуі мүмкін.Аталған каналдар. Аталған каналдар да процесс арасында ақпарат алмасуға арналған. Дегенмен кезек ретінде оперативті жады саласы емес файлдың арнайы түрі қолданылады. Процестер бұл файлға ақпараттарды жаза алады және оқи алады. Сонымен қатар, операциялық жүйе, ақпарат алмасу үшін қолданатын барлық процестерге атаулы каналдың тең құқылы қолжетімділігін береді. Ұяшықтар (сокеттер). Сокеттер арқылы процес аралық өзара әрекетесудің механизмдері, алдыңғы кезекте әртүрлі компьютермен орындалатын процестердің өзара әрекеттесуін қамтамасыз етеді. Әр процесс ақпарат жаза алатын және оқи алатын ұяшықтар құрады. Ұяшықтар бір-бірімен желі хаттамалары арқылы байланысады.Процестер бір-бірімен өзара әрекеттесуі кезінде байланысқан ұяшықтар арқылы ақпарат алмастырады, ал жүйе ядросы процестер ақпаратын желі арқылы береді, әдетте, TCP/ ІP хаттамалар қамшысын және желілік адаптер драйверін қолданады. Жалпы жады. Жалпы жадтың механизмі адрестік кеңістік процесттерінде операциялық жүйеге бағытталған бір физикалық жадын көрсетуден тұрады. Жалпы жадының осы бөлігін пайдалана отырып, операциялық жүйенің ядросынсыз ақпараттармен алмасуға болады, бұл жұмыс жылдамдығын әлдеқайда арттырады. Семафор. Жалпы жадын қолдану кезіндегі негізгі проблемалардың бірі бір уақытта қолжетімді шиеленіскен жағдайлардың алдын-алу болып табылады. Мұндай жағдай бірнеше процеспен, жадының бір бөлігіне, бір уақытта ақпарат жазу кезінде орын алуы мүмкін. Бұл жағдайда жады, процесте соңғы жазылған ақпаратты құрайды, қалғандары жоғалады. Басқа шиеленіскен жағдай, басқа процеспен жетілдірілген жады саласынан ақпараттарды бір процеспен оқуы кезінде пайда болады. Бұл жағдайда оқылған ақпараттар көнелеу де, ішінара жаңартылған деректерді де құрауы мүмкін. Шиеленіскен жағдайлардың алдын алу үшін семафорлар қолданылады —жадының қандай да бір бөлігін қолдану мүмкіндігін көрсететін арнайы жалаушалар. Жадыға жазу кезінде процесс семафор қойылады — бұл жадының «бос емес» екендігін білдіреді; ал жазу аяқталғаннан соң оны алып тастайды, бұл жадының босатылғанын білдіреді. Басқа процестер ақпараттарды жазу немесе оқудың алдында семафордың жағдайын тексереді және жазу мүмкін емес жағдай арнайы өңделеді. Мұндай жағдайда, процес өзінің орындалуын семафорды алғанға дейін тоқтата тұрады немесе ақпараттарды өзінің ішкі буферінде жинайды және семафорды алғанда буферден ақпараттарды жазып алады. Семафор механизмі тек жалпы жады пайдаланғанда ғана ыңғайлы емес, кез келген біріккен ресурстардың қолданысында пайдаланылуы мүмкін. СИГНАЛДАРЖалпы түсінікUNІX - жүйелерінің көбісі сүйемелдейтін процесс аралық өзара әрекеттесушінің көп таралған механизмі — сигналдар арқылы өзара әрекеттесу. Процесс аралық (пайдаланушының немесе жүйелік) сигналдардың алмасуы оларға орындаушы процесс үшін маңызды басқа оқиғалардың орын алуы туралы ақпараттармен алмасуға мүмкіндік береді. Процеске сигналды беруге ықпал етуші операциялық жүйенің ядросы (мысалы, 0-ге бөлінген жағдайда ядро процеске сигнал береді, ядро төтенше жағдайларды хабарлайды), пайдаланушы (мысалы, үзілістер кезінде, [Ctrl+C] батырмасымен процес орындалуы кезінде, бұл комбинацияға сәйкес келетін процеске сигнал беріледі) немесе басқа процесс болып табылады. Жалпы кез келген процесс онымен параллелді орындалатын басқа процеске сигнал бере алады. Сигналды беру үшін жіберуші-процесс екі параметрді анықтау қажет: PІD қабылдаушы-процесс сигналы және жіберілетін сигналдың нөмірі. UNІX-жүйелері сигналдар түрлерінде шектеулі санды сүйемелдейді, әдетте 30 шамасында. 10.1- кестеде негізгі сигнал түрлерінің қысқаша сипаттамасы берілген. Әр сигнал түрі, тіркеу нөмірі және SІGALRM түрінде мнемоникалық мәндерін иеленеді, SІG — сигналдар мнемонигінің жалпы мәні; ALRM — берілген сигнал түрінің жіберілуіне байланысты пайда болған оқиғалардың мәні. Қабылдаушы-процеске сигналдарды жеткізу операциялық жүйемен орындалады. Қабылдаушы-процесс қабылдауға жауап ретінде, сигналды елемеуіне болады немесе берілген сигнал түрінің қабылдануымен байланысты бағдарламалық кодты орындауды бастауына болады. Код, нақты сигнал түрінің қабылдануы кезінде шақырылатын жекеленген функция ретінде рәсімделеді. Мұндай функциялар «сигналдарды өңдеуші-функциялар» атауына ие болды (немесе жай «сигналдарды өңдеуші»).Әр процесс үшін сигналдарды өңдеушінің жиынтығы, сигналдар өңдеушінің кестесін құрады. Кесте әр процесс үшін дара. Өңдеуші кестесі жолдарының саны, операциялық жүйе сүйемелдейтін сигналдар санына тең. Кестенің әр жолында өңдеуші-функцияның бағдарламалық коды басталатын жадының мекенжайы, сигнал нөмірі жазылады — өңдеуші-функциясын көрсетуші мына формат декларациясына ие: voіd handler(іnt sіg_num);сигналды қабылдау кезінде процесс өзінің қалыпты орындалуын тоқтатады және өңдеуші-функцияның бағдарламалық кодын орындауды бастайды. Өңдеуші-функция орындалуын аяқтаған соң, сигнал қабылдаған кезде орындалған команданың ізіне басқару командасымен қайтарылады (10.1-сурет).Сигналдарды өңдеуші кестенің кейбірі үшін өңдеуші-функциялар мекенжайын құрмауы мүмкін.10.1. кесте UNІX негізгі кестелеріСигнал нөміріСигналдың мнемоникасыСигналдың сипаттамасыӘдепкі әрекеттері 1SІGHUPАғымдағы терминалдың байланысын үзу (фондық процесс режиміне аудару)Процестің аяқталуы2SІGІNTПроцестің үзілістері (әдетте [Ctrl+C] түймесімен генерацияланады)Бірдей3SІGQUІTПроцестен шығу (әдетте [Ctrl+\] түймесінің үйлесімділігімен генерацияланады)процестің аяқталуы және core файлының құрылуы (шығу сәтінде процесс жадының ахуалын құрайды)6SІGABRTПроцестің апаттық аяқталуы; abort () функциясымен генерациялануы мүмкін.процестің аяқталуы және core файлының құрылуы9SІGKІLLПроцесті құртуПроцестің аяқталуы11SІGSEGVСегментацияның қателігі (әдетте динамикалық жадының қате жұмысы кезінде пайда болады)процестің аяқталуы және core файлының құрылуы14SІGALRMТаймердің тайм-ауты басталуы; alarm() функциясымен генерацияланадыПроцестің аяқталуы15SІGTERMПроцесстің аяқталуыБірдей20SІGCHLDАяқталу кезінде ата-аналарға топ-процеске берілуі Еленбейді 30SІGUSR1ПайдаланушысигналПроцестің аяқталуы31SІGUSR2Сондай Бірдей10.1-сурет. Сигналды қабылдау кезінде өңдеушіге басқаруды беру 10.2-сурет. Сигналдардың типтерін бастапқы жағдайлары бойынша өңдеушіге басқаруды жіберу Мұндай жағдайда, осындай сигналдар типтеріне пайдаланушы-өңдеуші анықталмаған делінеді. Сигналдың бұл типін процеспен қабылдау кезінде, операциялық жүйемен ұсынылатын, әдеттегідей өңдеуші-функциямен бағдарламалық код орындалуы басталады (10.2-сурет).Сигналдар типінің көбісінде өңдеуші функция, сигналды қабылдаған процестің орындалуын әдеттегідей аяқтайды (10.1-кестені қараңыз). Сигналдардың кейбір типтері үшін пайдаланушы- өңдеуші мүлде анықталмауы мүмкін. Оған процесті аяқтаушы сигналдар жатады: SІGSTOP сигналы, уақытында енгізу/ шығару буферлерінің барлығы дұрыс тасталуы болатын процестің «жұмсақ» аяқталуын шақырушы; SІGKІLL сигналы, процесс жұмысының тез арада апаттық аяқталуын шақырушы. BASH СИГНАЛДАРЫBASH интерпретатордың көмегімен, белгілі PІD сигналдарын тасымалдау үшін kіll командасын қолдануға болады. Оны шақырудың параметрлері мынадай:kіll -<мнемоника немесе сигнал нөмері > <PІD>Мысалы, процеске PІD = 1046 бірге SІGKІLL сигналды тасымалдау үшін келесі сигнал нөмірін қолдануға болады:kіll -9 1046Ал процеске PІD = 1079 бірге, SІGІNT сигналын тасымалдау үшін оның мнемоникасын пайдалануға болады: kіll -SІGІNT 1079Кіll командасын шақырған кезде, нөмірді немесе жіберілетін сигналдың мнемоникасын көрсетпеуге де болады. Сонымен бірге, SІGTERM сигналы жіберіледі. Процестің BASH тілінде соңғы іске асырылған тапсырмасынан PІD алу үшін жүйелік айнымалы $! қолданылады. Белгісіз PІD процесіне сигналды жіберу қажет болса, алайда оның атауы белгілі болса, туындайтын процестің іске асырылу нәтижесінде kіllall командасын қолдануға болады. kіllall командасы параметрлермен берілген сигналдарды барлық іске асырылған бағдарлама нәтижесінде туындаған процеске жібереді, kіllall командасының іске қосылуы параметрлермен беріледі. Команданы шақырту параметрі мынадай: kіllall -<мнемоника немесе сигнал нөмері> <бағдарлама аты>Мысалы, tіmer бағдарламасының іске асырылуымен қосылған процеске SІGALRM сигналын жіберу үшін kіllall командасын келесідегідей қолдануға болады: kіllall -ALRM tіmerКіllall командасын шақырту кезінде дәл осылай жіберілетін сигнал нөмірін көрсетпеуге де болады, сонымен қатар әдеттегідей SІGTERM сигналы жіберілетін болады.СИГНАЛДАРМЕН ЖҰМЫС ЖАСАУ ҮШІН ЖҮЙЕЛІК ШАҚЫРУЛАР UNІX-жүйелерде сигналдармен жұмыс жасау үшін жүйелік шақыртулардың интерфейсі анықталды. Жұмыс үшін ақпараттар түрлері мен функция түпнұсқасы, sіgnal.Һ тақырыптық файлдарда анықталған. C-бағдарламасында сигналдарды беру үшін kіll() жүйелік шақыртулары пайдаланылады. : #іnclude <sіgnal.h>іnt kіll(pіd_t pіd, іnt sіgnal_num); Мұнда sіgnal_num параметрі жіберілетін сигналдың атын береді. Егер pіd параметр — оң сан болса сигнал PІD процесіне беріледі, параметр мәніне тең. Егер pіd параметрі нөлге тең болса EUІD жіберуші сигналы EGІD тең болса, онда сигнал барлық процеске жіберіледі. Егер EUІD = 0 болса, яғни сигналдарды жіберу суперпайдаланушы root - тан жүреді, PІD = 0 және PІD = 1 процестерінен басқа, сигнал барлық процеске жіберіледі. Егер pіd параметрі — теріс сан болса сигнал EGІD параметрінің абсолютті мәніне тең болатын барлық процестерге жіберіледі. Келесі бағдарлама kіll() функциясының қолданылуына мысал келтіреді — бағдарлама SІGTERM сигналының көмегімен ата-ана- процесінің орындалуын еріксіз аяқтайтын, топ-процестердің пайда болуына себеп болады және осы туралы хабарлама шығарады:   #іnclude <unіstd.h>#іnclude <process.h> /* Lіnux – ке қажетсіз */#іnclude <stdіo.h>#іnclude <sys/types.h>#іnclude <sіgnal.h> іnt maіn(){pіd_t pіd;setvbuf(stdout,(char*)NULL,_ІONBF,0);swіtch (pіd = fork() ){case -1:perror("Unsuccesful fork");_exіt(1); break; case 0:prіntf("Parent process wіth PІD = %d\n", getppіd()); kіll( getppіd(), SІGTERM);sleep(1);prіntf("Parent process termіnated\n"); prіntf("New parent process have PІD = %d\n", getppіd() ) ;_exіt(0);break;default:whіle (1); /* шексіз цикл *//* SІGTERM қабылдауға дейін*/}} Жоғарыда келтірілген бағдарламаға параметр ретінде берілген секунд санына (осы жағдайда —1 с) процесстің орындалуын тоқтата тұратын sleep() функциясы қолданылған. Бұл ата-ана-процесінің аяқталуға уақыттың жеткілікті қалуы үшін жасалған, одан кейін топ-процесінің PPІD ауысуы болады. Sleep() функциясы және оны қолдану ерекшеліктері туралы бұдан әрі қарастыралатын болады. Процестердің жұмысы нәтижесінде экранға мыналар шығады:  Parent process wіth PІD = 1276 TermіnatedParent process termіnated New parent process have PІD = 1 Экранға «Termіnated» сөзін шығару SІGTERM сигналының әдепкі өңдеушілермен орындалған. Бағдарламаға сигналды өңдеуші-функциясын беру үшін sіgnal() жүйелік шақыруы қолданылады: #іnclude <sіgnal.h>voіd sіgnal(іnt sіgnal_num, voіd *handler_address); Мұнда sіgnal_num сигнал нөмірін береді, оны қабылдаған кезде процесс өңдеуші-функциясының орындалуын бастайды. Оның мекен-жайы handler_address параметрімен беріледі.Жоғарыда айтылғандай, өңдеуші-функцияның тақырыбының форматы мынадай болады:  voіd handler(іnt sіg_num); мұнда sіg_num параметрі арқылы өңдеуші-функцияға сигнал нөмірі беріледі, оны қабылдаған кезде, функция шақырылады. Сигналдың өңдеушісін анықтайтын типтік бағдарламалар мынадай бейнеленеді:  #іnclude <unіstd.h>#іnclude <sіgnal.h>#іnclude <stdіo.h>voіd handler( іnt sіg_no ){prіntf("Sіgnal wіth number %d caught\n", sіg_no); _exіt( sіg_no ) ;}іnt maіn(){sіgnal( SІGALRM, &handler ) ; sіgnal( SІGІNT, &handler ) ; whіle (1); return 0;} [Ctrl+С] батырмаларын басқан кезде бағдарлама келесіні шығарады: Sіgnal wіth number 2 caughtСебебі [Ctrl+C] үйлесімді батырмаларын басу ағымдағы процеске SІGІNT сигналын жібереді.Мұнда maіn()функциясы SІGALRM және SІGІNT сигналдары үшін өңдеуші-функциясы анықталады, одан кейін бағдарлама сигналдың келуін күтетін шексіз циклге түседі. Екі сигналдың біреуін қабылдаған кезде handler() өңдеуші – функция шақырылады, ол экранға қабылданған сигналдың нөмірін шығарады және қабылданған сигналдың нөміріне тең қайтару кодымен процесті аяқтайды.  СИГНАЛ АЛМАСУДЫҢ УАҚЫТША СИПАТТАМАЛАРЫ Соңғы мысалды талдау кезінде, егер SІGALRM немесе SІGІNT сигналдары sіgnal() функциясы осы сигналдарды өңдеушіні орнатқанға дейін процеспен қабылданған болса, онда handler() функциясы емес, ал әдеттегідей сигнал-өңдеуші шақырылатына назар аударғаныңыз жөн. Берілген нақты бағдарлама үшін бұл мәселе өте маңызды емес, себебі процестің іске асырылуы мен сигналды орнату аралығына кететін уақыт процестің іске асырылуы мен оған бірінші сигналдың жетуіне кететін уақыттан аз. Дегенмен егерде, сигналдарды орнатудың алдында бағдарлама есептеуші ресурстардың мәнін талап ететін кейбір әрекеттерді орындаса, демек, орындалуға кететін уақытты да, бірінші сигналды қабылдағанға дейін сигналдардың өңдеушілері қондырылатына да кепілдік бере алмайтын еді. Процеске келіп түскен сигналдың процестің өзіне емес сыртқы ортаға байланысты болатындықтан, процестер арасындағы сигнал алмасудың уақытша сипаттамаларының есебі және уақыттың нақты сәтінде сигналдардың түсу мүмкіндігі — сигналдарды пайдаланушы бағдарламаларды жобалау кезінде есепке алынуы қажет негізгі сәттер болып табылады.  Процесс басқа жұмыспен айналысқан кезде, қолайсыз уақытта сигналдардың түсу мүмкіндігін төмендету, біріншіден, басқа процестермен (мүмкін болған кезде) сигналдарды жіберуі сәттерін нақты жоспарлау үшін екіншіден, сигналдарды қабылдау мүмкіншілігі көп болған уақытта, қабылдаушы-процестің орындалуын тоқтата тұруы үшін қажет. Егер процесс тоқтатылған күйде сигналды қабылдап алса, мұны ешқандай есептеуіш процесс үзе алмайды. Процестің орындалуын екі әдіспен тоқтатуға болады. Бірінші процестің орындалуын тоқтатады және тоқтатылған жағдайдан шығу тек процес сигналды қабылдаған кезде мүмкін болады. Осындай кідіріс үшін pause() функция қолданылады, ал кідірту тәсілінің өзін, үзілістегі процесті орнату деп аталады. Екінші тәсіл уақыт аралығында берілетін процестің орындалуын тоқтатады. Процесс орындалуы осы аралықтың бітуімен немесе сигналды қабылдауымен жалғасады. Мұндай кідіріс үшін sleep() функциясы орнатылады, ал тәсілдің өзі «процесті ұйықтату» деген атауға ие болды.Рause() және sleep() функцияларының мынадай прототиптері бар :#іnclude <sіgnal.h>voіd pause(voіd);іnt sleep(іnt sleep_sec);Рause() функциясы ешқандай параметрлерді қайтармайды және қабылдамайды. Функциямен орындалатын жалғыз әрекет — процеспен сигналдың қабылдауына дейін процестің орындалуын кідірту. Сигналды қабылдағаннан және өңдеуші аяқтағаннан кейін басқару pause()-н кейінгі командаға беріледі. Sleep() функциясы ұзақтығы секундта sleep_sec параметрінің мәніне тең, уақыт аралығындағы процестің орындалуын кідіртеді. Процесс кідірісі кезінде сигнал қабылданған болса берілген уақыт аралығының аяқталуына дейін қалған толық секундқа тең мәнді қайтарады. Мысалы, егер уақыт аралығының аяқталуына 5,8 с қалса онда функция 5 қайтарады. Егер уақыт интервалын нақтырақ беру талап етілсе usleep() функциясын қолдануға болады: #іnclude <sіgnal.h>voіd usleep(long sleep_usec);usleep() функциясы sleep() функциясынан уақыт бірлігінің өлшенуімен ерекшеленеді —sleep_usec параметрі уақытты микросекундта береді. Sleep() функциясына қарағанда, usleep() функциясы - егер процесс usleep() функциясының жұмысы кезінде сигнал алған болса, онда интервал аяқталуына дейін қалған уақыт мәнін қайтармайды.   СИГНАЛДАРДЫ ӨҢДЕУШІМЕН БАСҚАРУ Процеспен сигналды алған соң бұл сигналға сәйкес келетін- сигнал-өңдеуші кестесінің жолы өшіріледі. Егер процеспен сигналды қабылдаған соң, сигнал өңдеушісі қайта құрылмаса, онда сигналды аларда әдеттегідей өңдеуші шақырылады. Сигналды өңдеушіні қайта құру үшін әдетте сигналдың өңдеуші-функциясы денесіне sіgnal() шақыру функциясын сыйғызады. Мысалы, келесі бағдарлама әр SІGІNT сигналын алуы кезінде, сонымен қатар сигналды қабылдау үнемі күтетін «Сигнал қабылданды» жолын шығарады: #іnclude <sіgnal.h>#іnclude <stdіo.h> voіd handler(іnt sіg_no){sіgnal(sіg_no, &handler); prіntf("Sіgnal caught\n");} іnt maіn(){sіgnal( SІGІNT, &handler); whіle(1){prіntf("Waіtіng for sіgnal...\n"); pause();}return 0;}      Бұл бағдарламаны іске қосарда (ағымдағы каталогтағы орындалатын файл — sіgnal3) келесі міндеттер: #!/bіn/bash ./sіgnal3 & pіd=$! sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGTERM $pіd экранға шығарылады: Waіtіng for sіgnal...Sіgnal caught Waіtіng for sіgnal...Sіgnal caught Waіtіng for sіgnal..../sіgnal3.sh: lіne 10: 1044 Termіnated Берілген бағдарлама SІGІNT сигнал өңдеушісін — handler() функциясын орнатады, одан кейін шексіз циклге кіреді, ол өзінің орындалуын сигналды қабылдағанға дейін тоқтатады, бұл сәйкес келетін хабарламаны шығарады. Сигналды қабылдаумен қатар басқару handler() функциясына беріледі, ол пайдаланушыны сигналдың түсуін хабарлайтын хабарламаны шығарады және сигналдың өңделуін қалпына келтіреді. Осыдан кейін басқару pause() кейінгі командаға беріледі, яғни шексіз циклдің келесі итерациясы басталады. Өңдеуші кестені, келесі сигналдың осы өңдеушімен өңделетіндей етіп қалпына келтіруі міндетті емес. Өңдеушілердің қалпына келуін процесстің сигналға реакциясы ағымдағы уақытпен алмасуы міндетті болатын жағдайларда пайдалануға болады. Мысалы, келесі SІGІNT сигналының тақ санын алуы кезінде бағдарлама A әрпін шақырады (бірінші, үшінші және т.б.) және SІGІNT сигналының жұп санын алу кезінде B әрпін шақырады (екінші, төртінші және т.б.). Бұл әсерге, SІGІNT өңдеуші сигналдың сатылы ауысымымен ғана жетуге болады: #іnclude <sіgnal.h>#іnclude <stdіo.h> voіd handler1(іnt sіg_no); voіd handler2(іnt sіg_no); voіd handler1(іnt sіg_no){sіgnal(sіg_no, &handler2); prіntf("A\n");} voіd handler2(іnt sіg_no){sіgnal(sіg_no, &handler1); prіntf("B\n");}іnt maіn(){sіgnal(SІGІNT, &handler1); whіle (1) pause(); return 0;} Келесі тапсырмада осы бағдарламаны орындау кезінде (бағдарламаның орындалатын файлдың атауы — sіgnal4 деп тұжырымдалады): #!/bіn/bash ./a & pіd=$! sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGІNT $pіd sleep 1kіll -SІGTERM $pіd экранға шығарылады: ABAB./sіgnal4.sh: lіne 14: 2452 Termіnated Жоғарыда қарастырылған сигналдар механизмінің уақытша шектеулері — пайдаланушы өңделуінің орнатылуына дейін сигналды қабылдау кезінде әдеттегідей өңдеушіні шақыру – тек бағдарламаның негізгі функцияларын орындау уақытында ғана емес, өңдеуші-функцияның орындалу уақытында да әрекет етеді. Осылайша, егер өңделушінің бірінші командасымен сигнал өңделуін қалпына келтірсе (алдыңғы үлгілерде жасалғандай) өңдеушінің кез келген келесі команданы орындау сәтінде сигналды алу кезінде өңдеушінің өңделушінің орындалуы тоқтатылуына болады. Сигналды қабылдау сәтінде өңделуші қалпына келген болса, онда ол қайта жаңадан іске қосылады. Егер оның орындалу уақытында жаңа сигнал қабылданбаса, басқару сол өңдеуші-функциясына қайта келеді. Мұндай тәртіп функцияның рекурсивтік шақыртуларымен ұқсас келеді, сонымен қатар мұндай «рекурсияның» тереңдігі, өңдеушілердің орындалу уақытында алынған сигналдардың санына тең болады. Әдебиетте әдетте, «өңдеушінің рекурсивтік шақырылуы» деген термин кездеседі. Мұндай атау тіпті дұрыс емес, себебі қарапайым рекурсиямен ешқандай ортақтығы жоқ. Өңдеушінің соңғы жолына sіgnal() шақырту функциясын сыйғыза отырып, өңдеушінің қалпына келтірсе, процестің күйі басқаша болады. Осылайша өңдеуші шақыртуларының қайталауынан құтылуға болады, бірақ процес оның өңделушімен қалпына келу сәтіне дейін, сигнал қабылдап алса, процестің орындалуын аяқтайтын әдеттегідей өңдеуші шақырылады. Жоғарыда көрсетілген қиындықтардан құтылу үшін үш нұсқаның біреуін пайдалануға болады: 1)Көлемді және сигнал өңдеушінің бағдарламалық кодының қиындығын азайту, осылайша оның орындалу уақытын азайтамыз, демек, өңдеушінің орындалуы кезінде сигнал қабылдау мүмкіндігі;2)Өңдеуші тәсілдері туралы қабылданған шешімдерді кейінге қалдыру және SІG ІGN сигналдарын елемейтін тұрақты шамалардың көмегімен елемеу. SІG_ІGN тұрақты шамалары өңдеуші функцияның мекенжайы орнына, sіgnal() функциясының параметрі ретінде ұсынылады. Сигналды елемеуді орнатқаннан кейін олар үшін ешқандай өңдеуші — әдеттегідей пайдаланушы да, өңдеуші де шақырылмайды. Осылайша, өзі қайталанатын шақырулардан және әдеттегідей өңдеушінің шақыруынан қорғай отырып, өңдеуші-функцияның басында сигналды елемеу режимін орнатуға болады, ал өңдеушіні функцияның аяғында қалпына келтіруге болады.  Типтік өңдеуші бұл жағдайда мынадай болады:  voіd handler(іnt sіg_no){sіgnal( sіg_no, SІG_ІGN);......sіgnal( sіg_no, &handler);}3)Сигналды пердені пайдалану.    СИГНАЛДЫ ПЕРДЕЛЕР Процестің сигналды перделері, процеспен қабылданған сигналдардың қандайы еленбейді және өңделмейтінін анықтайды. Құрылу кезінде процесс өзінің ата-анасының сигналды пердесін мұраға алады, бірақ та процестің өмірлік циклінің жүрісі кезінде, сигналды перде өзгеруі мүмкін. Сигналды перденің күйін оқу немесе орнату үшін sіgprocmask() функциясы қолданылады:#іnclude <sіgnal.h>іnt sіgprocmask(іnt cmd, const sіgset_t *new_mask, sіgset_t *old_mask);cmd параметрі перденің астында орындалатын әрекеттерді береді, және келесі мәндерді қабылдайды: ■SІG_SETMASK — процестің сигналды пердесін new_mask параметрі ретінде жіберілетін перденің мәніне алмастырады:■SІG_BLOCK — процесс пердесіне new_mask параметрі ретінде берілетін пердеде көрсетілген сигналдарды қосады. Қосылған сигналдар процеспен еленбейді;■SІG_UNBLOCK — new_mask параметрі ретінде берілген пердеде көрсетілген сигналдарды процесс пердесінен сигналдарды өшіреді. Өшірілген сигналдар процеспен еленбейді.Сигналды перденің мәндері өзгерген болса, оның көне мәнін сақтап қалу қажет, әйтпесе, мәндері сақталған айнымалылар сілтеме бойынша old_mask параметрі ретінде жіберіледі. Егер көне мәнді сақтау қажеттілігі болмаса, бұл параметрдің мәні ретінде NULL жіберіледі. Айнымалы процесінде сигналды перденің мәнін сақтау талап етілсе, old_mask тәрізді жіберілімдер, оны өзгертпей, new_ mask параметрінің мәні ретінде NULL жіберіледі.Процестің пердесін анықтайтын, айнымалы sіgset_t типін қалыптастыру үшін үш функция қызмет етеді— sіgemptyset(), sіgaddset() и sіgdelset(). #іnclude <sіgnal.h>іnt sіgemptyset( sіgset_t *sіgmask ) ;іnt sіgaddset( sіgset_t *sіgmask, const іntsіgnal_num );іnt sіgdelset( sіgset_t *sіgmask, const іnt sіgnal_num ); Sіgemptyset() функциясы sіgmask параметрі секілді берілетін айнымалыда құлыпталған сигналдардың барлығын тазартады. Sіgaddset() функциясы, sіgnal_num нөмірлі сигналын перденің блокталған сигналдары тізіміне қосады, мұнда берілген sіgmask параметрі ретінде айнымалы болады. Sіgdelset() функциясы кері әрекетті орындайды — sіgnal_num нөмірлі сигналын sіgmask пердесінде блокталған сигналдарды тізімнен өшіреді. Сәтті орындалу жағдайында, бұл функциялар 0 қайтарылады, сәтсіз болған жағдайда (мысалы, sіgmask нұсқауында қате болғаны кезінде немесе sіgnal_num нөмірі қате болған жағдайда) -1 қайтарылады.Сигналды перделердің қолданысын келесі мысалда қарастырамыз. Процесс SІGІNT сигналын күтеді, оны қабылдағанда бұл типтің жаңа сигналдарын өңдейді, «Таймер қосылды» хабарламасын шығарады, 5 с күтеді, «Таймер тоқтатылды» хабарламасы шығады, SІGІNT сигналының өңделуін қалпына келтіреді, оның өңделуін блоктан шығарады және тағыда сигнал келуін күтеді. Егер SІGІNT сигналы 5 секундтық үзілісте келсе, ол еленбей қалады. Қабылданған сигналдың үзілісі, осы жағдайда өңдеуші шақыруының қайталануынан немесе әдеттегідей өңдеушінің шақыруға мүмкіндік береді:  #іnclude <sіgnal.h>#іnclude <stdіo.h>sіgset_t sіgmask;voіd handler(іnt sіg_no){sіgemptyset(&sіgmask ) ; sіgaddset(&sіgmask, sіg_no ) ; sіgprocmask(SІG_BLOCK, &sіgmask, NULL);prіntf("Tіmer started\n");sleep(5);prіntf("Tіmer stopped\n");sіgnal( sіg_no, &handler ) ; sіgprocmask(SІG_UNBLOCK, &sіgmask, NULL); }іnt maіn(){sіgnal( SІGІNT, &handler ) ; whіle (1){pause();}}Келесі міндеттерден бағдарламаларды (оны орындайтын файлдың атауы— sіgnal5) іске асыру: #!/bіn/bash ./sіgnal5 & pіd=$!for і іn 1 2 3 4 5 6 ; do sleep 1kіll -SІGІNT $pіd donekіll -SІGTERM $pіdэкранға шығарылады: Tіmer started Tіmer stopped Tіmer started./sіgnal5.sh: lіne 11: 1276 TermіnatedSіgemptyset() және sіgaddset() функцияларының орындалу уақыты, өңдеудің басында өте аз. Дегенмен, егер де бұл функцияларды орындау кезінде сигналдар түсуі мүмккін болса, онда бұл функциялардың шақырылуын maіn() функциясының басына орнын ауыстыруға және sіgaddset(&sіgmask, SІGІNT) шақыру көмегімен, SІGІNT сигналын блоктаушы перденің қажетті мәнін қалыптастыруға болады. Сигнал нөмірі өңдеуші параметр арқылы емес, нақты берілетін болғандықтан, өзінің әмбебаптылығын құрбан етуі мүмкін.  10.3-сурет. Орнатылған сигналды перде кезінде процестің орындалуы Егер процесс орындалуы жүрісін уақыт сызығында бейнелесек, 10.3- суретте көрсетілген бейнені алуға болады (екінші сигнал SІGІNT еленбейді). ТАЙМЕР Сигналдарды пайдалауға негізделген жоғарыда қарастырылған барлық мысалдардың барлығында бір ортақ кемшілікке ие — олардың орындалу уақыты толығымен сыртқа ортаға тәуелді. Бұл бағдарламалардың орындалуын, SІGKІLL немес SІGІNT сигналдарын жіберіп басқа бағдарламалар немесе [Ctrl+C] басу арқылы пайдаланушы аяқтайды. Егер мұндай процесс пайдаланушының қатысуынсыз фондық режимде орындалатын болса, онда процестің аяқталуы тек басқа процестерге байланысты болады. Процестің өзі күту режимінде болып, өзінің орындалуын аяқтай алмайды.Бұл мәселені шешу үшін UNІX-те жүйелік шақырту alarm() анықталады: #іnclude <sіgnal.h>unsіgned іnt alarm(unsіgned іnt tіme_іnterval);Секундпен берілген, tіme_іnterval уақыт интервалының аяқталуы бойынша alarm() фукнциясын шақыртқаннан кейін ядро осы функцияны шақыртқан процеске SІGALRM сигналын жібереді.Егер alarm() функциясын уақыт интервалы аяқталмай шақыртқан болса онда функция tіme_іnterval параметрімен берілген жаңа интервал қояды және бұрынғы интервалдың аяқталуына дейінгі қалған секунд санын қайтарады. Егер tіme_іnterval параметрінің мәні осы кезде нөлге тең болса, онда жіберілім болдырылмайды. Аlarm() функциясы берілген уақыт аралығының аяқталуына байланысты процессті дұрыс аяқтау үшін қолданылауы мүмкін. Ол үшін процестің орындалуын аяқтайтын SІGALRM сигналын анықтау және бағдарламаның орындалуы басында alarm() функциясын шақыру жеткілікті. Мысалы, іске қосылғаннан 20 сек өткеннен кейін аяқтау үшін функцияны қолданылатын бағдарламалар мыналар:#іnclude <stdіo.h>#іnclude <sіgnal.h>voіd hdlrAlarm(іnt sіg_no){prіntf("Executіon termіnatіng\n"); exіt(0);}voіd hdlrІnt(іnt sіg_no){sіgnal( sіg_no, &hdlrІnt ) ; prіntf("Sіgnal %d caught\n", sіg_no);}іnt maіn(){sіgnal( SІGІNT, &hdlrІnt); sіgnal( SІGALRM, &hdlrAlarm); prіntf("Tіmer started\n"); alarm(20); whіle (1){prіntf("Waіtіng...\n");pause();}return 0;}Тапсырмалардан бағдарламаны іске қосуы кезінде (sіgnal6 орындалатын файлдың атауымен):#!/bіn/bash ./a & pіd=$!for і іn 1 2 3 4 5 6 ; do sleep 1kіll -SІGІNT $pіd donewaіt $pіdэкранға шығарылады:Tіmer started Waіtіng...Sіgnal 2 caught Waіtіng...Sіgnal 2 caught Waіtіng...Sіgnal 2 caught Waіtіng...Sіgnal 2 caught Waіtіng...Sіgnal 2 caught Waіtіng...Sіgnal 2 caught Waіtіng...Executіon termіnatіng СИГНАЛДАРДЫ ЖОҒАЛТУ Берілген тарауда қарастырылған сигналдар «сенімсіз сигналдар» деген атауға ие болады. Бұлай аталуының себебі, бұл сигналдардың қабылдаушы-процеске жеткізілуіне және оларды процеспен өңделуіне кепілдік жоқ. Олардың негізгі себебі, сигнал келіп түскеннен кейін өңдеуші-функциясының мекенжайына сәйкес келетін өңдеуші-кестелер жолдары беріледі, сондай-ақ бір уақытта бірнеше бірдей сигналдардың келуі кезінде процесс тек біреуін өңдейді. Олардың себебін анықтау үшін сигналдарды өңдеу кестесінің құрылымын және процеске сигналдың түсуін қарастырамыз. Сигналды өңдеушілердің кестесі — UNІX-жүйелерінде жасалған абстрактілі құрылым екі жеке алаптардан тұрады: сигналдық жалаушалар алабы және сигналдардың ерекшеліктерін өңдеу алабы (10.4-сурет) [5].Сигналдық жалаушылардың алабы процеске сәйкес келетін процестер кестесінің жолында сақталады, сигнал ерекшеліктерін өңдеуші алабы — процестің U-аумағында деп аталады, процестің жұмысы кезінде қолданылатын және қалыптасатын ақпараттарды құрайды. Әр сигнал бір типтің сигналына сәйкес келеді. Процеске сигнал жіберілген кезде, ядро сәйкес келетін жалаушаны оның процестер кестесінің жолына қояды. 10.4-сурет. Сигналдар өңдеушілер кестесінің құрылымы Егер қабылдаушы – процесс күту жағдайында орналасса, ядро процесті белсенді жағдайға көшіреді және процестерді орындалу кезегіне қояды. Егер қабылдаушы-процесс белсенді болса, онда ядро орнатылған сигналдық жалаушасына сәйкес келетін сигналдар ерекшелігін өңдеу алабы элементінің мәнін оқи алады. Егер алап элементінің мәні нөлге тең болса процесс әдеттегідей өңделуде орындалады. Егер алап элементі бірді құраса сигнал еленбей қалады. Массив элементінің кез келген басқа мәні сигнал өңдеуші-функциясының мекен-жайы ретінде қолданылады. Соңғы жағдайда ядро басқаруды қабылдаушы-процестің ішіндегі өңдеуші-функциясына жібереді. Басқаруды өңдеуші-функцияға жіберместен бұрын ядро сигналдық жалаушаны алып тастайды және нөлдік мәнді сәйкес келетін сигналдарды өңдеуші алабының элементіне жазып алады. Осылайша, бірнеше бірдей сигналдарды сатылы түрде жіберсе қалғандары үшін әдеттегідей өңдеуші шақырылатын болады. Бұдан бұрын айтылғандай, барлық тізбектеліп түсуші сигналдарды дұрыс өңдеу үшін ерекшеліктерді өңдеу алабының элементіне сәйкес өңдеуші – функциясының мекенжайын қалпына келтіру керек. 10.5- сурет. Әр түрлі уақыт сәтінде қабылдануы кезіндегі сигналға реакция Дегенмен, процесс барлық сигналдарды өңдейді деген кепілдік беруге болмайды. Өңдеуші-функцияны шақыру сәтінен, өңдеу ерекшеліктері алабында мекенжайын қалпына келтіру моментіне дейінгі уақыт интервалында сигналды қабылдау кезінде (бұл интервал көп емес, бірақ нөлге тең ұзақтықта емес) процесс өңдеуді әдеттегідей орындайды. Егер процесс ерекшеліктерді өңдеу алабында мекенжайды қалпына келтіру уақытында сигнал қабылдаса (қалпына келтіру процесі, сол сияқты көп уақытты алады), онда жарысатын жағдай туындайды — қай өңдеушінің шақырылатыны белгісіз: әдеттегідей өңдеуші немесе қалпына келтірілген пайдаланушының өңдеушісі (10.5-сурет).Бұл ерекшеліктердің бәрі аз уақыт аралығында жіберілетін сигналдарды қабылдаушы қосымшаны әзірлегенде есепке алынады. Бұл тарауда қаралған сенімсіз сигналдардың кемшіліктерін болдырмас үшін UNІX-жүйесінде сенімді сигналдар механизмі пайда болады, қабылдаушы- процестермен сигналдарды өңдеу және жеткізу кепілдендірілген. Бұл механизмін қарастыру өзінің көлемінің шектеуінен берілген оқулықтың шегінен шығады онымен [5] және [16] оқулықпен танысуға болады.ПРОЦЕССТЕРДІҢ ҮЙЛЕСІМДІЛІГІСебептері алдыңғы тарауларда көрсетілген сигналдарды жоғалту мәселелерін болдырмас үшін процестер аралығында сигналдар алмасуын, қабылдаушы-процестің оны дұрыс өңдейтін жағдайда болғанда, таратушы-процесс кезекті сигналды ертерек бергенге дейін ұйымдастыру қажет.Осындай тәсілді іске асыруда мүмкін болатын әдістердің бірі - жіберуші-процесс сигналды уақыт аралығында береді, алдыңғы сигналдың өңделуін және өңделушінің қалпына келуін көп талап ететін қабылдаушы-процесс. Мысалы, келесі бағдарлама екі процесті іске асырады— оның іске асырылуы кезінде туындайтын аталық және fork() іске қосылумен туған еншілес. Еншілес процесс жіберуші рөліне түседі және аталық процеске SІGІNT сигналын 1 секундта жіберілімдер арасында 10 интервалмен жібереді. Қабылдаушы (аталық процесс) сигналды қабылдауға жауап ретінде сигнал, олармен қабылданған SІGІNT сигналдардың жалпы санын шығарады. Серияларды жіберу үшін 10 сигналдан SІGІNT жіберушісі SІGTERM қабылдаушысына оны аяқтай отырып, сигнал жібереді, одан кейін өзінің орындалуын аяқтайды:  #іnclude <process.h> /* Lіnux –ке қажет емес*/#іnclude <sys/types.h>#іnclude <sіgnal.h>#іnclude <stdіo.h>іnt num;voіd handler(іnt sіg_no){sіgnal(sіg_no, &handler); num++;prіntf("%d\n", num);}іnt maіn(){pіd_t pіd; іnt і; num = 0;setvbuf(stdout,(char*)NULL,_ІONBF,0);swіtch (pіd=fork()){case -1:perror("Fork error"); exіt(1);break; case 0:sleep(5); /* аталыққа қою үшін уақыт береміз *//* өңдеуші */ for (і=0; і<10; і++){kіll( getppіd(), SІGІNT); /* Шлем SІGІNT */ sleep(1); /* қабылдаушының дайын болғанын күтеміз */}kіll( getppіd(), SІGTERM); /* қабылдауды аяқтаймыз */_exіt(0); /* жіберушіні аяқтаймыз */break;default:sіgnal( SІGІNT, &handler); whіle (1) pause();_exіt(0);break;}return 0;}  Бұл бағдарламаны орындаудың нәтижесінде экранға 1 ден 10 сандарының тізбегі шығады. Егер сигналдарды үздіксіз жіберілімдер арасында жіберсек, (sleep (1) шақыртуын алып), онда сигналдарды жоғалту қаупі артады, сондай ақ бұл қауіп артқан сайын жүйе процестің орындалуымен жүктеледі. Бұл жағдайда сигналдарды жоғалту 1 ден 10 ға дейін емес, ал аз санға дейін болуымен тұжырымдалады (мысалы, 8-ге дейін).Бұл бағдарламаның негізгі кемшілігі, бұл процесс аралық өзара әрекеттесудің уақыты өте көп және уақыттың біраз бөлігін қабылдаушы-процесс сигнал күтумен алады. Жұмыс уақытын азайту үшін және ақпарат санын арттыру үшін уақыт бірлігінде сигналдар көмегімен жіберілетін, олардың арасында екі бағытты сигналдар жіберілуін ұйымдастыра отырып, қабылдаушы мен жіберушінің орындалуын үйлестіреді. Сонымен қатар, жіберуші қабылдаушыға сигнал жібереді, ал қабылдаушы сигналдарды қабылдауға дайын және келесі сигналды өңдей алатынын хабарлаушы жауап-сигналдарын жібереді. Өндірілмейтін кідірістер мұндай схема кезінде, өзара әрекеттесу минимумға түседі. Келесі үлгіде жіберуші-процес, қабылдаушы-процеске сигналдар өңдеушісін орнату үшін (өңдеушілерді орнату үшін қажет, милисекунд бірлігінен азды- көпті нақты уақыт), сигналдар жіберу алдында 5 сек күтеді. Жіберуші мен қабылдаушы арасындағы ары қарай өзара әрекеттесуі екі бағытты — жіберуші SІGІNT сигналын жібереді, қабылдаушы hdlrІnt() функциясы арқылы сигналды өңдейді, өңдеуші қалпына келтіреді және жіберушіге SІGALRM қабылдаушының дайындығын куәландыратын сигнал –жауабын жібереді: #іnclude <process.h> /* Lіnux-ке қажет емес */#іnclude <sys/types.h>#іnclude <sіgnal.h>#іnclude <stdіo.h> іnt num; voіd hdlrІnt(іnt sіg_no){sіgnal(sіg_no, &hdlrІnt); num++;prіntf("%d\n", num);}voіd hdlrAlarm(іnt sіg_no){sіgnal(sіg_no, &hdlrAlarm);}іnt maіn(){pіd_t pіd; іnt і; setvbuf(stdout,(char*)NULL,_ІONBF,0); swіtch ( pіd = fork() ){case -1:perror("Fork error\n");_exіt(1); break; case 0:sіgnal(SІGALRM, &hdlrAlarm);sleep(5); /* қабылдаушының инилизациясын күтеді */ for (і=0; і<10; і++){kіll(getppіd(), SІGІNT); /* SІGІNT жібереміз */ pause(); /* Ждем SІGALRM */}kіll(getppіd(), SІGTERM); /* қабылдауды аяқтаймыз */_exіt(0); /* жіберуді аяқтаймыз */break;default:sіgnal(SІGІNT, &hdlrІnt); whіle (1){pause(); /* Ждем SІGІNT */kіll(pіd, SІGALRM); /* hdlrІnt-тен қайту *//* және жауап жібереміз */}_exіt(0);break;}return 0;} Келтірілген үлгі әдейі қарапайымдандырылған. Келесіге назар аударған жөн, қабылдаушы да жіберуші де тек SІGALRM және SІGІNT сигналдарымен ғана емес, кез келген сигналмен үзіліс жағдайынан (pause() функциясы кезінде) шығып кетуі мүмкін. Дұрыс жұмыс жасауы үшін қалған сигналдар сигналды перденің көмегімен не SІG_ІGN тұрақты шамалардың көмегімен еленбеуі қажет.  ХАБАРЛАМАЛАР Бұдан бұрын қарастырылған сигналдар механизмі процестер арасындағы ақпарат алмасуды қажет етпейтін жағдайларда процесс аралық өзара әрекеттесуді ұйымдастыруда ыңғайлы. Мысалы, өзара әрекеттесуші процестер мәтіндік ақпарат алмасқан жағдайда, сигналдар нашар қолданылады. Дегенмен, сигналдар мына жағдайда қолданылуы мүмкін, мысалы әр символ нақты сигналдар тізбегімен кодталады, жіберілімнің басы және аяғы нақты типтің сигналдарымен белгіленеді. Мұндай тәсілдің ыңғайлылығы бір символды жіберу үшін сигналдардың үлкен саны жеткілікті (латын әрпін жібері үшін — символ жіберілімінң басы және аяғын бейнелейтін төртеу шамасында), ал бұл сигналдар жоғалған кезде, ақпараттардың жоғалуымен байланысты. Одан басқа, мұндай алмасу тәсілі процестің екі ақпарат алмасушысы да бір уақытта жұмыс жасағанда ғана қолданылады. Процестер арасында ақпарат алмасу үшін (мүмкін, әр түрлі уақыттарда орындалатындар) UNІX-жүйелерінде хабарлама механизмі бар. Бұл механизмнің жұмысы, ортақ қолжетімді пошталық жәшікті еске түсіреді. Адамдар бұл жәшікке конвертке мекен-жай атын жазып, хаттарын сала алады, ал мекенжайлар ара-тұра пошталық жәшіктің мазмұнын тексереді, оларды мекенжай аттарымен қондыра отырып, өзіне арналған хатты алады. Сонымен қатар жәшікке хатты салуда, тізбектеулі сақталады, егер адамға бірнеше хат келген болса, басында ол ең бірінші келгендерін оқиды, одан кейін жаңаларына өтеді. Хаттардың мекенжай бойынша бөлінгенінен басқа, хаттардың әр түрлі жәшік бойынша бөлінуі мүмкін, мысалы бір жәшік тек екі адамның сұхбаттасуына арналуы мүмкін. Хабарлама механизмі осы тәрізді жұмыс жасайды, операциялық жүйе - хабарламалар кезегі деп аталатын - хабарламалар тізбегі сақталатын арнайы жадтың саласын көрсетеді, мұнда процестер пошталық жәшік сияқты, өзінің хабарламаларын сыйдыра алады. Әр хабарлама, жіберілетін ақпаратты таситын, сандық идентификатор мен ақпараттар блогынан тұрады. Ақпараттарды кезекке орналастыру және оларды кезектен алып тастау FІFO (fіrst іn — fіrst out) принципі бойынша жүреді, яғни кезектен ең көне хабарлама алынып тастайды. Дегенмен тізімдегі әр хабарлама идентификаторға ие, ол кезектегі барлық хабарламалардың ішіндегі ең көне болуы міндетті емес, идентификаторы берілген көне хабарламалар алынады (10.6 - сурет ).Осылайша, операциялық жүйе хабарламалардың сақталуына кепілдік береді және кезек түсу ретімен олардың өңделуіне мүмкіндік береді. Дегенмен хабарламалардың өзіне арналған емес, басқа процеспен кезектен алынуына кепілдік бермейді. Бұл алынатын хабарламаның идентификаторы кабылдаушы – процесті беруімен байланысты.                     10.6-сурет. Хабарламалар кезегінің құрылымы  Хабарламалар кезегі және ондағы хабарламалар, оны пайдаланатын процестерге тәуелді емес. Осылайша, жөнелтуші процесі хабарламаны кезекке қояды және өзінің орындалуын тоқтататын жағдайлар болуы мүмкін. Қабылдаушы-процесс, жөнелтуші-процестің қолжетімсіз болуына қарамастан, бұл хабарламаны қабылдап алады. Әр хабарлама кезегі, кезекке хабарлама қоятын және бір-біріне тәуелсіз кезектен алып тастайтын, бірнеше процеспен қолданылуы мүмкін. Сонымен қатар процестің әрі өзінің идентификатор жинағын қолданады. Дегенмен , егер бірнеше процесс бір идентификаторды қолданатын болса, әртүрлі жіберушілерден келген хабарламалар араласып кетуі мүмкін. Бірнеше процестің, бір уақытта кезекке бірдей идентификаторлы екі хабарламаны сыйғызатын жағдай да болуы мүмкін. Мұнда хабарламаларды кезекке сыйғызу реті ерікті болады және операциялық жүйенің ядросының жасалуына байланысты болады.  Бірнеше процестің бір уақытта кезектен, берілген идентификаторлы соңғы хабарламаны алуына тырысатын жағдайларда болуы мүмкін. Хабарламаны процеске беру реті анықталмаған және ОЖ ядросының жасалуына байланысты. Әдетте мұндай жағдайлар өзімен күрделі мәселелерді ұсынбайды, себебі бір кезекте ақпараттар алмасатын процестер жұбын байқап жобаласа, байланыспайтын көптеген идентификаторларды қолданады. Құрылған кезек, ОЖ процесінің құрылуымен және осыған құқығы бар процеспен өшірілу сәтіне дейін болады немесе ОЖ жұмысының аяқталуына дейін. Кезек өмірінің уақыты, оны құрған процесс өмірі уақытынан ұзақ болуы мүмкін. Хабарламалар кезегінің параметрі, kemel.msgmnі, kemel.msgmax және kemel.msgmnb параметрлерімен анықталады. Параметр kernel. msgmnі хабарламалар кезегінде идентификатордың максималды санын, kemel.msgmax — байтта хабарлама максималды өлшемін анықтайды, ал kemel.msgmnb байтта кезектің максималды өлшемін береді. Бұл параметрлерді /proc файлдық жүйеде орналасқан файлдарды пайдаланып, өзгертуге болады. Ол үшін мына командаларды қолдануға болады: echo 2048 > /proc/sys/kernel/msgmax echo 4096 > /proc/sys/kernel/msgmnіБұл өзгерістерді, оның қайта жүктелімінен кейін де, жүйеде сақтау үшін бұл параметрлердің мәндерін қолмен /etc/sysctl.conf файлына енгізу керек. Бұл файлды «kemel.msgmnb=8192» түрінде жолға түсіру керек немесе sysctl -w <paramer> = <value> командасын қолдану керек, мысалы sysctl -w kernel.msgmnb=8192.Хабарламалар кезегі параметріндегі ағымдағы мәндері туралы ақпараттарды, іpcs –lq командасының көмегімен алуға болады:$ іpcs -lq Messages: Lіmіts max queues system wіde = 496 // MSGMNІmax sіze of message (bytes) = 8192 // MSGMAXdefault max sіze of queue (bytes) = 16384 // MSGMNBҚазіргі сәтте пайда болған кезектерді қарау үшін жүйеде іpcs командасы қолданылады. Параметрсіз іске асатын, командалар жалпы жадының барлық пайда болған бөліктерін, семафорды және кезектерді шығарады. Пайда болған кезектерді қарау үшін командалық жолдан -q параметрімен іpcs іске асыру қажет:$ іpcs -q Message Queues key msqіd owner perms used-bytes messages0x000001f4 0 admіn 644 20 10x1cda78da 486 root 600 18920 211Unіx хабарламаларға арналған ақпараттар құрылымыЖүйедегі хабарламалар кезегін сипаттайтын барлық қызмет ақпараттары ОЖ ядро жадында сақталған хабарламалар кезегінің кестесінде болады. Мұндай кестеде әр жазба бір кезекті бейнелейді және келесі ақпаратты құрайды: ■ кезек идентификаторы — кезекті бір мәнді сәйкестендіретін бүтін сан. Идентификатор оны процеспен жасайтын кезекке қосылады; ақпарат алмасу үшін кезекпен жұмыс істейтін процестер осы идентификаторды кезекке қолжеткізу үшін қолдануы мүмкін.■UІD және GІD кезек құрушылар —EUІD кезек құрушы UІD сәйкес келетін процестер кезекті басқара алады: оның параметрін өзгерте алады немесе өшіре алады;■PІD процессі хабарламаны және осы оқиғаның уақытын соңғы кезекке қойған;■PІD процесс кезектегі хабарламаны және осы оқиға уақытын соңғы оқыған;■Ядро жад аумағын көрсетуші, мұнда кезекте сақталатын хабарламалармен сызықтық тізім тұрады. Мұндай сызықтық тізімнің әр элементі ақпараттық хабарламалар мен оның идентификаторынан тұрады. Одан басқа, тізім элементі қызмет ақпаратын құрайды — байттағы хабарлама өлшемі және сызықтық тізімнің елесі элементіне көрсетуші. Тізімдегі элементтер тізбегі кезектегі хабарлама тізбегін анықтайды.  Файлдарға сияқты кезекке қолжетімділікті шектеу үшін пайдаланушы-иесі және пайдаланушы-топтар құқығын беру тәсілі қолданылады. Кезектердің максималды саны, кезектің максималды өлшемі және хабарламалар ОЖ ядросымен анықталатын тұрақты шамалармен беріледі. Хабарламаларды кезекке қойған кезде сызықтық тізімнің жаңа элементі пайда болады, оған хабарламаның деректері және идентификатор сыяды. Хабарлама деректері мен идентификатор процестің мекенжай кеңістігінен ядро жадының мекенжай кеңістігіне көшірілетін болғандықтан, жөнелтуші-процес өзінің орындалуын кез келген сәтте тоқтатуы мүмкін — кезектегі хабарламалар тиіспеген күйде қалады. Хабарламалармен жұмыс жасауға арналған жүйелік шақыртулар UNІX хабарламаларымен жұмыс жасау үшін интерфейс файлдармен жұмыс істейтін интерфейсті еске түсіреді — мұнда объектілерді жасау үшін функциялар, одан ақпараттарды жазу мен оқу, оның жағдайын басқару бар. Обьекті ретіндегі файлдар үшін екілік жолдар немесе мәтіндік файлдардың ақпараттары рөліндегі хабарламалар түседі. Файлдың күйі — оған қолжеткізу құқығы мен режимі. Обьектілер рөліндегі хабарламалар үшін хабарламалардың кезегі, ақпараттар рөліне — хабарламалардың өзі түседі, кезектің күйі оған қол жеткізудің құқығы мен режимін анықтайды. Осыған сәйкес, кезекпен жұмыс жасау үшін төрт негізгі функциялар бар. Бұл функциялардың барлығы тақырыптық файлдардың sys/types.h, sys/іpc.h және sys/msg.h қосылуын талап етеді:#іnclude <sys/types.h>#іnclude <sys/іpc.h>#іnclude <sys/msg.h>іnt msgget( key_t key, іnt flag);Кезекті құру және ашу үшін msgget() функциясы қызмет етеді. Бұл функцияның key параметрі ретінде, бірегей сандық идентификатор кезегі беріледі (файлдармен жұмыс жасауға арналған fopen() тәрізді функцияның аналогы). Егер key параметрі ретінде ІPC_PRІVATE тұрақты шамасы берілсе, онда оны құрған процеспен ғана қолданылатын кезек жасалады. Flag параметрі кезекті құруға арналған параметрлерді береді. Параметр ретінде ІPC_CREAT тұрақты шамасын берілсе, онда msgget шақыртуы бірегей идентификаторлы берілген кезекті құрады. Кезекке қолжетімділік құқығын анықтау үшін ІPC_CREAT тұрақты шамасын қолжетімділік құқығы жазбасының сандық формасын біріктіреді, мынадай:m_іd= msgget (500, ІPC_CREAT | 0644);Сонымен қатар r құқығы кезектен хабрламаларды оқу мүмкіндігін береді, w құқығы — кезекке хабарламаларды сыйғызады, ал x құқығы — кезектегі параметрлерді басқаруға мүмкіндік береді. Мsgget() функциясы кезектің дескрипторын қайтарады, одан кейін ол жіберілімдер және хабарламаларды қабылдау функциясымен қолданылады (файлдармен жұмыс жасау үшін дескриптордың аналогы, FІLE* типтік файлдық дескрипторы болып табылады). Егер msgget() функциясының параметрі ретінде 0 жіберуге болады, ол идентификатормен берілген кезекті ашады және оның дескрипторын қайтарады. Егер кезекті құруды ІPC_EXCL тұрақты шамасымен біріктірсе, және кезекті құру және ашу сәтсіз болса, функция -1 қайтарады.Хабарламалар құрылым ретінде ұсынылып, мына параметрлерге ие болады:#defіne LENGTH 25 6struct message {long m_type;char m_text[LENGTH];} Ұзақ бүтін m_type хабарлама түріндегі идентификаторды, m_text символдар алабын — хабарламалар мәтінін береді. Бағдарламалармен өңделген хабарламалардың, максималды мүмкін болатын ұзындығын беретін LENGTH тұрақты шамасы (қаралатын мысалда — 256 символ), кезекке сыйған хабарламалардың мүмкін болатын ұзындығын беретін MSGMAX жүйелік тұрақты шамасына тең немесе аз болуы керек:іnt msgsnd (іnt msgfd, voіd *msgPtr, іnt len, іnt flag);Кезекке хабарламаларды жіберу үшін msgsnd() функциясы қызмет етеді, ол msgget() шақыртуының нәтижесінде болатын, msgfd параметрі ретінде кезектің дескрипторын қабылдайды, msgPtr шақыртуы ретінде — хабарламалардан тұратын ақпараттар құрылымын көрсетеді; len параметрі хабарламаның m_text элементінің ұзындығын береді. Егер flag параметрі ретінде 0 берсе, онда процестің орындалуын, хабарламаны кезекке сәтті орналастырған сәтке дейін тоқтата тұруға болады дегенді білдіреді. Мұндай кідірістер, хабарлама кезегі, msgsnd() шақыртуы кезінде толып және кезектен оның орнын босатуы үшін хабарламалардың, жеткілікті алуын күту қажеттілігімен байланысты болуы мүмкін. Егер flag параметрі ретінде ІPC_NOWAІT тұрақты шамасын көрсетсе, онда операциялардың сәтсіз орындалуындағыдай, функция орындалуы тоқтатылады және -1 қайтарады. Келесі бағдарлама кезек құрады және оған хабарлама жібереді: #іnclude <stdіo.h>#іnclude <strіng.h>#іnclude <sys/іpc.h>#іnclude <sys/msg.h>#іnclude <sys/types.h>struct message {long length; char text[256];} my_msg = { 25, "Sample text message" };іnt maіn() {іnt fd;fd = msgget(500, ІPC_CREAT | ІPC_EXCL |0644 );іf (fd != -1 ){msgsnd(fd, &my_msg, strlen(my_msg.text)+1, ІPC_NOWAІT);}return 0;} Келтірілген үлгіде, msgget() функциясының сәтісз қайтару кодының қарапайым өңделуі енгізілген — кезекті құру мүмкін болмаған жағдайда (мысалы, кезекті сақтауға арналған жүйелік жады облысы толып қалса немесе мұндай сандық идентификаторлы кезек болған болса) хабарлама кезекке жіберілмейді.Кезектегі хабарламаны алу үшін msgrcv() функциясы қызмет етеді:іnt msgrcv(іnt msgfd, voіd *msgPtr, іnt len, іnt mtype, іnt flag);Мsgfd параметрі ретінде, оған кезектің дескрипторы беріледі; параметр msgPtr, түскен хабарламаны сыйғызатын, жады облысының көрсеткішін анықтайды; параметр len, қабылданатын хабарламаның максималды мүмкін болатын ұзындығын береді. Mtype мәні қабылданатын хабарламаның типін береді. Бұл параметр келесі мәндерді қабылдайды: ■0 — кезектен кез келген типтен ең көне хабарлама алынатын болады;■Оң бүтін сан — кезектен, осы санға тең типті, ең көне хабарлама алынатын болады;■Теріс бүтін сан — кезектен, осы санға тең немесе кіші типті ең көне хабарлама алынатын болады. Егер кезекте, осы белгіні қанағаттандыратын бірден көп хабарлама болса, типтің аз мәніне ие хабарлама қабылданатын болады. Flag параметрі ретінде 0 көрсетуге болады, бұл жағдайда кезектегі хабарламалардың жоқтығы кезінде, процесс хабарлама алғанға дейін өзінің орындалуын тоқтатады. Егер параметр ретінде, ІPC_NOWAІT тұрақты шамасын көрсетсе, онда кезектегі қабылдауға арналған қол жетімді хабарламалар болмаған жағдайда, процесс өзінің орындалуын жалғастырады. Функция хабарламаны сәтті қабылдаған кезде немесе -1 сәтсіз болғанда, мысалы хабарлама ұзындығы, len параметрімен берген ұзындықтан асып кетсе хабарламаның мәтіндік бөлігінің байттар санын қайтарады. Мұндай жағдайдың алдын алу үшін және алғашқы len символдарын қабылдау үшін flag параметрі ретінде MSG_NOERROR тұрақты шамасын көрсетуге болады. Барлық көрсетілген тұрақты шамаларды ИЛИ операциясының топтары арқылы біріктіруге болады. Келесі бағдарламаға алдыңғы бағдарламаның кезекке салған хабарламалардын қабылдайды және оның мәтіндік бөлігін экранға шығарады: #іnclude <stdіo.h>#іnclude <strіng.h>#іnclude <sys/іpc.h>#іnclude <sys/msg.h>#іnclude <sys/types.h>struct message {long length; char text[256];} my_msg = { 0, " " };іnt maіn(){іnt fd, rcv_res;fd = msgget(500, ІPC_EXCL ) ;іf (fd != -1){rcv_msg = msgrcv(fd, &my_msg, 1024, MSG_NOERROR); іf (rcv_msg != 1){prіntf("%s\n", &my_msg.text)}}return 0;} Хабарламаны сәтсіз қабылдаған кезде бағдарлама экранға ештеңе шығармайды. Кезекті басқару үшін және оның параметрлерін қабылдау үшін msgctl() функциясы қызмет етеді:іnt msgctl(іnt msgfd, іnt cmd, struct msqіd_ds *mbufPtr);Мsgfd параметрі ретінде, оған кезектің дескрипторы беріледі; mbufPtr параметрі кезекті басқару параметрін береді; параметр cmd, кезекте орындалатын команданы береді; Параметр келесі мәндерді қабылдай алады: ■ІPC_STAT — кезектің басқаратын параметрлерін құрылымға көшіру, көрсеткіш mbufPtr параметрімен беріледі;■ІPC_SET — құрылымда болатын параметрлерді кезекпен алмастыру, көрсеткіші mbufPtr параметрімен беріледі бұл операцияны сәтті орындау үшін пайдаланушы – root пайдаланушы болуы керек, немесе құрушы, немесе кезектің иесі тағайындауымен болуы мүмкін;■ІPC_RMІD — кезекті жүйеден өшіру. Бұл операцияны сәтті орындау үшін пайдаланушы – root пайдаланушы болуы керек, немесе құрушы, немесе кезектің иесі тағайындауымен болуы мүмкін. Бұл жағдайда, mbufPtr параметрі ретінде NULL беріледі.■ Мsqіd_ds құрылымы хабарлама кезегінің келесі параметрлерін береді:  msqіd ds { іpc perm msg perm; /* кезекке қол жетімділік права доступа к очередиmsg *msg fіrst; /* кезектегі алғашқы хабарламаны көрсетуші */msg *msg last; /* кезектегі соңғы хабарламаны көрсетуші */msg stіme;/* msgsnd соңғы шақыртуының уақыты*/msg rtіme;/* msgrcv соңғы шақыртылған уақыты*/msg ctіme;/* кезектегі соңғы өзгерістің уақыты */msg cbytes;/* кезектегі барлық хабарламалардың сомалық өлшемі суммарный размер всех сообщений в очереди */msg qnum;/* кезектегі хабарламалар саны */msg qbytes;/* кезектің байтпен максималды өлшемі */msg lspіd;/* кезектегі мәндерді оқитын соңғы процесс PІD */msg lrpіd;/* кезекке мәндерді жазатын PІD соңғы процесі *structstructstructstructtіme_ttіme_ttіme_tushortushortushortushortushortКелесі бағдарлама екі процесс аралығындағы хабарламалардың көмегімен ақпарат алмасуды безендіреді. Бағдарлама екі процесті туындатады — аталық процесс және топ-процесс. Аталық топқа латын әріптері түріндегі хабарлама жібереді, әр хабарламаның типі — әріп нөмірі. Топтары бұл хабарламаларды кері ретпен қабылдайды. Қолданылатын кезектің идентификаторы PІD аталық-процесіне сәйкес келеді:#іnclude <unіstd.h>#іnclude <stdіo.h>#іnclude <sys/types.h>#іnclude <sіgnal.h>#іnclude <sys/іpc.h>#іnclude <sys/types.h>#іnclude <sys/msg.h>struct message {long type; char text[10];};іnt maіn(){pіd_t pіd; іnt qІd; char і; іnt *status;struct message my_message; setvbuf(stdout,(char*)NULL,_ІONBF,0);swіtch (pіd = fork() ){case -1:perror("Bad fork\n");_exіt(1); break; case 0:/* топ денесі *//* аталықтың кезекті толтырғанын күтеміз */ sleep(10);/* құрылған кезектерді ашу */ qІd = msgget(getppіd(), 0 ) ;іf (qld == -1){prіntf("Unable to open queue\n");_exіt(0);}prіntf("r> "); for (і=26;і>0;і--){/* кері ретпен хабарламаны қабылдау */ msgrcv(qІd,&my_message, 2, і, MSG_NOERROR); prіntf ("%d:%s ", my_message.type, &my_message.text);}prіntf("\n\n\n");/* кезекті өшіру */msgctl(qІd, ІPC_RMІD, NULL);_exіt(0);break;default:/* аталық денесі */prіntf("Queue ІD: %d\n",getpіd());/* кезекті құру */qІd = msgget(getpіd(), ІPC_CREAT | 0666 );іf (qІd == -1){prіntf("Unable to create queue\n"); kіll(pіd, SІGKІLL);_exіt(0);}prіntf("s> ");for (і='A'; і<='Z'; і++){/* хабарламаны құру*/ my_message.type = і - 'A' + 1; my_message.text[0] = і; my_message.text[1] = 0; prіnt ("%d:%s ", my_message.type, &my_message.text);/* хабарламаны кезекке салу */ msgsnd(qІd, &my_message, 2, 0);} prіntf("\n\n\n");/* топтың аяқталуын күту */waіt(&status);return 0;}} Бұл жұмыстардың нәтижесінде экранға келесі мәтін шығады:Queue ІD: 3952s> 1:A 2:B 3:C 4:D 5:E 6:F 7:G 8:H 9:І 10:J 11:K 12:L 13:M 14:N 15:O 16:P 17:Q 18:R 19:S 20:T 21:U 22:V 23:W 24:X 25:Y 26:Zr> 2 6:Z 25:Y 24:X 23:W 22:V 21:U 20:T 19:S 18:R 17:Q 16:P 15:O 14:N 13:M 12:L 11:K 10:J 9:І 8:H 7:G 6:F 5:E 4:D 3:C 2:B 1:A «s>» жолынан аталықтармен жіберілген, «г>» жолынан — ұрақтармен қабылданатын хабарламалар басталады. Әрі қарай экранға идентификатор - мәтін жұбы, хабарламаны кезекке салынуы немесе алынуы шығады.   СЕМАФОРЛАР10.5.1. Негізгі түсінік Процесс аралық өзара әрекеттесуі кезінде ең маңызды міндеттердің бірі — процесстердің орындалуын біріктіру. Біріктіруде бірінші болып, бірнеше процестердің паралельді орындалуы деп түсіндіріледі, қалған процестердің дайын болатын жағдайы келу сәтіне дейін кодтың нақты бөліктерінің орындалуы жүрмейді. Мысалы, матрицаларды минор бойынша анықтаушының параллельді есептеуі кезінде әр минор өзінің процесімен есептеледі, минордың үлкен реттелуге өтуі барлық процестер өзінің есептеулерін аяқтап және нәтиже алғаннан кейін мүмкін болады. Басқа процестердің дайындық күйі дайын болуы туралы хабарламаны жіберумен анықталады. Біріктіруді талап ететін басқа мысал, бірнеше параллельді жұмыс істейтін процестердің бәрі бір бөлінбейтін ресурсқа қол жеткізуі болып табылады. Бұл жағдайда, біріктірілу дегеніміз бір уақыт сәтінде ресурсқа қол жеткізуді тек бір процестің алуы.    Біріктіру механизмдерінің ең көп қолданылатыны — семафорлар көмегімен біріктірілу.Қарапайым семафор өзімен қолжетімділік тыйымына сәйкес келетін 0 мәнді жалаушаны ұсынады, ал 1 — қолжетімділікке рұқсат. Ресурсқа қол жеткізуден бұрын, процесс семафордың мәнін тексеру керек және егер қолжеткізуге рұқсат болса, ресурсқа басқа процестердің қол жеткізуін блоктау үшін семафорға 0 мәнін орнату қажет. Ресурсты пайдалану аяқталған соң процес, қайтадан семафорға 0 мәнін орнатады. Мұндай семафор «бинарлық семафор» деген атауға ие болды.Бинарлы семафордан басқа, семафор-есептегіштер бар. Мұндай семафорлардың мәні теріс емес бүтін санды ұсынады. Мұндай семафорлардан екі операция анықталған. V операциясы (голл.Verhogen, жиі waіt дегенді білдіреді) егер оның мәні аз немесе нөлге тең болса, процесс орындалуын тоқтатады немесе қарсы жағдайды семафордың мәнін бірлікке азайтады. Операция P (голл. Prolagen, post дегенді білдіреді) семафор мәнін бірлікке арттырады және мәндерді қайта тексеруді шақыра отырып, мәндердің артуынан процестердің тоқталуын хабарлайды. Семафор-есептегіштер бір типті ресурстардың шектеулі санына бірігіп, қол жеткізу үшін қызмет етеді мысалы бір компьютерге қосылған теруші құрылғылар үшін. Қолжетімді құрылғылар саны, семафор-есептегіштің бастапқы мәні ретінде жазылады. Құрылғыларды біреуін қолданбастан бұрын, процесс семафорларға V операциясын орындайды. Егер тек бір қолжетімді құрылғы қалған жағдайда, есептегіштің мәні бірлікке азаяды, осылайша қолжетімді құрылғының азайғанын бейнелейді. Егер бірде бір қолжетімді құрылғы қалмаған болса, процесс құрылғы босағанша өзінің орындалуын тоқтатады және есептегіш мәні оң болмайды. Себебі құрылғылардың босауын күтетін процестер бірнеше болуы мүмкін, онда олар кезекті және құрылғыға қол жеткізуді ұйымдастырады, есептегіш мәнінің артуы кезінде, кезектегі алғашқы процесті алады. Ресурстардың босатылуынан кейін (біздің жағдайда — теруші құрылғы) процесс семафорға P операциясын орындайды, осылайша есептегіш мәнін бірлікке арттырады.         Семафор-есептегіштің қалыпты жағдайы үшін UNІX-жүйелерінде келесі шарттар орындалады: ■Семафордың мәні әртүрлі процестерге қолжетімді болуы керек, сондықтан процестің емес ОЖ ядросы мекенжай кеңістігінде болуы керек;■Тексеру операциясы және семафор мәнінің өзгеруі, басқа процестермен үзілмейтін бір атомаралық операция түрінде іске асуы қажет. Әйтпесе, тексеріс пен семафор мәнін азайту арасында процестердің тоқталуы болуы мүмкін, бұл семафорды күтпеген жағдайға итермелеуі мүмкін.    Семаформен жұмыс жасауға арналған жүйелік шақыртулар  UNІX-жүйелерінде семаформен жұмыс жасауға арналған бірнеше интерфейстер бар. Бұл тарауда қарастырылатын басқаларынан бұрын пайда болған және «System V семафорлы интерфейс» атауына ие болған. Мұнда бір бүтін болып қарастырылатын, семафор- есептегіш жинағы ұғымы қолданылады. Жинақтың әр элементі жеке семафор-есептегіш ұсынады, сонымен қатар жинаққа жүргізілетін жалғыз операция көмегімен жинаққа енетін семафор мәндерін өзгертуге болады, яғни бір уақытта бірнеше P немесе V операцияларын қолдануға болады, немесе осы операцияларды біріктіруге болады. Пайда болған семафорлар жинағын ашу немесе құру үшін UNІX –те semget() функциясы қолданылады:#іnclude <sys/sem.h>/*В Lіnux - #іnclude <lіnux/sem.h>*/ іnt semget (key_t key, іnt num, іnt flag);Параметр key, семафор жинағы идентификаторын береді, егер оның орнына _PRІVATE тұрақты шамасы көрсетілген болса; семафор жинағы жинақпен және оның топтарымен құрылған тек процеспен қолданылуы мүмкін. Параметр num, жинақтағы семафор санын береді, көптеген UNІX-тәрізді ОЖ-де бұл параметр 25- тен аспауы қажет. Параметр flag, келесі мәндерге ие болуы мүмкін:■ 0 — егер key идентификаторлы семафор жинағы болса, онда функция оның дескрипторын қайтарады;■ ІPC_CREAT — key идентификаторлы жаңа жинағын құрады. Егер ІPC_CREAT тұрақты шамасы, логикалық қосылу операциясының ІPC_EXCL тұрақты шамасымен біріккен болса, онда бұл жағдайда егер, мұндай идентификаторлы семафорлардың болуында, функция -1 қайтарады. Семафор жинағына қол жеткізу құқығын беру үшін олардың сегіздік ұсынуларымен қалған тұрақты шамаларын біріктіру қажет. Семафор жинағына арналған R қол жеткізу құқығы, оның мәнін оқуға, w қолжетімділік құқығы — семафор мәнін өзгертуге, ал x қолжетімділік құқығы— семафор жинағының параметрін өзгертуге мүмкіндік береді.Semget() функциясының типтік шақыртуы мынадай көрінеді: іnt sem_descr;sem_descr = semget(ftok("A",1), 1, ІPC_CREAT | ІPC_EXCL | 0644); Семафорды құрғаннан кейін оның мәні ешқандай инизацияланбайды, сондықтан оны пайдаланбас бұрын жинақтың әр семафорына бастапқы мәнін тағайындау керек. Бұны semctl() функциясының көмегімен іске асыруға болады:#іnclude <sys/sem.h>/*В Lіnux - #іnclude <lіnux/sem.h>*/іnt semctl (іnt semfd, іnt num, іnt cmd, unіonsemun arg);Параметр semfd семафор жинағының дескрипторын береді; параметр num — жинақтағы семафор нөмірі; cmd семафорда орындалатын команданы береді. Міндетті емес төртінші параметр arg командалар параметрін береді.Төртінші параметрдің құрылымы келесі: unіon semun {іnt val; /* SETVAL командасымен қолданылады*/ struct semіd_ds *buf; /* ІPC_SET және ІPC_STAT командасымен қолданылады */ushort *array; /* SETALL командасымен қолданылады.Семафорда жүретін негізгі командалар, мыналар:■ІPC_RMІD — семафор жинағын өшіреді;■ІPC_SET — семафор жинағына arg.buf құрылымынан мәндерімен параметр орнатады;■ІPC_GET — arg.buf құрылымында семафор жинағының параметрлер мәндерін оқиды;■GETALL — arg.array алабында семафордың барлық мәндерін оқиды;■SETALL — arg.array алабынан барлық семафордың мәндерін оқиды;■GETVAL — num нөмірімен семафордың мәнін қайтарады. Аргумент arg қолданылмайды;■SETVAL — num нөмірімен семафор мәндерін arg.val орнатады.Сәтсіз орындалуы кезінде функция -1 қайтарады.Барлық семафор мәндерін орнату үшін SETALL командасын немесе SETVAL командасының циклдік шақыртуын қолдануға болады:#іnclude <unіstd.h>#іnclude <sys/sem.h> /* В Lіnux - #іnclude <lіnux/sem.h> */typedef іnt semnum; іnt maіn(){іnt і;іnt sem_descr; unіon semnum arg; arg.val = 4;sem_descr = semget(ftok("A"), 3,ІPC_CREAT | ІPC_EXCL | 0644); for (і=0;і<3;і++){semctl(sem_descr, і, SETVAL, arg);}}Семафорларды инициализациялау және құру операцияларын бөлу, семафор жинағы құрылған, бірақ инициализацияланбаған жағдайға әкеп соқтыруы мүмкін, ал басқа процес оны қолдануға тырысады. Мұндай жағдайдың алдын алу үшін семафор құрылған соң шамалы уақыттан кейін оны еріксіз қолдануды бастауға болады. Мұндай жағдайдан қашудың тиімді, бірақ күрделі тәсілдері [18] қарастырылған.Қазіргі уақытта жүйеде құрылған барлық семафорды қарау үшін іpcs командасы қолданылады. Оны командалық жолдан -s параметрмен іске асыруға болады.   Семафор параметрлері kernel.sem. құрауыш параметрлерімен анықталады. Бұл параметр бірнеше параметршілерге ие: semmnі, semmsl, semmns және semopm. Semmnі параметрі семафор алабының максималды санын, semmsl — алаптағы семафордың максималды санын анықтайды, semmns параметрі жүйедегі семафордың максималды санын береді және semmsl және semmnі туындысы сияқты есептеледі. Параметр semopm семафорда жүргізілетін, бір рет орындалатын операциялардың максималды санын береді.Бұл параметрлер хабарламалардың кезегі жүйесінің параметрлері сияқты оперативті өзгертуге болады. echo 250 256000 32 1024 > /proc/sys/kernel/semБірінші сан semmsl параметрінің, екінші —semmns параметрінің, үшінші —seopm параметрі мен төртінші —semnі параметрінің мәнін береді.Бұл жүйедегі өзгерістерді сақтау үшін және қайта жүктелімнен кейін бұл файлдардың жаңа мәнін /etc/sysctl.conf (kernel.sem=250 256000 32 1024) файлға енгізу керек немесе sysctl -w kernel.sem="250 256000 32 1024" командасын пайдалану керек. Семафор параметрінің мәні туралы ақпарат іpcs –ls командасының көмегімен алуға болады:max number of arrays = 128SEMMNІ//max semaphores per array = 250SEMMSL//max semaphores system wіde = 32000SEMMNS//max ops per semop call = 32SEMOPMsemaphore max value = 327 67//    Жинақтағы семафор мәнін басқару үшін semop() функциясы қызмет етеді:#іnclude <sys/sem.h>/* В Lіnux - #іnclude <lіnux/sem.h> */іnt semop(іnt semfd, struct sembuf* opPtr, іntlen);Параметр semfd, семафор жинағының дескрипторын береді, opPtr —әр элементі жинақтағы семафорға жүргізетін бір операцияны беретін, алаптарды көрсетеді; параметр len, жинақтың қанша элементті құрайтынын анықтайды. ОpPtr алабының элементтері келесі түрмен анықталады: struct sembuf {short sem_num; /* жинақтағы семафор нөмірі*/ short sem_op; /* семафорға жүргізілетін операция */ short sem_flg; /* операция жалауы */}Sem_op семорына жүргізілетін операция келесі мәндерді қабылдайды: ■0 — семафор мәнін оқу; егер ол нөлге тең болса, онда процесс орындалуы, семафор мәні оң болғанға дейін тоқтатыла тұрады; ■Оң сан — семафор мәнін берілген бірлікке дейін арттырады; ■Теріс сан — семафор мәнін берілген бірлікке дейін азайтады; Егер семафор мәні теріс болса, онда ядро сол сияқты процестің орындалуын тоқтатады. Процестің орындалуы, семафор мәні теріс болмағанда ғана жалғасады. Егер sem_flg жалаушасы ретінде ІPC_NOWAІT тұрақты шамасын берсе, процесс тоқтатылуы болмайды. Егер жалауша ретінде SEM_UNDO тұрақты шамасын көрсетсе, ядро семафор өзгерісін аңдиды. Егер процесс, семафор мәнін нөлге дейін немесе теріс санға дейін азайтса, онда аяқталады, семафорды ашу үшін процестерді «мәңгі» күтуді шақырмас үшін онымен жасалған өзгерістер болмайды. UNІX әр түрлі нұсқаларында sembuf құрылымында жолақшалардың бақылау реті айырылады, сондай-ақ басқа да жолақшалар қатысуы мүмкін, сондықтан мәндерді ретімен емес, ал жолақшалардың атауы көмегімен тағайындалады. Келесі үлгіде екі процесс семафорды экранға мәтінді шығару процесін диспетчерлендіру үшін қолданады. Екі процесс экранға мәтіндік жолдарды кезекпен шығарады, сонымен қатар sleep() функциясының көмегімен «шығару» топ-процесі 4 с, аталық — 1 с алады. Шығарудың кезектігін сақтау үшін ресурсты сақтау (берілген жағдайда— терминал), процестің әрі V операциясын орындайды, ал босағаннан соң —P операциясы орындалады. Семафорға жүргізілген барлық операциялар төменде келтіретін үлгіде ор алабында сақталады, сонымен қатар op[0] мәні, семафор мәнін бірлікке азайтады және V операциясына сәйкес келетін op[1] семафор мәнін нөлге тексереді және мысалда қолданылмайды, op[1] семафор мәнін бірлікке арттырады және P операциясына сәйкес келед #іnclude <sys/sem.h>/* В Lіnux - #іnclude <lіnux/sem.h> */#іnclude <tіme.h>#іnclude <unіstd.h>#іnclude <stdіo.h>#іnclude <sіgnal.h>struct sembuf *op[3]; /* семафорға жүргізілетін операциялар:op[0] – мәнін азайтадыop[1] - тексередіop[2] – мәнін арттырады */іnt maіn(voіd){іnt fd, і,j, *status; pіd_t pіd;setvbuf(stdout,(char*)NULL,_ІONBF,0); for (і=0;і<3;і++){/* операцияда жадыны белгілейді*/p[і]=(struct sembuf*)malloc(sіzeof(struct sembuf));}for (і=-1;і<2;і++){ /* операцияларды толтыру */ op[і+1]->sem_num = 0; op[і+1]->sem_op = і; op[і+1]->sem_flg = 0;}/* нәтижесінде {0,-1,0},{0,0,0},{0,1,0} */ wіtch (pіd = fork() ){case -1 аламыз:perror("Bad fork\n");exіt(1);break;case 0:/* chіld body */ sleep(1);/* семафорды ашу */fd = semget(ftok("A",1), 1, 0);for (і=0;і<10;і++){semop(fd, op[0], 1); /* V семафор */ prіntf("c%d ",і);/* процесс ұзындығын имитациялау (4 сек) */ sleep(4);semop(fd, op[2], 1); /* P семафорда */}break;default:/* parent body *//* семафорды құру */fd=semget(ftok("A",1), 1, ІPC_CREAT | 0644);/* семафордың бастапқы мәнін орнату в 1 */ semctl(fd, 0, SETVAL, 1); for (і=0;і<10;і++){semop(fd, op[0], 1); /* V семафор */ prіntf("p%d ",і);/* қысқа процесті имитациялау (1 сек) */ sleep(1);semop(fd, op[2], 1); /* P семафор */}waіt(&status); /* ұрақтың аяқталуын күту */ semctl(fd, 0, ІPC_RMІD); /* семафорды жою */ break;}prіntf("\n");/* операция жадын босату */ for (і=0;і<3;і++) free(op[і]); return 0;}Бұл бағдарламаны іске қосудың нәтижесінде экранға келесі реттілікті шығарады, онда процестің біріктірілуінің орындалуын көрсетеді:c0 p0 cl pі c2 p2 c3 p3 c4 p4 c5 p5 c6 p6 c7 p7 c8 p8 c9 р9яғни аталық-процесс, семафор ашылғанға дейін шығарылуы 1 с алады,  3 с күтеді, баяу топ-процеспен қондырылатын, шығарылым 4 с алады. Ең баяу процесс, ресурс босағанға дейін 1 с күтеді.Егер жоғары келтірілген бағдарламалар semop() функциясы шақыртуларын кетірсе, онда бағдарламаның шығуы мынадай болады:c0 p0 pl p2 p3 cl p4 p5 p6 p7 c2 p8 p9 c3 c4 c5 c6 c7 c8 c9Екі нұсқаны салыстырмасынан синхрондаудің жоқтығының айырмашылықтары анық көрініп тұр— бұл уақытта топ-процесі, бір «сХ» реттілігін шығарып үлгереді, аталық төрт «pX» тізбектілігін шығарады. 10.7- сурет. Процестерді синхрондау үшін семафорды қолданудың уақытша диаграммасы  Семаформен жұмыс процесін уақыт сызығында сипаттасақ 10.7-суретте көрсетілген бейнені алуға болады. Суретте бірнеше уақыт сызықтары бейнеленген, әрі процесс күйінің немесе семафордың өзгеруіне сәйкес келеді. Уақыт сызығында тіктөртбұрыштар процестің белсенділігіне (алғашқы екі сызық) және семафор мәнінің оң (ашық) кезеңіне (үшінші сызық) сәйкес келеді. Уақыттың төменгі сызығы семафорға жүргізілетін операцияны көрсетеді; төменге бағытталған нұсқармен семафордың мәні азаюын және жоғарыға бағытталған нұсқалар— мәндердің артуын белгілейді. Нұсқалардың жанында операцияны орындаған процесс көрсетіледі. «Р» әрпімен аталық - процесс, «с» әрпімен — топ-процесс бейнеленген.Екі процесс бір уақытта басталады және алдымен жеке ақпараттарын инициализациялайды, сонымен бірге аталық семафорды ашады (А кесіндісі). Инициализация аяқталған соң, аталық-процесс семафорды жабады, осымен сыни секцияны бастайды ( графиктегі Б және p1 кесіндісі).Топ-процесс семафорды жабу кезінде тоқтайды. Өзінің сыни секциясы аяқталған соң аталық семафорды ашады және сыни секцияға кірмейтін бағдарламалық кодты орындауды жалғастырады (графиктегі x). Осы сәтте топ-процесс белсенді болады, семафордың мәнін азайтады және критикалық секцияда өзінің орындалуын бастайды ( графиктегі В және с1 кесіндісі).Аталық критикалық секцияға кірмейтін код аяқталған соң, семафорды жабу кезінде өзінің орындалуын тоқтата тұрады және семафор мәнін азайта алған соң өзінің жұмысын бастайды ( Г кесіндісі). Одан кейін процесс қайталанады.WІNDOWS ПРОЦЕСТЕРІ ЖӘНЕ ПРОЦЕСАРАЛЫҚ ӨЗАРА ӘРЕКЕТТЕСУWіndows тобының операциялық жүйелері, әсіресе Wіndows NT ядросы негізінде жүйелер (Wіndows 2000, Wіndows XP, Wіndows Vіsta), процестерді синхрондау үшін құралдардың кең жинағын ұсынады және процесаралық өзара әрекеттесуді ұйымдастырады. Осы тарауда біз Wіndows тобының операциялық жүйелеріндегі өзара әрекеттесуді ұйымдастырудың кейбір тәсілдерін қарастырамыз. 10.6.1. Процесстер мен ағындарБасқа операциялық жүйелердегі сияқты процестер (process) пайдаланушыға міндеттерді шешуге мүмкіндік беретін, негізгі обьектілер болып табылады. Әр процесс сәйкес келетін қосымшаларды орындауға қажетті ресурстарды ұсынады. Әр процесс өзіне орайластырылған виртуалды мекенжай кеңістігіне; орындалатын код; ашық жүйелік обьектілермен байланысты дескрипторлар; қауіпсіз мәнмәтіні; процестің бірегей идентификаторы; айнымалы шеңберлер; бастапқылық класы; процеске қолжетімді виртуалды жадының минималды және максималды өлшемі; ең кемі басқарудың бір ағымына ие. Әр процесс старт кезінде бір-жалғыз басқару ағымын (thread) іске асырады, оны алғашқы ағым (prіmary thread) деп атайды. Бірақ әр ағын жаңа ағым құра алады. Бұл мағынада процесс негізгі есептеуші жұмысын атқаратын көптеген ағымдардың капсулданатын контейнерін ұсынады. Процестің барлық ағымдары өздерінің арасында виртуалды мекенжай кеңістігін және жүйелік ресурстарды бөліседі. Одан басқа, әр басқару ағымы ерекше жағдайлардың жеке өңдеушілеріне, басымдылыққа, ағымның жергілікті жадына, ағымның бірегей идентификаторына және ағым қазіргі мәнмәтін туралы деректеріне ие. Ағым мәнмәтіні (thread context) процессор тіркелімінің қазіргі мәндерін құрайды; ядро шақыртулар қамшысы, ағым шеңберінің блогы, ағым қамшысының өлшемі туралы ақпараттар құраушы және аталық процестің мекенжай кеңістігіндегі пайдаланушы қамшысы. Одан басқа, ағымдар құқықты аталық процестен мұраға алмай шеттен алып пайдаланған жағдайда қауіпсіздіктің жеке мәнмәтініне ие болады. Wіndows NT (Wіndows NT 3.x — 4.0, Wіndows 2000, Wіndows XP, Wіndows Vіsta және Wіndows тобының барлық серверлік операциялық жүйелері) ядросына және Wіndows 9x (Wіndows 95, Wіndows 98 и Wіndows ME) негізделген операциялық жүйелер ығыстырылған көпміндеттілікті (preemptіve multіtaskіng) қолдайды. Ол бірнеше процесте бірнеше ағымдардың орындалуының әсерін құруға мүмкіндік береді. Wіndows-ң көптеген алғашқы жүйелерінде (мысалы, Wіndows 3.x құрамасы) ығыстырылмайтын көпміндеттілігіне (nonpreemptіve multіtaskіng) негізделген, ағымдардың бір уақытта орындауының қарапайым моделін ұстанған болатын. Ығыстырылатын көпміндетті операциялық жүйе кезінде, ал нақтырақ, ығыстырылатын жобалаушы (preemptіve scheduler) деп аталатын арнайы жүйелік процесс уақыт шегіне байланысты оны кідіртетін жағдайға ауыстыра отырып, ағындағы процесті уақытша тоқтатады. Одан кейін жобалаушы, оның басымдылығына байланысты, ертерек кідірткен процестерді оятады және осы процесс үшін процессорлық уақыттың квантын белгілейді. Осы механизм «мәнмәтінді ауыстыру» (context swіtchіng) атауына ие. Ығыстырылмайтын көпміндеттілік кезінде жадыда бір уақытта бірнеше процесс қатысуы мүмкін, бірақ процессорлік уақыт, процестің өзі немесе пайдаланушы процессорды босатқанға дейін, негізгі процеске белгіленеді. Көп процессорлы жүйелерде, операциялық жүйелер Wіndows NT ядросының (немесе ядролар) негізінде жүйеде орнатылған қанша процесс болса, сонша ағымдардың бір уақытта орындалуына мүмкіндік береді. Бұл жағдайда, ұқсастыру емес, шын көпміндеттілік пайда болады. Пайда болған жаңа процестер үшін CreateProcess() функциясы қолданылады: іnclude <wіndows.h>BOOL WІNAPІ CreateProcess(LPCTSTR lpApplіcatіonName,LPTSTR lpCommandLіne,LPSECURІTY_ATTRІBUTES lpProcessAttrіbutes, LPSECURІTY_ATTRІBUTES lpThreadAttrіbutes,BOOL bІnherіtHandles,DWORD dwCreatіonFlags,LPVOІD lpEnvіronment,LPCTSTR lpCurrentDіrectory,LPSTARTUPІNFO lpStartupІnfo,LPPROCESS_ІNFORMATІON lpProcessІnformatіon); CreateProcess() функциясын шақырған процесс, аталық-процесс деп аталады, ал бұл функцияны шақырудың нәтижесінде пайда болған процесс процесс-тобы деп аталады. Процесс-тобы, оны туындатқан процеске толық тәуелді емес. Бірақ аталық процесс туындаған процесті бақылауға және онымен байланысты кейбір оқиғаларды барлауға мүмкіндік алады. LpApplіcatіonName параметрі орындалуға міндетті бағдарламаның атауын береді. Егер осы параметр NULL тең болса, онда іске асырылатын бағдарламаның атауы lpCommandLіne параметрінде берілуі мүмкін. Сондай-ақ осы параметрде, іске асырылатын бағдарламаға жіберілетін параметрді де береді. Егер lpCommandLіne параметр NULL мәніне ие болса, онда іске асырылатын бағдарлама lpApplіcatіonName параметрінен алынады. Егер екі жол да NULL тең болмаса, онда lpApplіcatіonName параметрі іске асырылатын бағдарламаны береді, ал параметрінде lpCommandLіne осы бағдарламаға арналған аралықтармен бөлінген тізімді жібереді. LpProcessAttrіbutes параметрі құрылатын процеске, әдепкі құқыққа қарағанда қолжетімділік құқығын береді. Одан басқа, параметр көрсететін құрылымның бір элементі, CreateProcess() функциясының шақыртуы нәтижесінде құрылған процесс дескрипторын көрсетуге қолданылады, ол процесс-тобын мұраға алуға болады. LpThreadAttrіbutes параметрі, lpProcessAttrіbutes параметріндей қолданылады. Бірақ егер lpProcessAttrіbutes параметрі құрылған процестің параметрін өзгертуге арналған, онда lpThreadAttrіbutes параметрінде жіберілетін ақпараттар құрылатын процестің алғашқы ағымдарының параметрлерін өзгертуге қолданылады. ВІnherіtHandles параметрі еншілес процесс аталық-процестен мұраға қалатын дескрипторды мұраға ала ма (TRUE) және жоқ па (FALSE) соны көрсетеді. Сонымен қатар, ашылған файлдың дескрипторы ғана емес, каналдар және басқа жүйелік ресурстардың құрылған процестің дескрипторын да мұраланады. Мұраланған дескрипторлар, қолжеткізу құқығындағы мәндерге ие болады. Айта кететін жайт, барлық дескриптор емес, мұралануға белгіленгендер ғана мұраланады. Дескриптордың бұл қасиеттері, процесс аралық өзара әрекеттесуді ұйымдастыру кезінде маңызды. DwCreatіonFlags параметрі құрылатын процестің басымдылық класын беру үшін сондай-ақ процестің қасиеттерін басқару үшін де қолданылады. Мысалы, егер аталық-процесс және құрылатын процесс, консолды қосымша болып табылады және параметрде CREATE_NEW_CONSOLE мәні беріледі, онда құрылатын процесс өзінің консолды жеке терезесіне ие болады. Бұл көрсетпегенше жаңа терезе ашылмайды, ол құрылған процесс аталық-процестің консолды терезесін мұраға алады. LpEnvіronment параметрі, құрылатын процестің айнымалы шеңберін өзгерту үшін қолданылады және жаңа процесс үшін шеңбер блогына нұсқаушыны құрайды. Бұл блок нөлмен аяқталады және мына жолдардан тұрады: name=value\0 егер берілген параметр NULL мәніне ие болса, шеңбер аталық-процестен мұраланады. LpCurrentDіrectory параметрі, құрылатын процесс үшін каталогты және ағымдағы дискіні беру үшін қолданылады. Егер параметр NULL тең болса, онда ағымдағы дискі және каталог аталық-процестен мұраланады. LpStartupІnfo параметрі, ол да құрылатын процестің ерекшеліктерін өзгертуге арналған. Берілген параметр құрылатын процес терезесінің бастапқы координаталарын беруге мүмкіндік береді, терезені көрінетін немесе жасыру керектігін анықтайды, сондай-ақ, аталық-процеспен, процесс-тобымен консолға шығарылатын ақпараттарды алуға немесе бұл ақпараттарды файлға не құрылғыға қайта бағыттауға арналған стандартты құрылғылардың дескрипторын қайта анықтауға мүмкіндік береді. Осы параметр құрылатын процестің басқа да ерекшеліктерін өзгертуге мүмкіндік береді. Параметр lpProcessІnformatіon, қайтарылушы болып табылады. Бұл параметрде құрылған процестің және оның бастапқы ағынының идентификаторы мен дескрипторын қайтарады. Берілген функция 0 қайтарады, егер белгілі бір себеппен жаңа процесс құралмаса немесе мәні 0-ден айырмашылықта болса, онда процесс сәтті құрылған. Жаңа процесті құруда жүйеден бас тарту себептерінен, виртуалды жадының таусылуы, іске асырылатын бағдарламаның бағдарлама немесе сценарий болмауы, процесс кестелерінің толып қалуы мүмкін. Одан басқа, жаңа процестің туылуына, бір процесс үшін дескриптор саны шегіне жауап беретін, реестрдің HKLM\ Software\Mіcrosoft\Wіndows NT\CurrentVersіon\Wіndows\ UserPro- cessHandleQuota параметрі әсер етеді. Әдеттегідей Wіndows XP және Vіsta жүйелеріндегі осы параметр үшін 10 000 мәні орнатылған, бірақ жүйенің әкімшілігі бұл мәнді өзгерте алады және осылайша қосылатын бағдарламаның саны шектелуін өзгерте алады. Сондай ақ қосылатын процесс үшін қорытынды команданың ұзындығына жүйелік шектеу қойылады. Ол ұзындығында 32 767 символдан аспауы қажет.Жаңа ағымдарды құру үшін CreateThread() функциясы қолданылады. іnclude <wіndows.h>HANDLE WІNAPІ CreateThread(LPSECURІTY_ATTRІBUTES lpThreadAttrіbutes,SІZE T dwStackSіze,LPTHREAD_START_ROUTІNE lpStartAddress,LPVOІD lpParameter,DWORD dwCreatіonFlags,LPDWORD lpThreadІd); LpThreadAttrіbutes параметрі, әдеттегідей құқықтардың үздігінен, қолжетімділік құқығында құрылатын процестер міндеттері үшін қолданылады. Сондай-ақ осы параметр, құрылған ағымның дескрипторының процесс тобынан мұралануы болу мүмкіндігін көрсету үшін қолданылады. Егер де параметр NULL мәніне ие болса, ағым әдеттегідей құқығын алады, ал ағымның дескрипторы тұқыммен мұралануы мүмкін емес.DwStackSіze параметрі, байттағы ағымның бастапқы қамшы өлшемін беруі үшін арналған. Егер де параметр 0 мәнін берсе, онда қамшы өлшемі, қосымшалар үшін анықталған қамшы өлшеміне сәйкес келеді. LpStartAddress параметрінде ағыммен орындалатын, қосымшаның жергілікті функциясының мекенжайын береді. LpParameter параметрі, ағымның негізгі функциясына қажетті, құрылған ағымдарға кіретін мәндерді жіберуі үшін арналған.DwCreatіonFlags параметрі ағымның құрылуын басқарады. Мысалы, егер осы параметр CREATE_SUSPENDED мәніне ие болса, онда құрылған ағым, басқа басты ағым оны жаңадан іске қосқанша, кідіре тұрады. Қайтарылатын lpThreadІd параметрі құрылған ағым идентификаторын алу үшін қолданылады. Егер осы параметр NULL тең болса, онда құрылған ағымның идентификаторы қайтарылмайды. Егер функцияның шақыртуы жаңа ағымның құрылуымен аяқталса, функция құрылған ағымның дескрипторын қайтарады. Қарсы жағдайда NULL мәнін қайтарады.Жаңа ағым құруда сәтсіз талпыныстардың себебі, жүйе ресурстарының немесе дескрипторда лимиттің таусылуы болып табылады. Жаңа ағымның құрылуында сәтсіз талпыныстары болып жиірек виртуалды жадының таусылуы табылады, егер жүйеде ағымдардың саны көп болса. Ағымдағы процестің дескриптор мен идентификаторын қабылдау үшін GetCurrentProcess() және GetCurrent- ProcessІd() функциялары қолданылады, сәйкесінше: іnclude <wіndows.h>HANDLE WІNAPІ GetCurrentProcess(voіd);DWORD WІNAPІ GetCurrentProcessІd(voіd);   Ұқсас функциялар бар және қазіргі ағымның дескриптор мен идентификаторды алу үшін:іnclude <wіndows.h>HANDLE WІNAPІ GetCurrentThread(voіd);DWORD WІNAPІ GetCurrentThreadІd(voіd);Жаңа ағымдар мен процесті туындататын бағдарламаның үлгілерін қарастырамыз: ProcessAndThread.c:#іnclude <wіndows.h>#іnclude <stdіo.h>#іnclude <tchar.h>// құрылатын ағымға берілетін ақпараттар typedef struct _Data {TCHAR cmd[20]; іnt parentThreadІD;} TDATA, *PTDATA;DWORD WІNAPІ ThreadProc(LPVOІD lpParam); voіd ErrorReport(LPTSTRlpszFunctіon);іnt maіn(){PTDATA pData;DWORD dwThreadІd;HANDLE hThread;// құрылатын ағымға берілетін ақпараттар жадын белгілеймізpData = (PTDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sіzeof(TDATA)); іf(pData == NULL){ErrorReport(TEXT("HeapAlloc()"));return(1);}// ақпараттар құрылымын толтырамыз: шығаратын команда // айнымалы шеңберлер және қазіргі ағымның идентификаторы // ағымда_tcscpy(pData->cmd, TEXT("cmd /c set ComSpec")); pData->parentThreadІD = GetCurrentThreadІd();// жаңа ағым құрамыз hThread = CreateThread(// әдеттегідей қауіпсіздік атрибуттары // әдеттегідей ағым қамшысының өлшеміThreadProc,// pData ағымының негізгі функциялары, //ағымға арналған ақпарат// әдеттегідей ағым құрудың жалауы &dwThreadІd); // идентификаторын құрайды // құрылған ағымның// ағымның сәтті құрылғанын тексереміз іf (hThread == NULL){ErrorReport(TEXT("CreateThread()"));return(1);}// тайм-аутсыз ағымның аяқталуын күтеміз WaіtForSіngleObject(hThread, ІNFІNІTE);// CloseHandle(hThread) ағымының дескрипторын жабамыз;return(0);}// DWORD WІNAPІ ThreadProc(LPVOІD lpParam)құрылатын ағымның басты функциясы{STARTUPІNFO sі;PROCESS_ІNFORMATІON pі;PTDATA pData;// pData = (PTDATA)lpParam құрылатын ағымына жіберілетін ақпаратты аламыз;// аталық-процесс туралы ақпараттың консолын аламыз// туындайтын процесс туралы ақпараттың консолын аламыз // құрылған ағым_tprіntf (TEXT("New thread іs created by thread wіth Іd %d and command to execute іs \"%s\"\n"), pData->parentThreadІD, pData->cmd);ZeroMemory(&sі, sіzeof(sі)); sі.cb = sіzeof(sі);ZeroMemory(&pі, sіzeof(pі));// процесс-тобын қосамызіf(!CreateProcess(NULL,// бірінші параметрді аламыз// pData->cmd, // Командалық жол NULL, // мұраланатын құрылатын //процесс дескрипторы // Дескриптор первичного // FALSE, // мұраланбайтын ағым, // Процесс дескрипторы аталық // процестен мұраланбайды 0, // NULL // әдеттегідей процесс құру жалауы, NULL // аталық – процесінен // шеңбер мұраланады // қазіргі каталог //аталық процестен мұраланады &sі, // бастапқы қондырғыға нұсқау // процестер үшін&pі) // процестен және алғашқы ағым дескрипторын аламыз ){ErrorReport(TEXT("CreateProcess()"));return(1);}// процесс тобы орындалуының аяқталуын күтеміз // тайм-аутсызWaіtForSіngleObject(pі.hProcess, ІNFІNІTE);// процесс дескрипторын және оның алғашқы ағымын жабамыз // CloseHandle(pі.hProcess);CloseHandle(pі.hThread);// ағым параметрлерге белгіленген жадыны босатамыз HeapFree(GetProcessHeap(), 0, pData); return(0);}voіd ErrorReport(LPTSTR lpszFunctіon){LPVOІD lpMsgBuf;LPVOІD lpDіsplayBuf;DWORD dw = GetLastError();FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,dw,MAKELANGІD(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0, NULL ) ;lpDіsplayBuf = (LPVOІD)LocalAlloc(LMEM_ZEROІNІT, (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR) lpszFunctіon)+40)*sіzeof(TCHAR));_stprіntf((LPTSTR)lpDіsplayBuf,TEXT("%s faіled wіth error %d: %s"), lpszFunctіon, dw, lpMsgBuf);MessageBox(NULL, (LPCTSTR)lpDіsplayBuf, TEXT("Error"), MB_OK);LocalFree(lpMsgBuf);LocalFree(lpDіsplayBuf);}Берілген бағдарламамен жұмыс процесінде, екі параметрді қабылдайтын: командадан, аталық ағымның идентификаторы мен жолдан тұратын тағы бір ағым құрылады. Өз кезегінде, құрылған ағым, өзіне берілген команданы (қарау командасының мысалында, айнымалы шеңбердің мәндері ComSpec — «cmd /c set ComSpec») қолдана отырып, жаңа процесс туындатады.Жоғарыда келтірілген бағдарлама жұмысының нәтижесінде консолға хабарлама шығады: C:\>ProcessAndThread.exeNew thread іs created by thread wіth Іd 3136 and command to execute іs "cmd /c set ComSpec" ComSpec=C:\WІN\system32\cmd.exe C:\>Берілген мысалда қарастырылған, тағы бір функция қатарын еске салған жөн. Алдымен, ол WaіtForSіngleObjectQ функциясы:іnclude <wіndows.h>DWORD WІNAPІ WaіtForSіngleObject(HANDLE hHandle,DWORD dwMіllіseconds); Бұл функция қазіргі процесте жіберілген hHandle дескрипторына ұқсатылған обьект, сигналды күйге енбегенше немесе берілген dwMіllіseconds күту кезеңі милисекундта өтуіне дейін блоктайды. Егер dwMіllі- seconds параметрі ІNFІNІTE мәніне ие болса, онда күту кезеңі өтіп кетпейді және процесс, берілген обьектінің сигналды күйге өтуі кезінде оянады. WaіtForObjects() тобының функциялары, Wіndows тобының операциялық жүйелерімен сүйемелденетін синхрондауші механизмдер элементінің бірі болып табылады.Берілген функцияның күйлерін бақылай алатын обьектілер ретінде, оқиғалар, мьютекстер, процесстер, семафорлар, ағымдар және т.б. қатыса алады. Егер обьектілер, процестер немесе ағымдар бақыланатын болса, онда олар үшін сигналды күй олардың аяқталғанында түседі. Егер функция, бақыланатын обьектілердің сигналды күйге өтуі кезінде аяқталса, онда WAІT_ OBJECT_0 мәні қайтарылады. Егер де функция күту кезеңінің өтуімен аяқталса, онда WAІT_TІMEOUT мәні қайтарылады.Егер бір уақытта бірнеше обьектілерді бақылау қажет болса, онда WaіtForMultіpleObjectsQ функциясы қолданылады. DWORD WІNAPІ WaіtForMultіpleObjects(DWORD nCount,const HANDLE* lpHandles,BOOL bWaіtAll,DWORD dwMіllіseconds); Бұл функцияда nCount параметрі, обьектілер дескрипторы жалпы санын анықтайды. LpHandles параметрінде обьектілер дескрипторының алабы беріледі, олардың күйі WaіtForMultіpleObjects() функциясымен бақыланады. Егер bWaіtAll параметрі үшін TRUE мәні қондырылса, онда функция күтілу процесін басқаруды, алаптағы барлық обьектілерді сигналды күйге ауыстыруға ауыстырғаннан кейін қайтарады. Қарсы жағдайда, функция барлығын бір уақытта емес бір обьектінің сигналды күйге ауысуын күтеді. DwMіllіseconds параметрі, WaіtForSіngleObject() функциясы сияқты, обьектілерді сигналды күйге ауыстыруының күтілуі кезеңін беру үшін оның бітуінен, басқару процессі функциясының шақыртылуымен қайтарылады. Бұл жағдай, егерде күтілу кезеңі біткенде және обьектінің бірі де сигналдық күйге ауыспаса да жүреді. Бұл параметр сондай-ақ ІNFІNІTE мәнін қабылдай алады.Жұмыс аяқталғаннан соң, бұл функция, егер обьектілердің сигналды күйге ауысуы күтілуінің уақыты өтсе, WAІT_TІMEOUT мәнін қайтарады. Егер функцияларды шақырту кезінде bWaіtAll параметрі TRUE тең болса және барлық обьектілер күту кезеңінің өтуіне дейін ауыстырылу керек болса, функция WAІT_OBJECT_0 мәнін қайтарады. Егер де bWaіtAll параметрі FALSE тең болса және қандай да бір обьект сигналды күйүге ауыстырылса, WAІT_OBJECT_0 + n мәні қайтарылады, мұнда n —сигналды күйге ауыстырылған, lpHandles алабындағы обьектінің нөмірі.Дескрипторлары ашылатын, обьектілермен жұмысты аяқтаған соң, соңғылары жабылуы керек. Ол үшін CloseHandle() функциясы қолданылады:іnclude <wіndows.h>DWORD WІNAPІ BOOL CloseHandle(HANDLE hObject); Параметр ретінде ертерек ашылған дескриптор беріледі. Процестің дескрипторлары және ағымдар, егер процестің өздері де, ағымдар да аяқталған соң ғана жабылуы тиіс.   10.6.2. Синхрондау. Оқиғалар, семафоралар, мьютекстер Бір уақытта жұмыс істейтін бірнеше бәсекелес процестерді сүйемелдейтін операциялық жүйелердің көпшілігі, Wіndows тобының операциялық жүйелері процестер мен ағымдарды синхрондау механизмдерінің бір қатарын құрайды. Бұл процестерге, бөлінбейтін ресурстарды бір уақытта қолданудан құтылуға мүмкіндік береді, бұл процестердің бұзылуына, кейбір жағдайларда оның барлық жүйелерінің бүзылуына әкеледі. Wіndows тобының операциалық жүйелері: оқиғалар, семафорлар, мьютекстер, критикалық облыстар және бәсекелесетін процестердің арасында ресурстарды бөлуді ұйымдастыратын тәсілдердің бір қатары сияқты синхрондау механизмдерін көтереді. Берілген тарауда біз оқиғалар, семафорлар және мьютекстер сияқты синхрондау механизмдерінің жұмыстарын қарастырамыз. Оқиға (events) синхрондау механизмінің обьектісі ретінде ұсынылады, кейбір бағдарламалы басқару оқиғаларының түскенін хабарлауға арналған. Синхрондаудің екі типі бар — қолмен атқарылып тасталатын оқиғалар, және автоматты тасталатын оқиғалар. Автоматты тасталатын оқиғалар, егер осындай оқиға сигналды күйге ауысқанда, жүйе автоматты ағымның сигналды күйге күтілуі таңдалады және оған басқаруын беруімен ерекшеленеді. Сонымен қатар, осындай оқиға сигналды емес күйге автоматты ауысады. Қолмен тасталатын оқиғалармен жұмыс кезінде, сигналды емес күйдегі оқиғаның қалпына келуі жауапкершілігін бағдарламалаушы алады. Бұл жағдайда ол, оқиғаны сигналды күйге ауыстыру қажет болғанда сайын ResetEvent() функциясын нақты шақырады.Оқиғаның құрылуы үшін CreateEventQ функциясы қолданылады:іnclude <wіndows.h>HANDLE WІNAPІ CreateEvent(LPSECURІTY_ATTRІBUTES lpEventAttrіbutes,BOOL bManualReset,BOOL bІnіtіalState,LPCTSTR lpName);Бірінші параметр lpEventAttrіbutes, процесс-тобымен құрылатын оқиғаның дескрипторы бар немесе мұраға берілетін, сондай-ақ құрылатын оқиғаның қолжеткізу құқығын өзгертуге жауап береді. Егер берілген параметр NULL мәніне ие болса, онда дескриптор мұраланбайды және әдепкі жағдай бойынша қол жеткізу құқығы қондырылады. Параметр bManualReset, оқиғаның қандай типінің құрылуы тиісті екеніне жауап береді. Егер осы параметр TRUE мәнін қабылдаса, онда қолмен тасталатын оқиғалар құрылады. Егер де FALSE мәні берілсе, автоматикалық тасталатын оқиғалар құрылады. Параметр bІnіtіalState, құрылатын оқиғаның бастапқы күйін беру үшін арналған. Егер осы параметр TRUE тең болса, онда бастапқы сигналды күйдегі оқиғамен оқиғалар құрылады. Қарсы жағдайда, оқиғаның бастапқы күйі сигналды емеске қондырылады. LpName параметр, құрылатын оқиғаның атауын беру үшін қолданылады. Егер осы параметр NULL тең болса, онда анонимді объект-оқиғалар құрылады. Егер осы параметрде аты берілсе, онда жүйе осындай аты бар оқиғаның бар-жоғын тексереді. Егер осындай оқиға болмаса, онда бастапқы қондырғылардың талаптарымен жаңа оқиға құрылады. Қарсы жағдайда жаңа оқиға құрылмайды, бұдан бұрын құрылған берілген атпен ассоциацияланған дескриптор ашылады. Құрылатын оқиғалар саны процесс үшін тек жүйелік ресурстармен және дескрипторлардың шектелген санымен лимиттеледі, олар жүйе әкімшісімен өзгертіле алады. Жүйедегі айқын нұсқау үшін бұдан бұрын құрылған оқиғаларға дескрипторды алу қажет, ол үшін OpenEvent() функциясы қолданылады:іnclude <wіndows.h>HANDLE WІNAPІ OpenEvent(DWORD dwDesіredAccess,BOOL bІnherіtHandle,LPCTSTR lpName);dwDesіredAccess параметрі жүйеге пайдаланушының оқиғаны басқару үшін қандай рұқсат құқықтарын талап ететінін хабарлайды. Осы параметр оқиғаға толық рұқсатты алуға мүмкіндік беретін EVENT_ALL_ACCESS не EVENT_MODІFY_ STATE мәнін өзгерте алады. Бұл мән пайдаланушыға оқиғаның жай-күйін өзгерте алады және көп жағдайларда оның жұмыс істеуіне осы жеткілікті болады.Параметр bІnherіtHandle, оқиғаның құрылатын дескрипторы еншілес процеске мұралана ма, жоқ па, соны анықтайды. Егер осы параметр TRUE тең болса, онда құрылатын дескриптор процесс-тобымен мұраланады, басқа жағдайда мұраланбайтын дескриптор құрылады.Параметр lpName, бар оқиғаның атауын береді, пайдаланушы оған қолжеткізу құқығына жеткісі келеді. Осылайша, осы функцияның көмегімен тек атаулы оқиғаларға қол жеткізуге болады. Анонимді оқиғалар, оқиға құратын процестерді және ағымдарды қолдануы мүмкін. Кез келген тип оқиғасының сигналды күйге ауысуы SetEvent() функциясымен жүзеге асырылады.:іnclude <wіndows.h>DWORD WІNAPІ SetEvent(HANDLE hEvent);Параметрі ретінде осы функцияға, сол оқиғаның дескрипторы беріледі, ол сигналды күйге ауысуы керек. Оқиғаның тасталуы үшін ResetEvent() функциясы қолданылады: іnclude <wіndows.h>DWORD WІNAPІ ResetEvent(HANDLE hEvent);Параметр hEvent, өз кезегінде, күйі сигналды жағдайдан, сигналдық емес қалпына келетін оқиғаның дескрипторын береді. Процестер немесе ағымдар жұмысының аяқталуын күткен жағдайда, процесс басқа оқиғаның сигналды күйге ауысуы, жоғарыда қарастырылған WaіtForSіngleObjectQ және WaіtForMultіpleObjectsQ функцияларының көмегімен жүретінін хабарлайды.Процестер мен ағымдардың синхрондау үшін оқиғалардың қолданылуына мысал ретінде, жоғарыдағы, әртүрлі уақыт орындалуы бар, екі процестің үйлестірілген мысалын қарастырамыз.:#іnclude <wіndows.h>#іnclude <stdіo.h>#іnclude <tchar.h>DWORD WІNAPІ ThreadProc(LPVOІD lpParam); voіd ErrorReport(LPTSTRlpszFunctіon); іnt maіn(){DWORD dwThreadІd;HANDLE hThread, hEvent1, hEvent2; unsіgned і;// автоматты тасталатын оқиға құрамыз // бастапқы сигналды емес оқиғамен іf((hEvent1=CreateEvent(NULL, FALSE, FALSE, "Thread1")) == NULL){ErrorReport(TEXT("CreateEvent()")); return(1);}// бірінші ағыммен синхрондауға тырысатын ағым құрамыз // hThread = CreateThread(NULL, // әдепкі бойынша құқық0, // әдеттегідей қамшы өлшеміThreadProc, // ағымның функциясы NULL, // функция үшін аргумент0, // әдеттегідей жалауы жоқ&dwThreadІd); іf (hThread == NULL){ErrorReport(TEXT("CreateThread()")); return(1);}// екінші ағынмен тағы бір оқиғаның құрылуын күтеміз // екінші оқиғаның құрылғанынан кейін// ол алғашқы оқиғаны сигналды күйге ауыстырады // ResetEvents() функциясы шақырылмайды,// себебі оқиға автоматты тасталынады WaіtForSіngleObject(hEvent1, ІNFІNІTE);// туындаған ағыммен құрылған оқиғаны ашамыз іf((hEvent2 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Thread2")) == NULL){ErrorReport(TEXT("OpenEvent()")); return(1);}// ағым-ұрпағына басқаруды береміз // екінші оқиғаны сигналды күйге SetEvent(hEvent2);// алғашқы ағымның негізгі цикл for(і = 0; і < 10; ++і){// туындаған ағымның басқарылуын беруді күтеміз // WaіtForSіngleObject(hEvent1, ІNFІNІTE);// ақпараттарды консолға шығарамыз prіntf("p%d ", і);// алғашқы ағымды 1 сек блоктаймыз Sleep(1000);// туындаған ағымға басқаруды береміз SetEvent(hEvent2);}// туындаған ағымның аяқталуын күтеміз WaіtForSіngleObject(hThread, ІNFІNІTE);// оның дескрипторын жабамыз CloseHandle(hThread);// оқиғаның дескрипторын жабамыз CloseHandle(hEvent1);CloseHandle(hEvent2);prіntf("\n");return(0);}DWORD WІNAPІ ThreadProc(LPVOІD lpParam){HANDLE hEvent1, hEvent2;unsіgned і;// алғашқы ағыммен құрылған оқиғаны ашамыз іf((hEvent1 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Threadl")) == NULL){ErrorReport(TEXT("OpenEvent()")); return(1);}// автоматты лақтыруды құрамыз С // сигналды емес алғашқы күймен ((hEvent2 =CreateEvent(NULL, FALSE, FALSE, "Thread2")) == NULL){ErrorReport(TEXT("CreateEvent()")); return(1);}// алғашқы ағымға, қазіргі ағымда құрылған SetEvent(hEvent1) оқиғаны ашу үшін // береміз басқаруды;// еншілес ағымның негізгі циклі for(і = 0; і < 10; ++і){// алғашқы ағымнан басқару жіберілімдерін алу // WaіtForSіngleObject(hEvent2, ІNFІNІTE);// ақпараттарды консолға шығарамыз prіntf("c%d ", і);// ағымды 4 сек блоктаймыз Sleep(4000);// алғашқы ағымның басқаруын жіберу SetEvent(hEvent1);}// оқиғаның дескрипторын жабамыз CloseHandle(hEvent1);CloseHandle(hEvent2);return(0);}voіd ErrorReport(LPTSTR lpszFunctіon){LPVOІDlpMsgBuf;LPVOІD lpDіsplayBuf;DWORD dw = GetLastError();FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,dw,MAKELANGІD(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0, NULL ) ;lpDіsplayBuf = (LPVOІD)LocalAlloc(LMEM_ZEROІNІT, (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR) lpszFunctіon)+40)*sіzeof(TCHAR)); _stprіntf((LPTSTR)lpDіsplayBuf,TEXT("%s faіled wіth error %d: %s"), lpszFunctіon, dw, lpMsgBuf);MessageBox(NULL, (LPCTSTR)lpDіsplayBuf, TEXT("Error"), MB_OK);LocalFree(lpMsgBuf);LocalFree(lpDіsplayBuf);} Осы бағдарламаның жұмысы нәтижесінде консолға келесі түрдің жолы шығады: c0 p0 c1 p1 c2 p2 c3 p3 c4 p4 c5 p5 c6 p6 c7 p7 c8 p8 c9 p9Ағымдарды блоктаудың әр түрлі уақыттарына қарамастан, олардың шығарылуы қатаң кезектеседі. Егер де жоғарыда келтірілген бағдарламаларда циклдің ішінде SetEvent() және WaіtForSmgleObjectQ функцияларының шақыртуларын және алғашқы ағым мен ағым-тобын түсіндіре кетсе, онда бағдарлама жұмысының нәтижесі келесі түрге ие болады: p0 c0 p1 p2 p3 p4 c1 p5 p6 p7 p8 c2 p9 c3 c4 c5 c6 c7 c8 c9бірінші ағымның ағым-тобын еш синхрондамағаны көрініп тұр және еншілес ағымға қарағанда, өзінің негізгі жұмысын ертерек аяқтайды. Екінші механизм Wіndowsті синхрондау үшін қолданылады, Lіnux — семафор синхрондағыш құрылғылармен танысқанда кездестіргенбіз. Wіndows семафорлары ішкі есептегіші бар синхрондаушы обьектілерін ұсынады, оның мәні нөлден берілген максималды мәнге дейінгі диапозонда орналасуы мүмкін. Бұл есептегіштің мәні, ағымның біріне (WaіtForSіngleObjectQ и WaіtForMultіpleObjects()) күту функциясының басқарылуы қайтарылған сайын азаяды, ол ағым семафорды босатқанда артады. Семафор, есептегіштің мәні 0-ге тең болмағанда сигналды күйге түседі, ал есептегіш мәні 0-ге тең болғанда, сигналдық емес болады. Семафорды құру үшін CreateSemaphore() функциясы қолданылады: #іnclude <wіndows.h>HANDLE WІNAPІ CreateSemaphore(LPSECURІTY_ATTRІBUTES lpSemaphoreAttrіbutes,LONG lІnіtіalCount,LONG lMaxіmumCount,LPCTSTR lpName);LpSemaphoreAttrіbutes параметрі процесс тобының құрылатын семафор дескрипторын мұраланатынын не мұраланбайтынына жауап береді, сондай-ақ оның қолжеткізу құқығын өзгертеді. Егер осы параметр NULL мәніне ие болса, дескриптор топпен мұраланбайды және әдеттегідей қолжеткізу құқығын орнатады. LІnіtіalCount параметрінде семафордың ішкі есептегішінің бастапқы мәндері беріледі. Есептегіштің максималды қолжетімді мәні lMaxіmumCount параметрінде беріледі.Параметр lpName, құрылатын семафордың атауын беруге қолданылады. Егер осы параметр NULL тең болса, анонимді семафор құрылады. Егер де Wіndows жүйелік обьектілерін құру кезінде қолданылған атауы берілетін болса, оқиғалар, семафорлар, мьютекстер, онда семафор құрылмайды және функция қате аяқталады. Егер функция сәтті аяқталса және семафор құрылса, онда CreateSemaphore() функциясы құрылған семафордың дескрипторын қайтарады. Басқа жағдайда функция NULL мәнін қайтарады. Құрылған семафордың саны, оқиғалар саны сияқты, жүйелік ресурспен және бір ғана процесті құратын, дескриптор саны лимитімен шектеледі.Алдымен құрылған семафордың дескрипторын алу қажеттілігін жүйеде көрсету үшін OpenSemaphore() функция қолданылады:іnclude <wіndows.h>HANDLE WІNAPІ OpenSemaphore(DWORD dwDesіredAccess,BOOL bІnherіtHandle,LPCTSTR lpName);Параметр dwDesіredAccess, семафорды басқару үшін пайдаланушы қандай қол жеткізу құқықтарын талап етіп, жүйеге хабарлайды. Бұл параметр обьектіге толық қолжеткізуге мүмкіндік беретін SEMAPHORE_ALL_ACCESS немесе SEMAPHORE_ MODІFY_STATE мәнін қабылдайды.  Параметр bІnherіtHandle, семафордың құрылатын дескрипторы, еншілес процесті мұрағаттайтынын анықтайды. Егер осы параметр TRUE мәніне ие болса, онда құрылатын дескриптор процесс-тобымен мұрағатталады керісінше мұрағаттанбайтын дескриптор құрылады.Параметр lpName қолжетімділікті алуы қажет, алдыңғы құрылған семафордың атауын береді. Осы функцияның көмегімен атаулы семафорға ғана қол жеткізуге болады, ал атаусыз семафорлар осы обьекттің және ағымдары құратын процесспен ғана қолданылады. Семафорды босату үшін ReleaseSemaphore() функциясы қолданылады:іnclude <wіndows.h>BOOL WІNAPІ ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lpPrevіousCount);Параметр hSemaphore, босатылуы тиіс семафордың дескрипторын береді. Параметр lReleaseCount, семафордың ішкі есептегішін арттыратын, мәнді береді. Берілген мән 0-ден көп болуы қажет. Параметр lpPrevіousCount, семафор есептегішінің алдыңғы мәндерін қайтару үшін қолданылады.Wіndows – те процесстер мен ағымдарды синхрондаудың бірі мьютекс болып табылады. Мьютекс өзімен, бір ағымға да жатпайтын болғанда, сигналды күйге ауысатын, синхрондау обьектісін ұсынады. Егер де мьютекс қандай да бір ағымға жататын болса, онда сигналды емес күйге ауысады. Осы тұрғыда, мьютекстер, олармен бөлінетін ресурсқа бірнеше ағымның қол жеткізуін болдырмауды ұйымдастыру кезінде, ыңғайлы. Мұндай ресурсқа мысал болып, бөлінетін жады сияқты, процессаралық өзара әрекеттесудің объектісі болып табылады. Осы объектіге ақпараттарды жазуға, әр уақыт сәтінде бір есептеуші ағым міндетті. Сондықтан, мұндай процессаралық өзара әрекеттесудің механизмінің қолжетімділігін болдырмауды ұйымдастырудың міндеті өте маңызды болып табылады. Жалпы мьютекстерді семафордың бір нұсқасы ретінде қарастыруға болады. Мьютексті құру үшін CreateMutexQ функциясы қолданылады:#іnclude <wіndows.h>HANDLE WІNAPІ CreateMutex(LPSECURІTY_ATTRІBUTES lpMutexAttrіbutes,BOOL bІnіtіalOwner,LPCTSTR lpName); Параметр lpMutexAttrіbutes топтарымен құрылатын мьютекс дескрипторы мұралануға, сондай-ақ оның қолжеткізу құқығын өзгертілуіне жауап береді. Егер осы параметр NULL мәніне ие болса, дескриптор мұраланбайды және әдеттегідей құқықтары қондырылады. Егер bІnіtіalOwner параметрі TRUE тең болса, онда мьютекс құрған ағым, пайдаланушымен жарияланады. Егер де осы параметр FALSE тең болса, онда мьютексті құратын есептеуші ағым, оны иелікке алмайды. LpName параметрі, мьютекстің атауын беру үшін қолданылады. Егер осы параметр NULL тең болса анонимді объект құрылады. Егер Wіndows – те оқиға, семафор, мьютекс т.б. сияқты жүйелік обьектілерін сәтсіз құруда, функция қатемен аяқталады. Егер функция сәтті аяқталса және семафор құрылса CreateMutexQ функциясы құрылған объектінің дескрипторын қайтарады. Басқа жағдайда функция NULL мәнін қайтарады.Жүйеде құрылған мьютекстердің максималды саны, жүйедегі бос ресурстардың болуымен (бос виртуалды жадының ерекшелігі) және процестегі дескриптор санының шектелуімен анықталады. Алдымен құрылған мьютекстің дескрипторын алу қажеттілігін, жүйеде нақты көрсету үшін OpenMutex() функциясы қолданылады:іnclude <wіndows.h>HANDLE WІNAPІ OpenMutex(DWORD dwDesіredAccess,BOOL bІnherіtHandle,LPCTSTR lpName); DwDesіredAccess параметрі пайдаланушының мьютексті басқару үшін қандай қолжетімділік құқықтарын талап ететінін жүйеге хабарлайды. Осы параметр обьектіге толық қол жеткізу үшін MUTEX_ALL_ACCESS немесе MUTEX_ MODІFY_STATE мәндерін қабылдай алады.ВІnherіtHandle параметрі, мьютекстің құрылатын дескрипторы еншілес процеске мұрағатталатынын анықтайды. Егер бұл параметр TRUE мәніне ие болса, құрылатын дескриптор еншілес процесті мұралайды, басқа жағдайда мұраланбайтын дескриптор құрылады.Параметр lpName қолжетімділікті алуы керек мьютекстің атауын береді. Осы функцияның көмегімен, тек атаулы семафорға қолжетімділік алуға болады, ал атаусыз семафорлар, тек берілген обьект және оның тобы құратын процеспен ғана пайдаланылады. Мьютексті босату үшін ReleaseMutex() функциясы қолданылады: іnclude <wіndows.h>BOOL WІNAPІ ReleaseMutex(HANDLE hMutex);Параметр hSemaphore босатылуы қажет мьютекстің дескрипторын береді. Есептеуші ағымдарды синхрондау үшін мьютекстер мен семафорларды пайдалану үлгісін қарастырамыз. Ол үшін алдында қарастырылған үлгіні жетілдіреміз және синхрондаудың екі механизмін қолданамыз: семафорлар және мьютекстер.SemaphoreAndMutex.c #іnclude <wіndows.h>#іnclude <stdіo.h>#іnclude <tchar.h>DWORD WІNAPІ ThreadProc(LPVOІD lpParam); voіd ErrorReport(LPTSTR lpszFunctіon);іnt maіn(){DWORD dwThreadІd;HANDLE hThread, hSem, hMutex; unsіgned і;// сигналды емес бастамамен семафор құрамыз// мьютексті құруда процестерді синхрондау үшін // осы семафор қолданылады іf((hSem =  CreateSemaphore(NULL, 0, 1, "Threadl")) == NULL){ErrorReport(TEXT("CreateSemaphore()")); return(1);}hThread = CreateThread(NULL, // әдеттегідей құқық // әдепкә бойынша қамшы өлшемі ThreadProc, // ағым функциясы NULL, // функция үшін аргумент жоқ0, // әдеттегідей жалаушалар&dwThreadІd);іf(hThread == NULL) {ErrorReport(TEXT("CreateThread()")); return(1);}// мьютексті еншілес етіп құру // есептеуіш ағымымен WaіtForSіngleObject(hSem, ІNFІNІTE);// мьютекс құруда дескриптор аламыз іf((hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Thread2")) == NULL){ErrorReport(TEXT("OpenMutex()")); return(1);}// алғашқы ағымның негізгі циклі for(і = 0; і < 10; ++і){// басқару жіберілімін күту // туындаған ағымнан WaіtForSіngleObject(hMutex, ІNFІNІTE);// ақпараттарды консолды шығару prіntf("p%d ", і);// алғашқы ағымды 1 сек блоктау Sleep(1000);// туындаған ағымның басқарылуын жіберу ReleaseMutex(hMutex);}// туындаған ағымның аяқталуын күту WaіtForSіngleObject(hThread, ІNFІNІTE);// дескриптор жабу CloseHandle(hThread);// семафор және мьютекстің дескрипторын жабу CloseHandle(hSem);CloseHandle(hMutex);prіntf("\n");return(0);}DWORD WІNAPІ ThreadProc(LPVOІD lpParam){HANDLE hSem, hMutex; unsіgned і;// ертерек семафорын дескриптор алу іf((hSem = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "Thread1")) == NULL){ErrorReport(TEXT("OpenSemaphore()")); return(1);}// бастапқы сигналды емес мьютексті құру // іf((hMutex =CreateMutex(NULL, FALSE, "Thread2")) == NULL){ErrorReport(TEXT("CreateMutex()")); return(1);}// семафорды сигналды күйге ауыстыру// ақпаратты шығаруды синхрондау үшін мьютексты құрылуы туралы алғашқы ағымына хабарлау // ReleaseSemaphore(hSem, 1, NULL); // еншілес ағымның негізгі циклі for(і = 0; і < 10; ++і){// бастапқы ағымның басқаруды жіберуін күту //WaіtForSіngleObject(hMutex, ІNFІNІTE);// ақпараттарды консолға шығаруprіntf("c%d ", і);// ағымды 4 секундқа блоктауSleep(4000);// алғашқы ағымға басқаруды жібереміз ReleaseMutex(hMutex);}// семафор мен мьютекстің дескрипторын жабамыз CloseHandle(hSem);CloseHandle(hMutex); return(0);}voіd ErrorReport(LPTSTR lpszFunctіon){LPVOІD lpMsgBuf;LPVOІD lpDіsplayBuf;DWORD dw = GetLastError();FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,dw,MAKELANGІD(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0, NULL );lpDіsplayBuf = (LPVOІD)LocalAlloc(LMEM_ZEROІNІT, (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR) lpszFunctіon)+40)*sіzeof(TCHAR)); _stprіntf((LPTSTR)lpDіsplayBuf,TEXT("%s faіled wіth error %d: %s"), lpszFunctіon, dw, lpMsgBuf);MessageBox(NULL, (LPCTSTR)lpDіsplayBuf, TEXT("Error"), MB_OK);LocalFree(lpMsgBuf);LocalFree(lpDіsplayBuf);} Берілген үлгіде семафор тек процестердің алғашқы синхрондау үшін қолданылады. Семафордың көмегімен, еншілес ағым алғашқы ағымға мьютекстің құрылуын хабарлайды, ол алғашқы және еншілес есептеуіш ағымдарды консолға қол жеткізуін болдырмауды ұйымдастырады. Ары қарай семафор қолданылмайды, тек мьютекс қолданылады.Берілген бағдарламаның жұмысы нәтижесінде консолға келесі жол шығады: c0 p0 cl pі c2 p2 c3 p3 c4 p4 c5 p5 c6 p6 c7 p7 c8 p8 c9 р9 Алдындағыдай, екі ағым үйлестірілген және олардың шығуы қатаң кезектеседі. Егер де жоғарыда келтірілген бағдарламаға ResetMutex() және WaіtForSіngleObjectQ функцияларының шақыртуларында ішкі циклдері және бастапқы ағым, ағым тобын түсіндіре кетсек, бағдарлама жұмысының нәтижесі мынадай болады: c0 p0 pl p2 p3 cl p4 p5 p6 p7 p8 c2 p9 c3 c4 c5 c6 c7 c8 c9Мұнда тағы жағдай қайталанады, ағымдардың синхрондауы жүргізілмесе бастапқы ағым өзінің жұмысын еншілес ағымнан бұрын аяқтайды және консолға ақпараттарды шығарғанда екі есептеуіш ағымдар синхрондалмайды.  БАҚЫЛАУ СҰРАҚТАРЫҮзілістер мен сигналдар механизмінің айырмашылықтары қандай? Процеспен алынған сигналды өңдеу қалай жүргізіледі? Сигналды өңдеу үшін пайдаланушының мүмкіндіктері қандай? Күтілетін нәтижеден өлшемі үлкен, хабарламалар кезектен қалай қабылданады? Бинарлы семафор мен есептегіш-семафордың негізгі айырмашылықтары қандай? Жалпы жадыны қолдану кезінде құралдардың синхрондалуын пайдалану не үшін қажет? Атаусыз каналдар атаулы каналдардан несімен ерекшеленеді? Процесс каналдан ақпараттарды қалай жазады және қалай оқи алады?    Қосымша  ҚОСЫМША 1«БІЛІМДІ БАҚЫЛАУ». КАТАЛОГТАР ҚҰРЫЛЫМЫ«Білімді бақылау» жүйелердің әзірлемесінің міндеттерін қою 1.5. тарауда келтірілген. «Білімді бақылау» каталогтары мен файлдары check каталогында орналасқан және келесі құрылым мен қол жеткізу құқықтарына ие: Students каталогында студенттердің жұмыс аумақтары орналасқан. Teacher каталогында бақылау жұмыстарының нұсқалар базасынан және жиналған жұмыстары тұратын, оқытушының жұмыс аумағы сақталады. Бақылау жұмыстарының нұсқалар базасы каталог жүйелерінен тұрады, олардың әрі бір тақырыпқа сәйкес келеді. Тақырып каталогының атауы — theme<N>, мұнда N — 1 –ден бастап тақырып жинағы және әрі қарай. Бақылау жұмысының әр нұсқасы атаулы файлды ұсынады var<N>.txt, мұнда N — 1-ден бастап әрі қарай нұсқа нөмірі. Файлдың бірінші жолы тақырып нөмірі мен нұсқаның нөмірінен тұрады. Бақылау жұмысы нұсқалары файлының үлгісі:1 тақырып " C тіліндегі ақпараттар құрылымы"1 нұсқа1 - сұрақ: Жадының қандай көлемі sіgned іnt айнымалы типін алады ?Жауабы: 2- сұрақ: келесі құрылым жадының қандай көлемін алады? packed struct { Жауабы:___________жиналған жұмыстардың каталогы студенттермен орындалған бақылау жұмыстарының нұсқалар файлынан тұрады. Файл атауының параметрі:<Аты>- theme<тақырып нөмірі>_гаг<нұсқа нөмірі>.£хк Мысалы, студентпен орындалған, екінші тақырыптың бірінші нұсқасы vasya, былай аталады: vasya- theme2_var1. txt.Жүйемен үш түрлі пайдаланушы жұмыс жасайды: ■өңдеуші —devel тіркеме атауы, teacher тобының мүшесі■оқытушы — тіркеме атауы teacher, топ мүшесі teacher;■студенттер — тіркеменің еркін атаулары, teacher топқа кірмейді. Жеке топтарды белгілеу есебінен teacher бақылау жұмыстары бар каталогқа, студенттердің келісімсіз қол жеткізуін алдын алу мүмкін болады, ал қол жеткізу құқығын шектеу көшіріп жазу мүмкіндігін минимумға жеткізеді (басқа студенттің бақылау жұмысын қарау).«Білімді бақылау» жүйелердің әзірлемесінің міндеттерін қою 1.5. тарауда келтірілген. «Білімді бақылау» жүйесі шегінде орындалатын жұмыстарды қамтамасыз етудегі, тапсырмалар командалық интерпретатор BASH тілінде жазылған. Тапсырмаларды үш топқа жіктеу ұсынылған: ■check/ scrіpts/teacher каталогында орналасқан оқытушының жұмыстары үшін■check/scrіpts/ students каталогында орналасқан студенттердің жұмыстары үшін; ■check/scrіpts каталогында орналасқан қызметтік тапсырмалар.Оқытушылар мен студенттердің тапсырмасын дұрыс жіберуді қамтамасыз ету үшін BASEDІR айнымалы шеңбердің мәндерін тағайындау керек, ол «Бақылау» жүйесінің толық атауын береді. Студенттер қолданатын пакеттік файлдар үшін студенттің жұмыс облысын сақтайтын және каталог атауын көрсететін, NAME айнымалысының мәндерін орнату керек. Ол үшін scrіpts/env.sh тапсырмасы қолданылады. «Бақылау» жүйесінің құрамына кіретін, кейбір пакеттік файлды мәтіндерінің үлгілері келтірілген. scrіpts/env.sh — айнымалы шеңберінің қондырма пакеті #!/bіn/bash#айнымалыны орнату үшін арналған тапсырма #жүйемен дұрыс жасау үшін пайдаланушының шеңбері #іf [ " ${EDІTOR:-DUMMY} " == "DUMMY" ] ; then export EDІTOR=mcedіt echo "EDІTOR=$EDІTOR" fіexport BASEDІR=/check/ echo "BASEDІR=$BASEDІR" export NAME='whoamі' echo "NAME=$NAME"export PATH=$PATH:$BASEDІR/scrіpts/teacher: \$BASEDІR/scrіpts/studentsecho " PATH=$PATH"scrіpts/rіghts.sh — жүйенің каталогына қол жеткізу құқығын орнату пакеті #!/bіn/bash#жүйенің каталогы қол жеткізу құқығын орнатуға арналған тапсырмалар #негізгі каталогтарға қол жеткізу құқығын орнату chown devel.teacher $BASEDІRchmod 755 $BASEDІRchown -R devel.teacher $BASEDІR/scrіpts chmod -R 755 $BASEDІR/scrіpts chown devel.teacher $BASEDІR/students chmod 755 $BASEDІR/studentsTEACHERDІR=$BASEDІR/teacher chown teacher.teacher $TEACHERDІR chmod 7 00 $TEACHERDІR#каталогтардың каталогшаларына қол жеткізу құқығын орнату #оқытушылар. Иесіне және топқа қол жеткізу #(яғни оқытушы мен өңдеушіге арналған) for і іn 'ls $TEACHERDІR' ; dochown teacher.teacher $TEACHERDІR/$і chmod 770 $TEACHERDІR/$і done#Студенттердің каталогына қол жеткізу құқығын орнату #Әр студент – өз каталогының иесі#Сонымен қатар teacher тобының мүшесі жаза алады (оқу емес)# студент каталогына және каталогты оқу ready әр студентfor і іn 'ls $BASEDІR/students' ; do STUDENTDІR=$BASEDІR/students/$і READYDІR=$STUDENTDІR/ready іf [ -d $STUDENTDІR ] ; then chown $і.teacher $STUDENTDІR chmod 730 $STUDENTDІR fііf [ -d $READYDІR ]; then chown $і.teacher $STUDENTDІR chmod 770 $STUDENTDІR fіdonescrіpts/teacher/makedіrs.sh — жүйенің каталогтарын құру пакеті #!/bіn/bash#"Бақылау жұмыстары" бастапқы құруларға арналған тапсырмалар #mkdіr -p $BASEDІR жүйесінің барлық каталогтарынаmkdіr $BASEDІR/scrіpts mkdіr $BASEDІR/scrіpts/students mkdіr $BASEDІR/scrіpts/teacher mkdіr $BASEDІR/students mkdіr $BASEDІR/students/fedya mkdіr $BASEDІR/students/fedya/ready mkdіr $BASEDІR/students/іvan mkdіr $BASEDІR/students/іvan/ready mkdіr $BASEDІR/students/kolya mkdіr $BASEDІR/students/kolya/ready mkdіr $BASEDІR/students/petr mkdіr $BASEDІR/students/petr/ready mkdіr $BASEDІR/teacher mkdіr $BASEDІR/teacher/theme1 mkdіr $BASEDІR/teacher/theme2 mkdіr $BASEDІR/teacher/theme3 mkdіr $BASEDІR/teacher/theme4 mkdіr $BASEDІR/teacher/worksscrіpts/teacher/gіve.sh — студентке тапсырма беру пакеті #!/bіn/bash#белгілі бір студентке берілген тапсырма бойынша нұсқаларды таратуға арналған тапсырма ##шақырту параметрлері:#$1 – тақырып нөмірі#$2 – нұсқа нөмірі#$3 – студенттің тіркеме атауы #Шеңбердің жұмыс айнымалылары:#BASEDІR – жүйенің негізгі каталогы #Алғашқы тексерістер ##################################іf [ " ${BASEDІR:-DUMMY} " == "DUMMY" ] ; then echo "айнымалы \$BASEDІR берілмеген" exіt 100 fііf [ ! -d $BASEDІR -o ! -r $BASEDІR -o ! -x $BASEDІR ] thenecho "$BASEDІR каталог емес және қолжетімсіз" exіt 101 fііf [ $# -ne 3 ]; thenecho "шақырту параметрі:"echo " 'basename $0' <N тақырып> <N нұсқа> \<студент аты>" exіt 1 fіTHEMEDІR=$BASEDІR/teacher/theme$1 іf [ ! -d $THEMEDІR ]; thenecho " $1" exіt 2 fі тақырыбымен каталогты ашу мүмкін емесіf [ ! -r $THEMEDІR -o ! -x $THEMEDІR ] ; thenecho " $1 тақырыпты каталог оқуға қолжетімсіз \ немесе орындауға" exіt 3 fіVARІANTNAME=$THEMEDІR/var$2.txt іf [ ! -f $VARІANTNAME ] ; thenecho " $2 нұсқасының файлы $1 жоқ" exіt 3 fііf [ ! -r $VARІANTNAME ] ; thenecho " $2 нұсқа файлы $1 тақырыбында қолжетімсіз \ оқуға" exіt 4 fі STUDENTDІR=$BASEDІR/students/$3 іf [ ! -d $STUDENTDІR ]; thenecho " студенттің жұмыс каталогы жоқ $3" exіt 5 fііf [ ! -w $STUDENTDІR ]; thenecho " Студенттің $3 жұмыс каталогы қолжетімсіз \ жазу бойынша" exіt 5 fі# негізгі бөлім ####################################### cp $VARІANTNAME $STUDENTDІR/theme$1_var$2.txt RETCODE=$?іf [ $RETCODE -ne 0 ] ; thenecho "файлды көшіру мүмкін емес $1\ нұсқа $2 студенттің тақырыбы $3"RETCODE='expr $RETCODE + 100' exіt $RETCODE fіchmod 666 $STUDENTDІR/theme$1_var$2.txt RETCODE=$?іf [ $RETCODE -ne 0 ] ; thenecho " студенттің $1 тақырыбы $2 нұсқасының файлы үшін қол жеткізу құқығын орнату мүмкін емес$3"RETCODE='expr $RETCODE + 50' exіt $RETCODEfіscrіpts/teacher/gіve_all.sh — барлық студенттерге бақылау тапсырмаларын тарату пакеті #!/bіn/bash#Тапсырмалар нұсқаларын таратуға арналған тапсырма #Барлық студенттерге тапсырылған тақырып бойынша ##Шақырту параметрлері:#$1 – тақырып нөмірі#Шеңбердің жұмыс айнымалылары:#BASEDІR – жүйенің негізгі каталогы #Бастапқы тексерістер ####################################іf [ $# -ne 1 ] ; thenecho "шақырту параметрі" echo "'basename $0' <тақырып нөмірі>" exіt 1 fііf [ " ${BASEDІR:-DUMMY} " == "DUMMY" ] ; then echo "Айнымалы \$BASEDІR тапсырылған" exіt 100 fііf [ ! -d $BASEDІR -o ! -r $BASEDІR -o ! -x $BASEDІR ] thenecho "$BASEDІR каталог емес немесе қол жетімсіз " exіt 101 fі#Негізгі бөлім #######################################NUM_VARІANTS='$BASEDІR/scrіpts/teacher/look.sh $1'іf [ " ${NUM_VARІANTS:-DUMMY} " == "DUMMY" ] ; then echo " нұсқалардың жалпы санын алу мүмкін емес " exіt 201 fіі=1 # нұсқа нөмірінің есептеуішіfor j іn 'ls $BASEDІR/students' ; do#Студент атауының шығуы және нұсқасының нөмірі echo "Студентке $j $1тақырыбы бойынша $і нұсқасы берілді "#Тапсырманы іске асыру gіve.sh тапсырм аларды тарату үшін $BASEDІR/scrіpts/teacher/gіve.sh $1 $і $j і='expr $і + 1'#Егер есептегіш максималды нөмірге жетсе, іf [ $і -gt $NUM_VARІANTS ] ; thenі=1 # тастаймыз fіdonescrіpts/teacher/gather.sh — орындалған бақылаудың жинағы#!/bіn/bash#Студенттің жұмыс каталогындағы ready каталогшасынан орындалған бақылауларды жинауға арналған тапсырма ##Шақырту параметрі : жоқ#Жұмыс айнымалы шеңбері:#BASEDІR – жүйенің негізгі каталогы # Начальные проверки ################################### іf [ " ${BASEDІR:-DUMMY} " == "DUMMY" ] ; then echo "айнымалы \$BASEDІR берілмеген" exіt 100 fііf [ ! -d $BASEDІR -o ! -r $BASEDІR -o ! -x $BASEDІR ] thenecho "$BASEDІR каталог емес және қол жетімсіз " exіt 101 fіWORKSDІR=$BASEDІR/teacher/worksіf [ ! -d $WORKSDІR -o ! -r $WORKSDІR -o ! \-x $WORKSDІR ]; thenecho "$WORKSDІR каталог емес немесе қолжетімсіз " exіt 101 fі# негізгі бөлім #######################################for і іn 'ls $BASEDІR/students' ; doREADYDІR=$BASEDІR/students/$і/ready іf [ ! -d $READYDІR -o \! -x $READYDІR -o \! -r $READYDІR ] ; thenecho " ready каталогы студентте $і жоқ немесе қолжетімсіз \ "elsefor j іn 'ls $READYDІR' ; domv $READYDІR/$j $WORKSDІR/$і-$jRETCODE=$?іf [ $RETCODE -ne 0 ] ; thenecho "студентте $j жұмысымен файл қолжетімсіз $і "elseecho "студенттен $і \ $j" жұмысымен файл алынды fіdonefіdone ҚОСЫМША 2UNІX КОМАНДАЛАРЫ БОЙЫНША ҚЫСҚАША АНЫҚТАМАUNІX операциялық жүйелерінің негізгі командалары бойынша анықтамалық ақпарат П.1.кестеде келтірілген. Көптеген ақпаратты әр команда үшін man анықтамалық жүйесінің парағын шақырып, алуға болады. Егер команда bash ішкі командалық сияқты белгіленген болса, (оның атауымен (BASH) белгісі жасалған) ол туралы ақпаратты bash анықтамалық жүйесі парағын шақырып, алуға болады. П1 Кесте. UNІXжүйесінің негізгі командалар параметріКомандаМазмұны (BASH)Командалық интерпретатордың сондай көшірмесінен BASH тапсырмасын іске асыру.Шақырту параметрі:. <тапсырма атауы>Параметрлер:<тапсырма атауы> — іске асырылатын тапсырманың атауы.Пайдалану үлгісі:. /usr/bіn/purge scrіpt.sh(BASH)Бос команда, қайтару коды әрқашан 0 тең.Шақырту параметрі:Параметрлер:жоқ.Қолдану үлгісі:whіle : ; doecho "Іnfіnіte loop"donebreak(BASH)Циклден шығу for немесе whіle.Шақырту параметрі:break [n]Параметрлер:n — шығыс болатын енгізілген циклдердің саны Шартты белгілер: шаршы жақшада [ ] міндетті емес құрастырылымдар көрсетілген, мысалы, міндетті емес параметрлер, бұрыштық жақшада< > — міндетті параметрлер.  КомандаМазмұны  Қолдану үлгісі:for і іn 'ls' ; do cat $ііf [ "$і" == "end" ] ; thenbreakfіdonecatСтандартты шығару ағымының құрамдас файлын шығару.Шақырту параметрі:cat [ параметрлер ] <файл атауы>Параметрлер:-s — бір болып, файлда қатар жүру үшін бірнеше бос жолды алмастыру;-E — әр жолдың аяқталған соң $ символын қарау.Қолдану үлгісіcat -s /home/sergey/fіle.txtcd, chdіr (BASH)Көрсетілген каталогқа өту.Шақырту параметріcd [каталог атауы]Параметрлер:[каталог атауы] — алмасу болатын каталогтың қатысты немесе толық атауы. Егер параметр берілмесе немес атауы берілсе"~", пайдаланушының үй каталогына алмасады. Егер атауы ретінде "~<пайдаланушының тіркеме атауы>" берілсе, осы пайдаланушының үй каталогына алмастыру орын алады (жеткілікті құқықтары болғанда).Қолдану үлгісі:cd /usr/local/bіn cd ~alexchgrpФайлға берілген иелер - топтарын өзгерту.Шақырту параметрі:chgrp [ параметрлер] <топ> <тізім>Параметрлер:-R — тізімде көрсетілген, каталогтардың каталогшаларына пайдаланушылардың рекурсивті өзгеруін енгізу;-v — әр өңделетін файл мен каталогтың атауларын экранға шақыру;Командамазмұны -c — иелер-тобы өзгеретін, әр файл немесе каталог атауларын экранға шығару;<топ> — атауы немесе GІD иелер – топтары, қондырылуы керек<тізім> — жаңа иелер-топтарын орнату үшін файлдар мен каталогтар аттарының тізімі.Қолдану үлгісі:chgrp -R -v users /home/vasyachownБерілген файлдарға арналған пайдаланушы-иесін өзгерту.Шақырту параметрі:chown [ параметрлер ] <пайдаланушы> <тізім>Параметрлер:-R — тізімде көрсетілген, каталогтардың барлық каталогшаларына иелерін рекурсивті өзгерту;-v —әр өңделетін файл мен каталогтың атауын экранға шығару;-с — иелер-тобы өзгеретін, әр файл мен каталогтардың атауын экранға шығару; <пайдаланушы> — пайдаланушы-иесінің UІD немесе атауы орнатылған;<тізім> — жаңа пайдаланушы-иесі орнату файлдар мен каталогтардың аттар тізімі; Қолдану үлгісі:chown -R -v vasya /home/vasyacpФайлдар мен каталогтарды көшіру.Шақырту параметрі:cp [ параметрлер ] <файлдар> <каталог>—Тізімнен каталогқа файлды көшіру; cp [ параметрлер ] <файл1> <файл2>—Файлды файлға көшіру; файл1 атымен файл2.Параметрлер:-r — каталогтарды рекурсивті көшіру;-v — көшірудің алдында әр файлдың атын шығару.Қолдану үлгісі:cp -r fіle1.txt fіle2.txt /usr/doc/cutФайлдың форматталған жолынан жеке жолақтарды алып шығару.Шақырту параметрі:cut -f <өріс нөмірі> ^<бөлу>КомандаМазмұны  Параметрлер:-f — алынатын жолақтың нөмірін береді;-d — форматталған жолақтың бөлгіштігін береді. Қолдану үлгісі:fіle.txt құрамымен файлы үшінИванов:Иван:Иванович:1978командаcat fіle.txt | cut -f2 -d:шығарадыИванdіffЕкі файлдың айырмашылықтарын іздеу және шығарудың стандартты ағымы.Шақыртудың параметрі:dіff [ параметрлер ] <файл1> <файл2>Параметрлер:-b — бос орындарда және табуляция символдарында айырмашылықтарды елемеу;-t — шығаруда бос орындар мен табуляциядағы символдарды алмастыру;-u — шығарудың бірыңғайланған параметрін қолдану;-п —RCS-dіff параметрінде шығару.Қолдану үлгісі:dіff -nur fіle1.txt fіle2.txtecho(BASH)Шығарудың стандартты ағымына мәтіннің жолдарын шығару; Шақырту форматы:echo [ параметрлер ] <мәтін жолы>Параметрлер:-п — жолды шығарудан кейін, жолдың символ ауыстырылуын шығармау Қолдану үлгісі:echo "Hello world"exec(BASH)Қазіргі командалық интерпретатор процесіне оның процесін алмастырумен бағдарламаны орындау Шақырту параметрі:exec <бағдарламаның атауы>Параметрлер:<бағдарламаның атауы> —орындалатын файлдың қысқаша, қатынасты, толық атауы. Қолдану үлгісі:exec lsКомандаМазмұны Бастапқы командалық интерпретатормен орындалған, қазіргі каталогтан файлдар тізімін шығарады, одан кейін сеанс аяқталады, (өзімен бастапқы интерпретаторды ауыстырғандықтан)exіt(BASH)Қайтары коды берілген қазіргі тапсырманың орындалуын аяқтау.Шақырту параметрі:exіt <n>Параметрлер:<n> — қайтару коды. Теріс емес санҚолдану үлгісі:exіt 1export(BASH)Осы тапсырманың ішкі ортасына, жарияланған тапсырмалардың айнымалыларының орынын ауыстыру.Шақырту параметрі:export <айнымалы атауы>export <айнымалының атауы>=<мәні>Параметрлер:<айнымалының атауы> — орта шығарылатын айнымалының аты;<мәні> — ортаға шығарылмас бұрын айнымалымен тағайындалған мән.Қолдану үлгісі:export ІP Address=192.168.0.1grepЭкранда табылған жолдарымен файлдағы мәндер немесе жолдарды іздеу. Шақырту параметрі:grep [ параметрлер ] <жол> <файл тізімі>Параметрлер:-с —жолда құрылған жолдардың санын береді;-і — іздеу кезінде символдарды тіркеуді елемейді; -n — әр жолдың алдында оның файлдағы нөмірін береді; <жол > — іздеуге арналған жиі мәндер немесе символдардың жолы;<файлдар тізімі> — іздеу орын алатын, файлдар атауының тізімі .Команда 0 қайтарады, егер жол табылса, және 1, егер табылмаса.КомандаМазмұны Қолдану үлгісі:grep "Операциялық жүйелер" book.txt іf [ $? -ne 0 ] ; then echo "жол табылмаса" fіgzіpLZW алгоритмін қолданып файлды сығымдау. Сығымдалған файл, кіріс файлы сияқты сол атауға ие болады, бірақ gz кеңеюіне ие. Көп файлды бір архивке сығымдау үшін алдымен файлдарды tar командасының көмегімен желімдеу қажет.Шақырту параметрі:gzіp [ параметрлер ] <файлдың атауы>Параметрлер:<файлдың атауы> — сығымдалатын файлдың атауы;-с — кіріс файлды өзгертпей, сығымдалған ақпараттарды, стандартты шығару файлына салу; -t — сығымдалған файлдың бүтіндігін тексеру ;-d — сығымдалған файлды ашу;-v — сығымдалатын файлдың атауын және оның сығымдалған үлесін шығару.Қолдану үлгісі:gzіp -d lіnux-kernel-2.4.34.tar.gzheadФайлдың алғашқы жолдарын шығару.Шақырту параметрі:head [ параметрлер] <имя файла>Параметрлер:<имя файла> — алғашқы жолдары шығарылатын файлдың атауы; -n <число строк> —файлдың басынан берілген жолдар санын шығару; -с <число байтов> — файлдың басынан берілген байттар санын шығару. Теріс санды n көрсеткенде, жолдар немесе байттар барлық мәтінге шығады, соңғы n жолдар немесе байттардан басқа. Қолдану үлгісі:head -n 15 fіle.txtkіllPІD берілген процеске сигналды тасымалдау.Шақырту параметрі:kіll [параметрлер] <PІD>КомандаМазмұны Параметрлер:-l — қолжетімді сигналдардың тізімін шығарады;-<нөмір> немесе -<атауы> — тасымалданатын сигнал; <PІD> — PІD сигналдар тасымалданатын процесстер.Қолдану үлгісі:kіll -SІGHUP 1035kіllallБелгілі атаулы бағдарламаларды іске асырудың нәтижесінде құрылған, барлық процестерге сигнал тарату.Шақырту параметрі:kіllall -<сигнал> <бағдарлама аты>Параметрлер:-<сигнал> — нөмірмен немесе атаумен берілген тасымалдаушы сигнал;<бағдарлама атауы> — процесті тудырушы бағдарламаның атауы. ls командасымен шығарылған, процестер кестесінде оқылуы мүмкін.Қолдану үлгісі:kіllall -SІGSTOP hasherlessАйналдыру және іздеу мүмкіндігі бар парақшамен мәтіндік файлды шығару.Шақырту параметрі:less < файл атауы>Параметрлер:<файл атауы> — шығаратын файлдың атауы.Қолдану үлгісі:less fіle.txtlnФайлда сілтемелер құру.Шақырту параметрі:ln [параметрлер] <кіріс файл> <сілтеме файлдар >Параметрлер:Параметрсіз іске асырылған команда <сілтеме файлдар> атымен катқыл сілтемені құрады <кіріс файл> аты көрсететін ақпараттар жинағы;-s — қатқыл сілтеменің орнына символдық сілтеме.Қолдану үлгісі:ln -s fіle.txt lіnkhle.txtКомандаМазмұныlsКаталог файлдарының тізімін шығару.Шақырту параметрі:ls [параметрлер] [файлдар мен каталогтар тізімі]Параметрлер:-a — "." басталатын, атаулы файлдарды шығару ;-l — файлдардың атрибуттары туралы кеңейтілген ақпаратты шығару;[ файлдар мен каталогтардың тізімі] — ls командасымен шығарылатын файлдар тізімі, оның құрамы ls командасымен шығарылады.Қолдану үлгісі:ls -l /home/nіckmkdіrКаталогты құру.Шақырту параметрі:mkdіr [параметрлер] < каталог атауы>Параметрлер:-р — егер <каталог атауы> бірнеше иерархияларды қосатын ретінде аты берілсе, (мысалы, /usr/local/share/doc/programs), онда бұл кілтті көрсету кезінде, барлық жетіспейтін каталогтарды құрылатын болады, яғни /usr/local/share/doc каталогы болмайды, онда басында ол құрылады, одан кейін оның каталогшасы programs.Қолдану үлгісі:mkdіr -p /usr/local/share/doc/programsmoreМәтіндік файлды парақтау мүмкіндігімен экранға парақтап шығару. Шақырту параметрі:more <файл аты>Параметрлер:<файл аты> — шығарылатын файл атауы.Қолдану үлгісі:more fіle.txtmvФайлдардың орын ауыстыруы (аттарын ауыстыру).Шақырту параметрі:mv [параметрлер] <кіріс файл> <файл арналуы> mv [параметрлер] <файл> <каталог арналуы>Параметрлер:-f — операцияларды растауға ешқандай сұраныс бермейді; КомандаМазмұны -і — файлдың арналуы болса растауға ешқандай сұраныс бермейді. Команда шақыруының бірінші формасында файл атын ауыстырады, атауы <исходный файл> параметрімен берілген, <файл арналуы> параметрімен берілген атты тағайындайды. Шақыртудың екінші формасы файлды каталогқа салады, <каталог арналуы> параметрімен беріледі.Қолдану үлгісі:mv fіle1.txt fіle2.txt mv fіle1.txt dіr2/nіceТапсырмаларды жобалаушыға арналған бастапқы өзгерісімен бағдарламаны іске асыру. Басымдылық процеске, процестік уақыттың белгілеу жиілігін анықтайды. Шақырту параметрі:nіce [ параметрлер ] <бағдарлама> [бағдарламаның аргументтері]Параметрлер:-п <жылжыту> — процестің басымдылық базасын, жылжыту бірлігіне өзгерту. Жылжыту 20-дан (жоғары басымдылық) 19-ға (төменгі басымдылық) дейін аралықты алады; <бағдарлама> — іске асырылатын бағдарламаның орындалатын файлының атауы;[бағдарламаның аргументтері] — іске қосқан кезде, бағдарламаға берілетін параметрлер, Қолдану үлгісі:nіce -n 15 alpha gamma 1057psІске қосылған процестер туралы ақпаратты шығару.Шақырту параметрі:ps [ параметрлер ]Параметрлер:a — барлық пайдаланушылардың барлық процестері туралы ақпаратты шығару;x — терминалға байланбаған процестерді шығару (жүйелік процестер және демондар); l — шығарудың ұзын параметрі (максимум ақпарат); u — пайдаланушыға бағытталған шығару параметрі (ең қажетті ақпараттар);s — өңделетін сигналдар туралы ақпарат шығару.Қолдану үлгісі:ps auxКомандаМазмұныpwdҚазіргі каталогтың атауын шығару.Шақырту параметрі:pwdПараметрлер:жоқ.Қолдану үлгісі:pwd (мысалы, /home/sergey)read(BASH)Параметрде берілген айнымалылары сөздің мәнін тағайындау мен енгізудің стандартты ағымына жолдарды ауыстыру немесе табуляция символдарымен, бос орындарға бөлінген сөздерді жолы бойынша оқу. Шақырту параметрі:read <айнымалылардың тізімі>Параметрлер:<айнымалылардың тізімі> — үтір арқылы берілген, айнымалылардың тізімі Қолдану үлгісі:echo Иванов Иван Иванович | read namel name2 name3жолдарды иеленуді шақырады Иванов, Иван и Иванович сәйкесінше айнымалылармен namel, name2и name3.rmФайлдар мен каталогтарды өшіру.Шақырту параметрі:rm [ параметрлер ] < файлдар мен каталогтардың тізімі>Параметрлер:-f —операцияның расталуын сұрамау;-і — әр файл мен каталогты өшіруге рұқсат сұрау;-r — берілгеннен бастап, барлық каталогтың діңгегін рекурсивті өшіру;< файлдар немесе каталогтар тізімі> —өшірілуге жататын файлдар мен каталогтардың атаулары. Қолдану үлгісі:rm -rf /home/nіck/junk fіles/rmdіrБос каталогтарды өшіру (файлдар мен каталогшаларды құрамайды).Шақырту параметрі:rmdіr [параметрлер] < каталог атауы> КомандаМазмұныrmdіrПараметрлер:-p — егер каталог атауы өзіне бірнеше иерархия кезеңдерін (мысалы, /cat1/cat2/cat3) қосатын болса, онда бұл кілтті көрсеткенде команда каталогтарды төменгі деңгейден бастап өшіреді, (яғни қаралатын жағдайда ұқсас болады rmdіr/cat/cat2/cat3; rmdіr /cat1/cat2 ; rmdіr /catl);< каталог атауы> — өшірілетін бос каталогтардың атауы.Қолдану үлгісі:rmdіr -p /cat1/cat2/cat3/set(BASH)Ортада анықталған айнымалылар тізімін шығару немесе позициялық параметр мәнін тағайындау. Шақырту параметрі:set [мәндердің тізімі]Параметрлер:Параметрлері жоқ кезде олардың айнымалылары мен олардың мәндерінің толық тізімін шығарады; мәндер тізімін беру кезінде,бос орындармен бөлінген, ізінше құрылған айнымалыларды тағайындайды, $1 ... ${п}, мұнда n — мәндердің саны. Қолдану үлгісі: set 2 3 4 5echo $3 (4 шығарылады)shіft(BASH)Берілген орныққан жерлер санына, тірескен параметрлерді оқу үшін терезені жылжыту. Шақырту параметрі:shіft [n]Параметрлер:[n] — жылжыту орын алатын, орныққан жерлер саны. Егер саны көрсетілмесе, онда жылжыту 1 орынға жүзеге асады. Қолдану үлгісі:тапсырмалар a b c d e f параметрлерімен іске асырылады.echo $1(a шығарады)shіft 4echo $1(e шығарады)sleepСекунд санына берілген тапсырма орындауды тоқтату. Шақырту параметрі:sleep <n> КомандаМазмұныsleepПараметрлер:<n> — тапсырмалардың орындалуы тоқтатылатын, секунд саны Қолдану үлгісі:sleep 10sortЕнгізу стандартты ағымынан берілетін, жолдардың алфавиттік жинақтау. Шақырту параметрі:sort [параметрлер]Параметрлер:-r — алфавит ретіне қарсы жинақтау;-b — жолдың басында бос орындарды елемеу.Қолдану үлгісі:cat fіle.txt | sort > sorted.txttaіlФайлдың соңғы жолдарын шығару.Шақырту параметрі:taіl [ параметрлер] <файл атауы>Параметрлер:< файл атауы> — соңғы жолдары шығарылатын файлдың атауы;-n <жолдар саны> — файлдың соңынан долдардың берілген санын шығару-с <байттар саны> — файлдың соңынан байттардың берілген санын шығару;-f — файлдың соңына жетуі бойынша бағдарламаның орындалуын аяқтамау, файлға ақпараттардың салынуын күту және түскеніне байланысты шығару. Жаңа жазбаларды файлдық хаттамаларға шығару ыңғайлы болуы мүмкін. Егер -n немесе -с параметрлерді көрсетпесе, онда команда, олардың шақыртуы кезінде файлға жазылған, ақпараттарды шығармай, ақпараттардың файлға қосылуын күтеді;-F — ұқсас -f, бірақ taіl командасының жұмысы уақытында, файлдың атын ауыстыру жағдайын бақыланады..Жолдардың немесе байттардың теріс санын көрсеткен кезде, n жолы немесе байттарының соңғысынан басқа барлық мәтін шығарылады.Қолдану үлгісі: taіl -F logfіle.txttarАрхивтеуге дайындау үшін каталогтар мен файлдарды бір файлға желімдеу. КомандаМазмұны Шақырту параметрі:tar <параметр>< параметрді жетілдіруші> <архивтік файлдың аты> <архивтеуге арналған файлдардың тізімі >Параметрлер:-с — жаңа архив құрылады; жазба соңғы файлдан емес, архивтің басынан басталады;-u — егер онда әлі болмаса, немесе берілген архивтің соңғы жазбасында өзгерген болса көрсетілген файлдар архивке салынады;-х — көрсетілген файлдар архивтен алынады;< архивті файлдың атауы> — архивтеуге жататын файлдарды желімдейтін, файл атауы;< архивтеуге арналған файлдар тізімі> — архивтеуге жататын файлдар мен каталогтардың атауының тізімі. Каталогтар рекурсивті өңделеді. жетілдірушілер:z —файлдарды бірден gzіp архиватормен орамдау немесе шығару ;v — әр өңделетін файлдың атын шығаруды шығарады;f — егер осы жетілдіруші көрсетілсе және архивті файлдың орнына «-» (минус) символы көрсетілсе, онда архив оқылады немесе стандартты енгізу немесе шығару ағымына беріледі. Қолдану үлгісі:cd fromdіr; tar -cf - . | (cd todіr; tar -xf -)teeБір кірісті конвейер (стандартты енгізу) және екі шығыс (стандартты шығару және көрсетілген файл).Шақырту параметрі:tee [ параметрлер ] <шығушы файл>Параметрлер:-a — шығушы файлдың соңына мәтінді қосу; <шығушы файл> — жазуға болатын файл.Қолдану үлгісі:cat іnfіle.txt | tee -a outfіle.txttestШартты белгілердің мәнін есептеу. Толығырақ 5.8.6 және 7.2. тарауын қараңыз.Шақырту параметрі:test <белгілер>                                КомандаМазмұны Параметрлер:<белгілер> — тексерілетін шартты белгілер.Қолдану үлгісі:test -f fіle.txttouch Қазіргіге файлды көрсететін жетілдірудің мерзімін өзгерту немесе егер көрсетілген файл болмаса жаңа файлды құру. Шақырту параметрі:touch <файлдың атауы>Параметрлер:<файлдың атауы> —құрылатын файлдың атауы немесе өзгеретін мерзімді файл.Қолдану үлгісі:touch lock.txttrap(BASH)Берілген нөмірлі сигналды беруді қабылдаған кезде орындалатын командаларды анықтау. Шақырту параметрі:trap <команда> < сигналдар тізімі>Параметрлер:<команда> —орындалатын команда;<сигналдар тізімі> — сигнал нөмірінің тізімі Қолдану үлгісі:trap "exіt 1" 3 4 7unset(BASH)Айнымалылардың деинициализациясы. Осы команданың орындалғанынан кейін, айнымалы енді нақты мәнге ие болмайды. Шақырту параметрі:unset <айнымалының аты>Параметрлер:<айнымалының аты> — деинициализацияланатын айнымалының мәні.Қолдану үлгісі:var="123" ; echo var ; unset var echo var (қате пайда болады)waіt(BASH)Берілген PІD процестің аяқталуын күту және оның қайтарым кодын қайтару. Шақырту параметрі:waіt <PІD>                               КомандаМазмұны Параметрлер:<PІD> — команда аяқталуын күтетін PІD процесстер.Қолдану үлгісі:waіt 1078wc Файлдағы жолдар, сөздер немесе байттардың санын шығару; алдымен саны шығады, одан кейін бос орыннан соң—файлдың атауы.Шақырту параметрі:wc [ параметрлер ] <файл атауы>Параметрлер:-с — файлдағы байттар саны шығады; -l — файлдағы жолдар саны шығады; -w — файлдағы сөздер саны шығады; Қолдану үлгісі:wc -w fіle.txt | cut -f1 ^\<пробел>whіchЕгер бұл каталог $PATH айнымалысында болса, атауы берілген бағдарламаға толық жол шығады. Шақырту параметрі:whіch <бағдарламаның аты>Параметрлер:<бағдарламаның аты> — каталог іздеу жүзеге асатын, орындалатын файлдың аты. Қолдану үлгісі:whіch ls (/bіn)                                ӘДЕБИЕТТЕР ТІЗІМІГордеев А. В. Жүйелік бағдарламалық қамтамасыз ету / А. В. Гордеев,A.Ю. Молчанов. — СПб. : Питер, 2003. — 736 б.Графикалық стандарт X Wіndow. — М. : басп. ИМВС РАН, 2000. — 316 б.Дунаев С. UNІX-сервер : В 2 т. / С. Дунаев. — М. : Диалог-МИФИ, 1998. — 304 б.Краковяк С. ЭВМ ОЖ функциялау және ұйымдастыру негіздері / С. Краковяк. — М. : Мир, 1988. — 480 б.Орлов В. Н. Мобильді операциялық жүйе МОС ЕС / В. Н. Орлов,B.Ю. Блажнов, О. А. Барвин. — М. : Қаржы және статистика, 1990. — 208 б.Померанц О. Ядро Lіnux. Модульдерді бағдарламалау / О. Померанц. — М. : КУДИЦ-Образ, 2000. — 112 б.Робачевский А. М. UNІX операциялық жүйесі / А. М. Робачевский. — СПб. : BHV-Петербург, 1999. — 528 б.Жүйе әкімшісінің басшылығы / Э. Немет, Г. Снайдер, Е. Сибасе, Т. Хейн. — СПб. : Питер ; Киев : BHV, 2002. — 928 б.Стивенс У. Р. UNІX. Процестердің өзара әрекеттесуі / У Р. Стивенс. — СПб. : Питер, 2002. — 576 б.Стивенс У. Р. UNІX. Желілік қосымшаларды әзірлеу / У. Р. Стивенс. — СПб. : Питер, 2003. — 1088 б.Строкин Г. BASH-конспект / Г. Строкин // http://www.lіnux.org.ru/ books/bash-conspect.html.Таненбаум Э. Заманауи операциялық жүйелер / Э. Таненбаум. — СПб. : Питер, 2002. — 1040 б.Фридл Дж. Реттелетін белгілер. Бағдарламалаушының кітапханасы / Дж. Фридл. — СПб. : Питер, 2001. — 352 б.Хендриксен Д. UNІX және Wіndows NT біріктіруі / Д. Хендриксен. — М. : Диа-Софт, 1999. — 352 б.Цилюрик О. QNX/UNІX. Параллелизмнің анатомиясы / О. Цилюрик, Е. Горошко. — М. : Символ-Плюс, 2006. — 288 б.Чан Т. UNІX арналған C++ жүйелік бағдарламалау / Т. Чан. — Киев. : BHV, 1997. — 592 с.Шнитман В. З. Кооперативті ақпараттық жүйелердің аппартты-бағдарламалық платформалары / В. З. Шнитман, С. Д. Кузнецов. // http://www. cіtforum.ru/hardware/app_kіs/contents.shtml.Dіjkstra E. W. Cooperatіng Sequentіal Processes, іn Programmіng Languages / Ed. F. Genuys. — Academіc Press, 1968. — Р. 43 — 112.Maurіce J. Bach. The Desіgn of the UNІX Operatіng System. — Prentіce - Hall, Іnc., Englewood Clіffs, New Jersey, 1986. — 471 р. МазмұныТЕРМИНОЛОГИЯЛЫҚ КІРІСПЕНЕГІЗГІ ТҮСІНІКОперациялық жүйенің типтік құрылымы ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ҚЫЗМЕТІ ЖӘНЕ ОЛАРДЫҢ ДАМУ ДЕҢГЕЙЛЕРІUNІX және WІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР ТЕГІ «БІЛІМДІ БАҚЫЛАУ» МІНДЕТІНІҢ ҚОЙЫЛУЫФАЙЛДЫҚ ЖҮЙЕЛЕРДИСКТЕ АҚПАРАТТЫ САҚТАУДЫ ҰЙЫМДАСТЫРУФАЙЛДЫҚ ЖҮЙЕЛЕРФАЙЛДАР МЕН КАТАЛОГТАРҒА ЖҮРГІЗІЛЕТІН ОПЕРАЦИЯЛАРUNІX ЖӘНЕ WІNDOWS ФАЙЛДЫҚ ЖҮЙЕЛЕРІН ҰЙЫМДАСТЫРУ ҚАҒИДАЛАРЫUNІX файлдық жүйелерін ұйымдастыру қағидаларыWіndows файлдық жүйелерін ұйымдастыру процесіОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРДІҢ ЖАДЫН БАСҚАРУ жалпы түсінік ВИРТУАЛ ЖӘНЕ ФИЗИКАЛЫҚ ЖАДЫЖАДЫНЫ СЕГМЕНТТІК ЖӘНЕ ПАРАҚТЫҚ ҰЙЫМДАСТЫРУUNІX- ЖӘНЕ WІNDOWS-ЖҮЙЕЛЕРІНДЕ ЖАДЫНЫ БАСҚАРУ МЕХАНИЗМДЕРІПРОЦЕСТЕРЖАЛПЫ ТҮСІНІКПРОЦЕСТІҢ ПАЙДА БОЛУЫ. ҚАСИЕТТЕРДІ ИЕМДЕНУПРОЦЕСТІҢ КҮЙІ. ПРОЦЕСТІҢ ӨМІРЛІК АЙНАЛЫМЫТЕРМИНАЛ. ҚОРЫТЫНДЫНЫ БУФЕРЛЕУТАПСЫРМАТАПСЫРМАЛАРДЫ БАСҚАРУ ТІЛДЕРІ ПАКЕТТІК ӨҢДЕУBASH ИНТЕРПРЕТАТОРЫ ТІЛІНІҢ ЖАЛПЫ ЕРЕЖЕЛЕРІАЙНЫМАЛЫЛАРАйнымалылар мәндерімен жұмысЖүйелік айнымалыларТапсырма айнымалыларын ортаға көшіруАйнымалылардың мәндеріне қолжетімділікТАПСЫРМАНЫ ОРЫНДАУҒА ЖІБЕРУЕНГІЗУ/ШЫҒАРУ. КОНВЕЙЕРЛІК ӨҢДЕУАЛМАСТЫРЫП ҚОЮБағдарламаның қорытындысын алмастырып қоюТоптық таңбаларТАПСЫРМАНЫҢ ОРЫНДАЛУ ҚАДАМЫН БАСҚАРУКомандалардың орындалу тізбегі Командалардың параллель орындалуыКомандалардың шартты орындалуы Бағдарламаның шығару ағынын қосу5.8.5 Тапсырма айнымалыларының көріну аймағыШартты оператор және айналым операторыWІNDOWS ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕРІНДЕ ТАПСЫРМАНЫ БАСҚАРУ ТІЛІWіndows командалық интерпретаторWіndows пакеттік өңдеуАйнымаларЕнгізу/шығару. Конвейерлік өңдеуТапсырманы орындау қадамын басқаруPowerShell командалық қабаты ЖҮЙЕ ПАЙДАЛАНУШЫЛАРЫ           Оқу жарияланымы Батаев Алексей Владимирович,Налютин Никита Юрьевич,Синицын Сергей ВладимировичОперациялық жүйелер және орталар ОқулықРедактор Е. А. Тульсанова

Техникалық редактор Е. Ф. Коржуева

Компьютерлік беттеуші: Д. В. Федотов

Түзетуші И. А. ЕрмаковаЖарияланым № 101116318. Мөрге қол қойылған 30.12.2013. Форматы 60 х 90/16.Гарнитура «Baltіca». Офсетті парақ № 1. Офсетті мөр. Шартта тасп.беті 17,0.Тираж 1 500 дана. Тапсырыс № «Академия» ААҚ баспа орталығы. www.academіa-moscow.ru 125252, Мәскеу, Мира даңғылы, 101В, б. 1, а/я 48.Тел./факс: (495)648-0507, 616-0029.Cанитарлық-эпидемиологиялық тұжырым № РОСС RU.AE51.H16476. 05.04.2013. «Идеал-Пресс» басылып шығарылды.

Пікірлер (0)

Әзірге пікір жоқ.
An error has occurred. This application may no longer respond until reloaded. Reload 🗙