You are on page 1of 9

Лабораторийн ажил №2.

Тасалдал боловсруулах механизм

ËÀÁÎÐÀÒÎÐÈÉÍ ÀÆÈË ¹ 2

Ñýäýâ : Òàñàëäàë áîëîâñðóóëàõ ìåõàíèçì

Зорилго

Энэхүү лабораторийн ажлын зорилго нь ерөнхий зориулалттай


үйлдлийн системийн ажиллагаанд тасалдлын эзлэх байр суурийг
ойлгож , оюутан ойлгосон загвараа хэрэгжүүлж сурах явдал юм.

Áîäëîãûí íºõöºë : Òîâ÷ëóóð ãàðààð èäýâõæèõ òàñàëäàë,


àðèôìåòèê ¿éëäëèéí óòãûí õàëèëòààð èäýâõæèõ òàñàëäëûã
áîëîâñðóóëàõ

Áîäëîãûí ºãºãäºë :

Ïðîãðàììûí ÿâöàä ÿìàð íýãýí òîâ÷ äàðàõàä ¿éë àæèëëàãààãàà


çîãñîîæ, äýëãýöýíä ¿ã õýâëýíý. Мөн ямар нэг утгаас ямар нэг
хувьсагчийн утга хэтрэхэд алдаа гарч тасалдал үүснэ.

САНАМЖ : Тасалдлуудыг зөвхөн жишээ болгон авлаа. Хүсвэл өөр


тасалдлыг жишээ авч болно. Системд ажиллаж байгаа процессуудыг
тасалж байгааг үзүүлэх ба процессууд нь өмнөх лабораторийн ажилд
ашигласан процессууд байж болно. Ер нь өмнөх лабораторийн ажлыг
ашиглан 2 -р лабораторийн ажлыг гүйцэтгэсэн байх хэрэгтэй.

Онолын товчоон

1.1. Тасалдал

Процессор үйл ажиллагаагаа гүйцэтгэж байх явцад түүний хэвийн үйл


ажиллагааг тасалдуулах хэрэгцээ гардаг. Үүнийг тасалдал ашиглан
хэрэгжүүлдэг. Тасалдлын гол үүрэг нь процессорын хэвийн үйл ажиллагааг
тасалдуулан процессорыг үр ашигтайгаар ашиглах боломжийг бүрдүүлдэг.
Өөрөөр хэлбэл процессор ямарваа нэгэн үйл явцыг хүлээн сул зогсох бус
хэвийн үйл ажиллагаагаа явуулж байхад үйл явц өрнөх хэрэгтэй болсон
тухай процессорт тасалдлаар мэдээлдэг. Тасалдлыг техник хангамжийн ба
програм хангамжийн тасалдал гэж ангилж болно (Зураг 1.6).
Тасалдал

Програм хангамжийн Техник хангамжийн


тасалдал тасалдал

1
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

Зураг 1.6 Тасалдлын ангилал

Програм хангажийн тасалдал нь утгын хязгаар халих, тоог тэгэд хуваах,


алдаатай команд биелүүлэх, өөрт олгогдоогүй санах ойд хандах гэх мэт
нөхцөл байдалд үүсч болно.
Техник хангамжийн тасалдлын жишээ нь : Хугацаат өдөөгч буюу таймер,
Оролт/Гаралт, техник эвдрэл гэх мэт. Команд биелж байх явцад тасалдал
үүсч болно.

Зураг 1.7 Тасалдалтай командын цикл

Зураг 1.7 нь Зураг 1.4 –д үзүүлсэн командын циклийн өргөтгөсөн хэлбэр


байна. Команд биелүүлж байх явцад тасалдал үүсэх үед хэрэв тасалдал
үүсэхийг хорьсон буюу үл зөвшөөрсөн тохиолдолд процессор хэвийн үйл
ажиллагаагаа цаашид үргэлжлүүлэн явуулах бол тасалдал үүсэхийг
зөвшөөрсөн үед тасалдлыг шалган, тасалдлыг боловсруулах ажлыг эхэлж
байна.
Энэ ажлыг тасалдал боловсруулагч хийнэ. Тасалдал боловсруулагч нь
үйлдлийн системийн дэд хэсэг болдог тасалдал үүссэн үед шалган, зохих
тасалдлыг биелүүлдэг програм хангамж юм. Процессор нь тасалдал үүссэн
үед шалган хэрэв ямарваа нэгэн асуудалгүй бол тасалдал
боловсруулагчийг дуудан ажиллуулна. Техник хангамжаас тасалдлын
сигнал ирэхэд процессор, процессын төлвийг хадгалан тасалдлыг
боловсруулаад урьд хадгалсан мэдээллээ сэргээн цааш хэвийн ажиллана
(Зураг 1.8).

