Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


сте сақтау құрылғыларының иерархиясы.




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

Келесі сатыда барынша тез жұмыс істейтін (қатынасу уақыты шамамен 10-20 наносекундқа тең) және кішірек көлемдегі (ондаған мегабайттн бірнеше гигабайтқа дейін) динамикалық DRAM жадылары негізіндегі оперативті жады орналасады.

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

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

1 байтты сақтау құны

Сыртқы жады

Оперативті жады

(DRAM негізінде)

Жылдам жұмыс істейтін жады (SRAM негізінде)

Процессор регистерлері

Көлем

Қатынасу уақыты

Ондаған гигабайт

Ондаған мегабайт

Ондаған-жүздеген килобайт

Ондаған байт

-2-3 нс

-5-8 нс

-10-20 нс

Ондаған мс

Сурет 10. Есте сақтау құрылғыларының иерархиясы

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

ТАҚЫРЫП 9. ТАПСЫРМАНЫ ҚҰРУ ЖӘНЕ

ОТЛАДКА ҚҰРАЛЫ

Мақсаты: Тапсырманы құру және отладка құралының тәсілдері мен ерекшеліктерін қарастыру

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

Дәріс жоспары (1 сағат)

  1. Тапсырмаларды жүктеу, трансляция, компоновка.
  2. Бағдарламалау тілдері мен орталары.
  3. Екілік, объектілік және орындалу файлдарының пішімдері.
  4. ELF стандарты және a.out және COFF форматтары.
  5. Жүктеушіні қолдану. Бапталатын жүктеуші алгоритмі.

Паскаль тілінде жазылған бағдарлама компьютерге түсініксіз болғандықтан, оны машина тіліне аудару керек болады. Бағдарламалау тілінен машина кодтарына аудару үрдісі трансляция (translation – аудару) деп аталады, ал аудару арнайы трансляторлар деп аталатын бағдарламалар арқылы орындалады.Трансляторлар екі түрі:

  1. интерпретаторлар,
  2. компиляторлар

Интерпретатор деп берілген бағдарламаның әр операторын өңдеп, орындайтын трансляторды атайды. Интерпретатормен жұмыс істеу кезінде процессор оның прогрпммалау тілдерінен аударған кезекті әр операторын бірден орындайды. Компилятор алдымен бағдарламаның синтаксисін тексеріп,бағдарламада жіберілген синтаксистік қателерді хабарлайды.Олар жөнделген соң жүктеуші деп аталатын бағдарламасын іске қосады, ол алдымен бағдарламаны машиналық тілге жуық обьектілік бағдарлама деп аталатын аралық бағдарламаға түрлендіріп шығады. Одан әрі байланыстар редакторы деп аталатын бағдарлама іске қосылып,ол обьектілік бағдарламаға бағдарламалау тілі ішінде арнайы дайындалған кітапханалық процедуралардан қажетті стандартты процедуралар мен функцияларды қосады. Осыдан кейін бағдарлама дайын болады да,ол бірден орындалады.Үлкен ЭЕМ дер компилятормен жабдықталған, ІВМ РС ге үйлесімді дербес компьютердің екеуімен де жұмыс істеу мүмкіндіктері бар.

Компилятор (compiler; compiling programm — компиляциялаушы бағдарлама) —

1) жоғарғы деңгейлі бағдарламалау тілінде жазылған алғашқы бағдарламаны машиналық тілге (алгоритмдік тілдер, түсіндіргіш, аударғыш) түрлендіруді орындайтын компьютердің жалпы математикалық жасақтамасының құрамды бөлігі. Компилятор екі бөліктен түрады: бірінші бөлігі — бағдарламалаушының бағдарламаны жазуы үшін пайдаланылатын алғашқы тіл, екіншісі — Объектілік бағдарламаны машиналық тілде жазатын аударғыш. Қандай да бір жоғары деңгейлі тіл үшін к. Жоқ болған жағдайда пайдаланылатын тілдің командаларын нақты компьютер үшін аударатын және олардың орындалуын жасақтайтын түсіңдіргіш даярланады;

