Жүйелік бағдарламалау 1

Коммерциялық емес акционерлік қоғам

АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ

Компьютерлік технологиялар кафедрасы

 

Жүйелік бағдарламалау 1

 

5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығының студенттері үшін дәрістер жинағы

 

Алматы 2013

 

ҚҰРАСТЫРУШЫЛАР: Мусатаева Г. Т., Конуспаева А. Т., Байжанова Д. О. Жүйелік бағдарламалау 1. 5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығының студенттері үшін дәрістер жинағы. – Алматы: АЭжБУ, 2013. – 53 б.

 

Дәрістер жинағы бағдарламалаудың тәжірибелік сұрақтарын қарастырып оқып жүрген 5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығының студенттеріне арналған.

Кестелер - 3, суреттер - 3, әдебиеттер тізімі - 9 атау.

 

Пікір беруші: аға оқытушы Адилгажинова С.А.

 

“Алматы энергетика және байланыс университеті” коммерциялық емес акционерлік қоғамының 2012 жылғы баспа жоспары бойынша басылады.

 

© “Алматы энергетика және байланыс университеті” КЕАҚ, 2013 ж.

 

 

Дәріс 1. Кіріспе. Жүйелік бағдарламалаудың даму бағыттары. Жүйелік бағдарламалаудың функциялары және міндеттері. Нақты уақыт режімі

 

Дәріс мақсаты: жүйелік бағдарламалау ұғымы мен түсініктері. Жүйелік бағдарламалаудың функцияларын қарастыру.

 

Жүйелік бағдарламалау – дегеніміз компьютер құрылғыларын қолданушы үшін ыңғайлы пайдалану мүмкіншіліктерін қамтамасыздандыруға арналып жазылған бағдарлама.

Жүйелік бағдарламалау жүйелік бағдарламалық қамтаманың негізгі құраушысы. ЖБ-ны құрған кезде, ЖБ-ны оңайлатудың маңызды әдісі болатын және олардың детальдарының таратылуын елемей, желінің жоғарғы деңгейдегі құрауыштарымен өзара әсерін бір жерге жинауға мүмкіншілік беретін абстракциялау тең қолданады. Бұл мағынада ЖБ қолданушы мен компьютер арасындағы интерфейсті көрсетеді.

Көптеген компьютерлердің архитектурасы машиналар командасы деңгейінде қолданбалы бағдарламаларды пайдалануға өте қолайсыз. Мысалы, дискімен жұмыс істеу оның электрондық құрауышының ішкі жабдығын дискіні айналдыру командасын енгізу, жолшықтарды іздеу және форматтау, секторлардан оқу және жазу т.б. үшін – контроллерді біледі деп ұйғарады. ЖБ компьютердің өте күрделі архитектурасының барлық бөліктерін басқаруға арналған. Мысалға, егер бір компьютерде жұмыс істейтін бірнеше бағдарлама, бір мезгілде нәтижені басқа құрылғысына (принтерге) шығаруға әрекеттенсе не болатынын елестетейік. Біздер әртүрлі бағдарламалар шығарған араласқан жолдар мен беттер алатын едік. Жүйелік бағдарламалау бұл сияқты хаосты баспаға арналған, дискідегі және баспаға кезекті ұйымдастыру ақпараттарын буферлеу арқылы болдырмайды. Көп қолданушыға арналған компьютерлердің ресурстарын басқару және оларды қорғаудың қажеттілігі өте анық. Демек, операциялық жүйе, ресустар менеджері сияқты, процессорлардың таралуын, жадының және әртүрлі бағдарламалар арасында басқа русуртардың реттелгенін және бақыланғандығын іске асырады.

Бір жағынан компьютердің аппаратурасы мен пайдаланушының есептері арасындағы интерфейс болып табылатын, ал екінші жағынан есептеуіш жүйесінің  қорын тиімді қолдану және сенімділік есептеу ұйымдастыруына арналған басқарушы және өңдеу бағдарламаларының комплексін жүйелік бағдарламалау дейміз.

Осы уақытта ЭЕМ-ның үлкен желілері, байланыс тізбегі негізінде салынған, қызмет ұсына бастайды. Желілер жүйелік бағдарламалық қамтамаға одан да үлкен талаптар ұсынады. Аппаратық микробағдарламаларды қайта жазу мүмкіндігі бар басқару жадысының пайда болуы, ақпаратты автоматты түрде деңгейлер арасында беретін негізгі жадының иерархиялық құрылымы, ассоциативті есте сақтау құрылғыларының өнімділігі сияқты өзгерістер бар. Сол сияқты өңдеу құрылғыларындағы, оның ішінде бағдарламаланатын «параллелизмнің» тереңдеуі, бағдарламалық қамтамаға  қатысты жаңа талаптар әкелді және жүйелік бағдарламалау принциптерін түсіндіреді. Қазіргі заманғы бағдарламалық қамтамалар жүзеге асуы мүмкін болатын процестерді және ресурстарды жобалау үшін, жүйелік бағдарламалау қарапайымдылығын анықтау:

1) адам – бағдарланған тілдер, тапсырмаларды басқару;

2) параллелизмді қамтамасыз ететін тілдер және жүйелер;

3) жүйелік бағдарламалау әрекетін өлшейтін бағыныңқы жүйелер;

4) әмбебаптық қорғау схемасы.

Жүйелік бағдарламалаудың орындайтын негізгі функциялары.

- пайдаланушыдан қабылдайтын командалар және олардың өңдеуі;

- басқа бағдарламаларды іске қосу, тоқтату, кідіру үшін қабылданатын және орындалатын бағдарламалық сұраныс;

- орындалатын бағдарламаларды оперативті жадыға жүктеу;

- бағдарламаның иницияциясы;

- барлық бағдарламалар мен деректердің идентификациясы;

- деректер базасын басқару жүйесінің жұмысын жасау, бағдарламалық жасаудың тиімділігін көтереді;

- мультибағдарламалау режімін жасау (екі және одан да көп бағдарламалардың бір процесорда орындалуы);

- барлық енгізу-шығару операцияларын ұйымдастыру және басқару функцияларын жасау;

- жадыны үлестіру;

- берілген стратегиялар  және қызмет көрсету пән бойынша есептердің жоспарлауы мен диспетчерлеуі;

- орындалатын бағдарламалар арасындағы деректер мен хабарлардың алмасу кетігін ұйымдастыру;

- деректердің сақтауын жасау; бір бағдарламаны басқа бағдарламаның қатерінен сақтау;

- жүйенің бөліктік жаңылысу кезінде берілетін қызмет;

- бағдарламалау жүйесінің жұмысын жасау арқылы пайдаланушылар өз бағдарламаларын дайындайды.

Операциялық жүйемен қатынасу қызметін алу үшін бағдарламаларға қажет интерфейсті операциялық орта дейміз (енгізу-шығару операциясын орындау, жадының учаскесін алу немесе босату).

Әрбір бағдарламалау жүйесі өзіне сәйкес операциялық жүйеде жұмыс жасайды. Жүйелік бағдарламалауды қызметтеу үшін арнайы жүйелік бағдарламаларды утилит дейміз.

 Жүйелік бағдарламалауды жіктеу. Жүйелік бағдарламалау біріншіден, жалпы және арнайы тағайындалады. Есептерді өңдеу режімінде Жүйелік бағдарламалау бір бағдарламалы және мультибағдарламалы режімдерге бөлінеді.

Бірсанашықтық есептеу жүйесінде бірнеше бағдарламаның бір уақытта орындалып жатқандай көріністі біз мультибағдарламалық есептеуді ұйымдастыру тәсілі деп атаймыз.

Мультибағдарламалауды ұйымдастырған кезде, Жүйелік бағдарламалаудың рөлі мынадай:

1) жүйелік бағдарламалау және қолданбалы бағдарлама арасындағы интерфейсті ұйымдастыру;

2) жадыдағы тапсырмалардан кезек ұйымдастыру;

3) бір тапсырмадан екінші тапсырмаға ауысу;

4) ақпараттың жадын таңдау және ауыстыру, орналастыру процесін реттеу;

5) файлдар түріндегі сыртқы тасымалдауыштардағы ақпараттардың сақталуын ұйымдастыру және анықталған категориядағы қолданушыға нақты файлмен қатынасты қамтамасыз ету;

6) коммуникация құралдарымен қамтамасыздандыру;

7) деректерді мүлтіксіз алмастыру үшін әртүрлі ресурстармен жұмыс істеген кезде пайда болатын және өз әрекеттерінің координациясын бағдарламамен алдын ала ескеретін жанжалды оқиғаларды шешу керек, яғни: жүйені синхронизациялау құралдарымен жабдықтау керек.

Жүйелік бағдарламалауды қарастырғанда есептеуіш үрдіс түсініктемесі негізгі болып саналады.

Жүйелік бағдарламалаудың жіктелуі (классификация) жүйелік бағдарламалаудың тағайындауын (белгілеуін) және олардың орындайтын функцияларын қарастыра отырып, ең ортақ жіктеушілер принципін негізге ала отырып, барлық алуан түрлі жүйелік бағдарламалауды жіктеуге болады:

1) Бір мезгілде бар бағдарламалық процестердің санына байланысты жүйелік бағдарламалаулар бірбағдарламалы және мультибағдарламалы болып бөлінеді. Мультибағдарламалық жүйелік бағдарламалаудың, бір бағдарламалық жүйелік бағдарламалаудан айырмашылығы есептеу процесі компьютер жадында бір мезгілде бір процесорда кезекпен орындалатын бірнеше бағдарламаның болуын ұйымдастыру.

2) Есептеу жүйесіне қатынасы бар қолданушылар саны бойынша, бір қолданушы және көп қолданушы жүйелік бағдарламалау болып танылады. Көп қолданушы жүйелері бірнеше қолданушыға бір мезгілде жүйесіне қатынасқа мүмкіндік береді. Бұл жағдайда әр қолданушы өзінің терминалымен жұмыс істейді, бірақ барлық есептеулер бір компьютерде шығарылады.

3) Белгілеуі бойынша жүйелік бағдарламалаулар әмбебаптық және мамандандырылған болып бөлінеді. Мамандандырылған жүйелік бағдарламалау бекітілген бағдарламалар жиынымен жұмыс істейді.

4) Жүктелу әдісі бойынша жүктелетін ЖБ-лер және есептеу жүйесінің жадында үнемі (ылғи) болатын жүйелер деп бөлуге болады. Соңғы ереже бойынша, мамандандырылған құрылғылардың жұмысын басқару үшін пайдаланылады.

5)   Жүйелік бағдарламалаудың пайдалану аймағының ерекшелігі бойынша жүйелік дестелік (пакеттік) өңдеу, жүйелік уақытты бөлу және жүйелік нақты уақыт болып бөлінеді.

 

Дәріс 2. Жүйелік бағдарламалаудың архитектурасы

 

Дәріс мақсаты: жүйелік бағдарламалаудың архитектурасын қарастыру.

 

Былайша айтқанда, жүйелік бағдарламалау – бұл қарапайым басқару бағдарламасы, сондықтан оны, басқа да көптеген бағдарламалар сияқты процедура және функция құру арқылы ұйымдастырылған жөн болар еді. Бұл жағдайда, жүйелік бағдарламалаудың компоненттері дербес (өздігінен) модуль емес, үлкен бағдарламаның бір құрамды бөлігі. Жүйелік бағдарламалаудың мұндай құрылымы монолиттік ядро (monolithic kernel) деп аталады. Монолиттік ядро, әрқайсысы бір-бірін шақыра алатын процедуралар жиынын көрсетеді. Барлық процедуралар жеңілдікпен пайдаланушылық режімінде жұмыс істейді.

Көптеген монолиттік ядросы бар ЖБ-лерде, ядроны жинау, яғни оны компиляциялау, ЖБ орындалатын әр компьютерде жеке орындалады. Бұл жағдайда қолдауы ядроға кіретін құрал-жабдықтар тізімін және бағдарламалар хаттамаларының тізімін таңдауға болады. Ядро бірыңғай бағдарлама болғандықтан, қайта компиляциялау – оған жаңа компоненттер қосу немесе пайдаланбағандарды шығару – бұл жалғыз әдіс. Ядрода артық компоненттерінің болмағанының дұрыс екенін атап өту керек, сонымен ядро барлық уақытта толығымен оперативті жадыда орналасады. Сонымен қатар, керек емес компоненттерді шығарып тастау, ЖБ-нің сенімділігін толығымен арттырады.

ЖБ-нің көпқабатты архитектурасы. Құрылымдауды жалғастыра, бүкіл есептеу жүйесін өзара жақсы анықталған байланыстары (көпдеңгейлік жүйелер (Layered systems)) бар, N деңгейдегі объект, N-1 деңгейдегі объектерді ғана шақыра алатын майда деңгейлерге бөлуге болады.

Әдетте, мұндай жүйелердің төменгі деңгейлері – hardware, жоғарғы деңгейлері – қолданушылар интерфейсі. Неғұрлым деңгей төмен болған сайын, соғұрлым жеңілдікпен пайдаланушы командаларды және әрекеттерді сол деңгейдегі модуль орындауы мүмкін. Ең алғаш мұндай әдістеме THE (Technishe Hogeschool Eindhoven) Дейкстрой (Dijkstra) жүйесін құрған кезде және 1968 жылы ол студенттермен пайдаланылды. Бұл жүйенің келесі деңгейлері болды:

- қолданушы интерфейсі;

- енгізу-шығаруды басқару;

- оператордың және консольдің байланыс құрылғысының драйвері;

- жадыны басқару;

- есептерді және процестерді жобалау;

- hardware.

ЖБ-нің микроядролық архитектурасының негізгі жағдайы (күйі). Микроядролық архитектура жоғарыда қарастырылған ЖБ-ні құрудың классикалық әдісіне альтернатива (балама) болады. Микроядролық архитектура, процес түрінде жүзеге асқан қолданушылар қосымшаларымен тең, ЖБ-нің құрамына кіретін жүйелік сервистер және микроядро арасындағы ЖБ-нің функцияларын таратады (бөледі).

Микроядроның құрамына кірмей қалған ядроның жоғарғы деңгейдегі функциялары және модульдері, қолданушылар режімінде жұмыс істейтін қарапайым қосымшалар түрінде хатталады. Төменгі суреттен монолиттік ядромен (1,а суретті қара) және микроядролық (1,б суретті қара) архитектурамен ЖБ-ні құрудағы негізгі айырмашылықтарды көруге болады.

1 сурет - Монолиттік ядромен және микроядролық архитектурамен жүйелік бағдарламалауды құру

 

Қолданушылар режімінде жұмыс істейтін ресурстар менеджерлерінің ЖБ-нің дәстүрлі утилиттерінен және ЖБ-нің жүйелік өңдеу бағдарламаларынан принципті айырмашылығы бар. Бірақ микроядролық архитектурада барлық бағдарламалық компоненттер қосымшалар түрінде хаттамаланған.

Қоршау ішкі жүйесі ЖБ-нің (АРІ) қосымшаларының интерфейсін орындайды. Ішкі жүйенің басқа интегралдық ішкі жүйелер деп аталатын түрлері, ЖБ-лер үшін қажетті функцияларды орындайды. Мысалы, Linux NT-дің қауіпсіздік жүйесінің үлкен бөлігі интегралдық ішкі жүйе түрінде орындалған. Сонымен, желілік серверлерде интегралдық ішкі жүйе сияқты орындалған.

ЖБ-нің микроядролық архитектурамен бұрын қарастырылған қасиеттерінің бәрі оны жасаушылардың қолдануы оның артықшылығының куәсі. Бірақ, бұрын айтылғандай, бұл сапаның бәрі ЖБ-нің өнімділігін кеміту арқасында пайда болады. Іс мынада, ЖБ-ні классикалық түрде ұйымдастырғанда жүйелік шақыру екі айырып-қосқышпен сүйемелденеді, ол микроядролық ұйымдастыруда айырып-қосқышпен сүйемелденеді.

Барлық ЖБ-ні құруда қарастырылған әдістердің әрқайсысының өздерінің артықшылықтары және кемшіліктері бар. Көп жағдайларда қазіргі заманғы ЖБ-лер осы әдістердің әртүрлі комбинацияларын пайдаланады. Мысалы, ЖБ ядросы микроядролық архитектураның элементтері бар монолиттік жүйені көрсетеді. Ядроның компиляциясы кезінде модуль деп аталатын ядроның өте көп компоненттерінің динамикалық жүктелуін және түсірілуін шешуге болады. Модуль жүктелген кезде оның коды жүйе деңгейінде жүктеледі және ядроның басқа бөліктерімен байланысады. Модульдің ішінде кез келген ядромен экспортталған функциялардың пайдаланылуы мүмкін.

Үйлесімдік түрлері кез келген ЖБ-ның нақты архитектуралық және функционалдық ерекшеліктері жүйелік бағдарламашыларға қатысты болуы керек және ол қарапайым қолданушыға таныс емес болуы мүмкін. Кейбір идеялар (мысалы, объектілі-бағытталған көзқарас) құрастырушыларға ғана белгілі және соңғы қолданушыға кері әсерін тигізеді. Көптеген қолданбалы орта концепциясы қолданушының көптен күткен мүмкіншілігін өзінің ЖБ бағдарламасында, басқа ЖБ және процесор үшін жазылған бағдарламада орындайды. Басқа ЖБ үшін жазылған ЖБ қосымшасы орындайтын мүмкіншілікті сипаттауы, яғни, ЖБ қасиеті үйлесімділік деп аталады.  

Үйлесімділіктің бір-біріне ұқсамайтын екі принципі бар, оларды шатастырмау керек: екілік деңгейдегі үйлесімділік және бастапқы мәтін деңгейіндегі үйлесімділік. Екілік түріндегі кодтар және деректері бар қосымша файлдар компьютерде орындаушы файлдар түрінде сақталады. Орындалушы бағдарламаны бір ЖБ ортасында жұмыс істейтін және оны басқа ЖБ ортасында орындағанда іске қосқан жағдайда орындалуын екілік үйлесімділік деп атаймыз.

Екілік немесе бастапқы мәтін үйлесімділік қасиеті бар ЖБ көптеген факторларға байланысты болады. Олардың ең тәуір, негізгісі – ЖБ жұмыс істейтін процесор архитектурасы. Екілік үйлесімділікке жету үшін төмендегі шарттар орындалуы керек:

- ЖБ деректерін құптайтын, қолдайтын, құрамында бағдарлама қосымшалары бар АРІ функциясының шақырылуы.

- Орындаушы файл қосымшаларының ішкі құрылысы ЖБ деректерін орындайтын файл құрылысымен сәйкес болуы керек.

Эмулятордың тағайындалуы – процесордың әрбір екілік инструкциясын кезекпен таңдауында болып табылады, мысалы, Intel қандай әрекетті тапсыратынын анықтау үшін бағдарламалық әдіспен оның кодын табады, ал содан кейін процесордың инструкциясында жазылған ішкі бағдарлама эквивалентін орындайды, мысал ретінде Motorola-ны айтуға болады.

Микроядроның концепциясын қолданатын көптеген қолданбалы ортаны құру әдісі де бар. Бұл жағдайда барлық қолданбалы орта үшін ЖБ-нің базалы, жалпы механизмін білу өте қажет. Микроядролық архитектураға сәйкес ЖБ-нің барлық функциялары микроядро және қолданушының серверлі режімі арқылы жүзеге асады. Әр қолданбалы орта қолданушының жеке сервер ретінде де безендірілетінін және базалық механизмдерді қоспайтынын естен шығармау қажет. АРІ пайдалануымен бірге, орындалушы файлдар (қосымшалар) микроядро арқылы қолданбалы ортадағы жүйелік шақырудан сұрайды. Қолданбалы орта сұранысты өңдейді, қолданбалы ортада сұраныстың орындалуы кезінде ЖБ-нің базалық механизміне сұраныс жасауға тура келеді.

Көптеген қолданбалы ортаны құрастыру жағдайында микроядролық архитектураның барлық артықшылығы мен кемшіліктері бар, олар:

- микроядролық ЖБ-нің кең таралуының арқасында қолданбалы ортаны қосу немесе алып тастау;

- қоданбалы ортаның біреуі істен шығып қалса қалғандары жұмыс істеп тұра береді, яғни, сенімді және тұрақты;

- микроядролық ЖБ-нің төменгі өнімділігі қолданбалы ортаның жұмыс істеу жылдамдығына әсер етеді, яғни файлдардың жылдам орындалуына;

Әрбір жүйелік бағдарламалау кейбір мәліметтермен жұмыс жасайды, олар басқару әдістері мен бірігіп олардың қасиетін сипаттайды.

 

Дәріс 3. Жүйелік бағдарламалаудың үйлесімділігі. Үрдісті басқару және ұйымдастыру. Үрдіс және ядро ұғымы. Үрдістің виртуалдық мекенжайлық кеңістігін сегментациялау. Үрдіс мәнмәтінінің құрылымы

 

Дәріс мақсаты: ЖБ үрдістерді қарастыру. Үрдіс және ядро ұғымдарына түсінік беру.

 

Үрдіс – бұл барлық ЖБ-де болатын бағдарлама. Үрдіс – бұл қорларды меншіктеуге құқығы бар  бағдарлама.

Үрдістерді басқару:

          1) Орталық процесордың уақытын қолдану арқылы басқару.

          2) Енгізу буфері және аударыстыру арқылы басқару.

          3) Бөлінетін қорлар арқылы басқару.

Үрдісті басқарудың негізгі мәселелері.

Біріншіден – орталық санашықтың (ОС) уақытын қолдану арқылы басқару немесе бұл мәселені ОС жобалау деп атайды, яғни қандай уақытта қай есеп немесе қай үрдіс ОС басқарады (қандай үрдісте ОС жұмыс істейді).

Екіншіден - Енгізу буфері және аударыстыру арқылы басқару. Мысалы, бірнеше адам, бір курс студенттері компьютердің  алдында отыр және барлығы бір уақытта бір есепті үрдіс түрінде іске қосты делік. Жүйеде көп есеп пайда болады (жүзден аса). Ал барлық есептеу жүйесі жүз есеппен мультибағдарламалық режімде жұмыс істеуді қабылдай алмайды, ол өте ауыр. Бұл жағдайда есепті енгізу буфері, яғни үрдістер буферде санашық арқылы өзінің өңделіп босатылуын күтетін үрдістер түзіледі.

Үшіншіден – бөлінетін қорларды басқару. Қорлар жиынына қатынау белгілі бір уақытта әртүрлі үрдістер  атынан ұйымдастырылады. Бұл баспа құрылғысының коллизиясы сияқты. Функциялар көбінде ЖБ- нің қасиеттерін анықтайды, бұл функция үрдістердің қарым-қатынасын ұйымдастыруды және ортақ қорларды қолдануды қамтамасыз етеді.

Бағдарламалық модульдердің құрылымдық ұйымдастыру түрлері.

Құрылымды барлық бағдарламалық есеп кодтары орындалуға арналғанда келесі көрсетілген құрылымдардың бір варианты ретінде қарастыруға болады:

1) Қарапайым прграммалық құрылымдар. Бұл құрылымда барлық операторлар бөлінбейтін модуль ретінде жасалынады, орындалу алдында жадыға толық жүктеледі және іске қосылған соң басқа прграммалық модульдерге қатынамайды.

2) Оверлейлік құрылым. Бұл жағдайда бағдарламалық блок белгіленген модульдерге бөлінеді. Негізгілері түпкі деп аталады және қабысу модульдерін шақыру координациясын орындайды. Қабысу модульдері бір адресте орналасады және бір уақытта жадыда бір модульден артық модуль орналаспайды. Бұл құрылым сілтеме кестесі арқылы сипатталады. Онда рұқсат етілетін және ескерілмейтін сілтемелері анықталады. Ескерілмейтін сілтемелерде негізгі шақыруға болатын модульдер көрсетіледі, ал айыруда шақыруға болатын модульдер көрсетіледі. Түпкі модуль тұрақты жадыда орналасады және ол арқылы барлық жүктелетін модульдер орындалады. Бұл құрылым жады бойынша үнемді, бірақ егер ұйымдастыру дұрыс болмаса, онда шақырылған модульдерінің жүктелуіне көп уақыт кетеді.

3) Динамикалы тізбекті құрылымының ұйымдастырылуы.

Link және Load операторлары арқылы жүзеге асырылады. Бұл операторлар арқылы шақырылған модуль жадыда орналасқаны анықталады. Егер модуль жадыда орналасса, онда Link командасы  басқаруды оған береді, ал егер команадасы болса онда модульге қатынау күтілуде.

Бұл операторлардан басқа sare және return командалары қолданылады.

Sare - шақырылған модульді тізбекті бастайды, ал return- модульді аяқтайды.

Sare командасы арқылы үзу нүктесі сақталады, ал return сол нүктеге қайтуды ұйымдастырады.

Кемшілігі: Басқа модуль бір модульды шақыру кезінде жүктеуді күтуге уақыт кетеді.

Бұл кемшілікті жою үшін динамикалы параллель құрылымы қолданылады, ол бағыныңқы есеп механизмі арқылы орындалады.

Бұнда нақты үрдіс арнайы команда арқылы ағындарды немесе бағыныңқы есептерді құрады, олар фондық орындалуға арналған.

Фон ретінде түсініктеме ол нақты үрдістің параллельді басқа бір берілген үрдіспен орындалуы.

          Үрдістің өмір кезеңінің  бірінші қадамы болып үрдісті құру және жүйелік кезекке үрдіс туралы мәліметтің орналастырылуы. Үрдісті көрсету кезінде ол туралы негізгі мәліметтер дерекқоры құрылады. Бұл деректер кесте түрінде толтырылады, оның кейде үрдісті басқару блогы деп те атайды. Үрдіс туралы барлық санаттарды келесі мәліметтер жиынтығынан көруге болады:

- базалық аймақ;

- енгізу-шығару сұратулар аймағы;

- құрылғыларға сұрату аймағы;

- жазбаларды басқару аймағы;

- жүйелік қызметке  сұрату және оверлейлерге сұрату аймағы.

Базалық аймақ. Құрады:

- бұл аймақтың алғашқы мекені болып келетін үрдісті басқарудың блок мекені

- келесі басқару блогына көрсеткіш (ағымды және келесі кезектерде);

- ағымды рұқсаттылық;

- ағымды кезектің  идентификаторы;

- үрдісті туындайтын идентификатор;

- қосарлана туындалатын жағдай коды;

- ағымды жағдай статусы;

- жағдай мәніне арналған уақытша буфер;

- мәліметтер үрдісіне арналған жұмыс аймағы,

- мәліметтерді басқарудың блок мекені (жұмыс кестесі);

- қорлар жайлы мәліметтерге арналған уақытша буфер;

- жүйелік қызметке қатынау кезінде қайтарылатын мәніне арналған уақытша буфер.

Енгізу-шығару сұратулар аймағы. Құрылғы үрдісіне белгіленген және бекітілген сонымен қатар бағдарламаны орындау кезіндегі оларға туындайтын сұратулар жайлы мәліметтер негізінде құрылады және енгізіледі.

Құрамы:

- арнайы басқарудың блок мекені;

- файлды басқарудың блок мекені;

- берілген  сұратуға жіберілетін сөздер немесі байттар саны;

- мәліметтердің қайда немесе қайдан берілетін жады мекені;

- енгізу-шығаруға арналған буфер мекені;

- мәліметтердің қайда немесе қайдан берілетін файл мекені;

- жазба түріне көрсеткіш.

Құрылғыға сұрату аймағы. Жинақтағыш сұратуға қызмет көрсету үшін қажетті деректер жазылады.

Құрамы:

- файлдың аты бойынша енгізу-шығару бағдарламасы арқылы есептелінетін мәліметтердің физикалық мекені;

- осы мекенмен байланысты жады мекені;

- соңғы операцияның орындауы бойынша мәлімет.

Жазбаларды басқару аймағы. Бұғаттау ережесі және жазбалар бойынша блоктардың мекендетілуін бейнелейді, сонымен қатар бір жазбаға бірнеше рет қатынау кезіндегі үрдістерді бұғаттау ережесін алдын ала жазу.

Жүйелік қызметке сұрату аймағы. Құрамы:

- үрдісті орналастыру жадысының картасы;

- енгізу-шығару құрылғылары және үрдіс мәліметтерінің блогы арасындағы тура беру үшін арналған жады картасы;

-   оверлейлік аймақтар үшін арналған жұмыс кестесі.

Жады картасы ұғымына бөлектеніп берілген үрдіске байланысты жадының логикалық аймағы кіреді.

Үрдіс мәнмәтінінің құрылымы. Үрдіс мәнмәтіні мәтін арқылы анықталған күймен, пайдаланушының ауқымды айнымалылар мәнімен және ақпараттық құрылымдарымен, қолданылатын машиналық регистр мәнімен, есептің мекендік кеңістігінде және үрдістер кеңістігіндегі позицияларында сақталған мәндерімен, сонымен қатар берілген үрдіске қатысты есеп және ядро стектерінің құрамы болып табылады.

 

Дәріс 4. ЖБ-де процестің берілуі. Сигналдар өңдеу жабдықтары. Үрдістерді басқаратын уақиғалық тетіктер. Үрдістер әрекеттестігі. Үзу жүйелері

 

Дәріс мақсаты: ЖБ-дағы процестер түрлерін мен үзу функцияларын қарастыру.

 

Процес түсінігі. Келесі мысалды қарастырайық. Егер квадрат түбірді алу бағдарламасын енгізу керек болса, онда әртүрлі бастапқы (берілгендердің) деректердің түбірінің мәнін ескере отырып компьютерлік жүйе есептеудің әртүрлі екі процесімен айналысады да, әртүрлі бастапқы деректер әртүрлі есептеу жиынын алуға әкеліп тірейді.

Процес күйі. Есептеу жүйесінде орындайтын барлық абстракцияларды пайдалануда (қолданушы бағдарламасы ғана емес, ЖБ-нің белгілі бір бөлігін пайдаланғанда да), процестер жиыны ұйымдастырылады.

Әр процесс ең аз дегенде екі күйде болады: бірінші күйі – «орындалып жатады», және де екінші күйі – процес «орындалмайды». Процестің «орындалып жатқан» күйі белгілі бір уақыттан кейін ЖБ арқылы аяқталуы, яғни тоқталуы мүмкін, немесе процес «орындалмайтын» күйіне ауысуы мүмкін. Бұл өте ірі, өрескел модель, ол «орындау» үшін таңдалып алынған процесті ескермейді, елемейді, белгілі бір әрекетті орындау үшін тоқтатылғандықтан күтіп тұра береді, яғни, процесті орындауға әлі дайын емес. Мұндай жағдайға ұрынбас үшін процестің «орындалмайтын» күйін жаңа екі күйге бөлейік: «дайындық» және «күту» (2 суретті қара).

«Орындалу» күйде процестің бағдарламалық кодын табу орындалады. Процестің мұндай күйден шығуының үш себебі бар:

- ЖБ оның жұмысын тоқтатады;

- белгілі бір әрекет болмайынша ол өз жұмысын жалғастыра алмайды және ЖБ оны «күту» күйіне ауыстырады;

- нәтижесінде есептеу жүйесінде үзіліс пайда болады (мысалы, бөлінген уақыттың орындалуы біткен кезде оны таймерден үзіп тастау), яғни «дайындық» күйіне қайта оралады.

ЖБ-дегі процестің күйін бұдан да жақсы сипаттауға болады, яғни процес күйінің бір түрінен екіншісіне ауысуының бірнеше жаңа нұсқалары пайда болуы мүмкін. Мысалы, LinuxNT ЖБ үшін модельдің күйі – 7 түрлі, ал Unix ЖБ үшін – 9 түрлі. Бірақ барлық ЖБ-лер жоғарыда көрсетілген модельдерге бағынады.

2 сурет - Процес күйінің диаграммасы

 

Сигналдар өңдеу жабдықтары. Сигналдар бір үрдістен екінші үрдіске өткенде немесе ЖБ ядросында қандайда бір жағдайдың анықталуына байланысты түзіледі. Үрдістер арасындағы қарым-қатынасын сигналды жіберу және қабылдау арқылы қарастырайық.

 

3 сурет - Курстық қабылдаған процес күйінің диаграммасы

 

Үзулердін пайда болуы сияқты сигналдардың пайда болуы келесі себептерге байланысты:

- бағдарлама ішіндегі кейбір жағдайлар, мысалы аса толу болғанда немесе нөлге бөлгенде;

 - құрылғыдан  келген кейбір ақпараттарға байланысты, мысалы пернетақтадан «Ctrl+C» комбинациясын беруге байланысты;

-   бір үрдістің екінші үрдіске әрекеттесуіне байланысты, мысалы «SIG_KILL».

 Жүйеде тиянақталған жағдай жиыны бар, олар жүйде пайда болуы мүмкін. Әр жағдайдың өзінің  уникалды аты болады: бұл аттар әдетте Unix версиясы үшін бірдей.  Бұл аттарды сигналдар деп атаймыз.

Үрдістерді басқаратын уақиғалық тетіктер. Үрдістер әрекеттестігі.  Позициялық түрде үрдісті басқару үш топқа бөлінеді:

          - тәуелді үрдістер – үрдістің барлық өмір сүру периодында автономды орындалады;

- бірігіп орындалатын үрдістер – таратылатын есептеу алгоритмі негізінде әрекеттеседі;

          - бәсекелес үрдістер – жалпы қорлар негізінде әрекеттеседі.

Үрдістің өмірі бірнеше бөлек кезеңдерден тұрады:

1) Үрдісті құру немесе бастапқы пайда болуы. ЖБ кесесінде үрдіс туралы басқарушы жазба құрылады. Бұл жазбада идентификацияланатын ақпарат болады.

2) Инициализация. Бұнда үрдістің орындалуына қажетті қорлар анықталады.

3) Үрдісті белсенділеу.  Бұл кезеңде үрдіске  санашық қоры бөлінеді және орындалуға жіберіледі. Үрдістің орындалу кезінде ол бұғаттау немесе күту күйінде болуы мүмкін.

4) Үрдіс аяқталғаннан кейін оның жойылуы басталады.

Бәсекелес үрдістерді басқару негізіне критикалық интервалда басқару әдісі белгіленген. Бұл әдістің негізі коллективті қатынау ішінде әрбір үрдіске өзінше автономды жұмыс жасау үшін уақыт интервалын анықтау мағынасы жатыр.

Бұл талаптар келесі түрде анықталады:

- әрбір уақыт интервалында тек қана бір үрдіс болу керек;

- интервалда үрдіс көп уақыт болмауы керек;

- үрдістер критикалық интервалға шығуды көп уақыт күтпеу керек.

Көрсетілген  принциптер арнайы басқаратын бағдарламалар көмегімен жүзеге асырылады, бұл бағдарламаларды жолшамдар деп атайды.

Үзу мен алып тастау - ол ЖБ-гі күйлер. Олар бағдарламаны немесе аппаратты анықталады. Үзу немесе алып тастау  анықталғанда санашық сол уақытта орындап жатқан жұмысын тоқтатады және басқаруды пайда болған күйді өңдейтін код мекені бойынша жадының ерекше аймағына береді. WNT бұл кодты қақпан өңдеуші деп атайды (trap hondeer).

Алып тастау (excaption) - синхронды қателі қалып-күй, машиналық команда арқылы орындалады.  Мысалы, жадының қорғанысының бұзылуы.

WNT ядросы жүйелік қызмет көрсетудің шақыруын нәтиже ретінде қарастырады (бірақ ол жүйелік қақпандар).

Қақпандарды өңдеуші. Қақпан (trop) термині ол санашықпен қолданылатын механизм. Орындалып жатқан ағында үзу немесе нәтиже пайда болған да ол басқаруды алып ЖБ-ның бекітілген нүктесіне басқаруды береді.  WNT-де санашық басқаруды NT ядросындағы қақпандарды өңдеушіге береді. Бұл модуль коммутационды панельдің рөлін атқарады: ол санашық генерациялайтын үзулер мен нәтижелерді қабылдайды және басқаруды сәйкес жағдайды өңдейтін кодқа береді.

