Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Int nProcess; // номер процесса (0-99), которому выделен блок (255 -
система) }; // получить количество блоков DLLFUNC int GetPhysMemoryBlockCount(); // получить описание блоков // lpBlockList - список описания блоков DLLFUNC void GetPhysMemoryBlockList(PHYS_MEMORY_BLOCK * lpBlockList); //---------------------------------------- // получить информацию о состоянии диска (посекторно) // 0 - свободный сектор // 1-100 - сектор принадлежит файлу (номер совпадает с номером в Каталоге) // 255 - зарезервировано системой DLLFUNC void GetDiskStatus(BYTE * lpStatusBuffer); // получить каталог // файлов на диске не более 100 (индексы с 1 по 100 включительно) // lpFileNames - имена файлов // lpFirstSectors - номера первых секторов // lpSizes - размеры файлов DLLFUNC void GetDiskCatalog(char lpFileNames[] [20], int * lpFirstSectors, int * lpSizes); //------------------------------------------------------------- // методы для подсистемы управления процессами //------------------------------------------------------------- // создать процесс // nData - дополнительные параметры для процесса (зависит от алгоритма планирования) // 1. Гарантированное планирование - номер пользователя от имени Которого запущен процесс // 2. SJF с предсказанием - не используется // 3. Вытесняющий SJF - полное время выполнения процесса // 4. Приоритетное планирование с абсолютным приоритетом - номер Приоритета // 5. Многоуровневая очередь (2 уровня: (1)высокий приоритет – Round Robin, (2)низкий приоритет – FCFS) - номер приоритета // функция должна вернуть номер для созданного процесса DLLFUNC int osCreateProcess(int nData); // удалить процесс с указанным номером DLLFUNC void osDeleteProcess(int nProcess); // пустая команда для процесса // команда без обращения к памяти и диску DLLFUNC void osMakeEmptyCommand(int nProcess); //------------------------------------------------------------- // методы для подсистемы управления памятью //------------------------------------------------------------- // создать адресное пространство для указанного процесса // nProcess - номер процесса для которого создается адресное Пространство // bBlockCount - количество блоков адресного пространства // для страничного распределения bBlockCount всегда равен 1 // для сегментного и сегментно-страничного распределения - Количество сегментов // lpBlockLength - длины блоков аресного пространства DLLFUNC void osMakeAddressSpace(int nProcess, int bBlockCount, int * lpBlockLength); enum MEMORY_OPERATION { MemoryRead = 0, MemoryWrite = 1}; // выволнить трансляцию адреса // nProcess - номер процесса, в адресном пространстве которого выполняется преобразование // nVirtualAdress - виртуальный адрес, по которому пытаемся Произвести обращение // nOperationType - выполняемая операция при доступе к ячейке памяти (MemoryRead или MemoryWrite) // функция должна вернуть номер физ. ячейки или // -1 если необходимая часть адресного пространства отсутствует в Оперативной памяти DLLFUNC int osTranslateAddress(int nProcess, int nVirtualAdress, int nOperationType); // выволнить трансляцию адреса // nProcess - номер процесса, в адресном пространстве которого выполняется преобразование // nSegment - номер сегмента, к которому пытаемся произвести Обращение // nOffset - смещение в сегменте // nOperationType - выполняемая операция при доступе к ячейке памяти (MemoryRead или MemoryWrite) // функция должна вернуть номер физ. ячейки или // -1 если необходимая часть адресного пространства отсутствует в Оперативной памяти DLLFUNC int osTranslateAddress2(int nProcess, int nSegment, int nOffset, int nOperationType); //------------------------------------------------------------- // методы для подсистемы ввода-вывода //------------------------------------------------------------- // запись данных из оперативной памяти в указанный файл // nProcess - номер процесса (0-99), вызвавший метод (255 - система) // fileName - имя файла (не более 20 символов) // virtMemBuffer - адрес буфера в адресном пространстве процесса // если вызывается от имени системы - virtMemBuffer указывает на Физ. память // count - длина буфера на запись // offset - позиция в файле, с которой необходимо осуществлять запись // возращает 1 - если успех // -1 - если ошибка DLLFUNC int osWriteFile(int nProcess, char * fileName, int virtMemBuffer, int count, int offset); // nSegment - номер сегмента в виртуальном адресном пространстве Процесса // nSegmentOffset - смещение в сегменте DLLFUNC int osWriteFile2(int nProcess, char * fileName, int nSegment, int nSegmentOffset, int count, int offset); // запись данных в файл из указанного внешнего буфера // fileName - имя файла (не более 20 символов) // lpBuffer - адрес буфера с данными // count - длина буфера на запись // возращает 1 - если успех // -1 - если ошибка DLLFUNC int osWriteExternFile(char * fileName, BYTE * lpBuffer, int count); // для линейного адресного пространства // чтение из файла данных в оперативную память // nProcess - номер процесса (0-99), вызвавший метод (255 - система) // fileName - имя файла (не более 20 символов) // virtMemBuffer - адрес буфера в адресном пространстве процесса // если вызывается от имени системы - virtMemBuffer указывает на Физ. память // count - длина буфера на чтение // offset - позиция в файле, с которой необходимо осуществлять чтение // возращает 1 - если успех // -1 - если ошибка DLLFUNC int osReadFile(int nProcess, char * fileName, int virtMemBuffer, int count, int offset); // для сегментированного адресного пространства // nSegment - номер сегмента в виртуальном адресном пространстве Процесса // nSegmentOffset - смещение в сегменте DLLFUNC int osReadFile2(int nProcess, char * fileName, int nSegment, int nSegmentOffset, int count, int offset); // чтение из файла данных в указанный внешнний буфер // fileName - имя файла (не более 20 символов) // lpBuffer - адрес буфера с данными // count - длина буфера на для данных // возращает количество прочитанных символов // -1 - если ошибка DLLFUNC int osReadExternFile(char * fileName, BYTE * lpBuffer, int count); // удаление файла // nProcess - номер процесса (0-99), вызвавший метод (255 - система) // fileName - имя файла (не более 20 символов) // возращает 1 - если успешно // -1 - если ошибка DLLFUNC int osDeleteFile(int nProcess, char * fileName); control_main.cpp #include < windows.h> #include " stdio.h" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } ОПИСАНИЕ ИССЛЕДОВАТЕЛЬСКОЙ ЧАСТИ. Программа написана на языке C++ и реализована в виде библиотеки функций dll. [Программная реализация.] Данная библиотека содержит Следующие функции, которые должны быть описаны в разрабатываемом приложении: Аппаратные функции - данные функции реализованы с модели Операционной системы, их использование обязательно при обращении к виртуальной машине: DLLFUNC int GetMemorySize() - получить размер оперативной памяти (в байтах); 1.2 DLLFUNC int GetPageSize() - получить размер страницы (в байтах); 1.3 DLLFUNC int GetDiskSize() - получить размер диска (в байтах); 1.4 DLLFUNC int GetSectorSize() - получить размер кластера (в байтах); 1.5 DLLFUNC void AddLog(char * s) - записать строку в лог (не более 40К за 500 мс); DLLFUNC BYTE ReadMemoryByte(int memPhysAdress) - считать байт из памяти по физ. адресу; DLLFUNC void WriteMemoryByte(int memPhysAdress, BYTE value) - Записать байт в память по физ. адресу; 1.8 DLLFUNC void ReadMemory(int memPhysAdress, BYTE * lpBuffer, int count) - считать ___________из памяти по указанному физ. адресу Несколько байт (memPhysAdress - адрес, с которого надо считывать Данные, lpBuffer - буфер, в который необходимо перенести указанные данные, count - количество считываемых байт); 1.9 DLLFUNC void WriteMemory(int memPhysAdress, BYTE * lpBuffer, Int Count) - записать в памяти из указанного буфера несколько байт (memPhysAdress - адрес, по которому происходит запись, LpBuffer - буфер, из которого переносятся данные, count - количество байт); DLLFUNC void ReadDisk(int memAdress, int nSector) - считать кластер с диска (внимание, функция блокирующая), параметры: MemAdress - адрес в оперативной памяти, начиная с Которого необходимо Поместить содержимое кластера, nSector - номер кластера диска, с которого небходимо считать данные; DLLFUNC void WriteDisk(int memAdress, int nSector) - записать кластер с диска (внимание, функция блокирующая), параметры: MemAdress - адрес в оперативной памяти, начиная с которого Данные Записываются в кластер, nSector - номер кластера диска, в который Записываются данные. Функции ОС - прототипы функций, которые необходимо реализовать согласно варианту: DLLFUNC void Start() - запуск подсистем управления, начальная инициализация подсистем; DLLFUNC void Stop() - остановка подсистем управления, остановка Подсистем управления. Популярное:
|
Последнее изменение этой страницы: 2016-05-28; Просмотров: 1066; Нарушение авторского права страницы