2) жоғарғы деңгейлі тілде „жазылған бағдарламаны машиналық кодқа түрлендіруші аударғыш. Бұл сөз "compile" етістігінен құрылған, ”құрастыру” деген мағына береді. Бұл етістіктің компьютерлік мағынасы «машиналық кодқа аудару, ал жалпы тілдік мағынасы — "материал жинау, есеп-қисап, анықтама даярлау";

3) барлық бағдарламаларды олардың орындалуынсыз машиналық командаға аударатын аударғыш. Компилятордың жұмыс істеуінің нөтижесінде орындалуға дайын емес жеке модульдер даярланады. Бағдарламаның орындалуы үшін бірнеше объектілік модулдер катынасатын жүктемелік (орындалатын) модуль қүру қажет;

4) бағдарламалық модулдерді құрастыруды орындайтын бағдарлама-аударғыш. Компилятордың түсіндіргіштен айырмашылығы — жоғарғы деңгейлі бағдарламалау тіліндегі бағдарламаны машиналық тілдегі бағдарламаға немесе машиналық тілге жуық бағдарламаға түрлендіреді, бірақ оның орындалуына қатыспайды. Компилятордың кірісіне түскен алғашқы модуль компиляциядан кейін объектілік модулге түрленеді. Компилятор бағдарламалау жүйесінің ажырамас бөлігі.

Компилятордың түрлері:

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

Сурет 1. Транслятор

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

Бағдарламалау тілі (орыс. язык программирования; гр. programme - нұскау, хабарлау) — хабарларды есептеуіш машиналардың көмегімен сұрыптайтын жасанды тілдер тобы. Бағдарламалық тілдерде символдарды бірізділікпен өңдеуге қажет мәтіндер алдың ала жазылып кояды, мәтіндерді бұйрықты тапсырма деп қарауға болады. Семантикалық шарттары бойынша мәтіндер мынадай деңгейлерде сұрыпталады: дербес мағынасы жоқ әліпби таңбалары; шағын тіл бірліктерінің екі жақты атаулары; мағынасы бұйрык түрінде емес атаулардың қосындысың білдіретін сөйлемшелер; белгілі әрекетті білдіретін (бұйрық мағынасында) синтаксистік құрылымдардан тұратын операторлар тағы басқа.

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

алгоритмдік әр түрлі типтерді алдын ала жазуға болатын универсалдык бағдарламалық тілдер және неғұрлым шағын мақсатты жүмыстарға (модель жасау, мәтінді автомат өңдеу, белгілі бір процесті басқару) арналған мамандандырылған бағдарламалық тілдер. Бұлардын ішінде ЭЕМ-мен пайдаланушының қарым-қатынасын дамытуда диалогтік бағдарламалық тілдер манызды орын алады. Бағдарламалық тілдердің дамуы олардың деңгейін көтеру, адам мен машинаның қарым-қатынас үрдісін женілдету, бағдарламалардың тиімділігін арттыру арқылы іске асырылып отырады. 20 ғасыр 70 жылдары бағдарламалық тілдердің жалпы саны 1 мыңға жақындады. Ен жиі қолданылатын, деңгейі жоғары тілдік бағдарламалар: фортран, кобол, ПЛ/1, алгол, бейсик, паскаль, мектепте кеңтараған — лого тілі.

 

БАҒДАРЛАМАЛАУ ТІЛІ, бағдарламалау тілі — мәліметті (деректі, ақпаратты) және олардың алгоритмін (бағдарламасын) ЭЕМ-де өңдеуге арналған формальды (жасанды) тіл. Бағдармалау тілінің негізін алгоритмдік тіл құрайды. Алғашқы Бағдармалау тілі ішкі машиналық тіл болып есептеледі. Қазіргі Бағдармалау тілі машиналық-бағдарланған, процедуралық-бағдарланған және проблемалық-бағдарланған тілдер болып ажыратылады. Машиналық-бағдарланған Бағдармалау тілі өзінің мәліметте-рінің түрі мен алгоритмінің құрылуы бойынша белгілі бір ЭЕМ-нің (не ЭЕМ класының) құрылымын бейнелейді. Мұның үстіне оның бағдарламалау үрдісін жеңілдету және