Үзуге үзу диспетчері жауап қайтарады. Ол үзудің көзін анықтап басқаруды сыртқы қызмет көрсететін процедураларға немесе ядроның ішкі процедураларына береді.

Үзудің типтері және рұқсаттылықтары. Әртүрлі санашық әртүрлі типті және әртүрлі мөлшер үзулерді анықтайды. ЖБ танитын үзу деңгейлерінің стандартты жинақысына үзу диспетчері, үзудің аппаратты деңгейлерін бейнелейді. Үзу деңгейлері үзуді рұқсаттылығымен бөледі. Ядролық режімде ағын өзі орындалып жатқан санашықтың үзу деңгейін көтеріп немесе төмендетуі мүмкін. Рұқсаттылық кезегі бойынша үзу қызмет етеді. Үзу жоғары рұқсаттылығымен төмен рұқсаттылықты үзудің орындалуын басып алады.

 

          1 кесте – Үзу функциялары

Үзу деңгейі

Үзу типтері

жоғарғы деңгей

Аппараттық тексеру

қоректендіру деңгейі

Қоректендірудің жаңылысуы

санашықтық аралық деңгей

Басқа санашықтан сұраныс

таймер деңгейі

Интервалды сұраныс

санашық-құрылғысының деңгейі

Рұқсаттылығы жоғары енгізу-шығару құрылғысы

1-құрылғының деңгейі

Рұқсаттылығы төмен енгізу-шығару құрылғысы

диспетчерлі деңгей

Ағындарды жоспарлау және кейінге қалдырылған щақыру

процедураны асинхронды шақыру деңгейі

Процедураларының өңделуі, процедураларды асинхронды шақырудың өңделуі

төменгі деңгей

Ағындардың кәдімгі орындалуы

 

1-ден 6 деңгейге дейін аппаратты үзуге арналған;

7-8-бағдарламалық үзулер деңгейі (ядро генерациялайды);

9 деңгей,  төменгі деңгей - ол үзуге жатпайды.

Үзулерді орналастыру. Үзулер көбінде аппаратты енгізу – шығару құрылғысынан болады, олар санашыққа өздеріне қызмет көрсету жайында хабар беруі керек. Үзулерді жасайтын құрылғылар, ЖБ –ге есептеу уақытын және енгізу - шығару операциясын сәйкестендіру арқылы санашықты максималды жүктеуді қамтамасыз етеді. Санашық құрылғыда енгізу – шығару операциясын іске қосады және деректер тасымалданғанша басқа ағындарды орындайды. Құрылғы алмасуды аяқтаған соң, ол келесі қызмет көрсету үшін үзуді орындайды. Координатты құрылғылар, баспа құрылғылары, тегергіштер, торапты карталар көбінесе үзуді жүзеге асырады.

 

Дәріс 5. Процестерде болатын операциялар және олармен байланысты түсініктер. Үрдістің біресепті және көпесепті орындалуы. Есепті көпсанашықты шешуді басқару тәсілдері

 

    Дәріс мақсаты: үрдістің біресепті және көпесепті орындалуын қарастыру.

 

Процес бір күйден екіншісіне өз еркімен ауыса алмайды. Процес күйін өзгерту қызметін ЖБ атқарады. Мұндай операциялар түрлері жоғарыдағы біздің модельде бағыттаушы (стрелка) санымен сәйкес келеді. Оларды үш топқа жұптастырып қарастырған өте қолайлы:

- процестің құрылуы – процестің аяқталуы;

- процесті тоқтату («орындалу» күйінен «дайындық» күйіне ауысуы) – процесті жүктеу («дайындық» күйінен «орындау» күйіне ауысуы);

- процесті матау (блокировка) («орындау» күйінен «күту» күйіне ауысуы) – процесті матаудан құтқару (разблокировка) («күту» күйінен «дайындық» күйіне ауысу).

Процесті құру және аяқтау операциясы бір тер қана болады (одноразовый), яғни процеске бірден көп қолданбайды (кейбір жүйелік процестер есептеу жүйесі жұмысы кезінде ешуақытта аяқталмайды, аяқсыз қалады). Ал қалған операциялардың бәрі процес күйінің өзгеруімен байланысты, яғни олар көп (многоразовый) түрлі. Процесте ЖБ операцияны қалай орындайтынына толығымен тоқталайық.

Process Control Block және процес контексті. ЖБ процесте операцияны орындау үшін әрбір процестің деректерінің құрылымы көрсетілуі керек. Бұл құрылым берілген процес үшін спецификалық ақпаратқа толы болады. Олар:

- процестің сол кездегі күйі;

- процестің бағдарламалық канауышы немесе басқа сөзбен айтқанда келесі орындалатын команда мекенжайы;

- процесор регисторының мазмұны;

- берілген деректер, яғни ол процесті және жадыны басқаруды орындауды жоспарлау үшін қажет (процес артықшылығы, кеңістіктегі мекенжайдың көлемі және қалай тұрғаны);

- есепке алатын деректер (процестің нөмірі, оның жұмысын қолданушы қалай өзгерткені, сол процесте процесордың пайдаланылған жалпы уақыты және т.с.с.);

- процеске байланысты енгізу-шығару құрылғысы туралы мәлімет (мысалы, процеске қандай құрылғы бекітілген, ашық файлдар кестесі).

Бір-ақ рет қолдануға болатын (одноразовые) операциялар. Күрделі ЖБ өзінің қажеттілігіне қарай динамикалық процестерді тудырады. Жаңа процесті тудырушы ЖБ-ні жүктегеннен кейін арнайы жүйелік шақыруды орындаған қолданушы процесін немесе ЖБ-нің өзі, аяғында кез келген процесті шығара алады. Жаңа процесті тудырушы процесті ата-ана процесі (parent process), ал қайтадан тағы пайда болған процесті бала-процесс (child process) деп атау қабылданан. Бала-процес өзінің кезегінде тағы да жаңа бала-процесс туғызуы керек және т.с.с., осылайша жүйе ішінде процестің генеалогикалық бұтақ жиыны «генеалогикалық орман» пайда болады. Ескерте кету керек, қолданушының барлық процестері, ЖБ-нің кейбір процестерін қосқанда олар бір ғана «орман ағашына» қатысты болады. Көп қолдануға болатын (многоразовые) операциялар. Көп қолдануға болатын операциялар ЖБ-дегі процестер санын өзгертпейді және ресурстарды босатуға немесе бөліп беруге байланысты болуы міндетті емес.

Процестің жүктелуі. Әрі қарай орындау үшін бірнеше процестердің ішіндегі дайын күйде тұрған процестің біреуін ЖБ таңдап алады. Таңдап алған процесс  үшін, ЖБ оперативті жадыда ақпараттың бар болуын және оның ары қарай жұмыс істеу қажеттіліктерін қамтамасыздандырады. Процес күйі орындалу кезінде өзгереді, яғни берілген процес үшін регистрдің мәні қалпына келеді және басқару процестің команда санауышына сілтейтін командасына беріледі.

Процестің тоқтатылуы.  «Орындау» күйінде тұрған процес жұмысы қандай да бір үзілудің нәтижесінде тоқтатылады. Процесор команда санауышын автоматты түрде сақтайды және орындау процесі стектің бір немесе бірнеше регистрін сақтайды, одан кейін басқаруды берілген үзілуді өңдейтін арнайы мекенжайға береді. Осылайша үзілуді өңдеуге арналған hardware жұмысы аяқталады. Көрсетілген мекенжайда әдетте ЖБ-нің бір бөлігі ғана болады. Процестің қоршалып қалуы (блокирование). Жұмысты әрі қарай жалғастыра алмаған кезде немесе есептеу жүйесіндегі кез келген бір оқиғаның пайда болуын күтпей әрекет жасаған кезде процес қоршалып қалады. Бұл жағдайдан шығу үшін  ол арнайы жүйелік шақырудың көмегімен ЖБ-ден көмек сұрайды. Процесті қоршалып қалудан құтқару (разблокирование). Жүйеде қандай да бір оқиға болып қалғаннан кейін, ол оқиғаның қандай екенін нақты анықтау керек. Содан кейін ЖБ оқиғаның «күту» күйінде беріген тұрғаны бар ма екенін тексереді, егер бар болса оқиғаның пайда болуына байланысты қажет әрекеттерді орындай отырып, «дайындық» күйіне ауыстырады (мысалы, күтіп тұрған процес кезегі үшін енгізу-шығару операциясын жібереді және т.с.с.).

Жанамаға қосылу (переключение). Осыған дейін біз процестерде болатын операцияларды, яғни бір-біріне тәуелсіз операцияларды қарастырдық. Шын мәнінде мультибағдарламалық ЖБ қызметі, яғни әртүрлі процестерді орындайтын және де бірінен екіншісіне ауысатын процестерді процесор ауысуын қадағалайтын операция тізбектерінен тұрады.

Көпесептілік. Санашық  бір уақытта тек бір ағынды орындайды. Бірақ көпесептіліқ операциялық жүйеде пайдаланушыға бірнеше бағдарламаларды пайдалануға мүмкіндік береді:

- бір қордың босағанын немесе ағынның орындалуы үзілгенше ағын қолданылады;

- ағынның мәнмәтіні сақталады;

- ағынның мәнмәтіні жүктеледі;

- орындалуды күткен ағындар бар болғанша бұл қайталау қайталанады.

Санашықтың бір ағынды орындау кезінде басқа ағынның орындалуына қайта қосылуын мәнмәтінінің қайта қосылуы дейміз.

Көпесептілік жүйе орындайтын жұмыстың мөлшерін көбейтеді, өйткені көп ағындар үзілмей орындалмайды. Ағындар орындалуын тоқтатып, мысалы енгізу-шығару құрылғысының босауын күтуі мүмкін. Көпесептіліктің арқасында бір ағын күтуде болса, басқа ағын орындалуы мүмкін, соның арқасында санашықтың уақыты босқа кетпейді.

Ығыстыратын көпесептілік - көпесептіліктің түрі, бұнда ағынның басқа ағындардың орындалуына өзбетінше санашықтың босатуын Жүйелік бағдарламалау күтпейді. Оның орнына алдын ала берілген уақытта немесе рұқсаттылығы жоғары ағын орындалуға дайн болса Жүйелік бағдарламалау ағынды үзеді. Ығыстыру бір ағынның санашықты толық алуынан сақтайды және басқа ағындарға санашықтың уақытын қолдануға мүмкіндік береді.

Көпағындық. Паралельдікке жету үшін екі үрдісті қолдану барлық жағдайда тиімді емес. WinNT бұл проблеманы шешу үшін ыңғайлы жадыны бірігіп қолданатын механизмдерді құрады. Бұл механизмдерді қолданған жағдайларда да басқа проблемалар болуы мүмкін, сол жағдайда паралельдікке жету үшін көпағынды үрдіс қолданылады.

Көпағынды үрдістің  екі немесе бірнеше ағындары болады, олар бірігіп  бір мекендік кеңістікті және қорды қолданады.

NT-ң әр үрдісі бір ағынмен құрылады. Қажет болса бағдарлама үрдіс ішінде қосымша ағындарды құруы мүмкін. Олар көбінесе бағдарламада асинхронды операцияларды орындау үшін қолданылады (операциялар кез келген уақытта орындалады). Бұл категорияға енгізу-шығару операциялары кіреді. Бір ағынды негізгі бағдарламаның орындалуына қолданып, екінші ағынды енгізу-шығару құрылғысының сұранысына құрып, сонда жүйе бір санашықта бөлек екі операция орындауына болады, бұл жағдайда көпесептілік орын табады. Көпсанашықты компьютерде бұл екі ағын бірге орындалуы мүмкін және басқа үрдіс құруына қажеті жоқ.

Ағындарды қолданып параллелизмге жету үшін бағдарлама бір үрдісте екі немесе бірнеше ағын құрады. Көпағындық үрдістер паралельдікке жетеді және екі үрдісті қолдануымен байланысты кемшіліктері жоқ. Ағындар үрдіске қарағанда тез құрылады. Одан бөлек үрдістің ағындары бір жадыны қолданады, өздерінің стегі және регистр мәндерін алып тастағанда. Ерекше деректер алмасу механизмін керек етпейді. Бір ағын өзінің нәтижесін жадыға жазады, ал екінші ағын оларды оқиды. Сонымен бірге үрдістің барлық қорлары оның барлық ағындарымен бірдей қолданылады. Ағындардың орындалу кезегін анықтау үшін ядро рұқсаттылыққа негізделген сұлбасын қолданады. Рұқсаттылығы жоғары ағын рұқсаттылығы төмен ағыннан бұрын орындалады, ядро ағындардың  рұқсаттылығын өзгертіп тұрады, сол арқылы олардың бәрінің орындалуына кепілдік береді.

Көпағынды үрдісті қолдану – серверлі қолданбаларға тиімді шешім, ол клиенттерден сұраныс қабылдайды және әр сұраныс бойынша бір кодты орындайды. Мысалы, файл-сервер файлдармен жұмыс жасайтын операциялар, бірақ әр сұраныс серверден өзінің файлымен жұмыс істеуді сұрасада, сервер бағдарламасы жадыға тек бір рет жүктеледі. Әр келетін сұраныс қажет функциясын орындайтын сервердің бөлек ағындарымен қабылданады және өңделеді.

WinNT–де паралельдікке жету үшін екі үрдісті қолданады, олар арнайы арналар арқылы әрекеттеседі. Сондықтан WinNT бағыныңқы жүйелері бөлек серверлі үрдістер ретінде жүзеге асырылған және қорғалған деп аталады.

 

Дәріс 6. Енгізу-шығару жүйесін басқару. Синхронды және асинхронды енгізу-шығару

 

Дәріс мақсаты: синхронды және асинхронды енгізу-шығару функцияларын қарастыру.

 

Енгізу-шығару жүйесін басқару – ол ЖБ-гі негізгі функцияларының бірі және ЖБ  жобалауының ең қиын аймақтарының бірі.

Енгізу-шығару құрылғыларының көптігінен  және олардың түрлі табиғаттарынан қиыншылықтар туады. Сондықтан ЖБ-ні құрушылардың арасында оңай есеп тұрған жоқ. Олар енгізу-шығару құрылғыларының тиімді басқаруды ғана емес қолданба программистер құрылғылардың түріне қарамастан деректерді оңай оқып, сақтау үшін ыңғайлы, тиімді виртуальды интерфейсті құру қажет.

Бір модельге бірнеше түрлі құрылғыларды біріктіретін жүйелік  енгізу-шығару әмбебап болу қажет. Біріншіден, ол бар құрылғылардың қажеттіліктерін ескеру қажет. Екіншіден, бірнеше параллель орындалып жатқан есептерге енгізу-шығару құрылғыларына қатынауды ескеру қажет.

Енгізу-шығаруды басқару режімдері. Екі негізгі енгізу-шығару режімі бар: енгізу-шығару құрылғыларының дайындығын сұрату алмасу режімі және үзілісі бар алмасу режімі.

Егер енгізу-шығару басқаруын орталық санашық атқарса, онда ол басқару құрылғысына бір енгізу-шығару құрылғысының орындалуына команда береді. Енгізу-шығару құрылғысы команданы орындап орталық санашыққа және сигналды басқаратын құрылғыға түсінікті сигнал жібереді.

Виртуализация принципін қолдану есептеу жүйесінің  тиімділігін жоғарылатуға мүмкіндік береді. Көбінесе виртуалды құрылғыға – спулинг терминін қолданады.

Спулинг дегеніміз - операциялайтын режімде құрылғылармен жұмыс иммитациясы.

Спулингтің негізгі жұмысы тізбекті қатынайтын құрылғыларының параллельді бөлінуінің көрінісін ұйымдастыру. Бірақ олар монопольді және жалғанған ретінде қолдану қажет.

Мысалы, егер біз бірнеше қолданбаның қорытындысын басуға жіберетін болсақ, онда біз түсініксіз қорытындыға ұшыраймыз. Бірақ әр есептеу үрдісіне виртуалды принтер беруге болады және  ағындылар бірінші рет магнитті дискідегі  арнайы спул файлына жіберіледі.

Содан соң виртуалды басу аяқталған соң қабылданған рұқсаттылықтармен және  қызымет көрсету пәні бойынша спул файлдың мәні принтерге жіберіледі. Спул файлымен басқаратын жүйелік үрдіс – спулер деп аталады (spool-reader немесе spool-writer).

Виртуалды құрылғыға сәйкес нақты құрылғы кесте арқылы супервизормен таңдалады. Сонымен құрылғының қосылу тәсілі оның моделі және оған сәйкес драйверлер бірінші жабдық кестесінде анықталады. Ол виртуалды құрылғыны жүйелік кестесімен байланыстыру үшін екінші жүйелік кестесі қолданылады. Шартты біз оны виртуалды логикалық құрылғының сипаттама кестесі дейміз (DRT-device reference table).

Енгізу-шығару үрдісін басқару:

1-әрекет. Орындалып жатқан бағдарламадан енгізу-шығару операциясына сұраныс супервизорға түседі.

1.1-әрекет. Супервизор жүйелік шақыруды қабылданған спецификацияларға сәйкестігін тексереді және қате болған жағдайда есепке сәйкес хабарлама жібереді.

2-әрекет. Егер сұраныс дұрыс болса, онда есеп енгізу-шығару супервизорына бағытталады.

2.2-әрекет. Супервизор виртуаль аты арқылы DRT кестесінен құрылғы кестесінен сәйкес UCB элементін табады. Егер құрылғы бос болмаса, онда есеп сипаттаушы құрылғыны күтіп тұрған есептер тізіміне орналастырады.

3-әрекет. Егер құрылғы бос болса, онда енгізу-шығару супервизоры UCB–дан құрылғының типін анықтайды және қажет болса санашықты іске қосады, ол құрылғыны түсінетін және орындайтын басқару деректерін және кодтарын ашуға мүмкіндік береді.

4-әрекет. Енгізу-шығаруды басқаратын ²бағдарлама² дайын болған кезде, енгізу-шығару супервизоры басқаруды сәйкес драйверіне береді (іске қосу секциясы).

