- •Программа фонового копирования с размещением заданий в каталоге.
- •Программа фонового копирования с получением заданий по каналу
- •Серверная сторона
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "лотерейное планирование".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "циклическое планирование".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "случайный выбор".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "приоритетные счетчики".
- •Cервер шифрации данных на основе именованных каналов
- •Серверная сторона
- •Cервер шифрации блоков данных на основе сокетов
- •Модель файловой системы fat16 в файле
- •Структура системы fat
- •Модель файловой системы ext2 в файле
- •Логическая организация файловой системы ext2
- •Физическая организация файловой системы ext2 Структура дискового раздела
- •Система адресации данных
- •Cетевой чат на основе именованных каналов с выделенным сервером
- •Серверная сторона
Серверная сторона
CREATE_NAMED_PIPE
BOOL ConnectNamePipe(HANDLE h, LPOVERLAPPED Ov)
BOOL DisconnectNamedPipe(HANDLE h)
КЛИЕНТ
BOOL WiatNamedPipe(LPCTSTR Name, DWORD TimeOut)
Подключиться к каналу:
CreateFile
В виде имени – имя канала \\<pc>\piep\<имя>
BOOL CallNamedPipe(
LPCTSTR NamePipe, //имя канала
LPVOID InBuf, // входные параметры
DWORD InSize, // сколько будет отправлено байт
LPVOID OutBuf, // выходной результат
DWORD OutSize, // полный размер буфера
LPDWORD BytesRead, // сколько реально прочитано
DWORD TimeOut)
Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "лотерейное планирование".
-------------------------------------------------------------------------------------
Для работы с волокнами используется функция CreateFiber
LPVOID CreateFiber(
SIZE_T StackSize,
LPFIBER_START_ROUTINE Func,
LPVOID Params) – создаем волокно.
VOID DeleteFiber(LPVOID f) – удаление волокны
LPVOID ConvertThreadToFiber (LPVOID Params) – прежде чем начать работу один поток превратить в волокно.
BOOL ConvertFiberToThread() – уничтожаем структуру волокна и превращаем его в поток
VOID SwitchToFiber(LPVOID f) – переключиться на указанное волокно
Лотерейное планирование
В основе алгоритма лежит раздача потокам лотерейных билетов на доступ к различным ресурсам, в том числе и процессору. Когда планировщику необходимо принять решение, выбирается случайным образом лотерейный билет, и его обладатель получает доступ к ресурсу. Более важным потоком в этом случае выдается большее число билетов. Каждый поток получает количество ресурсов, пропорциональное количеству имеющихся у него билетов. Например, если всего 100 билетов, и 20 из них находятся у одного потока, то в среднем ему будет доставаться около 20% времени центрального процессора.
Лотерейное планирование характеризуется несколькими интересными свойствами. Например, при изменении у потока количества билетов, его шансы увеличиваются уже в следующем розыгрыше, то есть лотерейное планирование обладает высоко отзывчивостью.
Кроме того, взаимодействующие потоки могут при необходимости обмениваться билетами в зависимости от того, кому нужнее в данный момент тот или иной ресурс. И, наконец, с помощью лотерейного планирования можно легко организовать загрузку центрального процессора несколькими постоянно готовыми к исполнению потоками в определенной пропорции, например 50:20:20:2:1.
Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "циклическое планирование".
---------------------------------------------------------------------------
Для работы с волокнами используется функция CreateFiber
LPVOID CreateFiber(
SIZE_T StackSize,
LPFIBER_START_ROUTINE Func,
LPVOID Params) – создаем волокно.
VOID DeleteFiber(LPVOID f) – удаление волокны
LPVOID ConvertThreadToFiber (LPVOID Params) – прежде чем начать работу один поток превратить в волокно.
BOOL ConvertFiberToThread() – уничтожаем структуру волокна и превращаем его в поток
VOID SwitchToFiber(LPVOID f) – переключиться на указанное волокно