автоматтандыру сияқты ерекшеліктері бар. Ол машиналық тілге жақын тіл. Машиналық-бағдарланған бағдармалау тіліне автокод, алмо, эпсилон, т.б. тілдер жатады.

ELF - standard

Оффшорлық кәсiпорындар үшiн үйреншiктi саудалық есепке алу бағдарламасы.

Сурет 2. ELF – standardтының терезесі

a.out және COFF форматтары

Coff— мұрагер қалып.(Common Object File Format) COFF қалып айтарлықтай болады қалыптың жетiлдiрiлген және аяқтап iстелген болжамын a.out. Ол UNIX-тiң әлемiнде жайылған, сол сияқты Windows NT мысалы, өңдеулер (коммерциялық емес) еркiн орталармен, DJGPP.Қосымшалардың өңдеуi үшiн қолданылады және С және С/Н пен.

Егер компиляторлар шақыру параметрi барса f - болса онда СOFFтың қалыбында объектiнiң файлы шығуын аламыз.

ТАҚЫРЫП 10. LINUX ОЖ ДРАЙВЕРЛЕРДІ ЖОБАЛАУ

ЖӘНЕ ІСКЕ АСЫРУ

Мақсаты: LINUX ОЖ драйверлерді жобалау және іске асыруын талдау

Кілттік сөздер: командалық жол, ядро, бастапқы код, графикалық кеңейтілу, терезе, бума, файлдық жүйе, параметр, журнал

Дәріс жоспары (1 сағат)

  1. Linux ОЖ модулдерді (компиляция, орнату, жою) әкімшілік-тендіру.
  2. Linux ОЖ драйверінде file_operations құрылымы, драйвермен орындалатын негізгі функциялар.
  3. Драйверлерді құрастыру құралдары. Linux ОЖ арнайы файлдары, оларды құру және қолдану.
  4. Жүргізуші және минорлық сандар.

Linux жедел даму үстіндегі әрі сенімді о.ж. Linux-тің негізін Линус Тровалдьс (Linus Trovalds) 1991 жылы Unix-ке сүйене отырып,оның ашық кодты версиясы ретінде қалыптастырды. Линус Тровалдьс Хельсинк университетінде оқып жүрген кезіде Unix-тің жаңа версиясын жасауда көптеген бағдарламалаушытердің қолдауын табады.Бұл қолдаудың нәтижесінде Linux атты жаңа о.ж пайда болады.

Linux операциялық жүйесінің негізгі түсініктері

  1. Free Software – еркін бағдарламалық қамтама (ЕБҚ), оны еркін қолданып және таратуға рұқсат ететін еркін лицензиялардың біреуі аясында таратылады.
  2. Open Source – бастапқы кодтары ашық бағдарламалық қамтама не ашық бағдарламалық қамтама.
  3. GNU/Linux – Linux ядросына негізделген операциялық жүйесінің атауы. Көбінесе осы сөз тіркесінің бірінші бөлігі айтылмайды, тек Linux (Линукс) деп айтылады. GNU/Linux құрамасы – ядро, командалық өндеуіш және бағдарламалық қамтаманың жинағы.
  4. Дистрибутив – бағдарламалық қамтаманың (операциялық жүйелер де) таратылу түрі, құрамында осы операциялық жүйенің орнатқышы мен минималды бағдарламалар жинағы болады. Linux дистрибутивтерінің мысалдары: Ubuntu, Debian, Slackware, openSUSE, Archlinux, т.б.
  5. Консоль (командалық жол) – негізі, ол – операциялық жүйенің мәтіндік көрінісі, түрі. Мәтіндік командаларды енгізу-шығару құралы. GNU/Linux жүйелерінде командалық жол деп көбінесе Bash командалық өңдеуіші және оның графикалық кеңейтуі (Xterm, Gnome-terminal) аталады.
  6. Root (суперпайдаланушы) – GNU/Linux жүйелерінде шектеусіз әкімшілік құқығы бар пайдаланушысы.
  7. GUI (ағылш. «graphical user interface») – пайдаланушының графикалық интерфейсі. Яғни, терезелер, панельдер, батырмалар мен т.с.с.
  8. Window Manager – терезелердің орналасуын мен олардың әрекеттерін басқарады. Мысалы, Compiz – графиалық эффектілерді ұсынады.
  9. Desktop Environment – жұмыс үстелінің ортасы, негізгі үші түрі бар: KDE, GNOME, XFCE. Құрамында бағдарламалар жинағы болуы мүмкін. Мысалы, мәтіндік редактор ретінде Gnome ішінде gedit, ал KDE ішінде Kwrite болып келеді.
  10. Скрипт – командалық өңдеуіш орындайтын командалар жазылған файл. Мысалы, командалар тізімін қайта-қайта тере бермеу үшін оны скриптке жинауға болады
  11. Десте – бағдарламалық қамтама файлы, құрамында бағдарламаның өзі, қосымша мәліметтер болады (лицензия мәтіні, мысалға). Десте атауы әдетте стандартты болады, бағдарлама аты, нұсқасы, архитектурасы көрсетіледі. Сонымен қатар, Linux әлемінде қолданатын дестелер түріне сәйкес дистрибутивтер екі үлкен топқа бөлінеді. Ең көп таралғандары deb және rpm дестелер түрлері.
  12. Дестелер менеджері – БҚ дестелерін басқаруға арналған бағдарлама. Бағдарлама дестелерін іздеу, орнату, өшіру, жаңарту мен т.с.с. әрекеттерді орындайды Мысалы: dpkg, rpm. Archlinux үшін дестелер менеджері – pacman.
  13. Репозиторий – БҚ дестелері орналасатын жер. Ол интернеттегі серверде, жергілікті компьютерде, не компакт-дисктерде орналасуы мүмкін. Репозиторийден дестелер менеджері дестелер туралы ақпаратты оқып, оларды жүктеп ала алады.
  14. Бастапқы код – бағдарламаның «шикі» түрі, яғни, бағдарламалау тілінде жазылған код файлдары мен қосымша құрама (суреттер, құжаттама, т.с.с.). Бағдарлама осы түрінде пайдасыз, қолдану үшін оны «жинау» керек, бұл үрдіс компиляция деп аталады.

Linux-тың файлдық жүйесі

Linux- та түбірлік бума қысқа және нұсқа да — «/» деп белгіленеді. Барлық қалған бумалардың толық аттары (жолдары) «/» белгісі мен оған оң жағынан қосылған тізбектей бірінін ішіне бірі салынған бумалар аттарынан тұрады. Жолдағы бумалар да «/» («слэш») таңбасымен ажыратылады. Мысалы, /home жазбасы түбірлік бумада орналасқан («/») «home» бумасын анықтайды, ал /home/user — «user» бумасы «home» бумасында орналасқанын көрсетеді.

Тіркеу — бұл файлдық жүйенің бір бумасына басқа бөлек бүтін файлдық жүйені қосу әрекеті. Тіркеу үшін бос бума керек – ол тіркелу нүктесі деп аталады. Тіркелу нүктесі ролін кез-келген бос бума атқара алады – ол жағынан Linux-та ешқандай шектеулер жоқ. Mount командасының көмегімен біз буманың ішінде осындай жерде орналасқан файлдық жүйені көрсету керек екенін білеміз. Осы әрекеттен кейін бума ішінде (тіркелу нүктесінде) сәйкес тіркелген файлдық жүйесінің файлдары мен бумалары көрсетіле бастайды.

Linux үшін ең маңызды түбірлік файлдық жүйе (root filesystem) болып келеді. Басқа құрылғылардағы барлық файлдық жүйелер оған қосылады (тіркеледі). Назар аударыңыз, түбірлік буманың өзі де тіркеледі, бірақ басқа файлдық жүйеге емес, «Linux-тың өзіне», тіркелу нүктесінің ролін «/» атқарады (түбірлік бума). Сондықтан жүйе қосылған кезде түбірлік бума ең бірінші болып тіркеледі, ал жүйе сөндірілген кезде соңғы болып тіркеуден босатылады.