2
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

Зураг 1.8 Тасалдал боловсруулах механизм

Энэ процессыг илүү дэлгэрэнгүй тайлбарлая.


1. Төхөөрөмжөөс тасалдлын сигнал үүсэх
Төхөөрөмж ямарваа нэгэн үйл явц өрнүүлэх хэрэгтэй болсоныг мэдэгдэн
тасалдал үүсгэнэ.

2. Процессор гүйцэтгэж байгаа командаа түр зогсооно


Тасалдал үүссэн тул процессор хэвийн үйл ажиллагаагаа түр зогсоон
тасалдал биелүүлэхэд бэлтгэнэ.

3. Процессор төхөөрөмж рүү сигнал явуулна


Процессор тасалдал боловсруулахад бэлэн болсон тухай мэдээллийг
төхөөрмж рүү явуулна.

3
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

4. Процессор ПТҮ ба ПТ –ыг стекд хадгална


Процессор эргэж төлвөө сэргээх боломжтой байхын тулд ПТҮ, ПТ гэх мэт
онц чухал шаардлагатай регистрүүдийг стекд хадгална.

5. Тасалдлын боловсруулагчийн хаягийг ПТ –д олгох


Тасалдал боловсруулагч програмын санах ойн хаягийг ПТ-д олгосноор
тасалдал боловсруулагч биелэх боломжтой болно.

6. Процессын төлвийн бусад мэдээллийг хадгалах


Тухайн мөчид ажиллаж буй процессод хамааралтай мэдээллийг хадгална.
Жишээ : Өгөгдлийн ба хаягийн регистрийн утгууд гэх мэт.

7. Тасалдал боловсруулах
Тасалдлыг боловсруулах буюу тасалдлын эх биеийг ажиллуулан
шаардлагатай үйлдлийг гүйцэтгэнэ.

8. Процессын төлвийг буцааж сэргээх


6 –р алхамд хадгалсан мэдээллээ буцааж сэргээн урьд нь тасарсан
процессыг цааш үргэлжлүүлэн ажиллах боломжтой болгоно.

9. ПТҮ болон ПТ-ын хуучин утгуудыг сэргээн тогтоох


4 –р алхамд хадгалсан мэдээллээ буцааж сэргээн процессор хийж байсан
ажлаа үргэлжлүүлэх боломжоор хангана.

Системд нэгэн зэрэг олон тасалдал үүсвэл яах вэ? Эсвэл тасалдлыг
боловсруулж байх үед өөр тасалдал үүсвэл яах вэ?
Энэ тохиолдолд тасалдлыг боловсруулах үндсэн 2 арга байдаг.
1. Тасалдлыг дараалж боловсруулах
Хамгийн эхэнд үүссэн тасалдал боловсруулагдаж дуустал өөр ямар ч
тасалдал боловсруулахгүй. Өөрөөр хэлбэл нь Эхэнд Ирсэн Эхэнд Гарах
буюу FIFO зарчим юм.
2. Тасалдлыг зэрэглэлээр боловсруулах
Зарим тасалдал нь бусдаас илүү өндөр зэрэглэлтэй байж болно. Өөрөөр
хэлбэл одоо боловсруулж буй тасалдлаас илүү өндөр зэрэглэлтэй тасалдал
үүсвэл одоо боловсруулж буй тасалдлаа таслан шинээр үүссэн тасалдлыг
боловсруулна. Үүний жишээ нь : Техник хангамжийн эвдрэлийн тасалдал нь
хамгийн өндөр зэрэглэлтэй бол ямар ч тасалдлыг боловсруулж байсан
техник хангамж эвдэрсэн тухай тасалдал түүнийг таслан ажилланэ гэсэн үг
(Зураг 1.9).

4
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

Зураг 1.9 Олон тасалдлын үед удирдлага шилжих