5-әрекет. Драйвер басқару операциясын инициялизациялайды, тайм-аут санауышын нөлдейді және санашыққа орындалуға дайын есепті қою үшін супервизорға (есеп диспетчеріне) басқаруды қайтарады.

6-әрекет. Жүйе жұмысты кезегімен орындайды, бірақ енгізу-шығару құрылғысы жіберілген команданы орындап болған соң, үзуге сұраныс сигналын орнатады және үзу кестесі арқылы басқару жалғастыру секциясына беріледі. Жаңа команданы алған соң құрылғы оны орындайды және санашықпен басқаруды қайтадан есеп диспетчеріне қайтарады, ал санашық өзінің жұмысын жалғастырады. Сонымен есептердің параллель өңделуі болады, соның көрісінде санашық енгізу-шығару операциларының басқаруын жүзеге асырады.

Синхронды және асинхронды енгізу-шығару. Енгізу-шығару операциясына сұраныс берген есеп берілегн операциялардың аяқталғанын күту күйіне супервизормен ауыстырылады. Аяқталу секциясынан операцияның аяқталғаны жайлы супервизор хабарлама алған соң, ол есепті орындалуға дайын күйіне ауыстырады және ол өзінің жұмысын жалғастырады. Бұл жағдай синхронды енгізу-шығаруға сәйкес синхронды енгізу-шығару көп ЖБ стандартты болып табылады. Қолданбалардың орындалу жылдамдығын ұлғайту үшін қажет болғанда асинхронды енгізу-шығару қолданылады. Асинхронды енгізу-шығарудың қарапайым варианты, ол сыртқы құрылғылардың деректерін буферлі шығару. Сыртқы үрдістер енгізу-шығару аппаратурасын қолдана отырып олар бір бірімен әрекеттеседі және орталық санашықта орындалатын ²бағдарламалық² үрдістермен әрекеттеседі. Бұл жерде ең маңыздысы ол сыртқы үрдістің жылдамдылығы ²ішкі² үрдістердің орындалуынан айырмашылығы бар. Ішкі және сыртқы үрдістер өздерінің жұмысы дұрыс орындалуы үшін олар синхрондалу қажет. Сыртқы және ішкі үрдістердің жылдамдылықтарының сәйкессіздігін дұры стау үшін буферлеу қолданылады. Буферлер арқылы деректер немесе бір үрдістен мекенделген сыртқы құрылғыға жіберіледі (сыртқы құрылғыларының деректерін шығару операциясын) немесе сыртқы үрдістен бір бағдарламалық үрдіске (деректерді оқу операциясы).

 ЖБ супервизорленген бөлігі жүйелік буферлермен басқару проблемаларын шешеді. Буферлерді бөлу, босату ғана емес және оларды бос буфер болмаған жағдайда күту есептерін супервизор шешу қажет. Көбінесе енгізу-шығару супервизоры бұл есептерді шешу үшін ЖБ-де қабылданған стандартты синхронизация құралдарын қолданады. Сондықтан егер ЖБ есептерді параллельді орындалу проблемаларын шешетін құралдары болса, онда ол асинхронды енгізу-шығаруды ұйымдастырады.

Дербес компьютер модификациясына және оның құрамындағы сыртқы құрылғыларға байланысты мекендік кеңістіктің таратылуы өзгешеленуі мүмкін. Бірақ жүйенің негізгі құрауыштарының орналасуы қатал қадағаланады. Бірінші 640 Кбайт 00000h-тан  9FFFFh-қа  дейінгі мекендердегі,  мекендік кеңістікті негізгі жедел жады аймағына қалдырады, мұны тағы да стандартты жады аймағы деп те атайды (conventіonal). Жедел жадының бастапқы килобайты үзу векторларымен толтырылған (4 байттан 256 вектор бар). Үзу векторларының артынан BІOS деректер аймағы орналасады, олар 00400h-тан 004FFh-қа дейінгі мекендерде орналасады. Бұл аймақта сыртқы құрылғыларды басқару процесінде BІOS бағдарламаларымен қолданылатын әртүрлі деректер орналасады, сонымен мұнда орналасатындар:

- жүйе көрсеткішімен кіріс пернетақта буфері;

- параллельді және тізбекті порттар мекенжайы;

- видеожүйені құруға керекті деректер (меңзер формасы және оның экрандағы сол кезде орналасқан орны, ағымдағы  видеорежім, экран ені және т.б.);

- ағамдағы уақытты санау ұяшығы;

- есеп аралық байланыстар аймағы т.б.с.с.

BІOS деректер аймағы компьютерді бастапқы жүктеу процесі кезінде ақпараттармен толтырады және қажетіне қарай  динамикалық түрде жүйемен модификациялайды; көптеген қолданбалы бағдарламалар бұл аймаққа онда сақталған ақпараттарды оқу немесе модификациялау үшін қатынайды.

 

Дәріс 7. Енгізу-шығаруды диспетчерлеу. Еркін және тізбекті қатынас құру тәсілдері

 

          Дәріс мақсаты: ЖБ-дағы диспетчерлеу ұғымы мен процесін қарастыру.

 

Есептерді динамикалық жоспарлау үрдістерді жоспарлауға қарағанда актуалды, өйткені қорларды тиімді үлестіру әр жағдайда болады. Есептің динамикалық жоспарлауын диспетчерлеу деп атайды. Орындалып жатқан үрдістермен ағындар арасында ағымдағы қорларды үлестіруден жоспарлау көп ұйымдастырылады.

Орындалуға дайын есептердің кезегінің тізімін дайындайтын көп диспетчерлеу пәндері белгілі. Қызмет көрсететін пәндер екі үлкен топқа бөлінеді – рұқсаттылықты және рұқсаттылықсыз.

Мультибағдарламалық ЖБ-де көп есептер орындалған кезде деректерді оқуға және жазуға сұраныс көп ағындар болып өтуі мүмкін, сондықтан оларды орындау кезінде кезек пайда болады. Егер біз сұраныстарды олардың кезекке түскеніне байланысты орындайтын болсақ, онда магниттік дискінің секторларына кездейсоқ қатынайтын боламыз, онда деректерді жабуға біз көп уақыт жібереміз. Өйткені деректерді іздеп табуға уақытты азайту үшін сұраныстарды кезекке дұрыстап қоюға болады және олар тез орындалу үшін тиімді әдісті табу қажет. Ол проблеманы шешу үшін қажет тиімді жоспарлау пәнін табу қажет. Белгілі пәндерді қарастырайық, олар деректерді оқу/жазу операцияларына сұраныс кезегін қайта құрады.

1) SSTF (shortest seek time-first) - бірінші-минималды іздеу уақытымен. Бұл пән бойынша магниттік бастиекті позицияланған кезде келесі болып саналатын сұраныс ол оның цилиндрынан цилиндрға жылжу уақыты минималды болу, бұл сұраныс кезекте бірінші болуының қажеті жоқ. Бұл пәннің қасиеті, ол дискілік бағыныңқы жүйенің максималды өткізу қабілеті.

2) Scan (сканерлеу) - бұл пән бойынша бастиек бірде бір бағытта, бірде басқа бағытта жылжиды. Жолда сәйкес сұраныстарды орындайды. Егер оқу-жазу бастиегінің жылжу кезінде сәйкес сұраныс болмаса, онда ол кері бағытта жылжиды.

3) Next-Step-Scan – алдыңғы пәннен айырмашылығы ол жылжыту кезінде тек қана сол уақытта болған сұраныстарды орындайды. Бастиектің оқуға-жазуға жылжу уақытында пайда болған жаңа сұраныстар, жаңа сұраныс кезегін құрайды. Бұл сұраныстарды кері жолда орындауы мүмкін .

4) C-Scan – бұл пән бойынша бастиектің жылжуы қайталап ең сыртқы жолдардан ішкілерге, жолда бар сұраныстарға қызмет көрсетіп, содан соң қайта сыртқы цилиндрға ауысады.

Сондықтан ең негізгі болып келесі әдіс саналады: енгізу-шығаруды басқаратын операциялар басымды деп аталады және Жүйелік бағдарламалаудың коды арқылы орындалады.

Ең қажетті қорлардың бірі ол бағдарламалық модуль. Бағдарламалық модульдер бір рет және бірнеше рет қолданылатын болып бөлінеді.

Жүйелік бір рет қолданылатын бағдарламалық модульдер ЖБ-е  жүктелу кезінде қолданылады.

Бірнеше рет (қайталап) қолданылатын бағдарламалық модульдер басымды, басымды емес және рентабельдік болуы мүмкін.

Басымды бағдарламалық модульдер басымды режімде жұмыс жасайды.

Басқару тізгінін шартқа байланысты ауыстыру командаларының жалпы форматы келесі түрде болады:

Jx ауысу_таңбасы,

мұндағы х - модификатор, ол бір немесе бірнеше әріптерден тұрады, ол келесі мәндерді қабылдауы мүмкін:

1) E (equal) – тең;

2) N (not) – немесе;

3) G (greater) – үлкен;

4) L (less) – кіші;

5) A (above) – жоғары;

6) B (below) – төмен.

E, N модификаторлары кез келген типтегі операндтар G және L – таңбасыз сандар үшін; A және B – таңбалы сандар үшін қолданылады.

Шартқа байланысты ауыстыру командаларын бағдарламаның орындалуы кезінде пайда болатын әртүрлі шарттарды тексеру үшін қолданған ыңғайлы. Көп командалар орындалу нәтижелерін flags (eflags) регистрінде қалыптастырады. Төменде шартқа байланысты ауысу командалары және олар орындалған кездегі белгілердің өзгерулері, сондай-ақ оларға сәйкес логикалық ауысулар көрсетілген.

"Үлкен" және "кіші" логикалық шарттары таңбалы бүтін сан мәндері салыстыру үшін, ал "жоғары" және "төмен" — логикалық шарттары таңбасыз бүтін сан мәндерін салыстыру үшін қолданылады.

 

          1 кесте

Команда

Тексерілетін белгілер күйі

Ауысу шарты

JA

CF = 0 и ZF = 0

Егер жоғары болса

JAE

CF = 0

Егер жоғары немесе тең болса

JB

CF = 1

Егер төмен болса

JBE

CF = 1 или ZF = 1

Егер төмен немесе тең болса

JC

CF = 1

Егер тасымал болса

JE

ZF = 1

Егер тең болса

JZ

ZF = 1

Егер 0 болса

JG

ZF = 0 и SF = OF

Егер үлкен болса

JGE

SF = OF

Егер үлкен немесе тең болса

JL

SF <> OF

Егер кіші болса

JLE

ZF=1 или SF <> OF

Егер кіші немесе тең болса

JNA

CF = 1 и ZF = 1

Егер жоғары болмаса

JNAE

CF = 1

Егер жоғары емес немесе тең болса

JNB

CF = 0

Егер төмен  болмаса

JNBE

CF=0 и ZF=0

Егер жоғары емес немесе тең болса

JNC

CF = 0

Егер тасымал болмаса

JNE

ZF = 0

Егер тең болмаса

JNG

ZF = 1 или SF <> OF

Егер үлкен болмаса

JNGE

SF <> OF

Егер үлкен емес немесе тең болса

JNL

SF = OF

Егер кіші болмаса

JNLE

ZF=0 и SF=OF

Егер кіші емес немесе теңб олса

JNO

OF=0

Егер асатолу болмаса

JNP

PF = 0

Егер нәтиже биттерінің қосындысы тақ болса (тақтық паритет)

JNS

SF = 0

Егер таңба оң болса (таңбалық (үлкен) бит нәтиесі 0 тең)

JNZ

ZF = 0

Егер 0 болмаса

JO

OF = 1

Егер асатолу болса

JP

PF = 1

Егер нәтиже биттерінің қосындысы жұп болса  (жұптық паритет)

JPE

PF = 1

JP сияқты, яғни жұптық паритет

JPO

PF = 0

JNP сияқты, яғни тақтық паритет

JS

SF = 1

Егер таңба теріс болса (таңбалық (үлкен) бит нәтижесі 1 тең)

JCXZ

әсер етпейді

Егер регистр CX=0 болса 

JECXZ

әсер етпейді

Егер регистр ECX=0 болса

 

          Бірінші кездегі і8086 микропроцессорларындағы шартқа байланысты ауысу командалары қысқа ауысуларды ғана жасай алатын, ал қазіргі і386 микропроцессорларына қойылған шарт жоқ, олар ағымдағы сегменттің кез келген жерінен ауысу жасай береді. Ал сегмент аралық ауысулар жасау үшін шартты ауысу командалары мен jmp шартсыз ауысу командаларын қосып қолданған дұрыс.

Басқаруды шартқа байланысты ауыстыру командаларына кез келген белгінің күйін өзгерте алатын командалар кедергі келтіре алады, олар әдетте  СМР салыстыру командасымен бірге қолданылады.

Циклды басқару командалары

Циклды басқару командалары цикл ұйымдастыру кезінде шартты ауысу үшін қолданылады. Әрбір команда СХ регистріндегі санауыш мәнін 1-ге кемітіп отырады, ал одан кейін оның жаңа мәніне байланысты оны тоқтату керек пе немесе әрі қарай жалғастыру жайындағы шешім қабылдайды.

LOOP – циклды санауыш біткенге дейін қайталайды.

Команда форматы: LOOP таңба

Бұл команда СХ регистр санауыштың мәнін 1-ге азайтады және СХ регистрінің мәні 0-ге тең болғанға дейін басқаруды таңбаға береді. LOOP командасы циклды орындауын СХ регистрі 0-ге тең болған кезде ғана аяқтайды. Бірақ көптеген қосымшаларда белгілі бір шартты орындаса болғаны СХ регистрінің мәнін 0-ге тең болғанша күтпей-ақ аяқтау керек болатын жағдайлар кездеседі. Мұндай циклды аяқтау командаларына LOOPE (егер тең болса, циклды қайтала) және LOOPNE (егер тең болмаса, циклды қайтала).

LOOPE (LOOPZ) - циклды (нөлге) тең болғанша қайталайды. Команда СХ регистрінің мәнін 1-ге азайтады, одан кейін СХ регистрі 0-ге және ZF 1-ге тең болған кезде ауысу жасайды. Сонымен цикл өз жұмысын СХ регистрі 0-ге және ZF регистрі 0-ге тең болған кезде немесе олардың екеуі де 0-ге тең болған кезде аяқтайды. Әдетте LOOPE командасы нөлдік нәтиже іздеу операцияларында қолданылады.

LOOPNE (LOOPNZ) - циклды (нөлге) тең болмағанша қайталайды. Команда СХ регистрінің мәнін 1-ге азайтады, одан кейін СХ регистрі 0-ге тең емес және ZF 0-ге тең болған кезде ауысу жасайды. Сонымен цикл өз жұмысын СХ регистрі 0-ге және ZF регистрі 1-ге тең болған кезде немесе олардың екеуі де орындалған кезде аяқтайды. Әдетте LOOPNE командасы бірінші нөлдік нәтиже іздеу операцияларында қолданылады.

 

Дәріс 8. Енгізу-шығару ағындары. Енгізу-шығаруды қорғау тәсілдері

 

Дәріс мақсаты: ағын ұғымын түсіндіру.

 

Ағынның анықтауы бағдарламаның орындауы процессордың әсерлерiнiң тiзбек уақытында тығыз байланған. Процессор орындайтын бағдарламаның нұсқауын өткелдер кейбiр шарттарға байланысты кейде жүзеге асыра дәйектi түрде орындайды. Мұндай бағдарламаның нұсқауларын орындауды тiзбек операциялық ағынымен бағдарламаның iшi деп аталады. Операциялық ағыны бастапқы күйден бағдарламаларда қолданылатын айнымалы тәуелдi болатынын атап өтемiз. Әртүрлi бастапқы деректер жағдайда әртүрлi операциялық ағындарын тудырады. Операциялық ағыны микропроцесор атқарылатын нұсқаулар түзiлген бағдарламадағы желi сияқты көрсетуге болады. Сонымен бiрге операциялық ағыны сондықтан жиi (thread) желiмен деп аталады. Операциялық ағындарында орыс тiлдi әдебиетте ағын атау бекiндi.

Ағынның ұғымының түсiндiрулерi үшiн сан тең болатын туралы екi бүтiн сандардың ең төменгi саны немесе қатынасты шығаратын келесi бағдарламаны қарап шығамыз.

#include <iostream.h>

int main()

