Процессы и задачи. Операционные системы. Лекция 2

Содержание

Слайд 2

Однозадачный режим в MS DOS Однозадачный режим Монопольное использование ресурсов компьютера

Однозадачный режим в MS DOS

Однозадачный режим
Монопольное использование ресурсов компьютера
Возможно прямое обращение

к аппаратуре
Два вида исполняемых файлов
COM – все сегментные регистры равны, объем программы 64K
EXE – сегментные регистры содержат разные значения, объем памяти ограничен 640K
Слайд 3

Система прерываний

Система прерываний

Слайд 4

Аппаратные прерывания

Аппаратные прерывания

Слайд 5

Прерывания

Прерывания

Слайд 6

Обработка прерывания в контексте текущей задачи

Обработка прерывания в контексте текущей задачи

Слайд 7

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

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

Слайд 8

Блок состояния задачи TSS

Блок состояния задачи TSS

Слайд 9

Борьба с нехваткой памяти Оверлейные программы Использование EMS памяти Использование XMS

Борьба с нехваткой памяти

Оверлейные программы
Использование EMS памяти
Использование XMS памяти
Использование DOS Extender’ов

(расширителей) DOS Extender – мини ОС, запускаемая до старта основной программы. Как правило, реализует только функции управления памятью, остальные задачи перепоручаются DOS. Пример 16-разрядного DOS-расширителя – RTM.EXE – реализует DPMI (DOS Protected Mode Interface), использовался в компиляторе Borland Pascal. Пример 32-разрядных расширителей – GO32, DOS4GW. Многие игровые программы (DOOM) использовали их. Системы Windows сами могут выступать в роли расширителей DOS.
Слайд 10

Программный интерфейс DOS-программ Mov AH,01h ; Поместить номер функции 21-го прерывания

Программный интерфейс DOS-программ

Mov AH,01h ; Поместить номер функции 21-го прерывания
Int 21h

; Выполнить 21-е прерывание
Mov BL,AL ; Поместить код прочитанного символа в регистр BL
Слайд 11

Структура оконных приложений int WINAPI WinMain( … ) { HWND hWnd;

Структура оконных приложений

int WINAPI WinMain( … )
{ HWND hWnd; //

дескриптор окна
WNDCLASS WndClass; // струтура класса окна
MSG Msg; // структура "сообщение"
/* заполнение класса окна */
WndClass.style = CS_HREDRAW | CS_VREDRAW; // стиль окна
WndClass.lpfnWndProc = ExamWndProc; // указатель на оконную функцию!

/* регистрация класса окна */
if (!RegisterClass(&WndClass)) return 1; // завершаем приложение при неудаче
/* создание окна */
hWnd = CreateWindow(szClassName, // имя класса окна
"Example N1", // заголовок окна (имя задачи)
...
if (!hWnd) { return 2; }// завершаем приложение, если не удалось создать окно
ShowWindow(hWnd,nCmdShow); // отображаем окно (только системные части)
UpdateWindow(hWnd); // посылаем себе сообщение WM_PAINT минуя очередь
/* цикл обработки сообщений завершается по сообщению WM_QUIT */
while (GetMessage(&Msg, NULL, 0,0))
{ DispatchMessage(&Msg); // диспетчеризация сообщений
}
return Msg.wParam; // вернуть код возврата, по сообщению WM_QUIT
}
Слайд 12

Оконная функция LRESULT CALLBACK ExamWndProc ( HWND hWnd, UINT Message, WPARAM

Оконная функция

LRESULT CALLBACK ExamWndProc
( HWND hWnd, UINT Message, WPARAM wParam,

LPARAM lParam )
{ …
switch (Message)
{
case WM_CREATE :
hPen = CreatePen(PS_SOLID,5,RGB(0,0,200)); // создаем карандаш
return 0; // возвращаем 0, если мы обрабатывали сообщение
case WM_PAINT :
// всегда начинаем рисование с вызова функции BeginPaint
hDC = BeginPaint(hWnd,&PaintStruc); // контекст устройства рисования
GetClientRect(hWnd,&Rect); // определяем размеры окна
SelectObject (hDC,hPen); // выбираем наш кранадаш
MoveTo(hDC,0,0); LineTo(hDC,Rect.right,Rect.bottom);
EndPaint(hWnd,&PaintStruc); // заканчиваем рисование
return 0; // возвращаем 0, если мы обрабатывали сообщение
case WM_DESTROY :
PostQuitMessage(0); // обязательно посылаем себе сообщение WM_QUIT
return 0; // с кодом возврата, в нашем случае 0
default :
// ВСЕ НЕОБРАТАВЫАЕМЫЕ сообщения передаем следующей функции:
return DefWindowProc(hWnd,Message,wParam,lParam);
}
}
Слайд 13

Механизм сообщений HANDLE hWnd int nMsg int wParam int lParam TIME time POINT pt

Механизм сообщений

HANDLE hWnd
int nMsg
int wParam
int lParam
TIME time
POINT pt

Слайд 14

Программный интерфейс Windows

Программный интерфейс Windows

Слайд 15

Виды многозадачности Однозадачность (с элементами многозадачности в виде резидентных программ) –

Виды многозадачности

Однозадачность (с элементами многозадачности в виде резидентных программ) – DOS
Согласованная

многозадачность (добровольная) – Win16
Вытесняющая многозадачность (принудительная) – OS/2, UNIX, Win32
Наличие системы приоритетов
Динамическое квантование
Слайд 16

Архитектура ОС Windows 3.1

Архитектура ОС Windows 3.1

Слайд 17

Архитектура ОС Windows 95/98/Me

Архитектура ОС Windows 95/98/Me

Слайд 18

Архитектура ОС Windows NT/2000/XP

Архитектура ОС Windows NT/2000/XP

Слайд 19

Квантование времени В Win32 любой процесс (программа) может состоять из нескольких

Квантование времени

В Win32 любой процесс (программа) может состоять из нескольких задач

(нитей). Каждая из задач может иметь свой приоритет. Каждый процесс обладает определенным уровнем привилегий, обеспечивающих доступ его к ресурсам системы. Задачи наследуют привилегии родительского процесса.
Слайд 20

Классы приоритетов

Классы приоритетов

Слайд 21

Граф состояния задачи

Граф состояния задачи

Слайд 22

Мониторинг использования режимов ОС

Мониторинг использования режимов ОС

Слайд 23

Синхронизация задач Критическая секция – в один момент может выполняться только

Синхронизация задач

Критическая секция – в один момент может выполняться только одна

критическая секция с заданным идентификатором. Две нити не могут выполнять одну и туже критическую секцию.
Событие – многие объекты имеют состояние отмечен/не отмечен. Например, файлы, задачи и собственно события. Несколько нитей могут ожидать одно событие.
Мютекс – взаимоисключающее событие. Несколько нитей могут ждать мьютекс, но управление получит только одна, другим придется ждать дальше.
Семафор – имеет заданное начальное целое значение, уменьшающееся тогда, когда нить его использует. Когда значение семафора становится равным нулю, то нить, которая желает получить семафор должна его ждать.
Слайд 24

Синхронизация задач

Синхронизация задач

Слайд 25

Ожидание завершения задачи

Ожидание завершения задачи

Слайд 26

Типы задач в Win32 GUI-приложение. Оконное приложение, которое может получать сообщения.

Типы задач в Win32

GUI-приложение. Оконное приложение, которое может получать сообщения. Окно

может быть и невидимым, но все равно, оно может получать сообщения.
Консольное приложение – не создает графического окна и не получает сообщения. Использует консольный ввод/вывод в текстовом режиме, может использовать мышь. Может обращаться ко многим функциям Win32, в том числе и связанным с многозадачностью. Консольное приложение – совсем не тоже самое, что приложение MS DOS. В Win16 консольных приложений нет.
Сервисные приложения – особый вид консольных приложений. Организуют специальную функцию, которая может обрабатывать команды, посылаемые приложением, использующий данный сервис. Многие драйверы являются сервисными процессами.
Драйверы – приложения, создающие интерфейс к устройствам. Могут быть сервисами в сочетании с DLL-библиотеками.
Слайд 27

Реализация множественных прикладных сред в Windows NT

Реализация множественных прикладных сред в Windows NT

Слайд 28

Статическая компоновка

Статическая компоновка

Слайд 29

Динамическая компоновка

Динамическая компоновка

Слайд 30

Динамически подключаемые библиотеки Библиотека функций, загружаемая по требованию, либо автоматически, либо

Динамически подключаемые библиотеки

Библиотека функций, загружаемая по требованию, либо автоматически, либо

программа явным образом загружает ее с помощью функции LoadLibrary.
В случае автоматической загрузки ПЕРЕД выполнением этой программы Windows будет искать библиотеку в следующем порядке
в каталоге, содержащим исполняемый файл
текущем каталоге процесса
в системном каталоге Windows
каталоге Windows
каталогах, указанных в PATH
Большинство модулей Windows представляет собой DLL, например krnl386.exe, gdi.exe, user.exe, ole2.dll, commdlg.dll. Формат DLL имеют все программы, шрифты и прочие ресурсы.
В каталоге WINNT\SYSTEM32 может находиться более 1000 dll.
Слайд 31

Явное использование DLL int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { HINSTANCE hDll; // дескриптор

Явное использование DLL

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{ HINSTANCE hDll; // дескриптор библиотеки
FARPROC

MyProcAddr; // адрес функции библиотеки
if (hDll = LoadLibrary("dll.dll"))//ненулевое значение в случае успеха
{ if (MyProcAddr = GetProcAddress(hDll,(LPSTR) 1 ))
// 1 - номер экспортируемой функции
(MyProcAddr)(); // вызов DLL, параметры - проверяйте сами!!!
else MessageBox(NULL,"Не смогла найти функцию в DLL",
"Error in DLL-loading",MB_OK);
FreeLibrary(hDll); // освобождение библиотеки
}
else MessageBox(NULL,"Не смогла найти DLL","Error in DLL-loading",MB_OK);
return 0; }
Слайд 32

Службы в Win32

Службы в Win32

Слайд 33

Обмен данных между задачами Обмен через Clipboard – инициируется пользователем. DDE

Обмен данных между задачами

Обмен через Clipboard – инициируется пользователем.
DDE – «традиционный»

способ обмена данными, появился еще в 16-разрядных версиях Windows. Пример: приложение создает иконку на рабочем столе или передает данные в Excel таблицу.
OLE ­– более сложный способ обмена данными, в основном связанный с представлением документов. Пример: вставка рисунка, формулы в документ Word. Был реализован еще в Win 3.1
Обмен данными через файлы, отображаемые в память
Передача данных через сообщения.
Передача данных через именованные и анонимные каналы
Передача данных через Mailslot
Через сетевой сокет
Слайд 34

DDE сервер

DDE сервер

Слайд 35

DDE сервер

DDE сервер

Слайд 36

DDE клиент

DDE клиент

Слайд 37

DDE клиент

DDE клиент

Слайд 38

Каналы Каналы Pipes В среде операционной системы Microsoft Windows NT вам

Каналы

Каналы Pipes
В среде операционной системы Microsoft Windows NT вам доступно такое

удобное средство передачи данных между параллельно работающими процессами, как каналы типа Pipe. Это средство позволяет организовать передачу данных между локальными процессами, а также между процессами, запущенными на различных рабочих станциях в сети.
Каналы типа Pipe больше всего похожи на файлы, поэтому они достаточно просты в использовании.
Через канал можно передавать данные только между двумя процессами. Один из процессов создает канал, другой открывает его. После этого оба процесса могут передавать данные через канал в одну или обе стороны, используя для этого хорошо знакомые вам функции, предназначенные для работы с файлами, такие как ReadFile и WriteFile. Заметим, что приложения могут выполнять над каналами Pipe синхронные или асинхронные операции, аналогично тому, как это можно делать с файлами. В случае использования асинхронных операций необходимо отдельно побеспокоиться об организации синхронизации.
Имена каналов
Имена каналов в общем случае имеют следующий вид:
\\ИмяСервера\pipe\ИмяКанала
Если процесс открывает канал, созданный на другой рабочей станции, он должен указать имя сервера. Если же процесс создает канал или открывает канал на своей рабочей станции, вместо имени указывается символ точки:
\\.\pipe\ИмяКанала
В любом случае процесс может создать канал только на той рабочей станции, где он запущен, поэтому при создании канала имя сервера никогда не указывается.
Слайд 39

Каналы Каналы передачи данных Mailslot Каналы Mailslot позволяют выполнять одностороннюю передачу

Каналы

Каналы передачи данных Mailslot
Каналы Mailslot позволяют выполнять одностороннюю передачу данных от

одного или нескольких клиентов к одному или нескольким серверам. Главная особенность каналов Mailslot заключается в том, что они, в отличие от других средств, рассмотренных нами в этой главе, позволяют передавать данные в широковещательном режиме.
LPSTR lpszMailslotName = "\\\\.\\mailslot\\$MailslotName$";
hMailslot = CreateMailslot(lpszMailslotName, 0,
MAILSLOT_WAIT_FOREVER, NULL);
\\ИмяДомена\mailslot\[Путь]ИмяКанала
Для передачи сообщений одновременно всем рабочим станциям сети первичного домена имя задается следующим образом:
\\*\mailslot\[Путь]ИмяКанала
Слайд 40

Отображение файлов в память С помощью соответсвующей функции программного интерфейса, приложение

Отображение файлов в память
С помощью соответсвующей функции программного интерфейса, приложение Microsoft

Windows NT может выбрать любой фрагмент большого файла для отображения в адресное пространство. Поэтому, несмотря на ограничение адресного пространства величиной 2 Гбайт, вы можете отображать (по частям) в это пространство файлы любой длины, возможной в Microsoft Windows NT. В простейшем случае при работе с относительно небольшими файлами вы можете выбрать в адресном пространстве фрагмент подходящего размера и отобразить его на начало файла.
Слайд 41

Передача данных через сообщение

Передача данных через сообщение

Слайд 42

Передача данных через буфер обмена

Передача данных через буфер обмена