
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Обмен данными через программные каналы.
Каналы передачи данных являются универсальным средством обмена, позволяющим организовывать передачу данных как между локальными процессами на одной ЭВМ, так и между процессами, которые запущены на нескольких ЭВМ, объединенных в сеть.
С точки зрения физической организации, программный канал – это файл специального типа, создаваемый в системе. В него из существующего в системе процесса могут записываться данные, и они же могут читаться в другом процессе.
Через один и тот же канал данные могут передаваться только между двумя процессами, то есть здесь реализуется связь «один к одному». Один из процессов создает канал, другой открывает, после чего оба процесса могут обращаться к каналу с целью передачи данных между собой, используя для этого файловые функции чтения и записи.
Существует два вида программных каналов:
Неименованные (анонимные) каналы; Используются только для обмена между родительским и дочерним процессами, которые создаются и существуют на отдельном локальном компьютере.
Именованные каналы. В отличие от первых, в момент создания получают имена, которые доступны в системе всем процессам. Используя имя канала, любой процесс может получить доступ к нему и участвовать в обмене.
Программные каналы могут быть реализованы несколькими способами.
В простейшем случае, процесс-сервер создает канал, или, точнее, одну реализацию канала, которая используется для обмена с другим процессом-клиентом.
Простым примером подобной реализации каналов является так называемая конвейерная обработка команд в системах Unix. (bash# rog1|prog2)
«|» - символ конвейеризации.
Оба процесса являются дочерними для оболочки. После создания обоих процессов, командный процессор создает программный канал, то есть специальный файл для передачи данных от prog1 к prog2.
Другим способом реализации каналов является организация взаимодействия одного серверного процесса с несколькими клиентскими.
Серверный процесс создает несколько реализаций каналов по одной на клиентский процесс (один ко многим). Примером может служить процесс на сервере БД, который принимает запросы от нескольких клиентских процессов и формирует на них ответы.
Другой способ – взаимодействие и обмен нескольких серверных процессов с несколькими клиентскими (NN). Этот способ реализации каналов в Windows известен как Mailslots – обмен с помощью почтовых ящиков.
Средства организации анонимных и именованных каналов в Windows.
Анонимные каналы в Windows – это полудуплексное средство потоковой передачи байтов между процессами, функционирующими в пределах одной локальной ЭВМ.
Анонимные каналы создаются процессом-сервером с помощью функции CreatePipe, которая имеет четыре параметра:
Описатель канала для чтения;
Описатель для записи;
Атрибуты безопасности канала;
Размер канала.
В результате выполнения, данная функция возвращает первые два описателя. После выполнения этой функции, клиентскому процессу необходимо передать оба этих дескриптора, либо один из них, что обычно делается с помощью средств наследования процессов.
Для наследования дескриптора нужно, чтобы клиентский процесс создавался бы функцией CreateProcess с флагом наследования, имеющим значение «истина». Получив нужный описатель, клиентский процесс, также как и процесс-сервер, может взаимодействовать с каналом, используя функции ReadFile, WriteFile. По окончании работы с каналом, оба процесса должны закрыть описатели канала с помощью функции CloseHandle.
Именованные каналы, в отличие от анонимных, являются объектами ядра ОС, позволяющими организовать межпроцессный обмен не только в пределах локальной ЭВМ, но и в сети. Они обеспечивают дуплексную связь, и позволяют использовать передачу данных как потоком байтов, так и передачу с помощью сообщений. Обмен может быть как синхронным, так и асинхронным.
Каналы должны иметь уникальные в пределах сети имена, построенные по правилам именования ресурсов в сетях Windows, например, \\ServerName\pipe\PipeName - для сети, а для локальной машины - \\.\pipe\PipeName.
Именованный канал создается сервером с помощью системной функции CreateNamedPipe, у которой шесть параметров:
Имя канала с учетом упомянутых выше правил;
Способ передачи данных – потоковый или сообщениями;
Режим работы – синхронный или асинхронный;
Вид канала – односторонний или двусторонний;
Дескриптор защиты канала, запрещающий несанкционированный доступ к именованному каналу;
Максимальное число одновременных соединений по данному каналу.
При повторном вызове данной функции могут быть созданы дополнительные реализации одного и того же канала. После вызова данной функции, сервер выполняет вызов функции ConnectNamedPipe, после чего ожидает отклика от клиентов. Клиенты соединяются с каналом с помощью функции CreateFile или CallNamedPipe, указывая при вызове имя созданного сервером канала.
Клиент, имеющий право на работу с каналом, получает описатель, представляющий клиентскую сторону именованного канала, после чего работа серверной функции ConnectNamedPipe завершается. Её результатом является установление связи по именованному каналу. Начиная с этого момента, сервер и клиент могут выполнять обмен данными с помощью функций WriteFile, ReadFile. По окончании обмена, канал закрывается – CloseFile.
Помимо указанных функций в системе имеется еще несколько функций для работы с каналами, например, функция PeekNamedPipe. Она используется для копирования данных из именованного канала без удаления их из канала.
TransactNamedPipe – применяется для объединения операций чтения и записи в канал в одну операцию, которая называется транзакцией.