Разделы презентаций


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

Содержание

8.1. Интерфейс прикладного программирования Интерфейс прикладного программирования (ИПП) - это совокупность функций, предоставляемая операционной системой и системой программирования разработчикам приложений для получения того или иного сервиса. Принципы построения ИПП:1. ИПП должен обеспечивать

Слайды и текст этой презентации

Слайд 1Операционные системы
Тема 8. Интерфейсы операционных систем
8.1. Интерфейс прикладного программирования
8.2. Интерфейс

пользователя

Операционные системыТема 8. Интерфейсы операционных систем8.1. Интерфейс прикладного программирования8.2. Интерфейс пользователя

Слайд 28.1. Интерфейс прикладного программирования
Интерфейс прикладного программирования (ИПП) - это совокупность

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

получения того или иного сервиса.
Принципы построения ИПП:
1. ИПП должен обеспечивать доступ к ресурсам ОС, к которым относятся физическая и виртуальная память, файлы и каталоги, процессы и потоки, защищенные области данных ОС и т. д.
2. ИПП должен быть совместимым во всех ОС одного типа. Например, во всех 32-разрядных ОС Windows (95, 98, NT, 2000, ХР, 2003 и др.) реализован общий стандарт интерфейса API Win 32.
3. ИПП должен быть безопасным. То есть никакая программа, используя любую функцию интерфейса, не должна повредить операционную систему или другие процессы. Отсюда и сами системные функции должны быть защищены от модификации или подмены.
4. ИПП должен быть простым в использовании и эффективным по времени выполнения функций.
5. Добавление новых функций или замена старых новыми версиями не должны оказывать влияние на программы.



8.1.1. Основные определения

8.1. Интерфейс прикладного программирования	Интерфейс прикладного программирования (ИПП) - это совокупность функций, предоставляемая операционной системой и системой программирования

Слайд 3Операционные системы
Эти требования обеспечиваются соответствующей реализацией интерфейса.


8.1.1. Основные определения
В современных

ОС доступ к функциям ИПП выполняется с помощью вызовов. В

зависимости от уровня реализации интерфейса различают:
прикладные вызовы (вызовы функций библиотек языка программирования и библиотек классов);
системные вызовы (например, вызовы функций API Win32/64);
вызовы базовых функций ОС (вызовы функций ядра ОС или подсистемы Win32);
промежуточные вызовы.
ИПП делится на две группы функций:
функции, предоставляемые операционной системой;
функции, входящие в состав стандартных библиотек системы программирования, а также библиотек классов, например, MFC языка C++ или FCL платформы Microsoft .NET Framework.
Системные функции, в свою очередь, реализуются через промежуточные функции (заглушки), которые вызывают базовые функции ОС. Последние опираются на примитивы ядра системы.
Операционные системы	Эти требования обеспечиваются соответствующей реализацией интерфейса.8.1.1. Основные определенияВ современных ОС доступ к функциям ИПП выполняется с

Слайд 4Операционные системы


8.1.1. Основные определения
Библиотеки системы программирования принято называть библиотеками времени

выполнения. Функции таких библиотек вставляются в программу на этапе ее

компоновки.
Они выполняют только стандартные операции, с помощью которых можно реализовать, как правило, лишь консольное приложение.
Примеры таких функций: математические, статистические, строковые функции, функции преобразования и т. д., а также функции ввода-вывода, управления памятью, процессами и некоторые другие.
Большая часть этих функций выполняется без обращения к операционной системе и, по сути, образует лишь прикладное расширение программы.
Стандартные функции делают программу независимой от платформы.
Операционные системы8.1.1. Основные определения	Библиотеки системы программирования принято называть библиотеками времени выполнения. Функции таких библиотек вставляются в программу

Слайд 5Операционные системы


8.1.1. Основные определения

Операционные системы8.1.1. Основные определения

Слайд 6

8.1.1. Основные определения
Схема вызова и выполнения функции стандартной библиотеки системы

программирования. Вызываемая функция не содержит в себе системных вызовов.

8.1.1. Основные определенияСхема вызова и выполнения функции стандартной библиотеки системы программирования. Вызываемая функция не содержит в себе

Слайд 7Операционные системы


8.1.1. Основные определения
Пример консольного приложения на языке С.
//Вычислить

количество вхождений
//ключа «API» в текстовую строку.
//Сделать программу не зависимой
//от регистра

ключа.
#include
#include
#include
#define ESC 27
int main()
{
char s[128], //Исходная строка
copy[128], //Копия строки
key[]="API", //Ключ
*p; //Начало анализируемой части строки
int k, //Количество вхождений ключа
do
{
Операционные системы8.1.1. Основные определенияПример  консольного приложения на языке С.//Вычислить количество вхождений//ключа «API» в текстовую строку.//Сделать программу

Слайд 8Операционные системы


8.1.1. Основные определения
Пример консольного приложения на языке С.
puts(«Введите

строку»);
gets(s);
strcpy(copy, s);
strupr(copy);
p = copy;
while(1)
{
p = strstr(p,

key);
if(p == NULL) break;
k++
p=p+3;
}
printf("%s - %d\n", key, k);
puts(«Для выхода нажмите ESC»);
} while (getch()!=ESC);
}
Операционные системы8.1.1. Основные определенияПример  консольного приложения на языке С.puts(«Введите строку»);gets(s);strcpy(copy, s);strupr(copy);p = copy;while(1) {

Слайд 9Операционные системы
8.1.1. Основные определения
В этой программе функции strcpy (copy, s),

strupr (copy), strstr (p, key)
не выполняют обращения к операционной системе.

Программист мог бы реализовать их самостоятельно.
Такие функции библиотек времени выполнения, как ввод-вывод, управление памятью и т. д., в своей реализации содержат обращения к системным функциям (системные вызовы), поэтому эти функции создают системное расширение программы.
В программе к таким функциям относятся:
puts («Введите строку»),
gets (s),
printf («%s - %d\n», key, k),
getch ().
Перечисленные функции времени выполнения реализуют внутри себя обращения к системным функциям. К таким функциям в Windows, например, могут относиться функции API Win32 ReadConsole() и WriteConsoleQ.
Операционные системы8.1.1. Основные определенияВ этой программе функции strcpy (copy, s), strupr (copy), strstr (p, key)не выполняют обращения

Слайд 10Операционные системы
8.1.1. Основные определения
Вызов системной функции из функции стандартной библиотеки

языка. Для выполнения системного вызова может быть выполнена как одна

функция DLL-библиотеки, так и несколько. Место вызова других системных функций показано в виде трех точек, разрывающих поток выполнения.
Операционные системы8.1.1. Основные определенияВызов системной функции из функции стандартной библиотеки языка. Для выполнения системного вызова может быть

Слайд 11Операционные системы
8.1.1. Основные определения
Пример на языке С, демонстрирующий дублирование произвольного

файла с помощью библиотечных функций read() и write().
#include
#include
int

main()
{
int fin, fout; //Дескрипторы файлов
char buff [512];
int n; // Количество прочитанных байтов
// Открыть файлы для ввода и вывода.
fin = open ("data.txt", O_RDONLY);
if (fin == -1) return 1;
fout = open ("newf.txt", O_CREAT \ O_TRUNC | O_WRONLY);
// Файлы открыты - можно копировать
while ((n = read(fin, buff, 512)) >0)
write (fout, buff, n);
return 0;
}

Слайд 12Операционные системы
8.1.1. Основные определения
Функции стандартной библиотеки языка С open(), read()

и write() в Windows вызывают соответствующие им функции API Win32:

CreateFile(), ReadFile() и WriteFile().
Операционные системы8.1.1. Основные определенияФункции стандартной библиотеки языка С open(), read() и write() в Windows вызывают соответствующие им

Слайд 13Операционные системы
8.1.1. Основные определения
Решения предыдущей задачи, но с использованием только

функций API Win32.
#include
int main()
{
HANDLE fin, fout;

//Дескрипторы файлов
char buff [512];
DWORD n, ocnt; //Кол.прочитанных/записанных байтов
BOOL s; //=0, если EOF
// Открыть файлы для ввода и вывода
fin = CreateFile ("data.txt", GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);
if (fin==INVALID_HANDLE_VALUE) return 1;
fout = CreateFile ("newf.txt", GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Копировать файл
while ((s = ReadFile (fin, buff, 512, &n, NULL))>0 && n>0)
WriteFile (fout, buff, n, &ocnt, NULL);
return 0;
}

Слайд 14Операционные системы
8.1.1. Основные определения
Программа, вызывающая функции API Win32, будет работать

быстрее своего аналога с функциями библиотеки языка.
Однако эта программа непереносима

на другие платформы, так как зависит от операционной системы Windows.
В то же время эта программа короче, так как не использует переходники в виде библиотечных функций языка.
Операционные системы8.1.1. Основные определения	Программа, вызывающая функции API Win32, будет работать быстрее своего аналога с функциями библиотеки языка.	Однако

Слайд 15Операционные системы
8.1.1. Основные определения
Вызов системной функции без использования функции стандартной

библиотеки.

Операционные системы8.1.1. Основные определенияВызов системной функции без использования функции стандартной библиотеки.

Слайд 16Операционные системы
8.1.1. Основные определения
Особенности ИПП, реализованного объектно-ориентированным языком программирования.
Функции, точнее

- методы, библиотек классов позволяют разработать любое Windows приложение, причем

эта разработка может вестись в режиме визуального проектирования.
Методы классов содержатся в DLL-библиотеках и, в отличие от функций библиотеки языка, в программу не включаются.

Многие из этих методов, как и функции библиотеки языка, рано или поздно обращаются к функциям ОС, так как управление ресурсами - это прерогатива операционной системы, и никакая прикладная программа не должна, минуя ОС, получать доступ к системным ресурсам.

Операционные системы8.1.1. Основные определенияОсобенности ИПП, реализованного объектно-ориентированным языком программирования.	Функции, точнее - методы, библиотек классов позволяют разработать любое

Слайд 17Операционные системы
8.1.1. Основные определения
Пример приложения на языке С#, выводящего окно

с кнопкой Ok. При нажатии на кнопку выводится окно сообщения.
using

System;
using System.Drawing;
using System.ComponentModel;
using System Windows.Forms;
Операционные системы8.1.1. Основные определенияПример приложения на языке С#, выводящего окно с кнопкой Ok. При нажатии на кнопку

Слайд 18Операционные системы
8.1.1. Основные определения
public class Form1: Form
{
private Button button1;
private Container

components = null;
public Form1()
{
button1 = new Button();
SuspendLayout();
// //button1
//
button1.Location =

new Point (100,100);
button1.TabIndex = 0;
button1.Name = "buttoni";
button1.Text = "buttoni";
button1.Click += new EventHandler ( button1_Click);
//
//Form1
AutoScaleBaseSize = new Size(5,13);
Операционные системы8.1.1. Основные определенияpublic class Form1: Form{private Button button1;private Container components = null;public Form1(){button1 = new Button();

Слайд 198.1.1. Основные определения
ClientSize = new Size(292,262);
Controls.Add ( button1);
Name

= "Form1";
Text = "Заголовок окна";
ResumeLayout (false);
}
protected override

void Dispose( bool disposing )
{
if (disposing)
if (components != null)
components.Dispose();
base.Dispose( disposing );
}
static void Main()
{
Application.Run (new Formi ());
}
private void button1_Click (object sender, EventArgs e)
{
MessageBoxShow ("Нажата кнопка Ok");
8.1.1. Основные определенияClientSize = new Size(292,262);Controls.Add ( button1);Name   =

Слайд 208.1.1. Основные определения
Методы классов заменяют многие (но не все) функции

API Win32. И таких методов предлагается еще больше, чем API-функций.

Благодаря механизму перегрузки функций разработчики предлагают более простые и понятные методы.
Смысл перегрузки заключается в том, что в классе одновременно может существовать несколько методов с одним и тем же именем, но с параметрами, отличающимися по количеству и типам.
В функции API все параметры приходится задавать сразу, причем смысл отдельных из них непонятен, а другие в конкретных случаях просто не нужны.
Разработчики API для таких случаев изобретают дополнительные функции с новыми именами и параметрами, однако количество функций API Win32 и так уже перевалило за 2 тысячи.
8.1.1. Основные определения	Методы классов заменяют многие (но не все) функции API Win32. И таких методов предлагается еще

Слайд 218.1.1. Основные определения
Иллюстрация выполнения методов классов стандартных библиотек.
Классы стандартных

библиотек, таких как MFC или FCL, реализованы в виде DLL-библиотек.

Как и в случае с функциями стандартных библиотек системы программирования, метод может выполниться либо без вызова системной функции (1), либо с вызовом (2).
8.1.1. Основные определенияИллюстрация выполнения методов классов стандартных библиотек. Классы стандартных библиотек, таких как MFC или FCL, реализованы

Слайд 228.1.1. Основные определения
Программа, решающая рассмотренную выше задачу, но с использованием

функций API Win32.
#include
#include
#include
LRESULT CALLBACK WindowFunc (HWND, UNIT,

WPARAM, LPARAM); // прототип
HINSTANCE hInst; // для сохранения дескриптора приложения
// В. Главная функция
int WINAPI WinMain (HINSTANCE hThisInst, //дескриптор экземпляра
HINSTANCE hPrevInst, // = 0
LPSTR lpszArgs, // хвост командной строки, 0
int iWinMode) // вид окна при запуске
{
HWND hwnd; // дескриптор окна
MSG msg; // сообщение
WNDCLASSEX wcl; // структура класса окна
hInst = hThisInst; // сохранить дескриптор приложения
8.1.1. Основные определенияПрограмма, решающая рассмотренную выше задачу, но с использованием функций API Win32.#include #include #include LRESULT CALLBACK

Слайд 238.1.1. Основные определения
// определить класс окна
wcl.cbSize = sizeof(wcl);
wcl.hlnstance = hThisInst;

// дескриптор данного приложения
wcl.lpszClassName= "Имя

класса"; // имя класса окна
wcl.lpfnWndProc = WndProc; // функция окна
wcl.style = 0; // стиль по умолчанию
wcl.hlcon = Loadlcon (NULL, IDI_APPLICATION); // стд.значок
wcl.hCursor= LoadCursor (NULL, IDC_ARROW); // стд. курсор
wcl.lpszMenuName= NULL; // без меню
wcl.cbClsExtra = 0; // без дополнительной
wcl.cbWndExtra = 0; //информации
wcl.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);
wcl.hIconSm= LoadIcon(NULL, IDI_APPLICATION);
if (! RegisterClassEx (&wcl) ) return 0; // зарегистрировать класс окна
8.1.1. Основные определения// определить класс окнаwcl.cbSize = sizeof(wcl);wcl.hlnstance = hThisInst;      // дескриптор

Слайд 248.1.1. Основные определения
// создать окно
hwnd = CreateWindow ("Имя класса",

// имя класса

;
"Заголовок окна", //заголовок
WS_OVERLAPPEDWINDOW, // стиль окна
CW_USEDEFAULT, // Х-координата окна
CW_USEDEFAULT, //Y-координата окна
CW_USEDEFAULT, //ширина окна
CW_USEDEFAULT, //высота окна
HWND_DESKTOP, // нет родительского окна
NULL, // нет меню
hThisInst, // дескриптор приложения
NULL ); /* без дополнительных аргументов */
ShowWindow (hwnd, iWinMode); // Показать окно
UpdateWindow (hwnd); // и вывести в него содержимое
8.1.1. Основные определения// создать окноhwnd = CreateWindow (

Слайд 258.1.1. Основные определения
while (GetMessage (&msg, NULL, 0,0) ) // Цикл

обработки сообщений
{
TranslateMessage (&msg); // Послать символьное сообщ. клавиатуры DispatchMessage

(&msg); // Вернуть управление Windows
}
return msg.wParam;
}
// С. Оконная функция
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM iParam)
{
static HWND hwndButton;
char szBuffer[50];
HDC hdc;
8.1.1. Основные определенияwhile (GetMessage (&msg, NULL, 0,0) ) // Цикл обработки сообщений{TranslateMessage (&msg);  // Послать символьное

Слайд 268.1.1. Основные определения
switch (iMsg)
{
case WM_CREATE:
hwndButton = CreateWindow ("BUTTON", "Ok",
BS_DEFPUSHBUTTON| WS_CHILD

|WS_VISIBLE, 100, 100, 60, 30, hwnd, (HMENU)1, hInst, NULL) ;
return

0;
case WM_COMMAND:
MessageBox (hwnd, "", "Нажата кнопка Ok", MBjOK);
break;
case WMJJESTROY:
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
8.1.1. Основные определенияswitch (iMsg){case WM_CREATE:hwndButton = CreateWindow (

Слайд 278.1.1. Основные определения
Если сравнить две последние программы, решающие одну и

ту же задачу, то можно увидеть, что в основе методов

классов, используемых в первой программе, лежат вызовы таких системных функций, как:
RegisterClassEx();
CreateWindow();
ShowWindow();
UpdateWindow ();
GetMessage ();
Translate Message ();
DispatchMessage ().
Существует еще порядка полутора тысяч других функций графического интерфейса GUI.
Главную функцию и функцию окна на языке С# необходимо оформить как методы класса, а в начале программы необходимо будет определить пространство имен System.Runtime.InteropServices. Кроме того, для каждой используемой функции API Win32 потребуется вставить атрибут DllImport, указывающий на принадлежность функции к DLL-библиотеке. Следом за этим атрибутом необходимо поместить прототип функции.
8.1.1. Основные определенияЕсли сравнить две последние программы, решающие одну и ту же задачу, то можно увидеть, что

Слайд 288.1.1. Основные определения
Такая техника обусловлена тем, что в языках С

и C++ прототипы всех системных функций описываются в заголовочном файле

windows.h, а в языке С# этот файл не используется.

Пример консольного приложения на языке С#, в котором используется системный вызов MessageBox().
using System;
using System.Runtime.InteropServices;
class Class1
{
[DllImport(“User32.dll")]
public static extern int MessageBox (int hParent, string Message,
string Caption, int Type);
static void Main()
{
MessageBox (0, "Функция API Win32", "Системный вызов",0);
}
}

8.1.1. Основные определенияТакая техника обусловлена тем, что в языках С и C++ прототипы всех системных функций описываются

Слайд 298.1.1. Основные определения
Программа с консольным приложением на языке C++, котороя

делает то же самое:
#include "windows.h"
void main()
{
MessageBox (0, "Функция API Win32",

"Системный вызов", МВ_ОК);
}
8.1.1. Основные определенияПрограмма с консольным приложением на языке C++, котороя делает то же самое:#include

Слайд 308.1.2. Классификация системных вызовов
Во всех операционных системах, исходя из видов

ресурсов, с которыми они связаны, функции ИПП можно разделить на

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

8.1. Интерфейс прикладного программирования

8.1.2. Классификация системных вызововВо всех операционных системах, исходя из видов ресурсов, с которыми они связаны, функции ИПП

Слайд 318.1.2. Классификация системных вызовов
Основные функции управления процессами и потоками

8.1.2. Классификация системных вызововОсновные функции управления процессами и потоками

Слайд 32Основные функции управления синхронизацией

Основные функции управления синхронизацией

Слайд 33Основные функции управления виртуальной и физической памятью

Основные функции управления виртуальной и физической памятью

Слайд 34Основные функции управления виртуальной и физической памятью

Основные функции управления виртуальной и физической памятью

Слайд 35Функции механизма отображения файла в память

Функции механизма отображения файла в память

Слайд 36Основные функции для файлового ввода-вывода

Основные функции для файлового ввода-вывода

Слайд 37Основные функции управления каталогами

Основные функции управления каталогами

Слайд 38Некоторые категории вызовов GUI

Некоторые категории вызовов GUI

Слайд 39Основные функции управления защитой

Основные функции управления защитой

Слайд 40Основные функции управления реестром

Основные функции управления реестром

Слайд 41Основные функции управления консолью

Основные функции управления консолью

Слайд 428.1.3. Программирование системных вызовов
8.1. Интерфейс прикладного программирования
Прикладные вызовы - это

способ обращения к функциям ИПП из прикладной программы. В различных

ОС этот способ реализуется по-разному.
В программах на языке ассемблера для MS DOS такой вызов выполняется с помощью команды программного прерывания int.
8.1.3. Программирование системных вызовов8.1. Интерфейс прикладного программированияПрикладные вызовы - это способ обращения к функциям ИПП из прикладной

Слайд 438.1.3. Программирование системных вызовов
Фрагмент программы, выполняющей открытие файла MYFILE.txt и

его чтение в оперативную память.
Открытие файла осуществляется путем выполнения функции

30h прерывания 21h. Выполняются также функции определения размера файла (42h) и чтения файла (3Fh).
Предполагается, что размер файла не более 10 Кбайтов.

; Откроем файл
mov АН, 30h ; Функция открытия файла
mov AL, 2 ; Доступ для чтения/записи
mov DX, offset FileName ; Адрес имени файла
int 21h
mov handle, AX ; Получили дескриптор
;Определим размер файла
mov AH, 42h ; Функция установки указателя
mov AL,2 ; Код для конца файла
mov BX, handle Дескриптор файла
mov CX, 0 ; Смещение
mov DX, 0 ; равно 0
int 21h ; установить указатель
jc pointer_error ; нa обработку ошибки
mov filesize, AX ; 3апомнить размер файла

8.1.3. Программирование системных вызовов	Фрагмент программы, выполняющей открытие файла MYFILE.txt и его чтение в оперативную память.	Открытие файла осуществляется

Слайд 448.1.3. Программирование системных вызовов
; Попытаемся прочитать 10 Кбайтов
mov

АН, 3Fh

; Функция чтения
mov BX, handle ; Дескриптор
mov CX, filesize ; Столько читать
mov DX, offset Buf_in ; в буфер
int 21h
mov CX, AX ; Столько реально прочитали

Pointer_error:

; Завершим программу

; Поля данных
Buf_in db 10000h dup ('') ; Буфер ввода
handle dw ? ; Ячейка для дескриптора
filesize dw ? ; Длина файла
FileName db 'MYFILE.txt', 0 ; Имя файла в формате ASCIIZ

8.1.3. Программирование системных вызовов; Попытаемся прочитать 10 Кбайтовmov   АН, 3Fh

Слайд 458.1.3. Программирование системных вызовов
На том же ассемблере, но в программах

для ОС Windows вызовы системных функций реализуются с помощью машинной

команды call. Эта команда осуществляет прямую передачу управления по указанному в команде адресу с возвратом.
Для вызова системных функций на ассемблере необходимо:
описать их прототипы;
подключить библиотеки импорта для компоновщика;
перед вызовом функции ее фактические параметры записать в стек;
выполнить команду call для передачи управления системной функции.
8.1.3. Программирование системных вызововНа том же ассемблере, но в программах для ОС Windows вызовы системных функций реализуются

Слайд 468.1.3. Программирование системных вызовов
Фрагмент Win32-программы на ассемблере с примерами вызова

функций CreateWindowEx(), ShowWindow() и UpdateWindow():

; Прототипы внешних функций
EXTERN CreateWindowExA@48:NEAR


EXTERN ShowWindow@8:NEAR
EXTERN UpdateWindow@4:NEAR

.586P
.MODEL FLAT, stdcall ; плоская модель
includelib с: \masm32 \lib \user32.lib

; Сегмент данных ---------------------------------
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
HWND DD 0 ; дескриптор окна
HINST DD 0 ; дескриптор приложения
TITLENAME DB 'Заголовок окна ', 0
CLASSNAME DB 'CLASS1', 0
….
_DATAENDS
8.1.3. Программирование системных вызововФрагмент Win32-программы на ассемблере с примерами вызова функций CreateWindowEx(), ShowWindow() и UpdateWindow():…; Прототипы внешних

Слайд 478.1.3. Программирование системных вызовов
; Сегмент кода ----------------------------------
_TEXT SEGMENT DWORD PUBLIC

USE32 'CODE'

; Создать окно зарегистрированного класса
; Записать параметры в стек

в стиле Паскаль
PUSH 0
PUSH [HINST]
PUSH 0
PUSH 0
PUSH 200 ; высота окна
PUSH 250 ; ширина окна
PUSH 100 ; координата левого верхнего угла
PUSH 100 ; координата левого верхнего угла
PUSH WS_OVERLAPPEDWINDOW
PUSH OFFSET TITLENAME ; имя окна
PUSH OFFSET CLASSNAME ; имя класса
PUSH 0
CALL CreateWindowExA@48
8.1.3. Программирование системных вызовов; Сегмент кода ----------------------------------_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'…; Создать окно зарегистрированного класса; Записать

Слайд 488.1.3. Программирование системных вызовов
; Проверка на ошибку
CMP

EAX, 0
JZ

ERR2
MOV [HWND], EAX ; дескриптор окна
;-------------------------------------------
PUSH 1
PUSH [HWND]
CALL ShowWindow@8 ; показать созданное окно
;-------------------------------------------
PUSH [HWND]
CALL UpdateWindow@4 ; перерисовать окно

Параметры записываются в стек в обратном порядке их перечисления в вызове функции. Это - стиль языка Pascal.
К имени функции следует добавить суффикс А@n, где число n показывает длину параметров в стеке. Языки высокого уровня скрывают истинные имена системных функций.

8.1.3. Программирование системных вызовов; Проверка на ошибку CMP

Слайд 498.1.4. Реализация интерфейса прикладного программирования
В большинстве операционных систем вызов функции

ИПП выполняется в контексте вызывающего процесса.
В ОС Windows наряду

с этим реализован также и аппарат выполнения системного вызова в отдельном процессе, который представлен сервером Win32 (защищенная подсистема Windows).
Реализацию выполнения функции ИПП в контексте вызывающего процесса можно разделить на два способа:
выполнение без переключения в режим ядра;
выполнение с переключением в режим ядра.
Выполнение функций ИПП без переключения в режим ядра также разбивается на два способа:
выполнение функции стандартной библиотеки системы программирования;
выполнение функции DLL-библиотеки.

8.1. Интерфейс прикладного программирования

8.1.4. Реализация интерфейса прикладного программирования	В большинстве операционных систем вызов функции ИПП выполняется в контексте вызывающего процесса. 	В

Слайд 508.1.4. Реализация интерфейса прикладного программирования
Вызов функций стандартных библиотек языка.
Поскольку функции

стандартных библиотек системы программирования включаются в состав прикладной программы еще

на этапе компоновки, то вызов таких функций осуществляется подобно вызову любой другой прикладной функции.
Такие вызовы реализуются машинной командой передачи управления с возвратом (call для процессоров Intel). Кроме передачи управления вызывающей программе требуется предоставить ей фактические параметры. Передача параметров может быть реализована разными способами, например через общую область памяти или через регистры. В Windows передачу параметров принято осуществлять через стек.
Для того чтобы вызывающая и вызываемая функции действовали согласованно, должны быть разработаны соглашения о порядке следования параметров и об очистке стека от этих параметров. Поскольку после выборки параметров из стека эти параметры становятся ненужными, стек должен быть очищен.
8.1.4. Реализация интерфейса прикладного программированияВызов функций стандартных библиотек языка.	Поскольку функции стандартных библиотек системы программирования включаются в состав

Слайд 518.1.4. Реализация интерфейса прикладного программирования
Вызов функций стандартных библиотек языка.
Существуют два

основных подхода к реализации передачи и приема фактических параметров. Первый

подход отражает стиль языка Си, а второй - языка Паскаль.
В первом подходе процедуре не известно, сколько параметров находится в стеке. В этом случае освобождение стека от параметров должна осуществлять вызывающая программа после команды вызова процедуры, например, с помощью таких машинных команд, как POP или ADD ESP.n, где n - длина параметров в байтах.
Второй подход основан на том, что количество параметров фиксировано, а стек можно освободить в вызываемой процедуре. Это достигается выполнением команды RET n, где n - длина параметров в байтах.
В Windows вызов функций API осуществляется по второй схеме, то есть в стиле языка Pascal. Впрочем, есть и исключения.
Реализация вызова функции DLL-библиотеки может быть осуществлена двумя способами:
через динамическое связывание с импортом;
через динамическое связывание без импорта.
8.1.4. Реализация интерфейса прикладного программированияВызов функций стандартных библиотек языка.	Существуют два основных подхода к реализации передачи и приема

Слайд 528.1.4. Реализация интерфейса прикладного программирования
Вызов функций стандартных библиотек языка.
Суть первого

способа заключается в том, что в программу, использующую DLL-библиотеку, включается

информация об этой библиотеке. Используя эту информацию, загрузчик операционной системы осуществляет загрузку требуемой DLL-библиотеки в оперативную память и производит связывание программы с функциями библиотеки. И только после этого программе передается управление.
При динамическом связывании без импорта программа не хранит информацию о вызываемых функциях и их DLL-библиотеках. Эта информация предоставляется операционной системе только во время выполнения программы, и связывание программы с функциями также осуществляется во время выполнения.
8.1.4. Реализация интерфейса прикладного программированияВызов функций стандартных библиотек языка.	Суть первого способа заключается в том, что в программу,

Слайд 538.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
Для динамического

связывания перед выполнением, во-первых, необходимо при создании выполнимого файла программы

на вход компоновщика, кроме основной программы, файла ресурсов и стандартных библиотек, передать так называемые библиотеки импорта.
Библиотека импорта представляет собой особую форму файла объектной библиотеки. Она используются компоновщиком для разрешения ссылок в исходном коде программы на функции соответствующих DLL-библиотек.
Библиотека импорта описывает состав соответствующей ей DLL-библиотеки, поэтому для каждой DLL-библиотеки существует библиотека с тем же именем, но с расширением .LIB.
Информация о составе DLL-библиотеки необходима компоновщику для установки таблицы косвенных переходов и секции импорта внутри файла .ЕХЕ.
Так, если в программе вызывается функция CreateWindow(), библиотека GDI32.LIB сообщает компоновщику, что данная функция находится в динамически подключаемой библиотеке GDI32.DLL. Поскольку эта информация сохраняется в файле .EXE, Windows может выполнить динамическое связывание программы с библиотекой GDI32.DLL во время загрузки программы.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. 	Для динамического связывания перед выполнением, во-первых, необходимо при создании

Слайд 548.1.4. Реализация интерфейса прикладного программирования
Схема создания файла PROGRAM.EXE и

используемые при этом библиотеки импорта .LIB.

8.1.4. Реализация интерфейса прикладного программирования Схема создания файла PROGRAM.EXE и используемые при этом библиотеки импорта .LIB.

Слайд 558.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
Пример запуска

компоновщика для создания программы ргоgram.exe.
С помощью ключа -DEFAULTLIB компоновщику передается

информация об используемых DLL-библиотеках.
link.exe –SUBSYSTEM: windows -OUT: program.exe program.obj program.res
-DEFAULTLIB: user32.lib gdi32.lib winmm.lib comdlg32.lib comctl32.lib
Библиотеки импорта являются результатом работы компоновщика при создании DLL-библиотек.
Как и объектные библиотеки, библиотеки импорта используются только при разработке программы.
Динамически подключаемые библиотеки используются во время выполнения программы.
Когда выполняется программа, используемая динамически, подключаемая библиотека должна находиться либо на диске, либо в оперативной памяти.
Если библиотеки в памяти нет, то ее файл ищется в следующем порядке:
в том же каталоге, где находится файл .ЕХЕ программы;
в текущем каталоге;
в системном каталоге Windows;
в каталоге, доступном из переменной PATH в реестре.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. Пример запуска компоновщика для создания программы ргоgram.exe.С помощью ключа

Слайд 568.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
В результате

работы компоновщика создается секция импорта idata. В эту секцию компоновщик,

используя информацию из библиотек импорта, заносит имена вызываемых в программе функций и соответствующих им DLL-библиотек. Каждая строка с именем функции располагается по конкретным адресам.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. 	В результате работы компоновщика создается секция импорта idata. В

Слайд 578.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
Кроме секции

импорта компоновщик в конце секции .text (здесь находится код программы)

создает таблицу косвенных переходов. Эта таблица состоит из команд jmp по одной для каждой функции DLL-библиотеки. Каждая команда jmp ссылается на строку секции idata. Поскольку команда jmp является командой косвенного перехода, то по указанному в команде адресу, например Адрес1, должен находиться также адрес.
Однако по адресам Адрес1, Адрес2, ....., АдресN в секции idata первоначально расположены строки с именами функций. Поскольку программа еще не получила управления, это несоответствие можно исправить, что и делает Загрузчик ОС.
В ходе загрузки программы в ОП осуществляется динамическая загрузка в память всех используемых, но еще незагруженных DLL-библиотек. После загрузки программы в память в секции импорта на месте имен функций создается таблица адресов используемых функций.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. 	Кроме секции импорта компоновщик в конце секции .text (здесь

Слайд 588.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
Структура программы

после ее связывания с DLL-библиотеками. На этом рисунке вместо строки

имя_функции-1 записан адрес этой функции в ОП, обозначенный как адрес_функции-1.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. 	Структура программы после ее связывания с DLL-библиотеками. На этом

Слайд 598.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание перед выполнением.
Теперь динамическое

связывание завершено и программа готова к выполнению, поэтому Загрузчик передает

ей управление. В процессе выполнения программы будет осуществляться прямая передача управления функциям DLL-библиотек без вмешательства операционной системы.

Пример
Последовательность действий, выполняемых при вызове функции Create Window() (см. рисунки выше).
Перед выполнением команды call параметры функции записываются в стек. Далее команда call сохраняет адрес возврата в стеке и передает управление по адресу Адрес1. По этому адресу находится команда jmp, расположенная в таблице косвенных переходов. Команда jmp, в свою очередь, извлекает содержимое ячейки по адресу Адрес1, то есть адрес вызываемой функции, и передает управление по этому адресу. Адресом передачи управления является адрес_функции-1, а это не что иное, как адрес функции CreateWindow(). Эта функция извлекает параметры, чистит стек, выполняет свою основную работу и в конце выполняет команду ret. Последняя извлекает из стека адрес возврата, записанный командой call, и передает управление на продолжение выполнения вызывающей программы.

8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание перед выполнением. 	Теперь динамическое связывание завершено и программа готова к выполнению,

Слайд 608.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание в процессе выполнения.
Динамическое связывание

во время выполнения программы применяется в тех случаях, когда на

этапе разработки программы не известно, какую DLL-библиотеку следует подключить, или когда известная DLL-библиотека используется опционально.
Предположим, что необходимо выполнить функцию Ellipse3D(), рисующую эллипс в стиле 3D и имеющую формат:
• BOLL Ellipse3D (HDC hdc, int x1, int y1, int x2, int y2);
Пусть эта функция принадлежит библиотеке Graph3D.dll.
Вызвать функцию Ellipse3D() традиционным способом нельзя, так как в секции импорта idata отсутствует информация о библиотеке, которой принадлежит эта функции.
Введем новый тип:
• typedef BOOL (WINAPI * PFNELL3D) (HDC, int, int, int, int);
Определим две переменные:
• HMODULE hLibrary; // дескриптор DLL-библиотеки
• PFNELL3D pfnEllipse3D(); // адрес (указатель) функции
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание в процессе выполнения.	Динамическое связывание во время выполнения программы применяется в тех

Слайд 618.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание в процессе выполнения.
Осуществим динамическую

загрузку библиотеки Graph3D.dll в оперативную память, после чего получим адрес

функции Ellipse3D() в памяти:
• hLibrary = LoadLibrary («GDI32.DLL»);
• pfnEUipse3D = (PFNELL3D) GetProcAddress (hLibrary, « Ellipse3D»);
Функция LoadLibrary() возвращает NULL, если библиотеку не удается загрузить. Теперь можно вызывать функцию по ее адресу:
• pfnEUipse3D (hdc, x1, y1, x2, y2);
Если библиотека больше не нужна, можно освободить занимаемую ею память:
• Free Library (hLibrary);
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание в процессе выполнения.	Осуществим динамическую загрузку библиотеки Graph3D.dll в оперативную память, после

Слайд 628.1.4. Реализация интерфейса прикладного программирования
Динамическое связывание в процессе выполнения.
Особенности

использование DLL-библиотек в Windows:
Поскольку функции DLL-библиотеки выполняются в контексте процесса,

то все, что делает динамически подключаемая библиотека, делается от имени процесса. Например, память, запрашиваемая библиотекой, выделяется в адресном пространстве процесса, все создаваемые библиотекой окна и открываемые файлы принадлежат приложению.
Несколько приложений одновременно могут использовать одну и ту же динамически подключаемую библиотеку. Это не приводит к нарушению безопасности, так как код функций библиотеки защищен от записи, а данные, с которыми работает DLL, для каждого процесса свои.
8.1.4. Реализация интерфейса прикладного программированияДинамическое связывание в процессе выполнения.	 Особенности использование DLL-библиотек в Windows:Поскольку функции DLL-библиотеки выполняются

Слайд 638.1.4. Реализация интерфейса прикладного программирования
Вызовы системных сервисов.
К числу функций

ИПП, выполняющихся в контексте вызывающего процесса, но с переключением в

режим ядра, относятся прежде всего базовые функции операционной системы, или по-другому -системные сервисы.
Если требуется использование команд:
изменяющих состояние системных регистров,
осуществляющих взаимодействие с портами ввода-вывода,
воздействующих на механизм защиты и т. д.,
то такую работу могут выполнить только базовые системные сервисы. Связано это с тем, что такие команды являются привилегированными, а выполнение привилегированных команд разрешено только в режиме ядра (супервизора).
Изменение данных, принадлежащих операционной системе, также разрешено только программам режима ядра.
Никакая программа пользовательского режима не может изменить содержимое памяти операционной системы, если страница этой памяти имеет режим «супервизор» или защищена от записи.
Так как ограничения защиты не распространяются на ОС, то вызываемые функции должны выполняться в режиме ядра и, естественно, принадлежать операционной системе.
8.1.4. Реализация интерфейса прикладного программированияВызовы системных сервисов. 		К числу функций ИПП, выполняющихся в контексте вызывающего процесса, но

Слайд 648.1.4. Реализация интерфейса прикладного программирования
Способы реализации ИПП (см. рис. далее):

Выполнение функции стандартной библиотеки системы программирования без вызова системных

функций (рис. 10, позиция 1).
Выполнение системной функции API Win32 без вызова базовых функций ОС (позиция 2).
Выполнение нескольких функций DLL-библиотек для реализации системного вызова без вызова базовых функций ОС (позиция 3).
Выполнение системного вызова с обращением из DLL-функции (заглушки) к системному сервису. Вызов системного сервиса осуществляется через программное прерывание (позиция 4).
Вызов базовой функции ОС через прерывание непосредственно из программы, минуя заглушку (позиция 8).
Способы 1-3 были рассмотрены выше. Такие функции никак не связаны с базовыми сервисами ОС.
8.1.4. Реализация интерфейса прикладного программированияСпособы реализации ИПП (см. рис. далее):  Выполнение функции стандартной библиотеки системы программирования

Слайд 65Способы реализации ИПП

Способы реализации ИПП

Слайд 668.1.4. Реализация интерфейса прикладного программирования
Вызовы системных сервисов.
Для того чтобы

вызов функции режима ядра из пользовательского режима был безопасным, необходимо,

чтобы программы могли вызывать только строго определенные функции и не могли управлять точками входа в эти функции.
Кроме того, необходимо, чтобы после вызова базовой функции программа не могла изменить значения передаваемых параметров.
Практически во всех ОС перечисленные требования реализуются вызовом базовых сервисов с помощью программного прерывания (позиции 5 и 8 на рисунке выше).
Механизм прерываний выполняет следующую последовательность действий:
программа, выдавшая запрос на прерывание, теряет управление;
осуществляется переключение режима «пользователь» на режим «ядро»;
происходит переключение с пользовательского стека на стек ядра;
выполняется копирование параметров из стека пользовательского режима в стек ОС;
из таблицы прерываний (IDT) выбирается адрес точки входа в обработчик прерывания;
осуществляется передача управления в обработчик.

8.1.4. Реализация интерфейса прикладного программированияВызовы системных сервисов. 		Для того чтобы вызов функции режима ядра из пользовательского режима

Слайд 678.1.4. Реализация интерфейса прикладного программирования
Вызовы системных сервисов.
Этот процесс является

безопасным, так как программа не может изменить таблицу прерываний в

силу того, что она находится в защищенной памяти, а после смены режима управлением уже владеет ОС, которая никогда не предоставит свои привилегии прикладной программе. Обратный процесс смены режима реализуется без прерывания, по команде iret (позиция 7 на пред. рис.).
В Windows упомянутое выше прерывание называется ловушкой.
Поскольку количество базовых функций может быть весьма велико, то на все функции, как правило, не хватает векторов (дескрипторов в IDT) программных прерываний.
Поэтому часто используется один или несколько, обработчики которых выполняют роль диспетчеров базовых функций.
Так, в современных ОС Windows все базовые функции вызываются командой int 2Eh (позиция 5 на пред. Рис.). С этим прерыванием связан обработчик ловушек, который содержит диспетчер системных сервисов. Диспетчер по номеру функции, используя таблицу распределения базовых функций, вызывает требуемый сервис (позиция 6 на пред. рис.).
8.1.4. Реализация интерфейса прикладного программированияВызовы системных сервисов. 		Этот процесс является безопасным, так как программа не может изменить

Слайд 688.1.4. Реализация интерфейса прикладного программирования
Вызовы системных сервисов.
Прикладной программе Windows

не запрещено вызвать с помощью прерывания системный сервис, не задействуя

при этом посредников в виде функций DLL-библиотек (позиция 8 на пред. Рис.).
В MS DOS нельзя обойтись без вызова системных сервисов через прерывание. В этой операционной системе не используется аппарат динамического связывания, поэтому вызов всех системных сервисов осуществляется через соответствующие программные прерывания.
Например, наиболее распространенным является прерывание int 21h, которое является диспетчером основных функций.
Другим диспетчером является видеодрайвер BIOS, вызываемый через int 10h.
Перед выполнением указанных прерываний в регистр АН должен быть загружен номер вызываемой функции, а в другие регистры - параметры.
Windows не разрешает MS DOS самой выполнять системные сервисы, поэтому Windows перехватывает прерывания MS DOS и сама выполняет требуемые функции.
8.1.4. Реализация интерфейса прикладного программированияВызовы системных сервисов. 		Прикладной программе Windows не запрещено вызвать с помощью прерывания системный

Слайд 698.1.4. Реализация интерфейса прикладного программирования
Заглушки.
В современных ОС системные сервисы,

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

промежуточными функциями, называемыми заглушками (позиция 4 на пред. Рис.).
Заглушки являются функциями DLL-библиотек. Имена системных функций и являются именами заглушек.
Применение заглушек решает несколько задач:
Заглушки, с одной стороны, являются посредниками между документируемым стандартом API Win32 и частной реализацией системных сервисов - с другой стороны. Так, базовый уровень в Windows 95/98 и в системах Windows, разработанных по технологии NT, реализован по-разному. Однако на уровне API эти операционные системы совместимы.
Заглушки могут выполнять ту часть работы, которую системные сервисы могут вынести на уровень режима «пользователь».
Заглушки выполняют проверки параметров на их совместимость, непротиворечивость и безопасность.
Заглушки выполняют упаковку параметров перед вызовом базового сервиса.
8.1.4. Реализация интерфейса прикладного программирования	Заглушки. 		В современных ОС системные сервисы, как правило, не документируются, так как они

Слайд 708.1.4. Реализация интерфейса прикладного программирования
Заглушки.
Системные сервисы не должны считать,

что параметры проверены заглушкой и безопасны.
Проверки, выполняемые заглушками, полезны

для другого вида реализации интерфейса, а именно для выполнения системных функций в другом процессе, в частности, защищенной подсистемой Win32.
8.1.4. Реализация интерфейса прикладного программирования	Заглушки. 		Системные сервисы не должны считать, что параметры проверены заглушкой и безопасны. 		Проверки,

Слайд 718.1.4. Реализация интерфейса прикладного программирования
Выполнение системных вызовов в другом процессе.
Необходимость

выполнения системных вызовов в другом процессе может быть продиктована следующими

требованиями:
требуется уменьшить размер ядра ОС;
требуется повысить надежность работы ОС;
требуется реализовать возможность компиляции исходных текстов программ других, несовместимых ОС.
Реализация перечисленных требований ведет к изменению традиционной архитектуры операционной системы.
В современной ОС Windows разработана так называемая защищенная подсистема Win32, которая является сервером (рисунок ниже).
Программы пользователей в этой архитектуре выступают в роли клиентов. Назначение подсистемы состоит в выполнении системных запросов.
Подсистема запускается как отдельный процесс пользовательского режима.
Для взаимодействия с подсистемой используется очередь сообщений. Windows получает запрос от программы (через заглушки) и помещает его в очередь сообщений ( позиция 2 на рис.).
8.1.4. Реализация интерфейса прикладного программированияВыполнение системных вызовов в другом процессе.		Необходимость выполнения системных вызовов в другом процессе может

Слайд 728.1.4. Реализация интерфейса прикладного программирования
Выполнение системных вызовов в другом процессе.
Подсистема

выбирает запрос (позиция 3 на рис.), выполняет его с помощью

соответствующих функций DLL-библиотек и помещает результаты назад в очередь сообщений. Для выполнения операций с очередью сообщений в Windows используется специальный базовый сервис (LPC).
Поскольку каждый процесс в современной ОС Windows выполняется в отдельном адресном пространстве, то все процессы изолированы друг от друга. Вследствие этого никакой прикладной процесс не может оказать влияние на функционирование подсистемы. Поэтому такая подсистема Win32 и называется защищенной.
8.1.4. Реализация интерфейса прикладного программированияВыполнение системных вызовов в другом процессе.		Подсистема выбирает запрос (позиция 3 на рис.), выполняет

Слайд 73 На рис. позицией 1 обозначен вызов обработчика ловушки и диспетчера

базовых сервисов. Позиции 2 и 3 показывают, что для выполнения

операций с очередью сообщений в Windows используется специальный базовый сервис (LPC).
На рис. позицией 1 обозначен вызов обработчика ловушки и диспетчера базовых сервисов. Позиции 2 и 3 показывают,

Слайд 748.1.4. Реализация интерфейса прикладного программирования
Выполнение системных вызовов в другом процессе.
Перенос

кода из ядра ОС в подсистему привел к уменьшению ядра

и, следовательно, к повышению качества его проработки и надежности выполнения.
С другой стороны, взаимодействие ОС с подсистемой через очередь влечет за собой существенное увеличение времени выполнения запросов.
Связано это с тем, что всякие переключения с исходного процесса на процесс подсистемы и назад вызывают запоминание и восстановление контекстов задач, а это длительная операция.
Поэтому разработчики Windows, с одной стороны, улучшили взаимодействие защищенной подсистемы с исполнительной системой ОС с помощью специальной программы LPC (средство локального вызова процедур, позиции 2 и 3), а с другой стороны, вернули наиболее часто используемые функции назад, в режим ядра, например, интерфейс графических устройств и диспетчер окон.
Внутри ОС Windows базовые сервисы исполнительной системы строятся на основе примитивов ядра.
В ОС UNIX нет ярко выраженной исполнительной системы, подобной Windows, поэтому все базовые сервисы размещаются в ядре.
8.1.4. Реализация интерфейса прикладного программированияВыполнение системных вызовов в другом процессе.		Перенос кода из ядра ОС в подсистему привел

Слайд 758.2. Интерфейс пользователя
Интерфейс пользователя - это совокупность средств, предоставляемая разработчиком

программы для взаимодействия пользователя с этой программой. Существуют приложения, которые

во время своего выполнения не взаимодействуют с пользователем, но такие случаи встречаются редко.
Изучение программы, по сути дела, сводится к изучению ее интерфейса. Интерфейс программ формируется из тех элементов, которые предоставляют система программирования и операционная система.
Пример. MS DOS работает в текстовом режиме видеосистемы и не поддерживает мышь, поэтому основным типом интерфейса является так называемая командная строка.
Разработчикам ПО MS DOS не предоставляет графические средства для построения меню, элементов управления и т. д., поэтому программисты вынуждены были сами вести разработку подобных элементов интерфейса. Это приводит к большим накладным расходам при программировании и к появлению огромного количества разномастных элементов интерфейса, не всегда одинаково функционирующих.

8.2.1. Типы интерфейсов

8.2. Интерфейс пользователя		Интерфейс пользователя - это совокупность средств, предоставляемая разработчиком программы для взаимодействия пользователя с этой программой.

Слайд 76 В современных операционных системах элементы интерфейса поддерживаются самими системами.
Так как

в современных ОС все (или практически все) элементы интерфейса предоставляет

операционная система, то можно описать назначение тех или иных элементов интерфейса, не вдаваясь в функциональное наполнение приложения.
Поскольку с операционной системой могут взаимодействовать различные категории пользователей - администраторы, системные программисты, операторы, программисты и конечные пользователи, то каждой из этих категорий предоставляется свой интерфейс.

8.2.1. Типы интерфейсов

В современных операционных системах элементы интерфейса поддерживаются самими системами.		Так как в современных ОС все (или практически все)

Слайд 778.2.1. Типы интерфейсов

8.2.1. Типы интерфейсов

Слайд 78 В современных операционных системах элементы интерфейса поддерживаются самими системами.
Вид интерфейса

взаимодействия пользователя с ОС исторически определялся возможностями технических средств общения

пользователя с системой.
Достаточно давно таким средством был пульт оператора, а позже - электрическая пишущая машинка, называемая консолью. С машинки можно было вводить команды и на нее же получать сообщения от ОС.
В недавнем прошлом пишущая машинка была заменена терминалом.
Так как изменилась аппаратная база интерфейса, но не изменился характер взаимодействия, термин «консоль» продолжал существовать.
Практически все современные ОС, несмотря на появление графических видеосистем, координатных устройств, например мыши, продолжают поддерживать консоль.
Это связано с тем, что существует большая группа программ, например утилит, для которых не требуется многооконный графический интерфейс.
Для консоли характерны текстовый режим работы и взаимодействие в виде «приглашение/вопрос - ввод -обработка - ответ».

8.2.1. Типы интерфейсов

В современных операционных системах элементы интерфейса поддерживаются самими системами.		Вид интерфейса взаимодействия пользователя с ОС исторически определялся возможностями

Слайд 79 Информация вводится в фиксированную строку, называемую командной. Выводимая информация прокручивается

в режиме скроллинга.
Для таких операционных систем, как UNIX, Linux, MS

DOS, консоль является основным интерфейсом.
Чтение вводимых в командной строке команд в этих системах осуществляет так называемый командный интерпретатор, являющийся оболочкой системы.
В роли терминала на персональных компьютерах выступает клавиатура с монитором.
Поскольку первые персональные компьютеры оснащались алфавитно-цифровыми мониторами, то наиболее очевидным и простым мог быть только консольный интерфейс.
С появлением графических режимов и с дальнейшим развитием операционных систем были разработаны графические интерфейсы, представляющие собой надстройки над операционными системами.
В Windows такая надстройка, называемая также графической средой, является неотъемлемой частью ОС. Она реализуется с помощью драйвера видеосистемы, функций интерфейса графических устройств (GDI) и графического интерфейса пользователя (GUI).

8.2.1. Типы интерфейсов

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

Слайд 808.2.1. Типы интерфейсов

8.2.1. Типы интерфейсов

Слайд 81 В UNIX-подобных системах (UNIX , Linux) графический интерфейс строится на

основе стандарта X Window System.
Система X Window построена на модели

«клиент/ сервер».
Основой подсистемы является так называемый Х-сервер, который работает на компьютере пользователя и обеспечивает вывод изображения на экран монитора, а также ввод данных от пользователя (через клавиатуру, мышь и т. п.).
Приложения выступают в роли клиентов. Для общения с сервером клиентам предоставляется библиотека XLib, содержащая функции низкоуровневого взаимодействия.
Х-сервер предоставляет способ манипулирования окнами, но не определяет, как в действительности осуществляются эти операции.
Управлением пространством экрана занимается клиент Х-сервера, называемый менеджером окон. Эта программа решает, где размещать окна, дает пользователю средства управлять видом, положением и размером окон.

8.2.1. Типы интерфейсов

В UNIX-подобных системах (UNIX , Linux) графический интерфейс строится на основе стандарта X Window System.		Система X Window

Слайд 82 Разработано множество различных менеджеров окон, пользователь может использовать любой из

них по своему вкусу. Разные менеджеры окон могут обеспечивать различный

вид окон за счет использования различных рамок и оконных меню. Но все они используют одну и ту же базовую графическую утилиту Х-сервер.
Клиент и сервер являются отдельными процессами, поэтому они могут работать на разных компьютерах и взаимодействовать по сети. Приложение можно запустить, например, на большой машине, а окна будут выводиться на экран персонального компьютера. Эта особенность системы X Window является одним из основных отличий от ОС Windows.
Следующий уровень в реализации интерфейсных возможностей в UNIX-подобных системах представлен интегрированными графическими средам. В состав этих сред помимо служебных программ входит множество прикладных программ для решения различных задач. Существует большой список интегрированных графических сред разных производителей.

8.2.1. Типы интерфейсов

Разработано множество различных менеджеров окон, пользователь может использовать любой из них по своему вкусу. Разные менеджеры окон

Слайд 83 В системах UNIX и Linux, использование командных языков продолжает оставаться

традиционным способом взаимодействия пользователя с этими системами.
Особенно это справедливо

для администраторов и системных программистов.
После входа пользователя в систему для него запускается один из командных интерпретаторов. Обычно в системе поддерживается несколько командных интерпретаторов с похожими, но различающимися своими возможностями командными языками.
Общее название для любого командного интерпретатора ОС UNIX - shell. Интерпретатор представляет собой внешнее окружение ядра системы и является ее оболочкой.

8.2.2. Консоль

8.2. Интерфейс пользователя

В системах UNIX и Linux, использование командных языков продолжает оставаться традиционным способом взаимодействия пользователя с этими системами.

Слайд 84 В MS DOS интерпретатор также является оболочкой системы; он представлен

только одним файлом - COMMAND.COM.
Сторонними производителями программного обеспечения были

разработаны и другие оболочки, например - NC, VC или FAR, но они являются оболочкой скорее интерпретатора команд, нежели операционной системы, так как для выполнения системных команд вызывают COMMAND.COM. Перечисленные выше программы значительно удобнее командной строки.
Как в UNIX-подобных системах, так и в MS DOS вызванный командный интерпретатор выдает приглашение на ввод пользователем командной строки, которая может содержать простую команду или конвейер команд.
После выполнения очередной команды и выдачи на экран консоли соответствующих результатов интерпретатор снова выдает приглашение на ввод команды, и так до тех пор, пока пользователь не завершит свой сеанс работы путем ввода соответствующей команды (например, exit).

8.2.2. Консоль

В MS DOS интерпретатор также является оболочкой системы; он представлен только одним файлом - COMMAND.COM. 		Сторонними производителями

Слайд 85 Командные языки, используемые в ОС UNIX, можно использовать и для

написания сложных программ.
Последняя возможность опирается на механизм командных файлов

- сценариев оболочки (shell scripts), которые могут содержать произвольные последовательности команд. При запуске командного файла на выполнение интерпретатор читает из файла строку за строкой и последовательно интерпретирует команды.
Мощной возможностью ОС является перенаправление стандартного ввода-вывода. Реализация механизма основывается на том, что в ОС UNIX и MS DOS любой ввод-вывод трактуется как ввод из некоторого файла и вывод в некоторый файл.
Клавиатура и экран терминала тоже интерпретируются как файлы (первый можно только читать, а во второй можно только писать). Поскольку во всех случаях поддерживается потоковый ввод-вывод, то нет никаких препятствий для перенаправления потока. Например, весь вывод информации в консоль (т. е. на экран) можно перенаправить в файл на магнитный диск.
Еще одна возможность ОС - конвейеризация команд, при которой вывод одной программы автоматически становится вводом другой программы.

8.2.2. Консоль

Командные языки, используемые в ОС UNIX, можно использовать и для написания сложных программ. 		Последняя возможность опирается на

Слайд 86 Команды изменения файловой системы
8.2.2. Консоль

Команды изменения файловой системы 8.2.2. Консоль

Слайд 87 Команды сохранения данных
8.2.2. Консоль

Команды сохранения данных8.2.2. Консоль

Слайд 88 Команды получения информации о файлах/каталогах
8.2.2. Консоль

Команды получения информации о файлах/каталогах 8.2.2. Консоль

Слайд 89 Команды получения информации о файлах/каталогах
8.2.2. Консоль

Команды получения информации о файлах/каталогах 8.2.2. Консоль

Слайд 90 Команды получения информации о внутренней структуре файловой системы
8.2.2. Консоль

Команды получения информации о внутренней структуре файловой системы 8.2.2. Консоль

Слайд 91 Команды управление процессами и пользователями
8.2.2. Консоль

Команды управление процессами и пользователями 8.2.2. Консоль

Слайд 92 Команды управление процессами и пользователями
8.2.2. Консоль

Команды управление процессами и пользователями 8.2.2. Консоль

Слайд 93 В отличие от UNIX или Linux, в ОС Windows основным

интерфейсом является графический. Он встроенный, и без него система существовать

не может.
В то же время Windows позволяет создать в режиме эмуляции несколько консольных окон. В этих окнах эмулируется текстовый режим с моноширинным шрифтом и с командной строкой; ввод и вывод осуществляются в позицию текстового курсора.
Стандартное приложение, создающее эту консоль, находится в файле cmd.exe. Программисты могут разработать любое свое консольное приложение, но только cmd.exe является стандартным приложением Windows, предназначенным для ввода и выполнения команд ОС.
Команды можно объединить в командный файл. Существуют специальные команды для управления последовательностью выполнения строк в командном файле.

8.2.2. Консоль

В отличие от UNIX или Linux, в ОС Windows основным интерфейсом является графический. Он встроенный, и без

Слайд 94 Одним из главных требований, предъявляемых к пользовательскому интерфейсу современных операционных

систем, является его дружественность, которая предполагает, что действия, выполняемые пользователем,

должны быть интуитивно понятными.
Лидером в решении этого вопроса являются современные ОС Windows. В качестве составных частей пользовательского интерфейса Windows предлагает набор сервисных и служебных программ, так называемый Рабочий стол с Главным меню ОС и элементы интерфейса приложений.
Большая группа программ, отвечающих за настройку компьютера, объединена так называемой «Панелью управления». Ряд этих программ составляет интерфейс администратора.
Центральной же частью интерфейса пользователя является модель «Рабочего стола».

8.2.3. Графическая среда

8.2. Интерфейс пользователя

Одним из главных требований, предъявляемых к пользовательскому интерфейсу современных операционных систем, является его дружественность, которая предполагает, что

Слайд 95Модель «Рабочего стола»
Основным элементом графического интерфейса является Рабочий стол.
Рабочий

стол - это особый вид окна, в которое выводятся значки

и ярлыки приложений, файлов и папок.
Внизу Рабочего стола отображаются кнопка ПУСК, панель быстрого запуска, панель задач и панель идентификации (уведомлений).
Чтобы запустить на выполнение программу с панели быстрого запуска, достаточно одного щелчка мыши.
Полезной программой, отображаемой на этой панели, является программа «Свернуть все окна» - это удобная возможность быстро свернуть все окна на панель задач.
На панели задач отображаются в виде кнопок все запущенные приложения. Щелчком мыши на этих кнопках можно переключаться с приложения на приложение.
По щелчку мыши на кнопке ПУСК выводится Главное меню ОС, предназначенное для запуска зарегистрированных в системе задач.

8.2.3. Графическая среда

Модель «Рабочего стола»		Основным элементом графического интерфейса является Рабочий стол. 		Рабочий стол - это особый вид окна, в

Слайд 96Модель «Рабочего стола»
Состав Рабочего стола и меню ПУСК являются отображением

содержимого папок с соответствующими именами - «Рабочий стол» (Desktop) и

«Главное меню».
Эти папки создаются для каждого пользователя, зарегистрированного в системе, причем содержимое пользовательской папки при выводе Рабочего стола или его Главного меню объединяются с общими папками, например папка
c:\Documents and Settings\<имя пользователя>
объединяется с папкой
c:\Documents and Settings\All Users.

8.2.3. Графическая среда

Модель «Рабочего стола»		Состав Рабочего стола и меню ПУСК являются отображением содержимого папок с соответствующими именами - «Рабочий

Слайд 97Модель «Рабочего стола»
С помощью двойного щелчка мыши на значке или

ярлыке в зависимости от типа файла будет запущено либо данное

приложение, либо приложение, связанное с типом файла.
По щелчку правой кнопки выводится контекстно-зависимое меню, содержащее полезные команды. Наиболее часто используемой командой меню является команда «Свойства».
У разных значков могут быть разные контекстные меню.
Очень широко применяемой возможностью пользовательского интерфейса являются операции, выполняемые через буфер обмена.
Пользователь может поместить в буфер фрагмент текста, а затем вставить содержимое буфера в другое место как исходного, так и другого документа. Так же можно поступать и с файлами (папками), с той лишь разницей, что в буфер обмена помещается путь к объекту, а вставка приводит к копированию файла (папки) в новое место.
Важной чертой интерфейса является возможность перетаскивания объектов (drag-and-drop) при нажатой клавише мыши. Если, например, текстовый файл перетащить на значок MS Word, то откроется окно редактора с загруженным документом.

8.2.3. Графическая среда

Модель «Рабочего стола»		С помощью двойного щелчка мыши на значке или ярлыке в зависимости от типа файла будет

Слайд 98Модель «Рабочего стола»
Другой весьма важной особенностью Windows является связывание и

внедрение объектов (OLE). Эта технология определяет форму взаимодействия процессов. Например,

из окна редактора MS Word пользователь может запускать программу проверки орфографии, купленную у стороннего производителя.

8.2.3. Графическая среда

Модель «Рабочего стола»	Другой весьма важной особенностью Windows является связывание и внедрение объектов (OLE). Эта технология определяет форму

Слайд 99 В каждом Windows-приложении реализация графического пользовательского интерфейса составляет большую часть

ее программного кода. При работе с приложениями обращает на себя

внимание стандартизация интерфейса.
Во-первых, все окна имеют рамку, которая определяет их границы; рамка используется также для изменения размеров окна.
В верхнем левом углу окна находится значок системного меню. Щелчок мыши на этот значок открывает системное меню.
Справа от значка системного меню находится заголовок окна.
В правом верхнем углу окна расположены кнопки минимизации, полноэкранной развертки (полноэкранного представления) и закрытия окна.
Ниже находится рабочая область - это часть окна, в которой отображается выполнение программы.
Стандартными элементами пользовательского интерфейса стали главное меню программы, контекстные меню, горячие клавиши, панели инструментов, строка состояния, вертикальные и горизонтальные линейки прокрутки, различные элементы управления и т. д.

8.2.4. Пользовательский интерфейс приложений

8.2. Интерфейс пользователя

В каждом Windows-приложении реализация графического пользовательского интерфейса составляет большую часть ее программного кода. При работе с приложениями

Слайд 100 К наиболее часто используемым стандартным и общим элементам управления

относятся кнопки, флажки, переключатели, окна ввода, списки, полосы прокрутки, окна

открытия файлов, инструменты, закладки (страницы), подсказки и другие.
Следует отметить, что почти все элементы управления являются полноценными окнами. Кроме главного окна и элементов управления Windows поддерживает и другие виды окон: модальные и немодальные диалоговые окна, окна сообщений, диалоговые окна общего пользования и др.
Познакомившись с каким-либо новым элементом управления, пользователь может быть уверен, что в другом приложении этот элемент будет иметь то же самое назначение. В этом и заключается основной смысл стандартизации пользовательского интерфейса.

8.2.4. Пользовательский интерфейс приложений

8.2. Интерфейс пользователя

К наиболее часто используемым стандартным и общим элементам управления относятся кнопки, флажки, переключатели, окна ввода, списки,

Слайд 101 Появление элементов управления стало возможным благодаря реализации новой архитектуры взаимодействия

пользователя с программой.
Во многих операционных системах (MS DOS, UNIX) взаимодействие

с пользователем инициирует программа пользователя.
Например, в MS DOS при необходимости осуществить ввод данных с клавиатуры приложение выводит приглашение и выполняет запрос к системе.
Это характерно и для всех Windows-программ, написанных в стиле консольного приложения. Такие программы сами обращаются к операционной системе. Прикладная программа (ПП) сама определяет, в какой момент времени она хочет получить от пользователя информацию.

8.2.5. Архитектура, управляемая событиями

8.2. Интерфейс пользователя

Появление элементов управления стало возможным благодаря реализации новой архитектуры взаимодействия пользователя с программой.		Во многих операционных системах (MS

Слайд 102 Схема взаимодействия на примере ввода с клавиатуры с помощью функции

getchar() языка С. Цифрами показана последовательность выполнения вызова.
8.2.5. Архитектура,

управляемая событиями
Схема взаимодействия на примере ввода с клавиатуры с помощью функции getchar() языка С. Цифрами показана последовательность выполнения

Слайд 103 Весь интерфейс имеет структуру «приглашение или вопрос - ожидание ввода

- ввод - обработка - вывод результата». При такой архитектуре

взаимодействия программа управляет пользователем.
Ранее эта архитектура была вполне приемлемой, пока не появилось множество источников информации, отличных от клавиатуры. Например, теперь благодаря наличию мыши пользователь по своему усмотрению может выбрать требуемую команду меню или нажать какую-либо кнопку, щелкнуть на значке панели управления, ввести текст или, в конце концов, нажать допустимую комбинацию клавиш.
Для реализации такого сценария нужна новая архитектура, в которой пользователь управляет программой, а последняя всегда готова обрабатывать ввод из любых источников информации. Именно подобное взаимодействие и реализовано в Windows.
Прикладная программа теперь не запрашивает с помощью системных вызовов ввод данных с клавиатуры, вместо этого она ждет, когда Windows введет информацию и передаст ее вашей программе.

8.2.5. Архитектура, управляемая событиями

Весь интерфейс имеет структуру «приглашение или вопрос - ожидание ввода - ввод - обработка - вывод результата».

Слайд 104 Этот процесс состоит из следующих этапов (см. рис. ниже). Программа

ожидает сообщения от Windows и в общем случае бездействует.
Пользователь,

щелкая клавишами мыши или вводя информацию с клавиатуры, инициирует событие и работу соответствующего драйвера.
Сообщения от драйверов сначала передаются в системную очередь, а затем перераспределяются по очередям приложений (точнее, потоков).
Из очереди приложения операционная система выбирает сообщение и вместе с управлением передает его соответствующему приложению.
После получения сообщения программа производит его обработку и далее снова переходит в состояние ожидания очередного сообщения.
Описанная выше и реализованная в Windows схема взаимодействия пользователя, операционной системы и приложения называется архитектурой, управляемой событиями (сообщениями).

8.2.5. Архитектура, управляемая событиями

Этот процесс состоит из следующих этапов (см. рис. ниже). 	Программа ожидает сообщения от Windows и в общем

Слайд 1058.2.5. Архитектура, управляемая событиями

8.2.5. Архитектура, управляемая событиями

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика