11. Организация и обработка на аварийни ситуации в изчислителните



Дата22.07.2016
Размер73.8 Kb.
#466
11.Организация и обработка на аварийни ситуации в изчислителните

системи. Прекъсване. Защита на паметта, дума за състояние на процеса.
Нарушаването на нормалния цикъл на изпълнение на командата от процесора се нарича особена ситуация. Събитието, което поражда тази ситуация, се нарича аварийно събитие. Има два вида особени ситуации – прекъсване и изключение. Изключението възниква в тялото на текущата програма, където работи процесорът, и се обработва в нея. Обикновено това събитие е породено от невъзможността на процесора да извърши текущата команда. Например в резултат на прехода program counter-ът да сочи някъде извън реалната памет или да се окаже, че командата е наред, но има адрес на данна, която сочи извън паметта. Други такива команди са: опит за делене на 0; умножение на две големи числа, при което битовете не достигат; опит на програмата да пише в област, в която няма право и др. Прекъсванията възникват винаги извън тялото на текущия процес, т.е. възникват от входно-изходните устройства, схемите на централния процесор или от други схеми. Тези събития се обработват от операционната система, извън тялото на текущия процес. И в двата случая обработката на аварийната ситуация се извършва първо от апаратурата, като централният процесор преминава в авариен цикъл на изпълнение, и след това от софтуерен модул, който обработва данните с цел да намали щетите от възникналото събитие. Централният процесор на всяка стъпка от нормалния ход на командата проверява преди реализацията на стъпката дали има условията за нейното изпълнение – ако стигне до последна стъпка от нормалния цикъл, проверява дали на неговите портове има сигнал за прекъсване. Линиите се обхождат от горе на долу, което определя приоритета на тяхната обработка. Аварийният цикъл се състои в следното: 1. Запазва се векторното състояние на текущата програма; 2. Определя се видът на аварийното събитие или чрез сигнал от линиите за прекъсване, или като код за линиите за данни към процесора; 3. По кода на вида прекъсване се извлича от оперативната памет нов вектор на състоянието, т.е. се прави зареждане с ново съдържание на централния процесор, включително и program counter-а. Старите регистри отиват в друга област – старо състояние. Новото и старото състояние са области в операционната памет; 4. Преход към нормален цикъл. В резултат на новото съдържание процесорът тръгва от нова команда.

Всеки код на прекъсване има програмен модул, който обработва точно тази грешка. Всички тези модули образуват ядрото на операционната система. В зависимост от вида операционна система адресите на тези модули се задават по различен начин. Стандартно за Intel при процесорите има по един вектор на прекъсване. Всеки един от тези вектори на прекъсване е 4 байта. Когато процесорът работи в Real mode, тези 4 байта се тълкуват като 2 байта код на сегмент и 2 байта instruction pointer (отместването). Чрез тази двойка се задава адресът на всеки един модул. Тази таблица е на фиксирано място в паметта – първите 1024 байта на оперативната памет. Хардуерно (апаратно), при възникване на сигнал на прекъсване, освен че старото състояние се записва някъде, го занася директно в program counter-а, което прави тяхното директно изпълнение. В Protected mode за всяка програмна част, която се записва някъде, се създава един дескриптор, който представлява таблица на прекъсванията IDT (Interrupt Descriptor Table) и за нея има един регистър, който сочи началото на тази таблица. Когато дойде код на прекъсване, той се разглежда като код на отместване в таблицата, откъдето се определя началото на съответния програмен модул.



Механизмът на прекъсване е предизвикал революция, когато се е появил през 1960 г. Той дава възможност да се избягва зациклянето при проверка дали някакво устройство е включено.

Ако входно-изходното устройство е получило сигнал за започване на своята работа, тогава то следва следните стъпки:



  1. Попълва някъде в регистър или в паметта статуса. Записва чрез флагове данни и праща сигнал за прекъсване към процесора на предпоследна стъпка;

  2. Процесорът проверява дали има сигнал за прекъсване. Ако „да”, в стандартния случай се приема прекъсването, запазва се съдържанието на program counter-а заедно с регистрите, като един от вариантите на съхранение е на фиксирани адреси, т.е. тази област на съхранение е разбита на предварително дефинирани участъци и в зависимост от кода на прекъсване апаратно се занася съдържанието на регистрите;

  3. Съхранение на векторния процес;

  4. Разпознава се кодът на прекъсване. Това става по два начина: или по сигналната линия, по която пристига; или по линията за данни, където се задава двоично число, което представя код на прекъсване, от този, който задава прекъсването (В/И). Нека кодът на прекъсване е числото i, тогава от таблицата на прекъсванията се извършва копиране на i-тия ред в регистъра РС на процесора. Тези последователни с
    тъпки се изпълняват хардуерно и се формира така нареченият авариен цикъл на процесора, след което той преминава в нормален цикъл.

  5. Извличане от РС първата команда за изпълнение.

Съвкупността от тези няколко софтуерни модули и всички тези разработчици образуват така нареченото ядро на операционната система. Таблицата на прекъсване се намира на фиксиран адрес във всяка компютърна система, тя е апаратно фиксирана. Така например в IBM в Mainframe е на адрес 40 в началото на оперативната памет, а областта, където се съхранява старото състояние, е на адрес 80. В Mainframe има 5 вида прекъсвания, т.е. разпознават се само 5 фиксирани прекъсвания. При тях няма стекова организация, поради което системният разработчик трябва да вземе мерки да не допусне прекъсване от един и същ вид, тъй като, когато настъпи прекъсване, program counter-ът се записва някъде, където има команда, която не може да се извърши. Ако в момента, в който този софтуерен разработчик продължи работата си, стане ново програмно прекъсване, този нов адрес ще препокрие стария и при командата return за даденото състояние ще се върне в регистрите на порцесора и ще се върне ново число, а не старото и така ще се получи зацикляне. Почти всички mainframe супер компютри използват тази концепция, докато мини машините и VAX 11 са организирани на стеков принцип на съхранение на командите, с което се решава проблемът с вложеното прекъсване от един и същи вид. Докато при mainframe, ако има прекъсване, то винаги се възприема, то при мини компютрите при всеки вид прекъсвания се назначава някакъв приоритет – число от 0 до 32. При тези системи едно прекъсване се възприема, когато нивото му на приоритет е по-голямо или равно на текущия. При всяка една компютърна система има регистър за статуса на процеса (PS = process status), в който има поле, представляващо приоритет на текущия процес. При възникване на прекъсване се проверява дали нивото е по-високо и, ако е по-ниско, не се възприема. При микропроцесорите нивото на приоритет зависи от номера на линията, където е възникнало това прекъсване. Тези линии се обхождат от горе на долу, като редът на обхождане определя приоритета. Във всяка компютърна система е предвидена една специална машинна команда, която прави симулация на прекъсване. При Mainframe е SVC21, при VAX11 на DEC и AS-400 на IBM е Trap21, а при micro Intel – 21. Тази команда е предвидена да осъществява интерфейса между потребителската програма и модула на операционната система. Операционната система има редица модули, които предоставят някаква услуга, например за динамично изпълване на памет, команди, които казват при настъпване на някакъв списък от събития с параметри (списък от условия) и етикет (име на функция, подпрограма или модул). Смисълът на това е следният: примерно от клавиатурата трябва да бъдат въведени рождена дата, ЕГН или факултетен номер, тогава нашият софтуер трябва да провери дали това, което е зададено, е коректно. Един начин е чрез цикъл, който проверява дали всичко е коректно, а по-бързият е да се преобразува написаното от char в цифров код и, ако в него има нещо различно от символ, то ще причини грешка и ще предаде управлението на аварийния цикъл. Тъй като обръщението винаги е по адрес, във всяка компютърна система е предвиден един специализиран модул, който се активира чрез прекъсване и има мониторна част и таблица на допълнителни софтуерни модули. Компютърът, изпълнявайки тази команда, автоматично преминава в авариен цикъл и активира софтуерния обработчик, тогава мониторът анализира параметъра на командата и подава управлението към даден модул. Тази концепция е приложена за пръв път от IBM.

