Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.055 с.)
Главная | Случайная страница | Обратная связь