(a) тохиолдолд Х тасалдлыг боловсруулж байхад Ү тасалдал өөрийн ээлжээ


хүлээж байна. Харин (b) тохиолдолд Х тасалдлыг боловсруулж байхад илүү
өндөр зэрэглэлтэй Ү тасалдал таслан орж байна.
Хэрэв тасалдлын эх бие буюу тасалдлын код байрлаж буй хаягийг өөрчлөх
эсвэл тасалдлын эх кодыг өөрчлөх боломжтой бол яах вэ? Энэ тохиолдолд
дурын програм үйлдлийн системийн тасалдлын тухай мэдээлэлд чөлөөтэй
нэвтрэн, өөрчилж өөрт болон бусдад түвэг удна. Иймээс хэрэглэгчийн
горимд ажиллаж буй програмуудад хандаж болох санах ойг зааж өгсөн
байдаг. Хэрэглэгчийн горимд байгаа програм ямарваа нэгэн хаяг руу хандах
хүсэлт гаргах бүрд дээрхи хаягтай харьцуулан шалгаж, хэрэв зөвшөөрөөгүй
хаягт хандах гэж буй бол алдаа гарган зогсоодог. Харин удирдлагын горим
дахь програм нь санах ойн ямар ч мужид чөлөөтэй хандах эрхтэй байдаг.
Энгийн үйлдлийн системүүдэд дээрхи боломжийг хэрэгжүүлж өгөөгүйгээс
ямар ч програм тасалдлын тухай мэдээллийг (тухайн тохиолдолд
тасалдлын векторын хүснэгт (Interrupt vector table) дахь бичлэгүүд,

5
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

тасалдлын эх код) өөрчлөх боломжтой болдог. Үүний тод жишээ нь : MS-


DOS юм.
Хугацаат өдөөгчөөр ажилладаг нэгэн тасалдал байдаг тухай дээр дурьдсан
билээ. Энэ тасалдал нь алдаатай буюу төгсөх нөхцөлгүй програм
процессорыг үүрд эзэмшхээс хамгаалдаг. Хугацаат өдөөгчийн
тусламжтайгаар процессорыг эзэмшиж буй програмыг тодорхой хугацаагаар
ажиллууллаад түүний дараа тасалдуулан өөр програм ажиллуулдаг.

Практик хэрэгжүүлэлт

Энэ лабораторийн ажлыг өмнөх лабораторийн ажлыг өргөтгөх замаар хийнэ.


Тасалдлыг хэлбэрээс үл хамааран нэг ижил аргаар боловсруулдаг байх хэрэгтэй.
Иймээс ч процессорт тасалдлын векторын хүснэгт байдаг. Энэ хүснэгт нь бодит
горимд 0000h:0000h – 0000h:03ffh хаягт байрладаг. Хамгаалагдсан горимд үүнээс
ялгаатай хүснэгт ашиглах ба энэ хүснэгтийг IRQ table гэж нэрлэх нь бий.
Хичээлийн явцад ямарваа нэгэн техник хангамж програмчлах ажил хийхгүй тул
тасалдлын векторын хүснэгтээ өөрсдөө үүсгэх хэрэгтэй. Үүний тулд ямар нэг
объектын (тухайн тохиолдолд функцийн) хаягийг авч чаддаг байх хэрэгтэй. Үүний
тулд FP_SEG, FP_OFF функцуудыг ашиглана. Эдгээр нь харгалзан, объектын
сегмент ба оффсет (шилжих) хаягийг авдаг. Авсан хаягаа ямар нэг хүснэгтэд
хадгална (Цаашдаа энэ хүснэгтээ ашиглан тасалдлыг хаягаар нь дуудна). Жишээ
болгон unsigned int Vector[2][2] хүснэгт авъя (Систем ердөө 2 тасалдалтай гэж үзэж
байгаа билээ). Тасалдлыг дуудахад тасалдлыг эх бие ажилладаг. Энэ эх биеийг
ямар нэг функцээр төлөөлүүлнэ (Эдгээр функцийн хаяг нь тасалдлын векторын
хүснэгтэд байрлана). Байрлуулах үйлдлийг харуулбал

Vector[0][0]=FP_SEG(Intr1); Vector[0][1]=FP_OFF(Intr1);
Vector[1][0]=FP_SEG(Intr2); Vector[1][1]=FP_OFF(Intr2);

Системд байгаа хоёр тасалдлын эх бие болох функцуудыг Intr1 ба Intr2 гэж
нэрлэсэн байна. Системд тасалдал үүссэн бол түүний дугаарыг заах хувьсагч
хэрэгтэй. Энэ хувьсагчийг IntNum гэж нэрлэе. Харин систем тасалдлыг
боловсруулж болох эсэхийг заасан хувьсагчийг IsIntr гэж нэрлэе (Тасалдал
боловсруулах ялгаатай схемүүд байдаг тухай Зураг 1.9 –с харж болно). Процессын
эх бие дотор тасалдал үүссэн эсэхийг л шалгана (Үнэндээ энэ нь техник
хангамжаар хийгддэг). Тасалдлыг ажиллуулах (боловсруулах) ажлыг тасалдал
боловсруулагч гүйцэтгэнэ (Зураг 1.8 –аас хар). Мөн тасалдал боловсруулагч нь
тасалдал үүсч болох эсэхийг шалгана (IsIntr хувьсагчийн утгаар). Хэрэв тасалдал
үүсэх боломжтой бол тасалдлын эх биеийг ажиллуулна. Ажиллуулахдаа харгалзах
функцийг шууд дуудаж болдоггүй. Учир нь урьд авч үзсэнчлэн бүх тасалдлыг
хэлбэрээс үл хамааран нэг аргаар дуудах ёстой. Мөн тасалдал дуудахын өмнө
системд шаардлагатай мэдээллийг (энэ лабораторийн ажлын хувьд зөвхөн
регистрүүд гэж үзье) стект хадгалдаг. Харин тасалдал ажиллаж дуусахад
мэдээллийг эргэж сэргээдэг. Системийн стекийг массиваар дүрсэлье.
Регистрүүдийг бүхэл тоон хувьсагчдаар дүрсэлье.

6
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

int ax,bx,cx,dx; // ерөнхий регистрүүд


int stackp=0; // стекийн оройн заагч регистр
int stack[100]; // стек

Шаардлагатай мэдээллийг сануулах үйлдлийг push, сэргээх үйдлийг pop


гэж нэрлэе. Эдгээр үйлдлийг

void Push()
{ stack[stackp++]=ax; stack[stackp++]=bx;
stack[stackp++]=cx; stack[stackp++]=dx;
}
void Pop()
{ dx=stack[stackp--]; cx=stack[stackp--];
bx=stack[stackp--]; ax=stack[stackp--];
}

хэлбэртэйгээр харуулж болно. Тасалдал боловсруулагч нь тусдаа нэг


функц байх хэрэгтэй. Процессын эх бие дотор тасалдал үүсэхэд харгалзах
тасалдал үүссэн тухай мэдээллийг процессорт өгөхөөс (үүссэн тасалдлын
дугаарыг заах хувьсагч ашиглаж болно) бус тасалдлыг боловсруулдаггүй.
Өөрөөр хэлбэл тасалдал үүссэн тухай IntNum хувьсагчаар заагаад түүнийг
диспетчер шалгаад, шаардлагатай бол тасалдал боловсруулагч дууддаг
байдлаар гүйцэтгэвэл зохино.

Тасалдал ажиллаж байхад мөн тасалдал үүссэн эсэхийг


шалгадаг байж болно. Хэрэв үүссэн бол тасалдал
боловсруулагчийг дуудаад тасалдлын зэрэглэлийг харгалзан
дахин тасалдал үүсгэж болно. (Зураг 1.9а). Энэ боломжийг
албан ёсоор шаардахгүй. Өөрөөр хэлбэл тасалдлыг дундуур
нь тасалдаггүй гэж тооцон хийсэн ажлыг хүлээн
авна.

Тасалдал боловсруулагч дотроос тасалдлыг дуудахдаа урьд үүсгэсэн


тасалдлын векторын хүснэгт ашиглан дуудна. Сегмент ба шилжих хаягаас
бодит хаяг гаргахын тулд MK_FP функцийг ашиглана. Функцийн утгыг
функцийн заагчид олгоод, түүнийгээ ашиглан тасалдлыг дуудна. Тасалдал
боловсруулагчийн нэн энгийн загварыг үзүүлбэл

void IntrProcess()
{ int i=IntNum; // хэрэгцээгүй код
Push();
(void*)fun=(void*)MK_FP(Vector[0][0],Vector[0][1]);

7
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

fun(); Pop();
}

Өөрсдийн програмдаа энэ загварыг өргөтгөх хэрэгтэй (Тасалдлыг


хорих гэх мэт).

Функцийн заагчийг void (*fun)(void); хэлбэртэйгээр зарлаж болно.


Процессын эх бие дотор тасалдал боловсруулахаас зайлсхийх ёстойг
дахин сануулъя. Жишээ : Бодлогын нөхцөлд өгсөн халилтын тасалдлын
хувьд халилт үүссэн тухай процессорт мэдээлэхээс бус (үүссэн тасалдлын
дугаараар) хэрэглэгчид мэдээлэх, боломжтой бол алдаа засах үйлдлийг
тасалдлын эх биед оруулж өгөх хэрэгтэй. Энэ тохиолдолд процессын
өгөгдлийн мужийг глобаль хувьсагч болгон авч болно. Учир нь үйлдлийн
системийн код (тасалдал боловсруулах нь үйлдлийн системийн үндсэн
үйлдлүүдийн нэг билээ) хамгийн өндөр эрхтэй байдаг тул дурын
процессын өгөгдлийн муж руу чөлөөтэй хандаж болдог. Харин
хэрэглэгчийн процессууд ихэнх тохиолдолд хамгийн бага эрхтэй байдаг
тул бусдын өгөгдөл рүү хандах боломж хаалттай байдаг.

Санамж :

Ýíý àæëûã õèéõäýý îþóòàí äàðààõ ç¿éëñèéã çàéëøã¿é òîîöîæ õèéõ


õýðýãòýé.

1. Òóõàéí òàñàëäëóóäûí õýëáýðýýñ õàìààðàõã¿éãýýð ò¿¿íèéã


áîëîâñðóóëàõ ¿éë àæèëëàãàà íýã áàéíà . ª.õ òàñàëäëûã
áîëîâñðóóëàõäàà òàñàëäàë áîëîâñðóóëàãäàõ ñõåìèéí äàãóó
áîëîâñðóóëíà.

a. Òàñàëäàë áîëîâñðóóëàõ áîëñîí òóõàé êîìàíäûã òºâ ïðîöåññîð àâíà.


Ýíý ¿åèéã òàñàëäëûí çàõèàëãà ãýíý.
b. Òóõàéí òîõèîëäîëä òºâ ïðîöåññîðûã ýçýìøèæ áàéñàí ïðîöåññûí á¿õ
òºëºâ¿¿ä ðåãèñòð¿¿äèéí óòãûã ñàíàõ îéä çîðèóëàëòûí ãàçàð õàäãàëíà.
c. Òàñàëäëûí âåêòîð-ûí õ¿ñíýãòýýñ òàñàëäëûí áîëîâñðóóëàã÷-èéí
õàÿãèéã óíøèíà.
d. Òàñàëäëûã áîëîâñðóóëàõ
e. Òàñàëäñàí ïðîöåññèéí òºëºâ(ðåãèñòð¿¿äèéí óòãà)-ûã ñýðãýýíý.
f. Òàñàëäñàí ïðîöåññ ¿éë àæèëëàãààãàà ¿ðãýëæë¿¿ëíý.

1. Òàñàëäàë èäýâõæèõ íºõöºëºº ñàéòàð øàëãàõ,

ª.õ õàëèëò ¿¿ñýõýýñ ºìíº ¿¿íèéã ìýäñýí áàéõ øààðäëàãàòàé.

2. Òàñàëäëóóäûí зэрэглэлийн çºð÷èë人íèéã øèéäýõ õýðýãòýé.

8
Лабораторийн ажил №2. Тасалдал боловсруулах механизм

ª.õ õàëèëòûí òàñàëäàë èäýâõæñýí òîõèîëäîëä Ãàðíû


òàñàëäàë èäýâõæèæ áîëîõ ýñýõ, ìºí Ãàðíû òàñàëäàë
èäýâõæñýí òîõèîëäîëä õàëèëòûí òàñàëäàë èäýâõæèæ
áîëîõ ýñýõ

You might also like