{

int a, ' b;

cout « "Input two integers: ";

cin » a » b;

if (a == b)

{

cout « "There is no min." « endl;

return 0;

if (а < Ь)

cout « "min = " « а « endl;

else

cout « "min = " « b « endl;

return 0;

}

Енгiзу-шығарудың артық тиелген операторлары жаңа ағындарды құрастырмағанын болжаймыз. Сонда бұл құрастырылған бағдарламаларының кiру мәлiметтерiне байланысты бiр үш операциялық ағындары болуы мүмкiн. Егер (a = = b) шарт орындалса, атап айтқанда, онда ағын құрастырады:

cout « "Input two integers: ";

cin » a » b;

if (a == b)

{

cout « "There is no min." « endl;

return 0;

}

Егер (b) шарт орындалса, онда ағын құрастырады:

cout « "Input two integers: ";

cin ». a » b;

if (a == b)

if (a < b)

cout « "min = " « a « endl;

return 0;

Егер (b) шарт орындалса, онда ағын құрастырады:

cout « "Input two integers: ";

cin » a » b;

if (a == b)

if (a < b)

cout « "min = " « b « endl;

return 0;

Бағдарламаларының жіктеліміне параллель операциялық ағындарының анықталатын олардың санына байланысты ендi өтемiз. Бағдарлама көп тасқынды болып табылғанын айтамыз, егер онда бiрнеше ағындар бiр уақытта бар бола алсын. Өздерiнiң ағындары параллель осы жағдайда деп аталады. Егер бағдарламада бiр-ақ ағын бiр уақытта бар бола алса, онда мұндай бағдарлама бір ағынды деп аталады.

Мысалы, келесi бағдарлама, қай екi сандардың сомасын жай ғана есептейдi, бiр ағынды болып табылады:

#include <iostream.h>

int sum(int a, int b)

{

return a + b;

}

int main()

{

int a, b;

int с = 0;

cout « "Input two integers: ";

cin » 'a » b;

с = sum (a, b) ;

cout « "Sum = " « с « endl;

return 0;

}

Sum-ның функциясынан мәннiң қайтуы күтпегенiнде емес, орындалуға жалғастырғанында mainнiң функциясының sumның функцияны шақыруынан кейiн ендi болжаймыз.

Белгiлер үшiн Windows-тiң операциялық жүйелерiндегi ағын құрастырылған функция болған, функцияның арнайы спецификаторларын қолданылады. Сонымен бiрге мұндай функция әдетте ағынмен деп аталады.

Енгізу-шығару сұраныстары нақты белгіленген бірнеше оңдеу этаптарынан өтеді. Бұл этаптарда сұраныс құрылғыға бірқатпарлы драйвер арқылы басқарылатыны немесе көпқатпарлы драйвер арқылы өтуіне байланысты айырмашылықтары бар. Әрі қарай айырмашылықтарды өңдеу кезінде берілген енгізу-шығару типі – синхронды немесе асинхронды бойынша белгіленеді.  Мысалы екі үрдіс жалпы оперативті жадының кеңістігінде жұмысын орындайды. Бұнда бөлінетін қорлар әртүрлі режімдерде орындалуы мүмкін,  мысал екі үрдіс екі бөлек машинада болса, бірақ олар жалпы оперативті жадының өрісімен байланысуы мүмкін. Бұл жағдайда жадымен буферлеу жұмысын атқарған  кезде проблема түзілуі мүмкін, өйткені әр машинаның өзінің оқу/жазу буферлеу механизмдері болады. Онда жағымсыз жағдай туады, физикалық жадының жағдайы оның реалды мәніне сәйкес келмейді. Сонымен қатар, екі бөлек машинада жұмыс жасап отырған операциялық жүйеде проблема түзеледі.

Келесі проблема. Мысалы, екі үрдіс бір машинада орындалады. Бұл жағдайда бөлінетін жадыға қатынауды синхрондауға мүмкіндік беретін құрылымдар белгіленуі керек. Оперативті жадымен жұмыс жасап жатқан үрдістердің алмасуы дұрыс орындалу үшін жағдай жасалуы керек.

Шындығында есеп шешкен уақытта жалпы жады сияқты қордың бөлінуінің қажеті жоқ, бірақ бір уақытта орындалатын үрдістер бір-біріне әсер етсе дейміз. Әсер ету аппаратты үзуге тең. Көп Жүйелік бағдарламалау оны жүзеге асыру үшін үрдістер арасында сигналдар қолданылады. Бір үрдіс басқа үрдіске сигнал жібер деп нұсқау береді. Басқа үрдісте орындалып жатқан үрдіс үзіледі және қабылданған сигналды өңдеу қажет.

Жүйелік бағдарламалаудың  бұндай функциялары оның экплуатациялық қасиеттеріне әсер етеді. Реалды әр Жүйелік бағдарламалау көп функциялар жиынынан тұрады, олар жүйенің жұмысын қамтамасыз етеді.

Әр жүйелік бағдарламалау енгізу-шығару буферлеуін қамтамасыз етеді. Негізінде ол Жүйелік бағдарламалаудың негізгі функцияларының бірі. Жүйелік бағдарламалау есептеу жүйесінің түрлі компоненттерінің әртүрлі қатынас жылдамдықтарымен күресу үшін бағдарламалық буферлеуді енгізеді, ол қатынас уақытын дұрыстау және синхрондау проблемаларын шешеді.

Магниттік дискідегі жинақтауышты компьютердің орталық бөлігінің шапшаңдығымен салыстырғанда жылдамдығы өте төмен. Шапшаңдығының айырмашылығы бірнеше рет. Операцияның орындалу уақыты 0,5н/с болуы мүмкін, ал магниттік бастиектің бір жолшығынан басқа жолшыққа өтуі бірнеше миллисекунд болады. Бастиектің астында оқу/жазу үшін қажет деректер секторын күтуге бірнеше уақыттық интервалы өтеді. Қазіргі жетектерді кездейсоқ таңдалған сектор деректерінің оқылуының орта ұзақтылығы 20 мс болады. Бұл команда операнд оперативті жадыдан және бүркемеден таңдалуынан әлдеқайда төмен. Бірақ деректер үлкен пакетпен оқылады (сектор размері 512 байт, ал дискімен операциялары кезінде көбінесе оқу немесе жазу бірден бірнеше сектордан болады).

Бүркеме жады-жадының шапшаңдық аймағы, санашық өңдеу алдында деректерді буферлеу үшін қолданылады.

 

Дәріс 9. Файлдық жүйенің негізгі функциялары мен құрамдары

 

Дәріс мақсаты: ЖБ-дағы файлдық жүйе функцияларын мен құрамдарын қарастыру.

 

Әрбір жүйелік бағдарламалау бір түсініктемеге қолданылады, оның бірі үрдіс болып табылады. Ал екінші түсінік, ол да өте маңызды – ол файл түсінігі.

Файлдық жүйе – бұл жүйелік бағдарламалаудың компоненті, ол файлды құрады, сақтайды және атаулы деректер  жиынына қатынас құрады. Бұл атаулы деректер жиынын файл деп атайды.

Файлдың негізгі қасиеттері:

1) Файл – бұл аты бар және осы атқа сілтеп файл мазмұнымен әрекеттесуге мүмкіндік беретін бір объект. Әдетте файл аты – ол тізбекті бір символдар, оның үзындығы Жүйелік бағдарламалауға байланысты.

2) Орналасудан  файлдың тәуелсіздігі. Нақты файл жұмыс орындау үшін файлдың сыртқы құрылғыда орналасуы жайында ақпараттың қажеті жоқ.

3) Енгізу-шығару функцияларының  жиынтығы. Әрбір Жүйелік бағдарламалау файлмен алмасуды қамтитын функциялар жиынтығын анықтайды. Көбінесе функциялар жиынтығы келесі сұраныстардан тұрады:

файлды жұмыс жасау үшін ашу. Бар немесе жаңа файлды ашуға болады.

4) Оқу/жазу. Көбінесе файлдармен алмасу бірнеше деректер блогымен ұйымдастырылуы мүмкін. Алмасу жасалынатын деректер блогы екі түсінік көрсетеді. Бір жағынан әр есептеу жүйесіне деректер блогының мөлшері белгілі және олар алмасуға тиімді болып табылады, ол бағдарламалы – аппаратты мөлшерлер. Басқа жағынан бұл деректер блогы реалды алмасу кезінде программистермен өзгертілуі мүмкін. Оқу/жазу функцияларында оқитын немесе жазылатын деректердің көбісінде алмасуға арналған деректер блогының мөлшері және деректер блогының саны белгіленеді. Таңдалған деректер блогының мөлшері реалды алмасудың тиімділігіне байланысты, мысалы бір машинаның деректер блогының тиімді мөлшері 256 Кб болып табылады, ал сіз 128 Кбайтан алмасу орындағыңыз келеді, сонда сіз екі рет қатынас құрасыз. Бір рет алмасу орындау үшін сіз оны екі бөліп алмасу орындайсыз, бұл жағдайда Жүйелік бағдарламалау тиімсіз элеметтерді өзі түзеуі мүмкін. Түзелмеген жағдайда ол сіздің қатеңіз.

5) Файлдық нұсқағышпен басқару. Әрбір ашық файлмен файлдық нұсқағыш байланысты. Бұл нұсқағыш бойынша әрбір уақытта алмасу орындайтын келесі файлдың мекені көрсетіледі. Ол блокпен алмасу орындалған соң нұсқағыш бір блоктан кейінгі позицияға өтеді. Файлмен жұмыс ұйымдастыру үшін бұл нұсқағышты басқаруды білу қажет. Файлдық нұсқағышты басқару үшін арнайы функция бар. Нұсқағыш дегеніміз ол файлды ашу функциясымен байланысты бір айнымалы.

6) Файлды жабу. Бұл операция екі функция арқылы жүзеге асырылуы мүмкін:

          - ағымдағы файл мазмұнын сақтау және жабу;

          - файлды жою.

Файлды жапқан соң онымен барлық байланыс тоқтатылады.

Деректерді қорғау. Көп стратегиялық шешімдер аппараттық деңгейде және операциялық жүйе деңгейінде қайталанады. Егер  мультибағдарламалық режімді еске алсақ, онда бір қажет болып табылатын ол жадыны және деректерді қорғау. Файлдық жүйені қарастыратын болсақ, олда Жүйелік бағдарламалау сияқты бірқолданбалы болуы мүмкін. Бұл жағдайда деректерді қорғау проблемалары болмайды, өйткені операциялық жүйеде жұмыс жасап отырған  адам  барлық файлдардың иесі болып табылады. Негізінде қорғау проблемасы тек қана файлдық жүйемен байланысты емес. Реалды Жүйелік бағдарламалау деректердің қорғанысын барлық аймақтарда қамтиды: бұл файлдар, үрдістер және қорлар.

Үлестіру кестесінде картада әр секторға бір бит бөлінеді. Картадағы позициялық орны дискідегі позициялық орынды анықтайды. Бұнда 1 - сектор бос емес екенін білдіретін жағдай, ал 0 - бос. Бір лентада бір файл емес, каталогпен бірнеше файл орналасады.

Бұл құрылым үзілмейтін және файлдардың фрагментті құрылымдарына белгіленген. Үзілмейтін файлда көрсету үшін 4 байттан екі сан қолданылады. Бірінші сан бірінші блоктың нұсқағышын белгілейді, екінші – мөлшер (бір бірінен кейін жүретін блоктар саны).

Блок мөлшері – 1 сектор.

Фрагментті файлдар Extent-терден тұрады. Оның әрқайсысына екі сан бөлінеді (2-4 байт).

Әртүрлі көп мәліметтер жиынтығын логикалық жазба немесе сектор деп атайды. Осы мәліметтер тізбегінің реттілігі структуралық жазба деп аталады. Қолданбалы бағдарламалар деңгейінде файл көптеген логикалық жазбалардан тұрады. Физикалық деңгейде файл көптеген аталған дикста сақталған секторлар мен кластерлерден тұрады. Әдетте логикалық жазбалардың ұзындығы кластер ұзындығымен сәйкес келмесе, кластер  бірнеше логикалық жазбалардан тұрады немесе керісінше логикалық жазбалар бірнеше кластерлерден тұруы мүмкін.  Файлдарға рұқсаты бар немесе логикалық файлдар жазбалары мен олардың физикалық мағынасынан тұратын операциялық жүйенің бөлігі файлдарды басқаратын жүйе немесе  файлдық жүйе деп аталады.

Файлдардың логикалық  жазбаларына рұқсат алатын операцияларды орындау үшін, әрбір файл сайын келесі логикалық жазба файлын файлға бағыттауышты  байланыстырады.  Әрбір жазба операциясынан және логикалық жазбаны оқудан кейін файлдық жүйе файлды бағыттауышты  келесі логикалық жазбаға жылжытады.  Файлдарға рұқсат алу үшін файлды басқару жүйесі, ең болмағанда келесі опреацияларды орындау керек:

- файлды жасау;

- файлды өшіру;

- жұмыс істеп тұрған файлға рұқсат;

- жұмыс істеп тұрған файлға рұқсатты жабу;

- файлға мәліметтерді жазу;

- файлдан мәліметтерді оқу;

- қажетті жазбаға бағыттауышты орнату.

           Енгізу-шығару буферизациясы.

Енгізу-шығару буфері деп – файлдарды жазуды уақытша сақтайтын оперативті жадтың ауданын атайды.  Әдетте, буфер ұзындығы кластердің қысқы ұзындығымен таңдалады.  Енгізу-шығару буфері келесі екі қызметті атқарады:

 - қосымшаларда анықталатын файлдарды  логикалық жазудың шамасының және дискке жазылатын кластердің шамасының  сәйкессіздігінен ығыстыру;

- сырттағы құрылғылардың жұмыс істеу жылдамдығын арттыратын процесордың жұмыс істеу жылдамдығына сырттағы  құрылғылардың әсер етуін төмендету.

          Мәліметтерді шығару кезіндегі осы есептерді шығару кезінде файлдық жүйе алдымен буферді логикалық жазбалармен толтырады да, артынан сыртқы орнатылымға дискке логикалық жазбаларды жазу командасын бұйырады.  Мәліметтерді енгізу кезінде файлдарды басқару жүйесі алдымен буферді кластерлермен толтырады да, артынан буферден қолданушы бағдарламасына логикалық жазбаларды басқаруды орындайды.

Мәліметтерді енгізу-шығаруды жылдамдату үшін  сақиналы кезекте ұйымдастырылған  бірнеше енгізу-шығару буферлері қолданады. Қолданушы процестің бір буфермен жұмысы кезінде файлдық жүйе параллель басқа буферлерге мәліметтерді енгізу-шығару жұмысын атқарады.

           Енгізу-шығаруды кэштау.

Жад иерархиясының көршілес екі деңгейін қарастырамыз. Осыған қарамастан, жоғары деңгейдің жады төменгі деңгейге қарағанда  тезірек жұмыс істейді деп алайық. Керек мәліметтер төменгі деңгейде деп есептейік, ал жадты басқару механизмі жоғарғы деңгейге  қолданушы бағдарламасы ықтимал мәліметтерді жіберуді атқарады. Мұндай жағдайларда жоғарғы деңгей жады төменгі деңгей жадына қарағанда кэш сияқты жұмыс істейді деп айтады.  Алғашында бұл термин тек процесор регистрі мен оперативтік жад арасында орналасқан ең жоғарғы деңгейге ғана қолданылған. Қазіргі уақытта бұл термин мәліметтерді енгізудің алдын алу мағынасын түсіндіруде кеңірек мағынада қолданылады.

 

Дәріс 10. Файлдарды ұйымдастыру тәсілдері

 

Дәріс мақсаты: файлдарды ұйымдастыру амалдарын қарастыру.

 

Файлдық жүйелердің негізгі қасиеттері. Файлдық жүйе файлдар үшін аталған қасиеттердің бәріне ие және бірнешеулерін қосады. Бұл қасиеттер файлдық жүйенің құрылымдық ұйымдастырылуымен байланысты.

Сыртқы есте сақтау құрылғылардың кейбір кеңістіктерін осы кеңістік ауқымды файлдардың ұйымдастырылуын қалай ұйымдастыруды қарастырамыз.

1) Үздіксіз сегментті файлдарды бір деңгейде ұйымдастыру. “Бірдеңгейде” термині – жүйе ерекше аталған файлдармен жұмыс істеуді қамтамассыз етеді. Кеңістік шегінде сырқы есте сақтау құрылғысы кталог деп аталатын мәліметтерді сақтау үшін арналған кейбір аумақтарға бөлінеді.

“Бастапқы блок” берілген атпен басталған файлдағы сырқы есте сақтау құрылғысы кеңістігіндегі салыстырмалы орынға жіберіледі. “Соңғы блок” осы файлдың соңғы болатынын анықтайды. Файлды ашу функциясы каталогтағы файл атын табуға, оның басын және соңын табады (бұл мәліметтер аз орын алуы мүмкін, бұл туралы кейінірек айтылыды). Бұл әрекет өте қарапайым және де каталогты Жүйелік бағдарламалау жадына сақтауға болады, сонымен қатар ауыстырулар санын азайтуға болады. Егер жаңа файл құрылса, онда ол бос орынға жазылады. Каталогтар атына ұқсас бос кеңістікті кесте болуы мүмкін.

Оқу/жазу қосымша аустыруларсыз-ақ жүреді, сондықтан ашу барысында біз мәліметтердің орналасу аумағын аламыз. Оқу осы блокты құрылымға сәйкес жүреді және қосымша ешқандай ақпарат қажет емес. Осыған сәйкес ауыстыру өте тез жүреді.

Сонымен, біз бұл ұйымдастырудың  ауыстыру барысында тимдірек енін білдік, бірақ кеңістік болмаған жағдайда файл үшін тиімсіз болады. Сондай-ақ, ұзақ уақыт жұмыс барысында мұндай файлдық жүйеде оперативтік жадыдағы сияқты болады, яғни бос фрагменттер болған жағдайда, бірақ олардың арасында файл орналастыра алмаймыз. Мүндай файлдық жүйені ұйымдастыру үшін фрагментациялаумен күрес - бұл барлық файлдарды бір- біріне тығыз орналастыратын кезеңдік компессия.

Мұндай ұйымдастыру бір рет қолданылатын файлдық жүйе үшін жарамды болуы мүмкін, сондықтан қолданғыштар саны көп жағдайда фрагментация өте тез жүреді, ал компрессияның тұрақты енгізілуі - жүйе үшін ауыр болады. Басқа жағынан жүйе қарапайым және ешқандай шығындарды қажет етпейді.

2) Блокты файлдарды ұйымдастырудың файлдық жүйесі.  Сыртқы есте сақтау кеңістіге блоктарға  бөлінген (ауыстырулар үшін тиімді блоктар). Файлдық жүйеде мұндай типті ақпараттарды орналастыру беттік ұйымдастырылуы жедел жадыға үрдістер ақпараттарын орналастыруға ұқсас жүреді. Жалпы жағдайда әрбір файл атымен осы файл мәліметтері орналасқан блоктар санының жинағымен байланысты. Бұл блоктар саны реттелген, яғни блоктар барлық қондырғы бойынша таратылуы мүмкін. Мұндай ұйымдастыруда фрагментациялау болмайды, дегенмен блоктардың жойылуы мүмкін (егер файл блокта бір байттықорын алса, онда блок бос емес болып есептеледі). Демек компрессиялау мәселесі жоқ және бұл жүйені көп қолдану ұйымдастыру барысында қолдануға болады. Бұл жағдайда әрбір файлмен атрибуттар жинағына байланысты: файл аты, пайдаланушы аты. Мұндай ұйымдастыру жоғарыдағы жағдайларда қажет етілетін ерекше аттардың болмауына мүмкіндік береді. Бұндай жүйеде аттар ерекшелігі тек бір қолданудағы файлдар арасында қажет.

