Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 22

/* n - номер повiдомлення */

static char *msg[] = {

       "невiрний iдентифiкатор диска",

       "логiчний диск вiдсутнiй",

       "помилка читання",

       "не вистачає пам`ятi",

       "пiдкаталог не знайдено",

       "файл не знайдено",

       "непредбачений кiнець файла",

       "" };

  /* звiльнення пам`ятi */

  if (fatalloc) free(fat);

  /* видача повiдомлення */

  textattr(12+128);

  cprintf(" %s\n",msg[n]);

  gotoxy(28,wherey());

  cprintf(" Натиснiть будь-яку клавiшу...\n");

  textattr(7);

  getch();

  /* завершення програми */

  exit(0);

}

Результати роботи програми: в процесi  роботи  програми на екран виводиться iнформацiя на зразок такого:

              Лабораторная робота N10          

   Дисковi структури даних DOS.Файл

 A:\TEMP.RAR у FAT зймає такi кластери :

Натискуйте будь-яку клавiшу  доки не з`явиться <КIНЕЦЬ ФАЙЛА>.

╒<ПОЧАТОК ФАЙЛА>

└─>   2───>   3───>   4───>   5───>   6───>   7───>0x0fff

Висновок: Ознаймилися з дисковими структурами даних.


Лабораторна робота №9

«Резидентні програми»

Мета роботи: Закрiплення практичних навикiв написання резидентних програм.

Індівідуальне завдання: розробити резидентну програму, що повинна :

·  розпiзнавати натиск комбiнацiї клавiш   LShift+RShift+F1 i реагувати на нього звуковим сигналом;

·  при першому натиску " гарячої " комбiнацiї переходити в режим блокування клавiши 1, при другому - скасовувати цей  режим;

·  при натисненнi клавiш " Ctrl + F11 " вигрузити резидентну програму ;

·  системна обробка всiх iнших клавiш при цьому  порушуватися не повинна.

Структура програми:

Програма складається з головної функцiї   main ( ) i дев'яти  допомiжних функцiй

               void   my_context (void) - функцiя запису контексту   Tsr.

               void   far *readvect (int in) - функцiя читання вектору.

               void   writevect(int in,void far *vect )- функцiя запису вектору.

               void   text_print(void) - функцiя повiдомлення про початок роботи.

               void   restore_vectors(void)-функцiя востановлення векторiв переривання;

               void   tsr_kill(void) - функцiя видалення tsr програми;

byte   check_tsr (void) - функцiя перевiрки наявностi Tsr програми в пам'ятi. (Обробники 9-го    перериванiя)

               void   interrupt (*old9)() - функцiя старого   обробника 9-го  переривання.

               void   interrupt new9()- функцiя нового   обробника 9-го преривання.

               void   interrupt (*old2f)() - функцiя старого   обробника  переривання   2f.

               void   interrupt   new2f () - функцiя нового   обробника  переривання   2f.

Опис змінних:

Змiннi глобальнi для всiєї програми :

F3_code -   скан-код клавiшi "   F1 ";

F11_code -  скан-код клавiшi "   F11 ";

key3_code  -   скан-код клавiшi " 1 ";

f=0 - Ознака  натиснутої комбiнацiї;

tsr_pid -   Pid   Tsr програми;

Tsr_size=10000/16- Розмiр ( програми в параграфах );

a_2f - адреса старого   обробника   Int   2f;

jmp_segm -   сегм. адреса блоку команд переходу;

com_func - номер комунiкацiйної функцiї   переривання   2f;

*ast - адреса в стеці.

Опис алгоритму програми: