Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные Системы

.pdf
Скачиваний:
37
Добавлен:
02.03.2016
Размер:
1.94 Mб
Скачать

Операционные системы.

Методические указания к выполнению лабораторных и практических работ

1

Лабораторная работа №1. Объекты ядра в Windows API..........................................................

4

Цель занятия...............................................................................................................................

4

Теория .........................................................................................................................................

4

Общие сведения о Windows API ..........................................................................................

4

Windows SDK.........................................................................................................................

6

Объекты ядра Windows .............................................................................................................

9

Общее......................................................................................................................................

9

Учѐт пользователей ядра.....................................................................................................

10

Защита...................................................................................................................................

10

Закрытие объектов ядра. .....................................................................................................

11

Совместное использование ядра несколькими процессами............................................

11

Задачи и упражнения...............................................................................................................

14

Контрольные вопросы.............................................................................................................

14

Лабораторная работа №2. Процессы в Windows API...............................................................

16

Цель занятия.............................................................................................................................

16

Теория .......................................................................................................................................

16

Создание процессов.............................................................................................................

18

Завершение процессов ........................................................................................................

19

Задачи и упражнения...............................................................................................................

19

Контрольные вопросы.............................................................................................................

21

Лабораторная работа №3. Потоки в Windows API...................................................................

23

Цель занятия.............................................................................................................................

23

Теория .......................................................................................................................................

23

Диспетчеризация потоков...................................................................................................

24

Дианамическое изменение приоритетов и текущий приоритет потока.........................

25

Создание потоков ................................................................................................................

26

Завершение работы потока .................................................................................................

27

Приостановка и возобновление выполнения потока .......................................................

29

Контекст потока...................................................................................................................

30

Использование потоков для научных вычислений ..........................................................

32

Задачи и упражнения...............................................................................................................

37

Контрольные вопросы.............................................................................................................

38

Лабораторная работа №4. Исследование виртуальной памяти. .............................................

41

Цель занятия.............................................................................................................................

41

Теория .......................................................................................................................................

41

Управление виртуальной памятью ....................................................................................

44

Задания и упражнения.............................................................................................................

48

2

 

Контрольные вопросы.............................................................................................................

49

Лабораторная работа № 5. Синхронизация...............................................................................

51

Цель занятия.............................................................................................................................

51

Теория .......................................................................................................................................

51

Задача взаимного исключения ...........................................................................................

52

Задача производитель/потребитель ...................................................................................

60

Задачи и упражнения...............................................................................................................

62

Контрольные вопросы.............................................................................................................

63

Лабораторная работа №6. Планирование в реальном времени. .............................................

65

Цель занятия.............................................................................................................................

65

Теория .......................................................................................................................................

65

Планирование периодических задач. ................................................................................

65

Теорема о верхней границе коэффициента использования ЦП (Теорема №1). ............

65

Теорема о времени завершения (Теорема №2). ................................................................

66

Планирование апериодических задач................................................................................

68

Планирование с синхронизацией задач.............................................................................

68

Обобщѐнная теорема о верхней границе коэффициента использования ЦП (Теорема

3)............................................................................................................................................

68

Задачи и упражнения...............................................................................................................

70

Контрольные вопросы.............................................................................................................

70

Лабораторная работа №7. Файловый ввод-вывод....................................................................

71

Цель занятия.............................................................................................................................

71

Теория .......................................................................................................................................

71

Функции работы с файлами................................................................................................

75

Синхронный ввод-вывод ....................................................................................................

77

Асинхронный ввод-вывод ..................................................................................................

80

Проецируемые в память файлы..........................................................................................

92

Задачи и упражнения...............................................................................................................

95

Контрольные вопросы.............................................................................................................

95

СПИСОК ЛИТЕРАТУРЫ ...........................................................................................................

97

ПРИЛОЖЕНИЕ ...........................................................................................................................

98

Основные функции Windows API ..........................................................................................

98

3

Лабораторная работа №1. Объекты ядра в Windows API.

Цель занятия

Получить основные сведения о подсистеме Windows API1

Знакомство с Windows SDK: o основные типы данных

Приобрести основные сведения о представлении объектов ядра в

Windows

Рассмотреть операции над объектами ядра: o создание объектов ядра

o управление доступом и подсчѐт ссылок

o дублирование и наследование описателей объектов o закрытие описателей объектов ядра.

Теория

Общие сведения о Windows API

Windows API – это название защищѐнной подсистемы прикладных программ

(Application Programming Interface) – API, реализованной на большинстве платформ фирмы Microsoft. Посредством Windows API прикладной программист имеет доступ к функциям операционной системы. В число основных групп функций относятся: функции управления объектами ядра,

функции управления операциями ввода-вывода, функции управления памятью, функции управления оконной подсистемой, и другие. На сегодняшний день подсистема Windows API реализована на следующих платформах2:

1 Согласно последним сведениям, компания Microsoft переименовала Win32 API просто в Windows API. Названия Win64, Win32, Win16 остались для идентификации соответственно 64, 32 и 16-битных версий этой подсистемы.

2 Здесь и далее под платформой (в компьютинге) в общем случае понимается слой (layer), который лежит ниже некоторого рассматриваемого слоя, который предоставляет вышележащему слою необходимые для

4

1.Windows 3.x. Первая из платформ, где была реализованы подсистемы

Win16 и Win32s. Win32s предназначалась в основном для разработчиков,

чтобы подготовить их к переходу на полностью 32-разрядные системы. В

настоящее время не используется.

2.Windows 9x. Пришла на замену ОС Windows 3.1. Интерфейс Win32

реализован полнее, чем в Win32s, но не так, как в Windows NT. Windows

95 занимала стратегическую нишу машин класса 386 и выше с 4 МБ памяти. Многие функции Win32 требуют много ресурсов, и от них пришлось отказаться или реализовать их не полностью. Например,

функции управления асинхронным вводом-выводом, отладкой, реестром,

защитой, регистрацией событий. В настоящее время платформа Windows

9x прекратила своѐ развитие.

3.Windows NT и системы с кодовой базой Windows NT (Windows 2000/XP/2003 Server/Vista). Операционная система класса «High-end».

Отказоустойчивая ОС. Способна выполнять одновременно несколько разнотипных приложений: Win64 (в 64-х битных системах), Win32, Win16, DOS, OS/2, POSIX3. Переносимая ОС: способна работать на разных типах процессоров: Intel x86, MIPS R4000, PowerPC, DEC Alpha4, IA64, x64 в силу того, что большая часть системы написана на C/C++ и

необходимо просто перекомпилировать код системы на новом процессоре.

Однако необходимо переписать 2 низкоуровневых компонента Windows Executive: HAL и часть ядра. Эти компоненты пишутся на ассемблере под конкретный тип оборудования. Для переноса приложения на другую

функционирования ресурсы. Для примера, аппаратная платформа (Hardware Platform) предоставляет необходимые ресурсы для операционной системы, которая функционирует на этой платформе. В свою очередь операционная система является платформой (операционной платформой, Operating Platform) для прикладных и системных приложений, которые функционируют под еѐ управлением и т.п.

3Начиная с версии Windows XP Microsoft отказалась от поддержки IBM OS/2

4Сначала поддержку отозвала MIPS и Power PC из Windows 2000, а в Windows XP оставили только поддержку архитектуры Intel x86. Однако базовая архитектура системы всѐ ещѐ предполагает относительно простой перенос на другие платформы.

5

платформу его нужно просто перекомпилировать. Обладает эффективной поддержкой SMP5. Реализована наиболее полная поддержка Windows API.

4.Windows CE. Создана в связи с появлением новой техники и рассчитана в основном на карманные и встраиваемые (Embedded) вычислительные системы, работающие от аккумуляторов и не имеющих HDD и FDD. У

