Задание 3.1 Пусть задан одномерный массив IntVec, имитирующий таблицу векторов прерываний – специальную структуру данных, организуемую в памяти ПК и содержащую множество векторов прерываний - адресов программ обработки прерываний, записанных в так называемой сегментной форме. Векторы прерываний расположены в таблице в порядке возрастания соответствующих им номеров прерываний [2]. Элементами массива IntVec являются целочисленные скаляры, каждая пара соседних элементов определяет один адрес: младший (четный) элемент представляет смещение, а старший (нечетный) элемент - номер сегмента.
Разработать пользовательскую функцию, получающую массив IntVec и номер прерывания N, и возвращающую вектор прерывания, соответствующий его номеру.
Результат представить в форме:
Вариант 1: двухэлементного вектора, в котором первый элемент – номер сегмента, а второй – смещение;
Вариант 2: числового скаляра, представляющего линейный адрес, соответствующий найденному в массиве сегментному адресу;
Вариант 3: строки данных, представляющей сегментный адрес номером сегмента и величиной смещения, разделенных двоеточием.
Задание 3.2 Пусть заданы три массива: матрица PAR, вектор FAT и матрица DIR, имитирующие (с некоторыми непринципиальными упрощениями) структуру системной области логического диска, реализованную в FAT-ориентированных файловых системах [2].
Матрица PAR (рисунок 25) представляет таблицу параметров формата диска: первый столбец содержит наименования параметров (скаляры строкового типа), а второй - значения соответствующих параметров (целочисленные скаляры). Параметр B_sect – размер сектора в байтах, S_clust – размер кластера в секторах, All_clust – общее количество кластеров, Max_dir – максимальное число регистрационных записей в каталоге.
Вектор FAT представляет таблицу расположения файлов, основное назначение которой – хранение информации о номерах кластеров, занятых файлами. Длина этого вектора задается значением параметра All_clust матрицы PAR. Каждый элемент вектора FAT может быть скаляром числового типа и содержит информацию о кластере с таким же номером. Если FATk = 0, то k-й кластер считается свободным; если FATkсодержит любое другое допустимое число, то это число – номер следующего кластера, занятого файлом; если FATkсодержит число 777777, то k-й кластер является последним в цепочке кластеров, занятых файлом; если FATkсодержит число -1, то k-й кластер считается недоступным ("сбойным").
Матрица DIR (рисунок 26) представляет каталог – структуру данных, содержащую регистрационные записи о файлах. Первая строка матрицы – это заголовок, содержащий имена полей регистрационных записей (строковые скаляры), а остальные строки – это регистрационные записи, содержащие значения полей (целочисленные или строковые скаляры). Число строк в матрице DIR задается значением параметра Max_dir матрицы PAR. Для "пустых" строк матрицы DIR элемент Name содержит символ "*", два других элемента - нули.
Поле Name содержит имя файла, поле Size – размер файла в байтах, а поле Clust – номер начального кластера в цепочке кластеров, занятых соответствующим файлом.
Разработать группу пользовательских функций, обеспечивающих:
Вариант 1: определение размера кластера в байтах;
Вариант 2: определение информационной емкости диска в мегабайтах;
Вариант 3: поиск номера начального кластера по имени файла;
Вариант 4: поиск имени файла по номеру начального кластера;
Вариант 5: поиск в массиве DIR по заданному имени файла (name) любого из двух других параметров, указанного пользователем;
Вариант 6: определение количества кластеров, необходимых для хранения файла заданного размера;
Вариант 7: определение количества кластеров, занятых файлом;
Вариант 8: определение количества свободных кластеров на диске;
Вариант 9: определение количества "сбойных" кластеров на диске;
Вариант 10: проверку возможности размещения файла заданного размера на логическом диске;
Вариант 11: определение цепочки номеров кластеров, занятых файлом.