
- •Тема 8. Интерфейсы операционных систем
- •8.1.Интерфейс прикладного программирования
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1.Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1.Основные определения
- •8.1.1.Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1. Интерфейс прикладного программирования
- •8.1.2. Классификация системных вызовов
- •Основные функции управления синхронизацией
- •Основные функции управления виртуальной и физической памятью
- •Основные функции управления виртуальной и физической памятью
- •Функции механизма отображения файла в память
- •Основные функции для файлового ввода-вывода
- •Основные функции управления каталогами
- •Некоторые категории вызовов GUI
- •Основные функции управления защитой
- •Основные функции управления реестром
- •Основные функции управления консолью
- •8.1.Интерфейс прикладного программирования
- •8.1.3. Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.3. Программирование системных вызовов
- •8.1.3. Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.Интерфейс прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •Способы реализации ИПП
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •На рис. позицией 1 обозначен вызов обработчика ловушки и диспетчера базовых сервисов. Позиции
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.2. Интерфейс пользователя
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.Интерфейс пользователя
- •8.2.2.Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2.Консоль
- •8.2.Интерфейс пользователя
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.Интерфейс пользователя
- •8.2.Интерфейс пользователя
- •8.2.Интерфейс пользователя
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями

Основные функции управления консолью
Функция |
Описание |
SetConsoleTitle |
Определить текст заголовка для окна консоли |
GetStdHandle |
Получить стандартный дескриптор |
WriteConsole |
Вывести текст в консоль |
ReadConsole |
Ввод из консоли |
SetConsoleCursorPosition |
Установка позиции курсора |
SetConsoleTextAttribute |
Установка цветов текста и фона |
ReadConsoleInput |
Обработка событий мыши и клавиатуры |
41

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

8.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 обработку ошибки |
43 |
||
mov |
filesize, AX |
; 3апомнить размер файла |
|||
|

8.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 |
|
… |
|
|
|
44

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

8.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 |
|
46 |

8.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 |
47

8.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 показывает длину параметров в стеке. Языки высокого уровня скрывают истинные имена системных функций.
48

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

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