Специализиран модул




мониторна част

таблица на адреси на допъл-нителни софтуерни модули



s1

Прочита числото например 21 и предава изпълнението на 21ви ред.


s2

21


sn

На базата на тази концепция е разработена концепцията на мултипроцесирането – Multitasking или Multiprocessing, състояща се в следното: операционната система има един модул, наречен loader (зареждач), който, получавайки команда от програмата или някъде другаде, извършва зареждане на програма за предстоящо изпълнение, като при това зареждане в оперативната памет за тази програма се създава в една таблица на програмите един ред, който се нарича по различен начин, като при Pentium това е Task State Element (TSE), при Mainframe е Task Control Blocker (TCB), а при VAX е Task State Segment (TSS). Всеки един такъв ред сочи местоположението на програмата: входна точка, откъде се стартира програмата и първоначално състояние на регистрите, в един специален блок – Task State Segment, който съдържа всички регистри на процесора – собствени и управляващи. При Pentium в този блок първо седи началото на LBT, след това са GS, FSS, EFS, CS, PS, ES, SS, EAX, EPX, … CRo и най-отдолу стоят 3 двойки регистри: SS за втори раздел, SP за него; SS за първи раздел, SP за него; и SS за трети раздел и SP за него. Има още един модул планировчик, който решава коя от програмите, заредени в оперативната памет, да активира. Той работи на принципа: 1) издава команда към процесора – събуди ме след даден квант време (обикновено 2 секунди); 2) обхожда таблицата на програмите, взима първата, която е в режим на готовност и я пуска, след което продължава по следния начин – записва състоянието на предишната и започва да работи по новата; 3) като изтече кванта време, процесорът е събуден от таймер и този вид прекъсване води до активиране на планировчика, който отново издава команда за събуждане и отново сканира таблицата. Има статистическа информация, която пренарежда таблицата, тя не позволява една и съща програма да се изпълнява многократно постоянно.

За пръв път защитата на паметта е въведена от IBM през 1972 г. и днес тя се прилага навсякъде. Тя е свързана с концепцията за Multitasking-а, като първоначално в Mainframe системите IBM разглежда следния подход: паметта се разглежда като съставена от блокове и към всеки блок прикачва 4 бита за адресиране на паметта. Когато Loader-ът зарежда дадена програма, той назначава число от 0 до 15 и по таблица на програмата Р1 я снабдява с това число, наречено ключ, като на всяко място, където се зарежда програмата, се поставя това число. Когато планировчикът реши, че трябва да активира Р1, той зарежда в Process Status Register-a и Program Counter-а процесите от този вид. При изпълнение на машинна команда от вида за запис върху клетка от оперативната памет, се сравнява ключът с ключалката на онези блокове, където се държи програмата. При минимашините в таблицата на страниците стои едно число, свързано със защитата. Така при опит за четене или запис се гледат флаговете на това число. При Pentium процесорите има две степени на защита нивото на привилегия. Всяка програмна част може да бъде в едно от четирите нива на привилегия: ядро, системни функции, разширение и приложение, като те имат приоритет съответно 0, 1, 2 и 3. Всеки програмен модул може да оперира в памет с по-ниско ниво на привилегия. Адресация в клетка от паметта винаги става чрез двойка регистри < SR, отместване >. Клетката, която се специфицира чрез тази двойка, се намира някъде в отсек от паметта, който се описва чрез някакъв дескриптор (64-битов).



При Pentium и Itanium всяка една страница съдържа дескриптор, който дава достъп до тази страница. Ако има странична организация, то в таблицата на страниците също има дескриптор. Така има 3 нива на защита.


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница