
- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Обмен данными через разделяемые файлы.
В тех случаях, когда скорость обработки данных не является определяющей, обмен между процессами может быть выполнен через один и тот же файл, который называется разделяемым файлом. Термин «разделяемый» означает, что файл может совместно использоваться в разных процессах. Чтобы сделать любой файл разделяемым, необходимо при создании файла задать для него соответствующие свойства. В Windows создание файла выполняется с помощью функции CreateFile. Одним из параметров является флаг доступа к файлу. Имеется две разновидности флагов:
FILE_SHARE_READ;
FILE_SHARE_WRITE.
Первый позволяет обеспечить совместный доступ к файлу для чтения данных, а второй – для записи. Возможна логическая комбинация обоих флагов.
При использовании разделяемых файлов необходимо создать файл или открыть уже созданный файл с помощью функции OpenFile, указывая при создании или открытии соответствующие имя и флаги. При этом, эти операции должны выполняться в процессе-сервере и клиенте.
Если в одном процессе указывается флаг для записи, а в другом – для чтения, то в результате может быть выполнен обмен данными между сервером и клиентом. При этом, в процедуре обмена обязательно должны использоваться средства синхронизации, поскольку чтение данных в клиенте может быть выполнено только после их записи в файл, которая инициируется процессом-сервером.
Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
В общем случае, процессор ЭВМ не может работать непосредственно с содержимым файла до того, как он не будет прочитан в память. Если требуется просто прочитать файлы, а также модифицировать их, то помимо операции чтения данных из файла, должна быть выполнена операция записи модифицированных данных в файл. Поэтому стандартная процедура работы с дисковым файлом включает в себя следующие шаги:
Создание или открытие файла на диске;
Чтение требуемого участка файла в созданную заранее область памяти процесса;
Модификация прочитанных данных в программе процесса;
Запись модифицированных данных на прежнее место в дисковом файле.
Обычно, работа с файлом требует обращения не к одному участку внешней памяти, а к нескольким. Тогда перечисленные действия в программе должны выполняться многократно. Это ведет к снижению скорости выполнения программ. Более эффективно было бы чтение всего файла в ОП, поскольку в этом случае требуется только одна операция чтения в ОП в начале цикла обработки, и одна операция записи во внешнюю память в конце цикла. Однако такой подход возможен только для файлов относительно небольшого размера. Кроме того, в этом случае снижается надежность всей процедуры обработки, поскольку модифицированные данные записываются на диск только в конце сеанса обработки, и любой сбой в течение этого сеанса может привести к потере модифицированных данных.
В Windows существует способ работы с файлами, практически исключающий многократные физические операции чтения или записи в файл, которые должны выполняться средствами прикладной программы. Этот способ называется проецированием файла в память (FILE MAPPING). Он заключается в том, что конкретный файл включается в состав физической памяти процесса за счет создания системного объекта с названием «проекция файла».
Прим. Под ФП понимается совокупность участка ОП и участка файла внешней памяти.
Затем, в ВАП процесса выделяется участок (регион) достаточного размера, и часть физической памяти, включающая в себя объект типа «проекция файла», отображается на этот регион.
Отображение заключается в преобразовании адресов внешней памяти в виртуальные адреса региона. Дальнейшие операции с файлом заменяются операциями с его отображением, то есть проекцией файла в ВАП процесса. Для получения проекции файла и отображении её на регион ВАП используются соответствующие системные функции. В целом, схема проецирования файла в память заключается в следующем:
Основные этапы получения проекции файла в память включают:
Создание или открытие файла функциями CreateFile или OpenFile;
Создание в физической памяти системного объекта типа «проекция файла» с помощью системной функции CreateFileMapping;
Выделение в ВАП процесса региона и отображение на него созданной проекции с помощью функции MapViewOfFile;
Обращение по адресам региона, на который отображена проекция файла, с целью выполнения операций чтения и записи данных.
После проецирования файла в память, к нему возможны обращения как к обычной структуре данных типа массива, расположенной в ОП. В прикладной программе для этого не требуется выполнение файловых операций чтения или записи.
В действительности, файл, к содержимому которого осуществляется обращение, должен быть прочитан в память, но в данном случае, загрузку содержимого файла в память полностью осуществляют потоки ядра ОС, освобождая от этого программистов в прикладной программе.
Если размер файла таков, что он не помещается в память целиком, то система осуществляет последовательную загрузку тех участков файла, к которым в данный момент обращается программа.
В программе, в любой момент, файл, независимо от его размера, рассматривается как находящийся в ОП массив данных. Любая модификация записей спроецированного файла автоматически переносится во внешнюю дисковую память. Эта операция также выполняется средствами ОС, и прикладная программа в ней не участвует.