большинства машин 16-256 МБ памяти, а отсутствие НЖМД делает невозможным создание виртуальной памяти. Из-за этих требований

Microsoft пришлось написать новую систему, менее требовательную, чем

Windows NT. Система является переносимой ОС и способна работать на процессорах: MIPS, SH3, x86, Intel AXP. Интерфейс Windows API

дополнен функциями для поддержки, например, новых устройств ввода-

вывода. Система в большей степени обладает свойствами функциональной избыточности, чем Windows NT и Windows 9x, что позволяет собирать систему под конкретную аппаратуру и с заданной функциональностью.

Windows SDK

Для доступа к функциям Windows API из программ на языке C/C++6, Microsoft предоставляет набор библиотечных и заголовочных файлов7, под общим названием Windows Software Development Kit – SDK. Доступ к большинству функций Windows API осуществляется подключением файла windows.h (см. Пример 18)

Пример 1. Программа, использующая Windows API

#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])

{

return 0;

}

5 SMP – Symmetric Multi Processing – симметричное мультипроцессирование. Тесно связанные (Tightly coupled) системы с несколькими функциональными устройствами (процессорами) и общей оперативной памятью.

6Доступ к Win32 API возможен из других сред, например, Delphi, Visual Basic и др.

7Кроме этого поставляется полная документация, примеры программ, утилиты для работы и др.

8Здесь и далее во всех примерах используется компилятор Microsoft Visual C++ 2003 и выше.

6

Типы данных в Windows SDK

С целью упрощения переносимости программ между платформами и обеспечения независимости от языков программирования, Windows SDK

вводит собственные типы данных. Большинство типов данных определены в заголовочных файлах windef.h и winnt.h9. Ниже (см. Таблица 1) даны определения основных типов данных.

Таблица 1. Некоторые типы данных Windows SDK [24]

Тип Windows SDK

Тип C/C++

Примечание

 

 

 

 

 

INT

int

 

 

 

 

 

 

 

 

UINT

unsigned int

Префикс

«U»

всегда

 

 

означает unsigned

 

 

 

 

 

PUINT

unsigned int *

Префикс

«P» (pointer)

 

 

всегда означает *.

 

 

 

 

 

LPINT

int *

Префикс

«LP» (long

 

 

pointer) всегда означает

 

 

длинный

указатель (far

 

 

pointer).

В

Win32

 

 

дальность

указателя

 

 

значения не имеет.

 

 

 

 

 

LONG

long

 

 

 

 

 

 

 

 

CHAR

char

 

 

 

 

 

 

 

 

SHORT

short

 

 

 

 

 

 

 

 

VOID

void

 

 

 

 

 

 

WCHAR

wchar_t

UNICODE-символ

 

 

размером 16 бит.

 

 

 

 

 

 

PSTR

char *

Суффикс

«STR»

всегда

 

 

означает строковый тип

 

 

данных.

 

 

 

 

 

 

 

9 Файлы автоматически подключается при подключении к программе windows.h

7

LPSTR

char *

 

 

 

 

 

 

LPCSTR

char const *

Префикс «С» всегда

 

 

означает const.

 

 

 

 

 

TCHAR

char либо wchar_t

Если

определѐн

 

 

_UNICODE

(#define

 

 

_UNICODE) трактуется как

 

 

wchar_t, в противном случае

 

 

TCHAR трактуется как char.

 

 

 

 

 

DWORD

unsigned long

D

трактуется

как

 

 

DOUBLE – двойной, т.е.

 

 

двойное слово.

 

 

 

 

 

 

HANDLE

void*

 

 

 

 

 

 

 

 

BYTE

unsigned char

 

 

 

 

 

 

 

WORD

unsigned short

Машинное слово

 

 

 

 

 

BOOL

int

Определены

две

 

 

константы:

 

 

 

#define TRUE 1

 

 

 

#define FALSE 0

 

 

 

 

 

 