Linux-жүйесінің түбірлік бумасында әдетте аттары стандартты ішкі бумалар орналасады. Одан әрі, аттарына қоса, олардың құрамасының түрлері де стандартпен шектеледі. Бұл стандарт балық Linux-жүйелерінде сақталады, сол үшін сіз әр Linux-та /etc, /home, /usr/bin т.с.с. тауып, олардағы құрамасының түрін көбінесе болжай аласыз. Файлдардың стандартты орналасуы адамғы және бағдарламаға жүйенің белгілі бір бөлігін қайдан іздеу керек екенін анықтауды мүмкін қылады. Пайдаланушы үшін осындай жағдай кез-келген Linux жүйесінде керек нәрсені таба алатынын көрсетеді.

Тіркеу параметрлері

Тіркеу әрекетін орындаған кезде, Linux-жүйесін орнату үшін тіркеу бумасын таңдау жағдайын қоса, тіркелген файлдық жүйенің қасиеттерін өзгертуге болады. Ол үшін mount утилитасына бір немесе бірнеше параметр көрсету керек. Барлық файлдық жүйелер қолдайтын бірнеше параметрлер бар, сонымен қатар кейбір файлдық жүйелерде тек өздеріне тән тіркеу параметрлері болады. Тіркеу параметрлері туралы көбірек mount утилитасының әдістемесінде оқуға болады (mount(8)).

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

Linux-тың жұмысы үшін керек баптаулардың барлығын (файлдардың барлық керек түрлері мен атрибуттарды, соның ішінде рұқсат құқықтарын сақтауды) қолдайтын файлдық жүйелердің бірнеше түрі бар:

Ext2/3

Файлдық жүйенің осы түрі Linux үшін арнайы жасалып, Linux-жүйелердің көбінде қолданылады. Ext3 пен Ext2 айырмашылығы, біріншісі кейін шығып, құрамында журналдау қолдауы бар. Қалған қасиеттері бойынша осы екі файлдық жүйе бірдей, және бір-бірне оңай айналдырылады. Сенімділігі жоғары болған соң әдетте журналдауы бар нұсқасы (Ext3) таңдалады. Диск әрекеттер белсенділігі жоғары болған кезде Ext3 файлдық жүйенің өнімділігі төмендейді және жүйеге түсетін орташа жүктелу артады (Load Average).

ReiserFS

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

XFS

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

SWAPFS

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

 

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

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

ТАҚЫРЫП 11. КӨПАҒЫНДЫҚ БАҒДАРЛАМАЛАУ

Мақсаты: Көпағындық бағдарламалаудың ерекшеліктеріне талдау жасау

Кілттік сөздер: ағын, синхронизация, блокировка, модель, ядро, бірағынды үрдіс, көпағынды үрдіс, мултипроцессорлы архитектура

Дәріс жоспары (1 сағат)

  1. Sun фирмасының API орындалу ағындары және POSIX анықтамасы.
  2. Орындалу ағындары синхронизациясы: өзара шектеуші бұғаттар, шартты айнымалылар, барьерлер, оқу-жазуды бұғаттау (блокировка).

Бұл дәрісте ағын және көпағынды орындалу түсініктері; көпағынды модельдер; ядролардың ағындары және қолданушылық ағындар; "Эльбрусе", Solaris, Linux, POSIX, Windows 2000, Java ағындары туралы қарастырылған.

Көпағындық - бұл курстың маңызды және қызықты тақырыптарының бірі. Бұл тақырыптың маңыздылығы көпядролы процессорлардың пайда болуымен байланысты. Дәрісте мынандай сұрақтар қарастырылған:

Бірағынды және көпағынды үрдістер

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

Біртіндеп орындалатын (бірағынды) үрдіс- бұл оның командалар есептеуiшiнiң өзгерiсін сипаттайтын бір басқару ағыны (control flow) болытын үрдіс. Ағын (thread) - параллелді орындалатын ерекше үрдіс.Ол ата-аналық үрдістің адрестік кеңістігінде орындалады.

Сурет.1 Бірағынды және көпағынды үрдіс

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

Көпағындықтың артықшылықтары:

  1. Жылдамдықтың артуы (қарапайым үрдістермен салыстырғанда) Көпағындылық виртуалды жадының жалпы кеңістігінде орындалатын жеңілдетілген үрдістерді(lightweight processes)қолдануға негізделген. Көпағындалықтың арқасындаUNIX ОЖ-ге тән тиімді емес жағдайлар болмайды.Әрбір shell командасы жеке үрдіс ретінде өзінің жеке адрестік кеңістігінде орындалады.Жеңілдетілген үрдістерге қарама қарсы үрдістерді ауырсалмақты (heavyweight) үрдістер деп атайды.
  2. Жалпы ресурстарды қолдау. Бір үрдістің ағындары жалпы жады мен файлды қолданады.
  3. Үнемдеу. Көпағындықтың арқысында жадыны үнемдеуге болады.Сонымен қатар қарапайым үрдіске қарағанда контекстерді жеңілдетілген үрдістерге ауыстыру үшін қажет стектерді алмастыру және регистрлердің мәнін қалпына келтіру тез орындалады.

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

Көпағындылықтың тарихы

Көпағындылықты қолданудың алғашқы шарттары 1970-ші жылдарда кеңестік компьютерлік аппаратураны құрастырушылар мен бағдарламашылар көмегімен жасалған. 1979 жылы құрылған "Эльбрус-1" аппаратурасында және операциялық жүйеде үрдістің тиімді тұжырымдамасын қолданды. "Эльбрусе" үрдісінде көбінесе өзінің стектерімен сипатталды. "Эльбрусе" үрдісінде басқа үрдістер болмағандықтан виртуалды жадының жалпы кеңістігінде орындалады және жеңілдетілген үрдістер болады.

Көпағындылықтың тұжырымдамасы 1980 жылдары UNIX операциялық жүйесінде және оның диалектерінде қалыптаса бастады. Көпағындылықтың дамуы AT&T фирмасындағы UNIX диалектісінде болды, оның негізінде Solaris жүйесі құрылды. Бұның барлығы POSIX стандартында UNIX-тің негізгі мүмкіндіктерімен көрсетілді.

1990 жылдардың ортасында көпағындылық қосылған ОС Windows NT шығарылды.

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

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

1995 жылдары шығарылған Java және Java-технологиясының авторлары маңызды алға қадам жасады. Java-да алғаш рет көпағындылық базалық кітапханалар және тілдің конструкторлық деңгейінде іске асырылды. Java-да арнайы әдістер және тілдің конструкциясы түрінде ұсынылған ағын және операция - Thread классы енгізілген.

2000 жылы пайда болған NET платформасы Java идеясын дамытушы механизмін ұсынды.

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

Қолданушылық ағын және ядролардың ағындары

Көпағындылықтың моделі. Операциялық жүйеде көпағындылықтың іске асуы бірнеше абстракцияның деңгейлерінен тұрады. Қолданушының көзқарасы бойынша оның бағдарламасын басқару қолданушылық деңгей ағындарының кітапханасы (user threads) арқылы жүзеге асады. Нақты операциялар жайлы кейінірек қарастырамыз. Қазір ағындардың қолданушылық деңгейлеріндегі моделдерін қарастырамыз:

POSIX Pthreads – POSIX стандартымен спецификацияланған ағындар және POSIX қосымшаларында қолданылады.

Mac C-threads –MacOS жүйесіндегі қолданушылық ағындар;

Solaris threads –Solaris операциялық жүйесіндегі қолданушылық ағындар.

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

  1. Windows 95/98/NT/2000/XP/2003/2008/7;
  2. Solaris;
  3. Tru64 UNIX;
  4. BeOS;
  5. Linux.

Көп деңгейліктің бірнеше моделдері бар- ядро ағынында қолданушылық ағындарды бейнелеу тәсілдері. Көпағындылықтың келесі моделдері орындалуы мүмкін:

- көп/ бір моделі (many-to-one) – бірнеше қолданушылық ағындарды ядроның ағындардың біреуінде көрсетіледі. Бұл модель көп жүйелік ағындары жоқ операциялық жүйелерде қоданылады.

