Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Неструктурированной последовательностью (потоком) байт, стала популярной
Вместе с ОС UNIX, а теперь она широко используется в большинстве Современных ОС (MS-DOS, Windows2000/NT, NetWare). Неструктурированная модель файла позволяет легко организовать разделение Файла между несколькими приложениями: разные приложения могут по-своему Структурировать и интерпретировать данные, содержащиеся в файле. Другая модель файлов, которая применялась в ОС OS/360, DEC RSX, VMS, а в Настоящее время используется достаточно редко – это структурированный файл. В этом случае поддержание структуры файла поручается ОС. ФС видит файл как Упорядоченную последовательность логических записей. Приложение может обращаться к ФС с запросами на ввод-вывод на уровне записей, например, «считать запись 25 из файла FILE.DOC». ФС должна обладать информацией о Структуре файла, достаточной для того, чтобы выделить любую запись. ФС Предоставляет приложению доступ к записи, а вся дальнейшая обработка данных, содержащаяся в этой записи, выполняется приложением. Замечание. Развитием Этого подхода стали СУБД. Физическая организация файла (ФОФ) – это способ размещения файла на диске. Основные критерии эффективности физической организации файлов: Скорость доступа к данным. Объем адресной информации файла. Степень фрагментированнности дискового пространства. Максимально возможно размер файла. Фрагментация – это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни Одна из вновь поступающих программ не может поместиться ни в одном из Участков, хотя суммарный объем фрагментов может составить значительную Величину, намного превышающую требуемый объем памяти. Существует несколько способов физической организации файла. Непрерывное размещение – это простейший вариант ФОФ, при котором файлу Предоставляется последовательность кластеров диска, образующих непрерывный участок дисковой памяти: Достоинства способа: высокая скорость доступа, так как Затраты на поиск и считывание кластеров файла Минимальны, отсутствие фрагментации на уровне файла, Минимален объем адресной информации – достаточно Хранить только номер первого кластера и объем файла. Недостатки невозможно сказать, какого размера должна Быть непрерывная область, выделяемая файлу, так как файл при каждой Модификации может увеличить свой размер, фрагментация на уровне кластеров, Из-за которой нельзя выбрать место для размещения файла целиком. Из-за этих Недостатков на практике используются другие методы, при которых файл Размещается в нескольких, в общем случае несмежных областях диска. Интерфейс управления виртуальной машиной На представленом скриншоте основного окна приложения, Моделирующего работу операционной системы. Порядок действий при работе с системой следующий: Выбрать алгоритм управления процессами, памятью и диском. Нажать кнопку «Запустить систему». Создать процесс, указав для него параметр функционирования (зависит от алгоритма планирования) и конфигурацию адресного пространства Для активного процесса выполнить команду путем нажатия на Соответствующую кнопку Вкладка " Процессы" предназначена для работы с подсистемой управления процессами. На данной вкладке реализованы следующие функции: Запуск/остановка системы; выбор алгоритмов управления процессами, памятью И диском; создать/удалить процесс; выполнить пустую команду; чтение/запись По виртуальному адресу; работы с файлом. Рисунок 4 - Основное окно системы Пример задания структуры адресного пространства – 3 сегмента размером И 1000 байт соотвественно показан на рисунке 4. Рисунок 5 - Пример задания структуры адресного пространства На рисунке 5 представлена команда процесса, не связанная с обращением к Памяти или диску. Рисунок 6 - Команда процесса, не связанная с обращением к памяти или Диску Для осуществления чтения байта из адресного пространства процесса по Линейному адресу необходимо ввести адрес в ячейку, показанную на рисунке 7 и нажать кнопку " Чтение". Рисунок 7 - Команда чтения байта из адресного пространства процесса по Линейному адресу Для осуществления записи байта в адресное пространство процесса по Линейному адресу необходимо ввести адрес в ячейку, показанную на рисунке 7, ввести значение в поле " Значение" и нажать кнопку " Запись". Рисунок 8 - Команда записи байта в адресное пространство процесса по Линейному адресу Для осуществления чтения байта из адресного пространства процесса по Номеру сегмента и смещению необходимо ввести соответствующие значения Сегмента и его смещения в показанные на рисунке 7 поля и нажать кнопку " Чтение". Рисунок 9 - Команда чтения байта из адресного пространства процесса по Номеру сегмента и смещению Для осуществления записи байта в адресное пространство процесса по Номеру сегмента и смещению необходимо ввести соответствующие значения Сегмента, его смещения и значение в показанные на рисунке 24 поля и нажать кнопку " Запись". Рисунок 10 - Команда записи байта в адресное пространство процесса по Номеру сегмента и смещению. Для осуществления чтения (записи) данных из файла в адресное Пространство процесса необходимо задать имя файла, смещение в файле и количество считываемых (записываемых) байт и нажать кнопку " Чтение" (" Запись" ), показанные на рисунке 10. Рисунок 11 - Команда чтения (записи) данных из файла в адресное Пространство процесса Вкладка " Память", показанная на рисунке 11 отображает карту памяти, с Закрашиванием блоков, используемых процессами. Рисунок 12 - Вкладка " Память" Для отображения содержимого участка памяти необходимо ввести соответствующее значения адреса в поле " Адрес" и нажать кнопку " Содержимое", показанное на рисунке 12. Рисунок 13 - Показать содержимое участка памяти (256 байт) виртуальной Машины начиная с указанного адреса Вкладка " Диск" предназначена для работы с подсистемой управления диском, позволяет осуществлять следующие функции: создавать, удалять файл; Считывать, изменять содержимое файла; отображать содержимое файла, Показана на рисунке 13. Рисунок 14 - Вкладка " Диск" Для работы с файлом необходимо нажать соответствующую кнопку, что Показано на рисунке 13. Рисунок 13 - Работа с файлом, выбранным в каталоге. Для отображения содержимого диска необходимо ввести в поле значение сектора и нажать кнопку " Содержимое", что показано на рисунке 13. Рисунок 14 - Отобразить содержимое указанного сектора. Для выполнения данного задания запускаем, исходники проекта, выбираем необходимый вариант задания. Рисунок 15 - Отобразить содержимое указанного сектора. Ниже приведем исследовательскую часть, задания которая опишет исполнение данных алгоритмов задания. ИССЛЕДОВАТЕЛЬСКАЯ ЧАСТЬ Программная реализация системы Control.cpp #include " control.h" #include < stdio.h> //------------------------------------------------------------- // методы для получения текущего состояние машины //------------------------------------------------------------- // запуск подсистем управления DLLFUNC void Start() { AddLog(" Start\r\nНачинаем работу\r\n" ); } // остановка подсистем управления DLLFUNC void Stop() { AddLog(" Stop\r\nПрекращаем работу\r\n" ); } //enum eProcessStatus = { NotExist = 0, Execute = 1, Ready = 2, Wait = 3}; // получить информацию о процессах в системе // размер буфера = 100 // lpProcStatusBuffer - буфер для сохранения информации о статусе Процесса // lpProcData - буфер для сохранения дополнительной информации о Процессе // 1. Гарантированное планирование - номер пользователя от имени Которого запущен процесс // 2. SJF с предсказанием - текущая оценка процесса // 3. Вытесняющий SJF - оставшееся время выполнения процесса // 4. Приоритетное планирование с абсолютным приоритетом - номер Приоритета // 5. Многоуровневая очередь - номер приоритета DLLFUNC void GetProcessStatus(BYTE * lpProcStatusBuffer, double * lpProcData) { lpProcStatusBuffer[0] = Execute; lpProcData[0] = 5.0; lpProcStatusBuffer[1] = Ready; lpProcData[1] = 3.5; lpProcStatusBuffer[2] = Ready; lpProcData[2] = 2.0; for (int i=3; i< 100; i++) { lpProcStatusBuffer[i] = NotExist; lpProcData[i] = 0.0; } } //---------------------------------------- // получить количество блоков DLLFUNC int GetPhysMemoryBlockCount() { return 1; } // получить описание блоков // lpBlockList - список описания блоков DLLFUNC void GetPhysMemoryBlockList(PHYS_MEMORY_BLOCK * lpBlockList) { // количество блоков не должно превышать число, возращаемое Популярное:
|
Последнее изменение этой страницы: 2016-05-28; Просмотров: 858; Нарушение авторского права страницы