FLOAT

float

 

 

 

 

 

 

 

ULONGLONG

unsigned __int64

64-битное целое.

 

 

 

 

 

LONG_PTR

#if defined(_WIN64)

Используется

при

 

typedef __int64 LONG_PTR;

арифметических

 

 

#else

 

 

typedef long LONG_PTR;

операциях

с

 

#endif

 

 

 

 

 

 

указателями

для

 

 

исключения

 

 

 

зависимости

от

 

 

разрядности платформы

 

 

 

 

 

ULONG_PTR

unsigned LONG_PTR

 

 

 

 

 

 

SIZE_T

typedef ULONG_PTR

Максимальное количество

 

SIZE_T

байтов, которые

может

 

 

 

 

 

 

8

 

 

 

адресовать указатель на

данной платформе.

Объекты ядра Windows

Общее

К объектам ядра Windows относятся: процессы, потоки, задания,

файлы, каналы, мьютексы, семафоры, события, проекции файлов, почтовые ящики, порты завершения I/O, маркеры доступа, ожидаемые (waitable)

таймеры, разделы реестра, рабочие столы, оконные станции10.

Объекты создаются функциями Windows API. Каждый объект ядра – блок памяти, выделенный ядром и доступный только ему. Этот блок представляет собой структуру данных, в элементах которой содержится информация об объекте. Некоторые элементы присутствуют во всех объектах, некоторые специфичны для объектов конкретного типа. Например,

у объекта «процесс» есть: идентификатор процесса, базовый приоритет и код завершения, а у объекта «файл» – смещение в байтах, режим разделения и режим открытия.

Объекты ядра доступны только ядру и приложение не может получить доступ к этим структурам. Для управления объектами ядра существует набор функций Windows API.

Когда мы вызываем функцию, создающую объект ядра, она возвращает описатель, идентифицирующий этот объект. Описатель следует рассматривать как «непрозрачное» значение, размерность которого зависит от разрядности платформы. Этот описатель будет действителен в любом потоке приложения, однако они зависят от конкретного процесса (см. Рисунок

1).

10 Далеко не все объекты ядра непосредственно доступны через функции Win32 API. Некоторые объекты (например, Driver и EventPair) доступны только ядру операционной системы.

9

Учѐт пользователей ядра

Объекты ядра принадлежат ядру ОС, а не процессу. Система ведѐт счѐтчики объектов. При создании объекта счѐтчику присваивается 1. Если создаѐтся точно такой же объект, счѐтчик увеличивается на 1. При закрытии объекта – счѐтчик уменьшается на 1. Когда достигнет 0, то объект уничтожается.

Процесс 1

Процесс 2

Процесс 3

Режим пользователя

CreateFile(…)

CreateFile(...)

CreateFile(…)

CreateSemaphore(…)

 

 

 

 

Режим ядра

<<Таблица описателей>>

<<Таблица описателей>>

<<Таблица описателей>>

0x00000001 – Объект 1

0x00000001 – Объект 2

 

0x00000001 – Объект 2

 

0x00000002 – Объект 2

0x00000002 – Объект 3

 

 

Объект 1

Объект 2

Объект 3

 

<<Файл>>

 

<<Файл>>

 

<<Семафор>>

 

Пользователей: 1

 

Пользователей: 3

 

Пользователей:

1

 

 

 

Рисунок 1 Объекты ядра и таблицы описателей объектов ядра.

Защита

Объекты ядра можно защитить дескриптором защиты (security descriptor), который описывает, кто создал объект и кто имеет права на доступ к нему. Защита реализована в Windows NT, но еѐ нет в Windows 9x.

Почти все функции, создающие объекты ядра, принимают указатель на структуру SECURITY_ATTRIBUTES.

typedef struct SECURITYATTRIBUTES

{

DWORD nLength;

LPVOID lpSecurityDescriptor; BOOL bInheritHandle;

} SECURITY_ATRIBUTES;

10