Аталған модель келесі суретте көрсетілген.


Сурет 2. Көпағындылықтың «көп/бір» моделінің схемасы

- бір/бір моделі – әрбәр анықталаған ядро ағынында қолданушылық ағынды біресепті көресетілуі. Осы модельді қолданатын операциялық жүйелер:Windows 95/98/NT/2000/XP/2003/2008/7; OS/2.

Аталған модель келесі суретте көрсетілген


Сурет 3. Көпағындылықтың «бір/бір» моделінің схемасы

- Көп/көп моделі (many-to-many) – бірнеше қолданушылық ағындарды бірнеше жүйелік ағындарда көрсетеді. Бұндай модель операциялық жүйеде көп жүйелік ағындарды құрады. Аталған моделді қолданатын операциялық жүйелерге мысал: Solaris, Windows NT / 2000 / XP / 2003 / 2008 / 7 ThreadFiber пакеттерімен

Бұл модель Сурет 4-те көрсетілген


Сурет 4. Көпағындылықтың «көп/көп» моделінің схемасы

Көпағындылықтың мәселесі

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

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

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

игналдарды өңдеу.UNIX операциялық жүйесінің сигналы- қателік жағдайларындағы төмендеңгейлі механизмдерді өңдеу. Сигналдарға мысал: SIGSEGV- сегменттің бұзылуы, SIGKILL- kill командасын орындау және жою үрдісінің сигналы.

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

Көп жағдайларда бұл сұрақ былай шешіледі: сигналгенерацияланған ағын арқылы өңделеді және осы ағынның орындалуына әсер етеді.

Қазіргі кездегі объектілі-бағытталған операциялық жүйелерде сигнал тұжырымдамасы жоғары деңгейлі ерекшелік (исключения) (exception) тұжырымдамасымен алмастырылған. Ерекшелік тәртіп бойынша ағындардың стегімен таралады. Ерекшелікті өңдеудің ұқсастық моделі Java және.NET жүзеге асырылған.

Ағындар топтары. Мысалы мынандай күрделі есептерде: әртүрлі ағындар анында моделдеу есебінінің құрылымдау және ағындар тобының тұжырымдамасын қажет етеді. Ағындар тобы- топтық операциялары анықталған және аты бар ағындардың жиыны. Ағындардың тобы алғаш рет Java-да іске қосылған. NET-те ағындардың пулын (ThreadPool) тиімді қосылуын атап өту қажет.

Ағындардың жергілікті деректері (thread-local storage - TLS)- бір ғана ағынға тән және осы ағында қолданылатын деректер. Осы деректердің көпағындылықта қажеттілігі – күрделі есепті шешетін параллелді әдістің бірі, онда әрбір ағын берілген бөлікті шешуде жұмыс істейді. Қазіргі операциялық жүйелер және платфорламалардың барлығы ағындар деркетірінің жергілікті тұжырымдамасын қолдайды.

Ағындарды синхрондау. Барлық ағындар үрдістер сияқты жалпы ресурстарды қолдана алады және жалпы оқиғаға әсер етеді.

Тығырық (тығырық) және оларды жою жолдары. Ағындар үрдістер сияқты бір-бірін бұғаттай(блокровка) алады.

POSIX (Pthreads) ағындары

Көпағындылықтың нақты моделі ретінде POSIX ағынын қарастырамыз. POSIX-тегі көпағындылық ағындарды құратын және синхрондауға арналған API –ді сипаттайтын IEEE 1003.1c стандартымен спецификацияланған. POSIX стандарты ағындардың кітапхана тәртібін анықтайды.

Ағындарды іске қосу автордың қалауынша POSIX сәйкестік кітапханасын таңдауымен жүзеге асады. POSIX ағындары UNIX операциялық жүйесінде кең таралған және Solaris және Windows NT операциялық жүйелерінде де қолданылады.

POSIX стандарты ағындар үшін деректердің екі типін анықтайды:





Поделиться с друзьями:


Дата добавления: 2017-02-11; Мы поможем в написании ваших работ!; просмотров: 823 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2456 - | 2270 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.