Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursOS.doc
Скачиваний:
4
Добавлен:
20.11.2019
Размер:
162.82 Кб
Скачать

Серверная сторона

CREATE_NAMED_PIPE

BOOL ConnectNamePipe(HANDLE h, LPOVERLAPPED Ov)

BOOL DisconnectNamedPipe(HANDLE h)

  1. КЛИЕНТ

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)

  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) – переключиться на указанное волокно

Лотерейное планирование

В основе алгоритма лежит раздача потокам лотерейных билетов на доступ к различным ресурсам, в том числе и процессору. Когда планировщику необходимо принять решение, выбирается случайным образом лотерейный билет, и его обладатель получает доступ к ресурсу. Более важным потоком в этом случае выдается большее число билетов. Каждый поток получает количество ресурсов, пропорциональное количеству имеющихся у него билетов. Например, если всего 100 билетов, и 20 из них находятся у одного потока, то в среднем ему будет доставаться около 20% времени центрального процессора.

Лотерейное планирование характеризуется несколькими интересными свойствами. Например, при изменении у потока количества билетов, его шансы увеличиваются уже в следующем розыгрыше, то есть лотерейное планирование обладает высоко отзывчивостью.

Кроме того, взаимодействующие потоки могут при необходимости обмениваться билетами в зависимости от того, кому нужнее в данный момент тот или иной ресурс. И, наконец, с помощью лотерейного планирования можно легко организовать загрузку центрального процессора несколькими постоянно готовыми к исполнению потоками в определенной пропорции, например 50:20:20:2:1.

  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) – переключиться на указанное волокно

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]