3) Иерархиялық файлдық жүйе. Файлдық жүйенің барлық файлдары бағана деп аталатын құрылымда тұрғызылған. Бағана түбінде файлдық жүйенің түбі болады. Егер бағана түйіндері беттік болса, онда бұл файл каталогты файл болып табылады. Мұндай иерархиялық файлдық жүйеге ат қою әртүрлі тәсілдермен жүргізіледі.

Бірінші түрі – файлға ат қою, жақын каталогқа сай болады, яғни біз F0 каталогына жақын болатын файлды қарастырсақ- бұл файл 1 немесе F2 файлы болады. Мұндай жүйеде ат қойғанда аттар бір деңгейде қайталана бермейді. Басқа жағынан барлық файлдар бағана көмегімен байланысты болғандықтан, біз файлдық жүйеден нақты нақты файлға жол ашатын, барлық файл аттарынан тұратын файлдың толық аты туралы айта аламыз. F3 файлының толық аты мына түрде белгіленеді: /F0/ F1/ F3/.

Мұндай ұйымдастыру толық және қысқа атты файлдармен  жұмыс істеуге мүмкіндік береді. Толық атты файлдың өз жолы бар, ал кез келген бағана түбінен кез келген түйінге дейін бір-ақ жол болады, демек осымен аттарды ерекшелеу мәселесі шешіледі. Алғаш рет бұл 60-жылдар соңында Беркли университетінде жасалған Multex Жүйелік бағдарламасында қолданды. Бұл шешім көптеген Жүйелік бағдарламалау нәтижесінде пайда болады. Осы иерархияға сәйкес әрбір файлға қандай да бір атрибуттарды байланыстыруға болады. Бұл жүйенің құрылымы ат қою мәселесі болмаған жағдайда көп рет қолдану жұмыстарын ұйымдастыру үшін жақсы және мұндай жүйе өте жақсы жетістіктерге ие.

Құрылымдық ұйымдастыру тәсілдері. Құрылымдық ұйымдастыру – файлдық ақпараттарды орналастыру ережелерін анықтайды.

Құрылымдық ұйымдастыруды былай ажыратады:

-        байланысты файлдарды орналастыру;

-        байланыссыз файлдарды орналастыру.

Байланысты үлестіру кезінде файлдық ақпаратты элементтері физикалық тасушыда орналасады. Мекендік аймақ бойынша (диск үшін-бұл секторлар). Мұндай тәсіл үздіксіз файлдар үшін тән, дискті кеңістікті қолданумен тиімді.

Тізімде бос секторлар немесе блоктар қалмаған жағдайда жадыны бөлуге оның бос болмағандығынан бұғатталу фазасы болады.

Файлдарды ұйымдастырудың блоктық тәсілдері

1) Блоктық тізбекті құрылым

Белгілер.

Мекендік бөлік деректер теруімен байланысқан және осымен байланысты келесі блоктың мекенжайын табу қажет.

Қарапайым орындалуы (блоктарды тізімге қосу және алу).

Бұл тәсілдің негізгі кемшілігі ол тізбекті блоктардың ішіндегі блоктарға тікелей қатынау мүмкіндігінің жоқтығы. Белгілі кемшілікті жою үшін келесі тәсіл қолданылады, ол блоктты-индексті үлестіру тәсілі.

2) Файлдарды блокты-индексті үлестіру.

Бұл кестелерде жолды енгізу үшін өрістер бар.

1-қадам. Индексті блокты файлға жалғау (тіркеу).

Физикалық блоктар алдын ала индексті блокқа жалғанбайды.

2-қадам. Әр физикалық блоктың файлмен байланысуы индексті тізімнің элементіне белгіленген блок мекенжайы жазылуы арқылы жасалынады.

3-қадам. Блокқа мекендеу индексті белгілеу арқылы жасалынады.

1) Файлдар картасы арқылы үлестіру

FAT-файлдар үлестіру картасы. Бұл кестенің сыйымдылығы тасушыдағы деректер блогының санына тең.

0...15-тасушыдағы физикалық мекенжайы. Бұл үлестіру вариантында FAT блоктан бөлінген. FAT-та әр файлға блокаралық байланыс тізбекшесі беріледі.

Кестені қалыптастыру үшін екі өлшемді жиын қолданылады, мұнда жол саны дискідегі физикалық блок санына тең. Кестедегі элементтердің позициялайтын нөмірі дискідегі блок нөміріне сәйкес. Массивтің екінші элементі ағымдағы нөмірді байланыстырады және сілтейді. Әр ағымдағы нөмір тек қана біреумен байланысады. Директорийдің мекендік бөлігінде тізбекшінің басқы блогының мекенжайы беріледі.

Блоктың ерекшелену принципі: стандарт-ерекшелену-файлды құру, файлға бірінші бос блоктардан қосымша блоктар таусылғанша болады және бір блокты бірнеше файл қолдануы мүмкін емес. Бұл тәсілдің негізгі кемшілігі ол жұмыстың тиімділігі әсер ететін дискілік жадының көлемінің шектелуі.

Файлдың жасалынуы мен ашылуы.

Жаңа файл немесе бар файлды ашу үшін CreateFile функциясы қолданылады, оның келесі прототипі бар:

Handle CreateFile

LPCTSTR lpFileName, // файл аты

DWORD       dwDesiredAccess,         // рұқсат ету тәсілі

DWORD       dwShareMode,    // бірігіп қолдану режімі LPSECUTITY_ATTRIBUTES   IpSecurutyAttributes,      // қорғау атрибуттары
DWORD       dwCreationDisposition,    // файл жасау немесе ашу
DWORD       dwFlagsAndAttributes,      // флагтар мен атрибуттар
HANDLE     hTemplateFile      // файл атрибуттары) ;

 

Дәріс 11. Файлдық жүйенің менеджері. Файлдарды қорғау мен сақтау. Жадыны бірігіп қолдану

 

          Дәріс мақсаты: файлдарды қорғау мен сақтау тәсілдерін қарастыру.

 

Файлдық жүйе менеджері (ФЖМ) файлдық жүйедегі қажеттіліктердің жұмыс істеу тәртібін түзеді. Әрбір жеке талап осы тізімнің элементтері түрінде көрсетіледі (жүйелік тізім элементі ЖТЭ).

Сонмен ФЖМ функциясы екі параллель немесе тәуелсіз үрдістерді басқаруда анықталады:

1) Үрдістен файлдық жүйеге талаптар.

2) Талаптарға қызмет көрсету.

Менеджердің нақты функциялары фазалар бойынша аяқталады:

1-фаза: оларды жұмыс істеу тізіміне қажет үрдістерден талаптар бойынша жүйелік тізім элементтері.

2-фаза: жұмыс істеу тізімінен элементті таңдау және оның файлдық жүйе қызметіне берілуі.

Файлдық жүйе менеджерінің функциялану механизмдері синхронды қызмет ету жағдайына келіп түскен талаптардың біреуі ғана қабылданады (қалғаны жабылады).

Асинхронды сұлба түрі - дестеленген қызмет ету. Талаптар жұмыс тізіміне асинхронды дестеленіледі. Элементтер талаптар түсудің шамасы бойынша белгілі қадамға дейін түзіледі, содан кейін екінші фаза толығымен толтырылады. Одан келіп түскен талаптар не жабылып қалуы мүмкін, не болмаса қабылдануы мүмкін.

ФЖМ - толық асинхронды қызмет ету барысында екі тәуелсіз үрдіс түзеді:

- олардың түзілу шамасы бойынша;

- олардың қызмет етуі.

ФЖМ негізгі функциялары сұлбамен және жүйелік тізім элементтерінің (ЖТЭ) түзілуімен анықталады.

ЖТЭ - бұл нақты файл бойынша талаптарға қызмет ету үшін қажетті мәліметтер келтірілген параметрлік кесте.

ЖТЭ мыналар кіреді:

-   файл аты және файлдық жүйе бойынша анықталатын талап етілген функция коды;

-   талап етілген үрдіске қайтарылатын мәлімет коды;

-   тарату қызметі үшін арна нөмірі, яғни физикалық құрылғы және оперативті жады арасындағы деректерді беру;

- жады картасының индексі – файл және оперативті жады арасындағы деректер алмасу арқылы жады мекенін анықтау;

-   жүйелік қызметтегі элемент өлшемі.

Файлды сақтау және қорғау. Файлдық жүйенің негізгі қызметі – үлкен көлемдегі томдармен жұмыс істеу (300-500 Мб және одан да көп).

Файл келесі атрибуттармен көрсетіледі:

-   стандартты өлшем 8,3 және оданда жоғары файл аттары;

-   атрибуттар тізімі;

-   қорғау дискрипторы – қатынау құқығын анықтайды;

-   деректер;

-   түбірлі индекс, ол үлкен каталогтағы файлдар аттарының индексін анықтайды.

Файлдық    атрибуттан басқа, қызмет көрсету ұғымында қолданылады, ол функцияларды анықтайды, ал  нақты айтатын болсақ файлдар жұмысын регламенттейді.

Файлды оқу/жазудан басқа:

-   ақпаратты орнату;

-   кеңейтілген атрибуттарды орнату;

-   қорғаныс орнату.

NTFS файлдық жүйесінде қорғау ережесі бойынша қызмет көрсетуде келесілер регламенттеледі:

1) R – оқу.

2) X – орнату.

3) W – жазу.

4) D – жою.

5) P – кеңейтілудің өзгеруі.

6) O – иесінің өзгеруі.

7) All – барлық қатынас.

Файлды көшіру және құру кезінде аталық қатынас құқығы пайда болады.

Файлды NTFS-тан FAT-қа трансформаттағанда барлық қорғаныс құқығы жоғалады. Unix Жүйелік бағдарламасында файлдарға қатынаудың үш базалық санаттары бар, олардың әрқайсысында сәйкесінше қатынас құқығы орнатылған:

1) User access (u) – файлды қолданушы иесі үшін.

2) Group access (g) – файлдар иесі болатын топтағы мүшелер үшін.

3) Other access (o) – суперқолданушылардан басқа қолданушылар үшін.

Unix  ЖБ-ғы қорғаныс келесі ережелер мен постулаттарға негізделген:

1) Сырт адамдарға қызықты файлдарды шифрланған түрде сақтау керек.

2) Өндіруші фирма көрсеткішін қолдау және қорғаныс сұрақтары бойынша Usenet – телеконференция хабарлау.

Жүйеге кіруге мүмкін болатын нүктелерге ерекше бақылауды жүзеге асыру. Оларға: бюджет топтары,  әлсіз парольдер бюджеті, анонимді ftp жатады. Интернетке қосылу жүйесінде  tripwire, Crack, COPS типті қақпақ орналастыру. Осы орнатылған қақпақтан келіп түскен ақпараттарды талдау. Қалыпты жұмыстан кейінге қалуды бақылау, яғни жүйенің функциялауы бойынша күнделікті есеп беру ақпаратын жүйелік файлдарға сұратуды орындау бойынша, аттар және парольдер бойынша талдай білу.

Меншік қорғаныс құралдарын өңдеу. Парольды бақылау ол файл паролінің өзгеруін анықтау, пароль сапасына және парольдың болмауына байланысты. Парольды бақылау үшін жиі-жиі /etc/passwd файлын тексеріп  тұру керек (кемдегенде екі аптада бір рет бақылауды жүзеге асыру керек).

Жауапкершілігі көбірек парольдерге жасырын парольдарды файлды қолдануды, мысалы /etc/shadows және каталогты басынан форматтауға дейін.

Параллельді алып тастау бойынша бақылау: парольды ауыстыру, ол рұқсатталған пайдаланушының паролін ауыстыру сияқты арнайы утилиттар арқылы жүзеге асырылады. Рұқсаттылықты бақылау: тіркелген аттардың сәйкестігі және UID идентификаторында олардың статусы.

Сәтті аяқталған жағдайда функция жасалынған немесе ашылған файлдың дискрипторын қайтарады, ал сәтсіз аяқталса invalid_handle_value мәнін IpFile Name CreateFile параметрінде символдық жолға нұсқау көрсетіледі, онда жасалынатын немесе ашылатын файлдың толық аты көрсетіледі. Егер файлдың толық аты көрсетілмесе, файл берілген атымен жасалынады немесе ағымдағы каталогтан ізделінеді. dwPesiredAccess параметрі файлға өту тәсілін береді және келесі мәндердің кез келген комбинациясын қолдана алады:

о — қосымша тек қана құрылғы атрибуттарын анықтай алады;

generic_read — мәліметтерді тек файлдан ғана оқуға рұқсат етіледі;

generic_write — мәліметтерді тек қана файлға жазуға рұқсат етіледі.

Бұл файлға өтудің жалпы режімі. Басқа да режімдер бар, өтуге байланысты файлды қорғау атрибуттарын анықтауда берілген. dwshare Mode параметрі файлға өтудің бірлескен режімін береді. Егер бұл параметрдің мәні нөлге тең болса, онда файл бірлескен өту үшін қолданыла алмайды. Әйтпесе dwshare Mode параметрі келесі мәндердің кез келген комбинациясын қолданады:

file_share_read — файл тек бірнеше бағдарламалармен бірлесіп оқу үшін қолданыла алады;

file_share_write — файл тек бірнеше бағдарламалармен бірлескен жазба үшін қолданыла алады;

file_share_delete — файл бірнеше бағдарламалармен қолданыла алады, егер олардың әрбіреуі бұл файлды жоюға рұқсаты болса ғана.

 

Дәріс 12. Жадыны қорғау. Қатынас құру функциялары. Виртуалды жадыны ұйымдастыру. Беттерді аударыстыру стратегиялары

 

Дәріс мақсаты: виртуалды жадыны ұйымдастыру кезеңдерін қарастыру.

 

Көптеген стратегиялық шешімдер жүйелік бағдарламалау деңгейінде сияқты аппараттық деңгейде қайталанады. Мультибағдарламалық режімде негізгі шарттардың бірін сақтауды қамтамасыз ету болып табылады.

Виртуалдық жадыны ұйымдастыру. Физикалық жады бұл есептеу нәтижелерін енгізіп санашықпен жұмыс істейтін жады. Ол реттелмеген код ұяшықтардан тұрады және оларға оның реттік нөмірін көрсетіп назар аудармауға болады. Ұяшықтар саны шектеулі және тіркелген. Жедел жады физикалық мекен деп аталатын өзінің ерекше мекеніне ие байттар түрінде көрсетіледі. Үрдістің мекендік кеңістігі физикалық жедел жадтың мекендік кеңістігінен ерекшеленеді. Егерде үрдістің мекендік кеңістігі жедел жадыда көрінсе, яғни үрдісте қолданылатын мекен физикалық мекен болып табылса, онда бұл кейбір проблемаларға алып келеді. Осы барлық мәселелер виртуалдық жады көмегімен шешіледі. Осыдан қолданылатын мекен физикалық мекенмен сай келуі шарт емес. Виртуалдық мекен аппараттық деңгейде көрсетіледі.

Қосымша қызметті өзара  әрекетті виртуалды жады диспетчері талаптар арқылы және болып жатқан жағдайға байланысты талап етілген функциялармен жүргізіледі. Жағдайлар келесі түрлерге бөлінеді:

1 – жағдай. Үзік үрдісті ескеру.

2 – жағдай. Жедел жадыда талап етілетін бетке назар аудару.

3 – жағдай. Жады менеджері және файлдық жүйе менеджері арқылы беттерді аударыстыру кезіндегі үздік үрдісті талап ету.

Қарастырылған механизм негізінде кез келген виртуалдық жадыны жасауға болады. Диск арқылы виртуалды жадының таратылуы неғұрлым көп болса, соғұрлым екінші, әсіресе үшінші жағдайдың пайда болуы ықтималдығы жоғары болады.

«Бет ығыстыру» жағдайы беттер қарқындылығын талдаумен байланысты жоғарыда қарастырылған диспетчерлеу пәні негізінде қолданылатын беттерді ескерумен байланысты.

Аударыстыру мақсаты белсенді емес сегменттерден жедел жады қорларын босату болып табылады.

Беттерді аударыстыру ұйымдастыру – талаптар бойынша жүктелетін және барлық бағдарламаларды жүктеу.

Соңғы мәндер тек Windows операциялық жүйелерінде қолданылады. ipsecurutyAttributes файл қорғауының атрибутын береді. dwCreationDisposition параметрі әрекетті береді, файлдың ашылуы мен жасалынуында орындалатын. Бұл параметр келесі мәндердің біреуін қабылдай алады:

create_new — жаңа файл ашу, егер файл мұндай атпен бар болса, онда функция сәтсіз аяқталады;

create_always — жаңа файл ашу, егер файл мұндай атпен бар болса, онда ол жойылады да жаңа файл ашылады;

open_existing — бар файлды ашу, егер файл берілген атпен жоқ болса, онда функция сәтсіз аяқталады;

open_always — файлды ашу, егер файл берілген атпен жоқ болса, жаңа файл ашылады;

truncate_existing — файлды ашу және оның мазмұнын жою, егер файл берілген атпен жоқ болса, онда функция сәтсіз аяқталады.

 Соңғы процесс бойынша dwDesiredAccess параметрінде GENERIC_WRITE флагы орнату керек. dwFiagsAndAttributes параметрінде жасалынатын немесе ашылатын файлдың флагтары мен атрибуттары болу керек. Файл атрибуттары келесі мәндердің келесі комбинациясын қабылдайды:

file_attribute_archive — архивтік файл, қызметтік ақпараттан тұратын;

file_attribute_encrypted — шифрленген файл;

FIl E_AT TRI BUT E_h IDD EN — көрінбейтін (скрытый) файл;

file_attribute_normal — өзге атрибуттары жоқ қарапайым файл;

file_attriвитe_not_content_indexed — файл мазмұны индекстелмеген;

file_attribute_offline — файл көмекші жадта орналасқан;

FILE_ATTRIBUTE_READONLY — файлды тек оқуға ғана болады;

file_attribute_system — файл операциялық жүйемен қолданылады;

file_attribute_temporary — файл мәліметтерді уақытша сақтау үшін қолданылады.

Кейбір файл атрибуттары туралы ескертулер айтсақ, шифрленген файлда file_attribute_system атрибуты болмайды. file_attribute_normal атрибуты тек өзі қолданылуы керек, яғни басқа комбинациясыз. dwFiagsAndAttributes параметрінде келесі басқарушы флагтардың кез келген комбинациясы орнатылуы мүмкін:

file_flag_write_through — кэштауды қолданбай, дискке мәліметтердің жазылуы;

file_flag_overlapped — оқу және жазу операцияларының асинхронды орындалуын қамтамасыз етеді;

file_flag_no_buffering — файлға өту кезінде буферлеуді қолданбау;

file_flag_random_access — бағдарлама жазбаны файлдан кездейсоқ таңдауды ұсынады;

file_flag_sequential_scan — бағдарлама файлды кезектеп сканерлейді;

file_flag_delete_on_close — файл барлық дискрипторлары жабық болғанда файл жойылады;

file_flag_backup_semantics — резервтік файл;

file_flag_posix_semantics — файлға өту  POSIX стандартымен жүзеге асырылады;

file_flag_open_reparse_point — файлға өту кезінде жүйелік фильтр қолданылады.

Ескерту, file_flag_backup_semantics флагы тек Windows операциялық жүйелерінде қолданылады.

Файлдың ашылуы мен жойылуы.

Файлға өтуді жабу үшін, басқа кез келген объект ядросының жабылуы үшін CloseHandie функциясы қолданылады, оның жалғыз параметрі боп ашық файлдың дискрипторы саналады. Файлдың физикалық жойылуы үшін дисктен келесі прототипі бар функция қолданылады:

BOOL   DeieteFile

(LPCTSTR   lpFileName   // файл аты);

lpFileName параметрі файлдың толық жолын көрсететін нұсқаушы боп табылады. Сәтті аяқталу кезінде функция нөлдік емес мәнді қайтарады, ал сәтсіз болса false.

Келесі листингта С дискте түпкі каталогта орналасқан demo_file.dat атты файлды жоятын бағдарлама көрсетілген:

 Листинг - Файлды жою

#include <windows.h> #include <iostream.h>

int main() {

// файлды жоямыз

if(!DeieteFile("C:\\demo_file.dat")) {

cerr « "Delete file failed." « endl

« "The last error code:  " « GetLastError() « endl; cout « "Press any key to finish."; cin.get(); return 0;

}

cout « "The file is deleted." « endl;

Қауіпсіздік идентификаторының ұзындығын анықтау үшін GetLengthsid функциясы қолданылады, оның прототипі:

DWORD GetLengthSid (PSID pSid// SID-ке сілтегіш);

Бұл функцияның жалғыз параметрі қауіпсіздік идентификаторына сілтегіш болып табылады. Егер қауіпсіздік идентификаторының дұрыс құрылымы болса, онда функция осы қауіпсіздік идентификаторының ұзындығын қайтарады, кері жағдайда — анықталмаған мағынасын қайтарады. Сондықтан GetLengthSid функциясын шақыру алдында қауіпсіздік идентификаторының құрылымын тексеретін IsValidSid функциясын шақыру керек.

Авторизация идентификаторының сілтегішін анықтау үшін sid құрылымында GetSidldentifierAuthority функциясы қолданылады, оның прототипі:

РSID_IdentIFIER_AUTHORIty   GetSidldentifierAuthority (psid pSid// sid-ке сілтегіш);

Бұл функцияның жалғыз параметрі қауіпсіздік идентификаторына сілтегіш болып табылады. Егер қауіпсіздік идентификаторының дұрыс құрылымы болса, онда функция сілтегішті IdentifierAuthority өрісіне қауіпсіздік идентификаторында қайтарады, кері жағдайда — анықталмаған мағынасын қайтарады. Сондықтан GetSidldentif ierAuthority функциясын шақыру алдында қауіпсіздік идентификаторының құрылымын тексеретін IsValidSid функциясын шақыру керек.

Қауіпсіздік идентификаторында қатынасты идентификаторлардың санын анықтау үшін GetsidsubauthorityCount функциясы қолданылады, оның прототипі:

PUCHAR GetSidSubAuthorityCount (PSID pSid// sid-ке сілтегіш);

Бұл функцияның жалғыз параметрі қауіпсіздік идентификаторына сілтегіш болып табылады. Егер қауіпсіздік идентификаторының дұрыс құрылымы болса, онда функция сілтегішті SubAuthorityCount өрісіне қауіпсіздік идентификаторында қайтарады, кері жағдайда — анықталмаған мағынасын қайтарады. Сондықтан GetsidsubauthorityCount функциясын шақыру алдында қауіпсіздік идентификаторының құрылымын тексеретін IsValidSid функциясын шақыру керек.

Қатынасты идентификаторлардың саны алынғаннан кейін, нақты қатынасты идентификатордың мекенжайын GetSidSubAuthority функциясын шақыру арқылы анықтауға болады

 

 

Дәріс 13. Жады қорының менеджері. Жадыны бөлу стратегиялары. Қолданбалық интерфейстер және қабықшалар

 

Дәріс мақсаты: ЖБ-дағы қолданбалық интерфейстер және қабықшалар түрлерін қарастыру.

 

Компьютердің есте сақтау құрылғысы ең аз дегенде екі деңгейге бөлінеді: негізгі жады (бас, оперативті, физикалық) және ішкі жады.

Негізгі жады – бірбайтты реттелген ұяшық, ол ұяшықтың әрқайсысының нөмірі бар. Процесор негізгі жадыдан команданы алады да оны кодтайды, содан кейін оны орындайды. Командалар орындалу үшін тағы да негізгі жадыдағы бірнеше ұяшықтарға сұраныс жасау керек болады. Негізгі жады жартыөткізгіш технологиясын қолдану арқылы дайындалады және өзінің құрамындағыны токтан ажыратқан кезде жоғалтады.

Ішкі жадыны – (бұл дискінің негізі) көптеген байттардан құралған кеңістіктің бірөлшемді сызықтық мекенжайы ретінде қарастыруға болады. Оның оперативті жадыдан айырмашылығы, ол токқа тәуелді емес, үлкен сиымдылығы бар және негізгі жадыны кеңейту кезінде қолданады.

Логикалық жады. Ұяшықтың сызықтық жиыны түріндегі жадының аппаратты ұйымдастырылуы программистердің бағдарлама мен деректерді сақтауды ұйымдастыруымен сәйкес келмейді. Көпшілік бағдарламалар кеңістіктегі сызықтық адрестерді түзе отырып, бір-біріне тәуелсіз модуль жиынымен сипатталады. Бірақ модульдер әр аймақтағы жадыға әсер етеді және әртүрлі қолданылады.

Бұл көзқарасты қолдайтын жадыны басқару схемасы сегментация деп аталады. Сегмент – ішінде сызықтық мекенді қолдайтын арнайы тағайындалатын жады аймағы. Сегмент процедураға, массивке, стекке және скалярлы шамаға ие болады, бірақ аралас типтегі ақпарат жоқ.

Алғашында жады сегменті бағдарлама кодтары фрагменттері (мәтіндік редактор, тригонометриялық кітапхана) әр процес өзінің кеңістіктегі мекенжайына ақпараттың көшірмесін сақтау керек. Бұл бірнеше процестер жадыны көрсететін жүйеде ақпаратты сақтайды жадының жеке бөлігі сегмент деген атқа ие болады. Жады, осылайша, сызықтық болмайтын болды және екі өлшемдіге айналып кетеді. Мекенжай екі компоненттен тұрады; сегмент нөмірінен, сегмент ішінде араласудан тұрады.

Мекенжайды байланыстыру. Кеңістіктің логикалық және физикалық мекенжайы ұйымдастыру жағынан да, көлем жағынан да бір-біріне сәйкес келмейді. Кеңістіктің логикалық мекенжайының ең жоғарғы көлемі, өлшемі процесор разрядын анықтайды және қазіргі жүйеде кеңістіктің физикалық мекенжайының өлшемін көбейтеді. ЖБ және процесор негізгі жадыда сәйкесінше ағымдағы бағдарламаның орналасуы нақты физикалық мекендегі  бағдарлама кодына сілтемені көрсететін қабілеті болу керек. Мекенжайдың мұндай түрі мекенжай трансляциясы немесе мекенжайды байланыстыру деп аталады. Физикалық бағдарлама операторы көмегімен жасалған логикалық мекенжайды байланыстыру оператордың орындалуына дейін немесе оның орындалып жатқан кезінде іске асырылуы керек. Осылайша, жадыға деректермен инструкция байланысы кем жағдайларда орындалады:

1) Компиляция кезеңі. (Compile time) Жадыда компиляция кезінде процестің орналасатын орны анық белгілі болса, онда физикалық мекенжай сәйкесінше сол орында өндіріледі. Бағдарламаның бастапқы мекенжайын өзгерту үшін оның кодын қайтадан компилирлеу керек. Мысал ретінде MS-DOS-та *.com бағдарламасын алуға болады, ол компиляция стадиясында оны физикалық мекенжаймен байланыстырады.

2) Жүктеу кезеңі. (Load time). Егер компиляция стадиясында бағдарламалардың орналасуы туралы ақпарат болмаса, онда компилятор араласқан кодты өндіреді. Бұл жағдайда байланыстыру жүктелген уақытқа дейін орындалмайды. Егер Бастапқы мекенжай ауыстырылса, онда өзгертілген шама есебінде кодты қайта жүктеу керек.

3) Орындалу кезеңі. (Execution time). Егер процес жадының бір жағынан екіншісіне өту кезінде ауыстырылған болса, онда байланыстыру стадиясына дейін орындалмайды. Мұнда арнайы құрылғының бар болғаны дұрыс, мысалы ауыстырушы регистрдің болғаны дұрыс. Қазіргі ЖБ-нің көбінде «орындалу» кезеңінде мекенжай трансляциясы іске асыру арнайы аппарат механизмі үшін қолданылады.

Жадыны қолдануда тиімді бақылаумен қамтамасыздандыру үшін ЖБ келесі функцияларды орындау керек:

- процестің кеңістіктегі мекенжайының физикалық жадының белгілі бір аймағына әсері;

- бір-бірімен бәсекелес (конкурент) процестер арасында жадының бөлінуі;

- процестің кеңістіктегі мекенжайына қатынас жасауын бақылау;

- оперативті жадыда орын болмаған кезде ішкі жадыдан процестердің түсуі (бүтіндей немесе біртіндеп);

- бос қалған және бос емес жадыны есепке алу.

Беттік жады (Страничная память). Ең қарапайым және ең көп тараған беттік жадыны ұйымдастыру, (paging) кеңістіктің логикалық мекенжайы сияқты, физикалық берілетін блок жиынынан немесе өлшемді бірдей беттерден тұрады. Сонымен қатар, логикалық бет (page) пайда болады, ал физикалық жадыдағы сәйкес бірліктер бет кадрлары (страничные кадры) (page frames) деп аталады. Беттер (және бет кадрлары) бекітілген ұзындыққа ие болады. Әрбір кадрда бір бет деректер болады. Мұндай ұйымдастырылуларда сыртқы (фрагментация) үзінділеу болмайды және процестің соңғы бетінің бөлігі шектелген.

Жад қорының менеджері орын механизмі және жады көлемінің құрылымдық механизміне байланысты сипатталады.

Құрылымдық базалық элемент жады блогы болып табылады. Онда жадты басқару блогы – басқарушы элементтерге бөлінеді.

Толығымен жады қоры  жадтың бос блоктар ретімен түзілген динамикалық құрылыммен беріледі. Реттеу бір-бірімен өзара байланысқан жады блоктарының тізімімен жүргізіледі.

Барлық бос блоктар қорлық және функционалдық құраушылармен сипатталатын ретке біріктіріледі.

Қордың құрамында сандық сипаттамалар, функционалдықта  - жадтың қорын бақылау бойынша жұмыс істеу функциялары беріледі.

Жадтың блоктарымен манипуляциялау жұмыс істеу функцияларымен анықталады:

1) ТБТ функциясы (тізімнен блокта таңдау), берілген аргумент ретінде талап етілген жады көлемі болады. Бұл жерде  аргумент жады блогының орны болып табылады, ал дәлірек талап бойынша бөлінетін мәліметтердің блоктар орны.

2) Ажырату функциясы – тізімнен блокты алып тастайды.

3) Блокты қайтадан тізімге енгізу (БҚТЕ) функциясы – блокты тізімге қосу.

Жады қорын бірден-бір бақылаушы функция динамикалық қолдану жадының жүрісінде алынатын дефрегменттеу функциясы болып табылады.

Жадыны қолданудың екінші маңызды функциясы жадтағы бағдарламаларды реттеу болып табылады. Бұл функцияны жүктеу бағдарламасы іске асырады, ал жүктеу үрдісіне жадыдан таңдап алынған функцияны жүктелген бағдарламалық модульдің орнын анықтау үшін сұраныс беріледі. Алда жүктеуші жүктеу бағдарламасының салыстырмалы орнын түзету үшін – жад орнын қолданады.

 Жадыдағы бағдарламаларды түзету. Түзету тұрақтысы бойынша ауыспалы орынды модификациялайтын жүктеушінің жүйелік бағдарламасымен орындалады. Бұл жағдайда түзету тұрақтысы жады орны АПАМ болып табылады. Жүктеме позициясы салыстырмалы және абсолюттік модуль деп бөледі.

Аппаратты қолдану мүмкіндігі осы санашықпен белгіленетін оперативтік жад ұяшықтарына санашықтың жетуін ұйымдастыруды анықтайды.

Сонымен жадыны тарату осы үрдісте қатысатын ақпарат жадыда сақталуына әсер етеді.

Бос жадыны тарату барысында осы немесе басқа бағдарламалық модульдерден кейін бос жадылар жабылады. Бұл сұрақтар тікелей жоспарлау принциптерімен байланысты. Жүктеу сұрақтары екі түрде шешілуі мүмкін:

1) Абсолюттік жүктеу. Әрдайым бір мекенжайда орындалады. Бұл жағдайда бағдарламалық модуль жады аумағында бөлінген физикалық мекенжайда ғана тұрады.

2) Орналастырушы жүктеме. Бағдарламалық модуль әрбір жүктеме барысында тасымалданатын салыстырмалы мекенжайдан тұрады. Бұл жағдайда жадының бос блогында жүктелген модульді бөлу үшін жоспарлау фазасы болады.

Жүктеуші үшін жұмыс параметрі түзету тұрақтысы деп аталатын және жүктелетін модуль басталатын бастапқы мекенжай блогын анықтайтын бастапқы жүктеу мекенжайы болып табылады.   

Жергілікті идентификаторды инициализациялау үшін AllocateLocallyUniqueld функциясы қолданылады, ол келесі прототипке ие:

BOOL AllocateLocallyUniqueld(PLUID Luid//жергілікті идентификаторға нұсқаушы);

Сәтті аяқтау жағдайында бұл функция нөлдік емес мәнді, сәтсіз жағдайда FALSE мәнін қайтарады. Сәтсіз аяқталған жағдайда қателіктік кодын GetLastError функциясын шақыру арқылы алуға болады. Luid типті құрылымына функцияның жалғыз параметрі көрсетілуі керек.

 

Дәріс 14. Телеқатынас құрудың бағдарламалық қамтамасы. Хабарларды тіркеу, буферлеу

 

Дәріс мақсаты: тораптық интерфейстердің конфигурация үрдісін түсіндіру.

 

Торапты басқару. Торапты басқарудың ең басты мәселесі пакеттерді тиісті орынға дұрыс жеткендігін қамтамасыз ету.

Осы  тапсырманың шешімін анықтайтын басты фактор болып:

1) Кабельді байланысқан жүйенің бүтіндігі, олар арқылы электрлі сигналдардың берілуі жүзеге асырылады.

2) Артық трафик. Ол өте үлкен жүктеме болғанда шлюздегі пакеттердің жоғалуына әкеледі.

3) Хаттама  ерекшелігі, яғни хаттама спецификасы торапты қайта жүктеу.

Жаңа пайдаланушылардың қосылуы.

Бұл кезеңде 3 компонент қатысады: жүйе, пайдаланушының өзі және администратор.

Жүйе 3 кезеңді орындайды:

          - файлды түзету;

          - парольды орнату;

          - жаңа пайдаланушыға бастапқы каталогты анықтау.

Пайдаланушы:

          - жіберілетін файлды бастапқы каталогқа көшіру;

          - электронды поштаның мекенін орнату.

Администратор:

          - etc/group файлына жаңа пайдаланушыны қосу;

          - тіркелу ақпаратын енгізу;

          - пайдаланушыны ұйымды база пайдаланушыларына қосу;

          - жергілікті анықтамаға байланыс ақпаратын жазу;

          - дискілік квантты орнату;

          - бюджетті құрудың дұрыстығын тексеру.

Файл etc/passwrd жүйеге белгілі, жолдардан құратын әр пайдаланушыға бөлінетін пайдаланушылар тізімін жазады, ал бұл тізімнің әр жолы 7 өрістен тұрады:

- тіркелу аты;

- шифрланған пароль;

- UID  мәні – пайдаланушы идентификаторы;

- GID – топ идентификаторы;

- GECOS өрісі – пайдаланушының тіркелген параметрлері;

- бастапқы каталог;

          - тіркеуші shell.

Атау аттарды көрсету стандартты келісіммен анықталады. Пароль шифрланған түрде беріледі, жасырын механизм парольдері бойынша және файлдарда сақталады.

UID, GID бүтін диапазон сан 0-32767 түрінде анықталады. Сонымен қатар әр пайдаланушы 8-16 топтарға мүше бола алады. UID тораптың файлды жүйемен (NFS) бақыланады және тораптың шекараларында қолайлы.

Бастапқы каталог иесінің атымен аталып орнатылады.

Shell негізінде командалық интерпритатордың версиясы анықталады.  Шығыс паролі рұқсаттыланған пайдаланушымен мына команда: passwrd – пайдаланушы аты арқылы орнатылады. Қатынауға рұқсат коды chmod командасы арқылы беріледі.  Chown командасы көмегімен иелері бекітіледі, ал chgrp – командасы бойынша пайдаланушыны топқа енгізу. Әрбір қайтадан құрылған каталогтар бос кезінде root пайдаланушысына меншікті болады, яғни жүктеушіге, себебі келесіде иелерінің ауысуы болуы керек. Электронды пошта үшін машинаны орнату кезінде файлдарда ауқымды псевдонимдер etc/aliases sendmail командасы арқылы жазылып түзеледі.

Егер қажет болса, онда топтарды түзету мысалы басқаша енгізілген мәліметтер бойынша түзетулер жүргізіледі:

Etc/group:staff

Ядроның конфигурациясы келесі жағдайда  жүргізіледі:

- жаңа машинаны іске қосқанда;

- алғашқы конфигурацияға енгізілген артық компоненттер  алынып тасталған уақытта;

- жаңа құрылғыларды қосу немесе қолда бар жабдықтардың модернизациясы кезінде;

- жөндеу кестесінің реконфигурациясы  кезінде.

Негізінен конфигурация тапсырмасы 9 кезеңнен тұрады:

- жабдық ревизиясы – апараттық құрылғылардың құрамын анықтау;

- ядроны конфигурациялау, файлды түзету және құру;

- ядроның компиляциялық каталогын құру;

- түбір аймақты және свопинг аймағын тағайындау;

- ядроны тұрғызудың бағдарламалар байланысын шығару;

- ядроның түзілуі;

- ескі ядроныархивтеу және жаңа ядроны инсталляциялау;

- тестілеу және жаңа ядроның өңделуі;

- жаңа ядроны құжаттау.

Тораптық интерфейстердің конфигурациялануы.

Тораптық интерфейсті қосу немесе өшіру үшін қолданылады, IP- мекенінің берілуі, кең таралымды мекенді анықтау және көмекші опциялар қатары.

Жиі қолданылатын опциялар:

- netmask – берілген интерфейс бойынша тораптық қалқа, төрт байтты оналтылық санмен беріледі;

- broadcast – интерфейстің кең таралымды IP – мекені;

- metric – берілген интерфейспен байланысқан өтулер санының санашығы.

route бағытының конфигурациялануы. route командасының тағайындалуы: ядроны бағыттау кестесіндегі элементтерді анықтау. Пакеттің түсуі. Басқа машиналар үшін IP- мекені бойынша тағайындау пунктіне келген пакет ядро бағыттауының кестелер бағытымен жалыстырылады. Тағайындалу пункт торабының нөмірлерімен қандайда бір пакет бағытының торап нөмірімен сәйкес келген кезде пакет келесі берілген бағытпен байланысқан ретқақпаның IP – мекені бойынша беріледі.

Бағыттау домендері

routed

Жергілікті торапқа өтулер санымен анықталатын ішкі бағыттау RIP хаттама базасына негізделген. Әрбір 30 секунд өткен сайын бағыттау серверлері торапты оларға белгілі бағыттар жөнінде хабар берген кездегі кеңтарамды режімде жұмыс жасайды. Клиенттер немесе алушылар өздерінің деректер қорына ядро кестесінің жаңа бағыттарын енгізеді.

Берілген доменнің дамыған түрі gated домені болып табылады. – бағыттаудың базалық командасының санашығы. Ол бір уақытта бірнеше хаттамаларды қолдана отырып жұмыс жасай алады:

          1) RIP  және OSPF – ішкі бағыттау хаттамалары

          2) EGP/BGP – сыртқы бағыттау хаттамалары

Usenet телеконференциясы – бұл хаттамалардан, файлдар пішімінен тұратын және интернет құралдары арқылы мақалаларды тарату үшін қолданылады. Негізгі принципі – мақаланы барлық пайдаланушыларға пайдалану мүмкіндігі.

Мақалаларды оқу бағдарламалары материалды тікелей көрсетуден тізбек құруға болатын пайдаланушылардың  сұратуларына базаланады.

Сұратуларға қызмет көрсету келесі сұлбалардың біреуі арқылы орындалуы мүмкін:

1) Жүргізушісіз – кез келген қалаушыға мақаланы жариялау. Негізгі қасиеті – қауіпсіз ақпараттардың көп болуы.

2) Техникалық бейімділігі – барлық қалаушыларға жариялануы мүмкін, бірақ белгіленген тақырып бойынша. Кемшілігі – қажетсіз ақпараттардың болуы.

          3) Әлуметтік. Кемшілігі – қажетсіз ақпараттардың болуы.

Маңызды конференциялар жиі қойылатын сұрақтар – Fregnently Asked Questions файлымен бірлесе – жүреді. Бұл файлда әртүрлі сұрақтарға жауаптар жазылады.

 

Дәріс 15. Қашықтан өңдеу. Электрондық пошта. Жүйелік бағдарламалауды инициализациялау, генерациялау және пішінүйлесімдіру. Ақпаратты тораптық қорғау бағдарламалық құралдары

 

Дәріс мақсаты: ЖБ-дағы инициализациялау мен генерациялау процестерін қарастыру.

 

Электронды поштаны басқару.

Sendmail  бағдарламасы.

Бұл бағдарлама тораптық қолданбаларда электронды поштаны ұйымдастырудың негізі болып табылады.

Келесі функциялар орындалады:

- пайдаланушыдан бастап хабарларды басқару;

- пайдаланушының мекендерін анықтау;

- транспорттық және жеткізетін агенттерді таңдау;

- жеткізетін агенттің сұрауы бойынша мекендерді өзгерту;

- өзгертілген хабарды жеткізетін агентке жіберу.

Жоғарыда көрсетілгеннен басқа бұл бағдарлама қателер немесе жеткізілмеген хабарлар жайында хабар генерациялайды. Келесі негізгі режімдер болуы мүмкін:

1) bd - домен режімі.

2) bi - бүркемеленген псевдонимдер инициализациясы.

3) bf - кезекті баспаға шығару.

4) bt - мекендерді тексеру режімі.

5) bs - серверді стандартты енгізу режімі.

Bd режімінде sendmail командасы 25 нөмерлі торапты портты тыңдайды және жұмыстың пайда болуын күтеді.

Команда келесі түрде көрсетіледі:

/usr/sbin/sendmail-bd-g1h

Бұл жерде жұмыс bd домені  режімінде 1 сағат кванттық уақыт аралығымен (тексеру интервалы 1 сағат). Егер хабар кезекке қойылса, команда берілген интервал арасында хабарды жіберуге мүмкіндік жасайды, бұл жағдайда үрдіс құрылады – ағын  sendmail.pid атты.

Әр ағын  құрылған кезде ол ағынды жою қарастырылуы қажет, мысалы kill head – 1 sendmail.pid командасы арқылы болады.

Sendmail – V8 версиясы. Бұл версияның негізгі командаларына жіберілетін нұктелері user.bd дерекқор базасында анықталады. Мұнда қолданушылар жәйлі орталық архив орналасады. Осы дерекқорда құрылатын негізгі өрістер:

1) mailname -  машина аты.

2) maildrop - қолданушы поштасының жеткізетін мекені.

3) mailsender - қолданушы конвертінің аты.

4) fullname – қолданушының толық аты.

5) office - офис мекені және телефоны.

6) home - үй мекені және телефоны.

7) project/plan - хабармен байланысты жоба.

Бірнеше үлкен емес есептердің орындалу түрі ол командалық жол интерфейсін қолдану. Сіздер жұмыс жасайтын бағдарламаның аты shell командалық интерпретаторы.

Қазіргі Unix жүйесінде үш командалық интерпретатор қолданылады: Bourne shell (/bin/sh), c shell (/bin/ csh), korn shell (/bin/ksh).

Командалық интерпретатор ЖБ-де маңызды орын алады:

1) Ең бірінші бағдарлама shell, ол пайдаланушы жүйеге кірген уақытында ол бағдарламаның жұмысы басталады, shell келесі жұмысты атқарады:

- терминалды қосқан уақыттан getty (1 м) процесі активтеледі, ол терминалды қатынаудың сервері болып саналады және ол login (1) бағдарламасын іске қосады. Ал ол бағдарлама пайдаланушының аты мен паролін сұрайды;

- егер пайдаланушы жүйеде тіркелген жағдайда және паролі дұрыс болса, онда login бағдарламасы пайдаланушының /etc/ passwd файлының соңғы өрісінде көрсетілген  бағдарламасын іске қосады;

- shell сәйкес командалық файлды инициациялайды және пайдаланушының терминалына шақыру береді. Сол кезден пайдаланушыға командаларды енгізуге болады;

- shell пайдаланушы негізген команданы оқиды, енгізген жолға анализ өткізеді және пайдаланушының жазғаны бойынша әрекет орындайды немесе бағдарлама және функция табылмаған жағдайда қате жайында хабарлайды;

- интерпретатормен жұмыс аяқталған соң пайдаланушы exit командасын енгізеді және жүйеден шығады.

2) Командалық интерпретатор бағдарламалау үшін ыңғайлы түрі болып табылады.

3) Пайдаланушы жүйеге кірген уақытында оның инициализацияланған скрипті іске қосады, ол бірнеше функцияларды орындайды: бағдарламаларды табу үшін жолды белгілейді, терминалды инициализациялайды, пошталық жәшіктің орналасуын анықтайды. Инициализациялайтын скрипт пайдаланушының үй каталогында орналасады. Әртүрлі командалық интерпретаторда әртүрлі инициализациялайтын скриптілер қолданылады.

Profile және login скрипттары жүйеге бірінші кірген уақытта орындалады. Cshrs, kshrs және bashrc скриптілері интерпретаторының әрбір іске қосқан уақытында орындалады.

4) Негізгі ЖБ инициализациясы shell скриптінің орындалғанында болады.

 

2 кесте

Командалық интерпретатор

Инициализациялайтын скриптілер

Bourne shell

C shell

Korn shell

Profile

Login және cshrc

Profile және kshrc

Bourne-again shell(bash)

Profile және bashrc

 

Әрбір стандартты командалық интерпретатордың өзінің бағдарламалау тілі бар, олар қиын есептерді орындау үшін командалық файл немесе скриптілерді құруға мүмкіндік береді.

Shell интерпретаторы тізбекті командаларды скриптіден оқып және оларды орындайды. Бұл жағдайда скриптіден үлкен өнімділікті күтуге болмайды, бірақ ол тиімді болып саналады, өйткені бәрі көрнекті және оңай. Егер бағдарламаның өнімділігі ең маңызды болатын болса, онда бағдарламалау үшін тиімді болып Си тілі алынады.

Bourne shell интерпретаторында комментариялар ‘#’символынан басталады, ол бағдарламаның әрі қарай орындалуын жеңілдетеді. Комментарийлер жолдың бәрін алмауы мүмкін, ол командадан кейін жазылуы мүмкін.

Жүйеде әртүрлі интерпретатордың скриптілері бар, сондықтан интерпритациялайтын команданың атын көбінесе бірінші жолда көрсетеді, мысалы: # ! binish.

Бұл жағдайда скрипті Bourne shell мәтіні арқылы интерпретацияланады. Командалық жолда скриптінің іске қосқан жағдайда (ол үшін орындауға құқығы болу қажет). Жаңа командалық интерпретатор іске қосылады, командаларды енгізу бұл кезде скрипті файлынан орындалады.

Жағдайларды бақылау үшін жүйеде syslog бағдарламасы қолданылады, ол екі негізгі функцияны орындайды - файлды тіркеу және әкімгерге басқаруды беру.

Syslog-тің бөліктері болып табылатын:

1) syslogd - тіркеу домені;

2) кітапханалық бағдарламалар – openlog, syslog, closelog;

Осы бағдарламалар арқылы syslog жүйесінің файлдарына деректер жіберіледі.

3) logger - тіркеу элементтердің жазбасы үшін пайдаланушы деңгейінің командасы.

Селектор – бұл бағдарламалар немесе құрылғылар, олар хабарлардың деңгейін анықтау үшін тіркеу хабарларын жібереді.

Жабдықтар деңгейі. Бұл элементтер – алдын ала белгіленген тізім бойынша таңдалады.

 

          3 кесте

Құрылғылар

Бағдарламалар

kern

Ядро бағдарламасы

Mail

Электронды пошта жүйесі

Daimon

Жүйелік домендер

Auth

Қорғау командалары

News

Usenet телеконференция жүйесі

Cron

Cron домені

Mark

Уақытша нұсқаулар

Syslog

Syslogd ішкі хабарламасы

ftp

ftp және ftpd бағдарламалары

User

Басқа бағдарламалар

*

Құрылғыларды қолдану

 

          Компьютерлердің және парольдердің қорғауын тексеретін жүйе.

Unix жүйесінің түрлі элементтері мониторингына арналған бағдарламалар компоненті. Оларға жататын:

- қатынас құқығы және файл, каталог және құрылғылар атрибуттары;

- /etc/passwd  және /etc/group  файлдарының құрамы;

- жүйелік файлдар құрамы;

- қолданушылардың бастапқы каталогына жазу мүмкіндігі.

Бұл бағдарламалар күнделікті бақылайтын элементтер жайлы ақпарат береді және қорғау жағынан өзгерістер болса ол жайлы хабарлайды.

1) Crack бағдарламасы – дұрыс таңдалмаған парольдерді анықтайды.

2) Tcpd  бағдарламасы TCP  қызметтерімен байланысты тіркейді.

3) Tripwire – жүйелік файлдардың өзгеруін бақылайды.

4) Kerberos жүйесі – DES алгоритмін қолдануымен аутентификацияны орындайды. Бұл жүйенің жұмыс өнімі билет болып табылады. Бұл билеттер торапта қатынау құқығын анықтау үшін жіберіледі. Бұл үрдісті басқару үшін торапта бір өзек бөлінуі қажет. Билеттер және парольдер бұл машинада автоматты шифрленген түрде беріледі.

Әр билет үш бөліктен түрады:

          - негізгі аты, ол пайдаланушыны білдіреді;

          - экземпляр аты;

          - аймақ аты – сервер қызмет көрсетіп жатқан топтың атын анықтайды.

          Пакеттерді фильтірлеу.

Шлюздік машиналарының трафигін шектеуді брондмауэрлер орындайды. Пакеттер клиентті және серверлі болып бөлінеді, соған байланысты фильтрлеу орындалады. Фильтрде бақыланатын ақпарат мекендік немесе құрамдық болуы мүмкін.

 

Әдебиеттер тізімі

 

1.    Джеффри Рихтер. Windows. Создание эффективных Win32- приложений с учетом специфики 64-разрядной версии Windows. - СПб., М., Харьков, Минск: “Русская редакция”, “Питер”, 2001 (Серия: для профессионалов).

2.    Ал Вильямс. Системное программирование в Windows 2000. – СПб.: Питер, 2001.

3.    Джонсон М. Харт. Системное программирование в среде Win32. – М.: Издательский дом “Вильямс”, 2001.

4.    Румянцев П.В. Азбука программирования в Win32 API. – М.: Горячая линия – телеком, 2001.

5.    Румянцев П.В. Работа с файлами в Win32. – М.: Горячая линия – телеком, 2001.

6.    Ганеев Р.М. Проектирование интерфейса пользователя средствами Win32 API. – М.: Горячая линия – телеком, 2001.

7.    Хелен Кастер. Основы Windows NT и NTFS: Пер. с англ. - М.: Изд. Отдел Русская редакция, 1996.

8.    Ресурсы Windows NT: Пер с англ. -СПб.: BHV - Санкт-Петербург, 1996.

9. Джон Д. Рули и др. Сети Windows NT 4.0. Пер. с англ. - Киев: Издательская группа BHV, 1997.

 

Мазмұны

 

Дәріс 1. Кіріспе. Жүйелік бағдарламалаудың даму бағыттары. Жүйелік бағдарламалаудың функциялары және міндеттері. Нақты уақыт режімі

3

Дәріс 2. Жүйелік бағдарламалаудың архитектурасы

6

Дәріс 3. Жүйелік бағдарламалаудың үйлесімділігі. Үрдісті басқару және ұйымдастыру. Үрдіс және ядро ұғымы. Үрдістің виртуалдық мекенжайлық кеңістігін сегментациялау. Үрдіс мәнмәтінінің құрылымы

9

Дәріс 4. ЖБ-де процестің берілуі. Сигналдар өңдеу жабдықтары. Үрдістерді басқаратын уақиғалық тетіктер. Үрдістер әрекеттестігі. Үзу жүйелері

12

Дәріс 5. Процестерде болатын операциялар және олармен байланысты түсініктер. Үрдістің біресепті және көпесепті орындалуы. Есепті көпсанашықты шешуді басқару тәсілдері

16

Дәріс 6. Енгізу-шығару жүйесін басқару. Синхронды және асинхронды енгізу-шығару

19

Дәріс 7. Енгізу-шығаруды диспетчерлеу. Еркін және тізбекті қатынас құру тәсілдері

22

Дәріс 8. Енгізу-шығару ағындары. Енгізу-шығаруды қорғау тәсілдері

25

Дәріс 9. Файлдық жүйенің негізгі функциялары мен құрамдары

28

Дәріс 10. Файлдарды ұйымдастыру тәсілдері

31

Дәріс 11. Файлдық жүйенің менеджері. Файлдарды қорғау мен сақтау. Жадыны бірігіп қолдану     

34

Дәріс 12. Жадыны қорғау. Қатынас құру функциялары. Виртуалды жадыны ұйымдастыру. Беттерді аударыстыру стратегиялары

37

Дәріс 13. Жады қорының менеджері. Жадыны бөлу стратегиялары. Қолданбалық интерфейстер және қабықшалар

41

Дәріс 14. Телеқатынас құрудың бағдарламалық қамтамасы. Хабарларды тіркеу, буферлеу

44

Дәріс 15. Қашықтан өңдеу. Электрондық пошта. Жүйелік бағдарламалауды инициализациялау, генерациялау және пішінүйлесімдіру. Ақпаратты тораптық қорғау бағдарламалық құралдары

47

Әдебиеттер тізімі

51

 

2012 ж. баспа жоспары, реті 362