Friday, March 21, 2008

SW316 Лаб/ажил 2

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

Сэдэв: Тасалдал боловсруулах механизм
Зорилго
Энэхүү лабораторийн ажлын зорилго нь ерөнхий зориулалттай үйлдлийн системийн ажиллагаанд тасалдлын эзлэх байр суурийг ойлгож , оюутан ойлгосон загвараа хэрэгжүүлж сурах явдал юм.

Хугацаа: III/20-21

Оноо: 4 хүртэл оноо

Бодлогын нөхцөл:
Товчлуур гараар идэвхжих тасалдал, арифметик үйлдлийн утгын халилтаар идэвхжих тасалдлыг боловсруулах

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


Дэлгэрэнгүй

Тасалдлууд

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


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

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

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

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

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

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

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

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

8. Процессын төлвийг буцааж сэргээх
6-р алхамд хадгалсан мэдээллээ эргэж сэргээж урьд нь тасарсан процессыг цааш үргэлжлүүлэн ажиллах боломжтой болгоно.
9. ПТҮ ба ПТ –ын хуучин утгуудыг сэргээн тогтоох
4 –р алхамд хадгалсан мэдээллээ буцааж сэргээн процессор хийж байсан ажлаа үргэлжлүүлэх боломжоор хангана.

Системд нэгэн зэрэг олон тасалдал үүсвэл яах вэ? гэдэг асуудал гарч ирнэ. Энэ тохиолдолд тасалдлыг боловсруулах үндсэн 2 арга байна.

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


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

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

Энэ лабораторийн ажлыг өмнөх лабораторийн ажлыг өргөтгөх замаар хийнэ. Тасалдлыг хэлбэрээс үл хамааран нэг л хэлбэрийн тасалдал хэлбэрээр зохион байгуулна. Тасалдал боловсруулагчийг дуудахын тулд тасалдал үүссэн эсэхийг заадаг нэг хувьсагч авах хэрэгтэй.
Процессын эх бие дотор тасалдал үүссэн эсэхийг л шалгана. (үнэндээ энэ нь техник хангамжаар хийгддэг) Тасалдлыг ажиллуулах (боловсруулах) ажлыг тасалдал боловсруулагч гүйцэтгэнэ. Мөн тасалдал боловсруулагч нь тасалдал үүсч болох эсэхийг шалгана.
Бүх тасалдлыг хэлбэрээс үл хамааран нэг аргаар дуудах ёстой. Мөн тасалдал дуудахын өмнө системд шаардлагатай мэдээллийг (энэ лабораторийн хувьд зөвхөн регистрүүд гэж үзье) стект хадгалдаг. Харин тасалдал ажиллаж дуусахад мэдээллийг эргэж сэргээдэг. Системийн стекийг массиваар дүрсэлье. Регистрүүдийг бүхэл тоон хувьсагчдаар дүрсэлье.
int ax, bx, cx, dx; // ерөнхий регистрүүд
int stackp=0; // стекийн оройн заагч регистр
int stack[100]; // стек
Шаардлагатай мэдээллийг сануулах үйлдлийг хийдэг функцийг Push, сэргээх үйлдийг функцийг Рop гэж нэрлэе.
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--];
}

хэлбэрээр хийж болно. Тасалдал боловсруулагч нь тусдаа нэг функц байх хэрэгтэй. Процессын эх бие дотор тасалдал үүсэхэд харгалзах тасалдал үүссэн тухай мэдээллийг процессорт өгөхөөс бус тасалдал боловсруулдаггүй.
Өөрөөр хэлбэл тасалдал үүссэн тухай хувьсагчаар заагаад түүнийг диспитчер шалгаад, шаардлагатай бол тасалдал боловсруулагч дууддаг байдлаар гүйцэтгэвэл зохино.
void IntrProcess(){
……….
Push();
……….
Pop();
}

Өөрдсийн програмдаа энэ загварыг өргөтгөх хэрэгтэй.
Оюутан өөрөө ажлыг сайжруулж хэд хэдэн хэлбэрийн тасалдлыг боловсруулдгаар хийж болно. Тэгвэл ямар хэлбэрийн тасалдал үүссэн бэ? гэдгээс хамааран өөр өөр тасалдал боловсруулагчийг дууддаг байх хэрэгтэй. Ямар хэлбэрийн тасалдал үүсэхэд ямар тасалдал боловсруулагчийг дуудахыг мэдэхийн тулд бид тасалдлын вектор хүснэгтээ өөрсдөө хийнэ.

Гэхдээ үүнийг албан ёсоор шаардахгүй.

Санамж:
Энэ ажлыг хийхдээ оюутан дараах зүйлсийг зайлшгүй тооцож хийх хэрэгтэй.
1. Тухайн тасалдлуулдын хэлбэрээс хамаарахгүйгээр түүнийг боловсруулах үйл ажиллагаа нэг байна. Өөрөөр хэлбэл тасалдлыг боловсруулахдаа тасалдал боловсруулах схемийн дагуу боловсруулна.
2. Тасалдал боловсруулах болсон тухай командыг төв процессор авна. Энэ үеийг тасалдлын захиалга гэнэ.
3. Тухайн тохиолдолд төв процессорыг эзэмшиж байсан процессын бүх төлөвүүд регистрүүдийн утгыг санах ойд зориулалтын газар хадгална.
4. Тасалдлын векторын хүснэгтээс тасалдлын боловсруулагчийн хаягийг уншина.
5. Тасалдлыг боловсруулах
6. Тасалдсан процессын төлөвийг (регистрүүдийн утгыг) сэргээнэ.
7. Тасалдсан процесс үйл ажиллагаагаа үргэлжлүүлнэ.
8. Тасалдал идэвхжих нөхцлөө сайн шалгах

No comments: