
- •1. Назначение, основные этапы развития операционных систем
- •2. Современные ос и их классификация
- •3. Основные принципы построения ос
- •4. Мультипрограммность и мультизадачность
- •1. Процесс, ресурс, свойства, классификация
- •2. Концепция виртуализации
- •3. Принципы построения интерфейсов операционных систем. Интерфейсы прикладного программирования
- •4. Концепция прерывания
- •1. Система управления процессами. Процессы, потоки.
- •2. Средства распределения ресурсов
- •3. Система распределения оперативной памяти. Контроль и распределение памяти в ms-dos
- •4. Алгоритм распределения памяти ms_dos
- •5. Блок управления памятью (mcb)
- •1. Файловая система. Концепция управления файлами
- •2. Текстовые файлы. Двоичный файлы
- •2. Создание файла и создание связи с файлом
- •3. Удаление файла и связи с файлом
- •4. Модификация файлов
- •5. Операции с файлами
- •6. Организация данных на внешних носителях. Внешняя память на дисках
- •7. Файловая система fat. Структура и расположение системной информации файловой системы.
- •8. Структура boot
- •9. Таблица расположения файлов fat
- •10. Структура корневого директория root
- •11. Структура директория
- •12. Алгоритм поиска расположения файлов на диске
- •13. Определение начального кластера расположения файла на диске
- •14. Расчет номеров цепочки кластеров расположения фала на диске
- •15. Методы доступа к информации на дисках
- •16. Изменение элементов таблиц fat и root при выполнении команд dos: copy, move, del, rename.
- •1. Общие сведения о механизме прерываний
- •1. Аппаратные прерывания
- •2. Программные прерывания
- •3. Таблица векторов прерываний
- •4. Перехват прерывания
- •5. Каскадная обработка прерывания
- •1. Загрузка и запуск программ ms dos
- •2. Заголовок *.Exe
- •3. Psp текущей задачи
- •4. Дочерние процессы и их запуск
- •5. Среда процесса, наследование среды
- •6. Системные управляющие блоки dos (таблица векторной связи)
- •7. Завершение процесса
- •1. Архитектура ос Windows. Функционирование и взаимосвязь модулей операционной системы
- •2. Понятие окна. Принципы организации графического пользовательского интерфейса.
- •3. Операции с объектом – окно
- •4. Событийное управление программами
- •5. Сообщение. Цикл обработки сообщений. Очередь сообщений.
- •6. Процедура обработки сообщений, ее формат и правила написания
- •7. Синхронные и асинхронные сообщения, их передача и обработка
- •8. Ввод данных с клавиатуры
- •9. Коды oem, ansi, ascii, виртуальные коды
- •10. Фокус ввода
- •11. Обработка сообщений мыши
- •12. Таймер. Программирование таймера
- •1. Графические устройства и их контекст
- •2. Атрибуты контекста устройств
- •3. Логическая и физическая система координат
- •4. Режимы преобразования координат
- •5. Объекты gdi. Создание и использование
- •6. Gdi и векторная модель рисования
- •7. Быстрая векторная графика
- •8. Шрифт. Классификация, параметры шрифта, установка в контексте устройства.
- •Структура logfont
- •9. Атрибуты контекста устройств, влияющие на вывод текста
- •10. Методы gdi вывода текста
- •11. Управление направлением, размером и расстоянием между символами
- •1. Создание процесса
- •2. Описатель процесса
- •3. Командная строка процесса
- •4. Среда процесса.
- •5. Наследование объектов ядра дочерним процессом.
- •6. Класс процесса.
- •7. Текущий директорий процесса.
- •8. Получение инф-ции о процессе
- •9. Окончание процесса
3. Операции с объектом – окно
создание
hwnd = CreateWindow (szAppName, //имя класса окна
"The Hello Program", //заголовок окна
WS_OVERLAPPEDWINDOW, //стиль окна
CW_USEDEFAULT, //начальное положение по x
CW_USEDEFAULT, //начальное положение по y
CW_USEDEFAULT, //начальный размер по x
CW_USEDEFAULT, //начальный размер по y
NULL, //описатель родительского окна
NULL, //описатель меню окна
hInstance, //описатель экземпляра программы
NULL); //параметры создания
ShowWindow (hwnd, iCmdShow);
Вызов функции:
UpdateWindow (hwnd);
вызывает затем перерисовку рабочей области. Для этого в оконную процедуру (функция WndProc в HELLOWIN.C) посылается сообщение WM_PAINT.
4. Событийное управление программами
Именно Windows вызывает программу пользователя. Этот процесс осуществляется следующим образом: программа ждет, пока не получит сообщение от Windows. Сообщение передается программе через спец функцию, вызываемую Windows. После получения сообщения программа выполняется, чтобы совершить соотв действие. Несмотря на то, что программа для ответа на сообщение может вызвать одну или несколько ф-ци API, именно Windows инициализирует всю это деятельность. Это не что иное, как основанная на сообщениях взаимодействие Windows с программой и именно оно диктует общую форму всех программ для Windows.
5. Сообщение. Цикл обработки сообщений. Очередь сообщений.
В процессе работы, Windows "общается" с каждым объектом посредством системных сообщений. При возникновении определенных событий, Windows сообщает об этом окну приложения, посылая ему соответствующее сообщение. Окно, после получения сообщения, должно обработать его и возвратить результат обратно в систему.
Цикл обработки сообщений. Он состоит из управляющей структуры while, которая при каждом проходе цикла получает очередное сообщение из очереди, посредством функции GetMessage(), затем переводит все сообщения от виртуальных клавиш в символьные сообщения с помощью функции TranslateMessage(), и после этого отсылает полученное сообщение на обработку оконной процедуре, используя функцию DispatchMessage().Для каждого приложения Windows организует отдельную очередь сообщений прикладной программы, которая по умолчанию вмещает до 8 сообщений.
Для извлечения сообщений из очереди приложения существуют функция:
Функция GetMessage Описание:
function GetMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax: Word): Bool; Паpаметpы: Msg: принимающая структура TMsg. Wnd: Окно назначения сообщений или 0 для всех окон в прикладной задаче. MsgFilterMin: Нуль в случае отсутствия фильтрации или wm_KeyFirst только для клавиатуры или wm_MouseFirst только для мыши. MsgFilterMax Нуль в случае отсутствия фильтрации или wm_KeyLast только для клавиатуры или wm_MouseLast только для мыши. ФункцияTranslateMessage Описание:
function TranslateMessage(var Msg: TMsg): Bool; Пеpеводит комбинации wm_KeyDown/Up в wm_Char или wm_DeadChar и комбинации wm_SysKeyDown/Up в wm_SysChar или wm_SysDeadChar и напpавляет символьное сообщение в очеpедь пpикладной задачи. Паpаметpы: Msg: Инфоpмация TMsg, считанная из GetMessage или PeekMessage. После трансляции сообщение диспетчируется оконной процедуре:
Функция DispatchMessage Описание:
function DispatchMessage(var Msg: TMsg): Longint; Паpаметpы: Msg: Стpуктуpа TMsg. -------------------------------------------------------------------------------------------------------
Это последняя часть программы WinMain().
switch (message)
{case WM_COMMAND: wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);
switch (wmId)
{case IDM_ABOUT:
...
break;
case IDM_EXIT:
...
default:
return DefWindowProc(hWnd, message, wParam, lParam); }break;
case WM_PAINT:
...
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:return DefWindowProc(hWnd, message, wParam, lParam);}
Его целью является получение и обработка сообщений, передаваемых операционной системой. Эти сообщения ставятся в очередь, откуда они потом (по мере готовности программы) выбираются функцией API GetMessage():
BOOL GetMessage(LPMSG msg, HWND hwnd, UINT min, UINT max);
Выбираемые из очереди сообщения сохраняются в структуре, указатель на которую представляет параметр msg. Все сообщения Windows имеют структуру типа MSG, определяемую следующим образом:
typedef struct tagMSG {
HWND hwnd; //окно, для которого предназначено сообщение
UINT message; //собственно сообщение
WPARAM wParam; //дополнительная информация
LPARAM lParam; //к сообщению
DWORD time; //время посылки сообщения
POINT pt; //положение курсора мыши
} MSG
В поле hwnd структуры MSG записывается дескриптор окна, которому адресовано сообщение; тип сообщения записывается в 32-разрядное поле message, а дополнительная информация (параметры сообщения) – в поля wParam и lParam. Типы WPARAM и LPARAM определены при помощи typedef соответственно как UINT и LONG.
GetMessage() возвращает нуль, когда пользователь завершает программу. Иначе возвращается ненулевое значение.