- •Программа фонового копирования с размещением заданий в каталоге.
- •Программа фонового копирования с получением заданий по каналу
- •Серверная сторона
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "лотерейное планирование".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "циклическое планирование".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "случайный выбор".
- •Эмуляция планировщика процессов с использованием волокон (Fiber). Алгоритм "приоритетные счетчики".
- •Cервер шифрации данных на основе именованных каналов
- •Серверная сторона
- •Cервер шифрации блоков данных на основе сокетов
- •Модель файловой системы fat16 в файле
- •Структура системы fat
- •Модель файловой системы ext2 в файле
- •Логическая организация файловой системы ext2
- •Физическая организация файловой системы ext2 Структура дискового раздела
- •Система адресации данных
- •Cетевой чат на основе именованных каналов с выделенным сервером
- •Серверная сторона
Программа фонового копирования с размещением заданий в каталоге.
- существует отдельная папка, где располагаются задания
- задания представляют собой простой текстовый файл, состоящий из двух частей - откуда и куда, с возможностью задания маски
- программа отслеживает наличие какого-либо файла в папке. Как только он появляется, начинается выполнение задания
- по завершению задания, файл с заданием удаляется
- для каждого отдельного задания запускается отдельный поток
---------------------------------------------------------------
Для работы с потоками используются функция CreateThread.
ПОТОКИ
HANDLE CreateThread(
LPSECURITY ATTRIBUTES ProcAttr,
SIZT_T StackSize,
LPTHREAD_START_ROUTINE Func,
LPVOID Params,
DWORD Flags,
LPWORD ThreadId)
Показывает NULL
Размер стэка зависит от того, что делает поток
Функция, которая будет запущена в качестве потока
Параметр, который попадает в функцию как данные
Создать, но не запускать
Iв потока
VOID ExitThread(DWORD ExitCode)
Завершение потока.
BOOL TerminateThread(HANDLE h,
DWORD ExitCode)
DWORD [Suspend/Resume] Thread(HANDLE h)
Suspend – приостановить работу потока
Resume – возобновить работу потока
Действие функции Suspend является накапливаемым (если два раза запустить функцию SuspendThread одному и тому же потоку, то необходимо вызвать дважды ResumeThread)
BOOL SwitchToThread()
Вызвать планировщик системы.
DWORD SetThreadAffinitiMask(HANDLE h,
DWORD NetMask)
Уст. множество процессоров, на которых поток может работать.
Результат – предыдущая маска, в которой все работало
DWORD SetThreadIdealProcessor(HANDLE h,
DWORD NProc)
Устанавливаем для потока предпочитаемый процессор. Если все равно какой процессор, то вместо NProc ставим константу MAXIMUM_PROCESSOR.
Программа фонового копирования с получением заданий по каналу
- задания должны получаться программой по именованному каналу
- задание предоставляет собой пары имен файлов разделенных символом '|'
- для каждого отдельного задания запускается отдельный поток
------------------------------------------------------------------------------------
Для работы с именованным каналом используется функция CreateNamePipe
Именованные каналы.
Каналы – способ локального и сетевого взаимодействия.
функции сервера
функции клиента
Каналы должны быть с одним именем.
СЕРВЕР
Создать канал: HANDLE CreateNamePipe(
LPCTSRT pipename,
DWORD openmode, // режим открытия
DWORD pipemode,
DWORD maxinstance,
DWORD outbufsize,
DWORD inbufsize,
LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности
)
Имя канала: \\.\pipe\<имя > - до 256 символов
FILE_FLAG_FIRST_PIPE_INSTANCE – может присутствовать во втором параметре:
PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND
FILE_FLAG_WRITE_THROUGH – если процессы находятся на разных машинах в сети
FILE_FLAG_OVERLAPPED – асинхронный режим (для канала)
PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE – каждая запись в канал – пакет
PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE
MAXINSTANCES – max допустимое число каналов с таким именем
PIPE_UNLIMITED_INSTANCES
DEFOULTTimeout – время ожидания