Понятие API и WinAPI. Назначение WinAPI

Автор: Пользователь скрыл имя, 12 Января 2015 в 14:44, контрольная работа

Краткое описание

API (Application Programming Interface - интерфейс прикладных программ) - это множество функций, организованных, обычно, в виде DLL (Dynamic Link Library – динамически подключаемые библиотеки). Функции API позволяют организовать интерфейс между прикладной программой и средой, в которой работает эта программа. Вызов функций API позволяет программе получать доступ к ресурсам среды и управлять ее работой.

Файлы: 1 файл

Ответы.docx

— 605.65 Кб (Скачать)

 

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

 

12. Классификация ОС.

 

По числу одновременно выполняемых задач операционные системы могут быть разделены на два класса:

•  однозадачные (например, MS-DOS, MSX) и

•  многозадачные (OC EC, OS/2, UNIX, Windows 95).

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

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

 

По числу одновременно работающих пользователей ОС делятся на:

•  однопользовательские (MS-DOS, Windows 3.x, ранние версии OS/2);

•  многопользовательские (UNIX, Linux, Windows NT).

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

 

Многозадачные ОС подразделяются на три типа в соответствии с использованными при их разработке критериями эффективности:

•  системы пакетной обработки (например, OC EC),

Критерий – решение максимального числа задач в единицу времени

•  системы разделения времени (UNIX, VMS),

Критерий – удобство и эффективность работы пользователя

•  системы реального времени (QNX, RT/11).

Критерий – время реакции системы

Windows - Многопользовательская ОС с вытесняющей многозадачностью с разделением времени.

 

13. Многозадачность в ОС Windows. Понятие кванта. Приостановка работы потока («сон»). Приоритеты процессов и потоков.

 

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

 

Квант (quantum) – период времени вызова аппаратного прерывания, интервал времени которое выделено для задачи.

 

«Сон» потока

• Если для продолжения выполнения, поток должен дождаться чего-то, то он может «заснуть» на определенное время и передать остаток своего процессорного времени другому потоку в очереди

ú Sleep(int milliseconds);

ú Sleep(1) ≥ Quantum

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

 

Обычно, причиной, по которой поток отказывается от выделенного ему времени и «засыпает», служит необходимость в определенном ресурсе, который на данный момент занят и для дальнейшего выполнения необходимо дождаться его освобождения.

 

Приоритеты потоков

Приоритет определяет очередь, в которой будет стоять поток, а не продолжительность отыденного промежутка времени(time slice).

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

 

Windows поддерживает шесть классов приоритета:

  • real time (реального времени);
  • high (высокий);
  • above normal (выше среднего);
  • normal (средний);
  • below normal (ниже среднего);
  • idle (низкий).

14. Переменные окружения. Понятие, назначение, примеры использования. Типы переменных окружения, их отличия.

 

Переменные окружения (environment variables) – это область памяти, к которым имеет доступ определенный процесс (или процессы). Процесс может получить доступ к переменным окружения, создав их, либо унаследовав от родительского процесса. Это самый простой способ организации межпроцессного взаимодействия.

Переменные окружения хранятся в оперативной памяти в виде строк вида:

<Имя переменной>=<Значение>\0

 

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

 

Пример использования

• Пример описания переменной окружения:

MyMusic=D:\Music\0

• Пример использования переменной окружения:

%MyMusic%\Artist\sound.mp3

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

 

Типы переменных окружения:

• Системные - переменные, определенные в реестре и доступные для всех процессов в системе

• Пользовательские - переменные, определенные в реестре для данной учетной записи и доступные для процессов, запущенных под этой учетной записью

• Процессы

    1. Собственные - переменные, созданные самим процессом
    2. Унаследованные - переменные, унаследованные от родительского процесса

 

15. Объект ядра «Задание». Понятие, назначение, примеры использования. Виды ограничений задания. Информация о задании. Жизненный цикл заданий.

 

Задание (job) – объект ядра, позволяет группировать процессы и помещать их в нечто вроде «песочницы», выполняющей роль контейнера процессов; ограничивающая их действия.

 

Пример: создание задания в WinAPI

HANDLE CreateJobObject ( PSECURITY_ATTRIBUTES scur, // информация о защите

PCTSTR name ); // имя задания

 

Виды ограничений

• Базовые и расширенные базовые ограничения - не дают процессам в задании монопольно захватывать системные ресурсы, накладывают лимит на использование системных ресурсов.

  1. Максимальное время работы процесса
  2. Максимальное время работы всех процессов задания
  3. Максимальное количество одновременно выполняемых процессов задания
  4. Процессоры, где должны выполняться процессы задания
  5. Относительная продолжительность кванта времени для всех потоков задания

• Базовые ограничения на UI - блокируют возможность изменения на пользовательский интерфейс(UI), позволяют запретить процессам задания вызов некоторых UI-функций и заблокировать доступ к USER-объектам, созданных внешними по отношению к этому заданию процессами.

  1. вызов команд на выход из системы, завершение ее работы, перезагрузку или выключение компьютера
  2. чтение и/или запись в буфер обмена
  3. изменение параметров экрана
  4. создание и переключение между рабочими столами
  5. использование USER-объектов (например, HWND), созданных внешними по отношению к этому заданию процессами

• Ограничения, связанные с защитой - перекрывают процессам в задании доступ к защищенным ресурсам (файлам, разделам реестра и т.д.)

  1. закрыть доступ администратору;
  2. запретить маркер неограниченного доступа;
  3. блокировать доступ по каким-либо идентификаторам защиты (security ID, SID);
  4. отменить указанные привилегии и т.д.

 

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

 

  • Создание объекта-задания (Job)
  • Связывание задания с ограничениями
  • Создание процессов, которые следует включить в задание
  • Добавление процессов в задание
  • Завершение процессов задания

 

16. Синхронизация потоков. Атомарный доступ, критические секции. Механизм синхронизации потоков с использованием объектов ядра. Основные объекты синхронизации. Функции ожидания (wait-функции).

 

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

 

Доступ к общему ресурсу

• Пользовательский режим

    • Атомарный доступ: Interlocked-функции
    • Критические секции

• Режим ядра

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

 

Атомарный доступ (atomic access) – монопольный захват ресурса обращающимся к нему потоком. Позволяет получить доступ к ресурсу без прерывания другими потоками. Семейство блокирующих функций(Interlocked-функций) позволяют обеспечить атомарный доступ.

Критическая секция (critical section) – это небольшой участок кода, требующий монопольного доступа к каким-то данным.

 

 

Основные объекты синхронизации

  • События (Event)
  • Ожидаемые таймеры (Waitable timer)
  • Семафоры (Semaphore)
  • Мьютексы (Mutex)

 

Wait-функция – это функция, позволяющая потоку в любой момент приостановить и ждать освобождение определенного объекта(ов) ядра.

Результаты работы Wait - функций

• Захват ожидаемого объекта

Возможность захвата во многом определяется типом объекта ядра

• Прекращение работы без захвата объекта

Когда необходимо определить момент времени освобождения объекта

 

17. Объект ядра «Событие». Понятие, назначение, примеры использования.

 

События (event) – самая примитивная разновидность объектов ядра, предназначены для уведомления об окончании какой-либо операции.

Типы событий:

  1. Со сбросом вручную (manual-reset events)

Захватываются вызовом отдельной функции

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

  1. С автосбросом (auto-reset events)

Захватываются сразу после ожидания

Возобновляют выполнение потока, который «первый» дождался события

 

Примеры использования:

• Создание

HANDLE CreateEvent( … ); // с указанием вида события

• Получение доступа (открытие)

HANDLE OpenEvent( … ); // необходимо знать имя

• Перевод в свободное состояние

BOOL SetEvent(HANDLE hEvent);

• Перевод в занятое состояние (захват)

BOOL ResetEvent(HANDLE hEvent);

 

18. Ожидаемые таймеры (waitable timer). Понятие, назначение, примеры использования.

 

Ожидаемые таймеры (waitable timer) – объекты ядра, которые самостоятельно переходят в свободное состояние в определенное время или через регулярные промежутки времени.

a. Всегда создается в занятом состоянии

b. Освобождается самостоятельно после своего срабатывания

c. Полезен при создании «планировщиков»

d. Может вывести машину из спящего режима

e. Можно использовать и при реализации коммуникационных протоколов

 

Типы таймеров:

− с автосбросом (auto-reset);

пробуждает лишь один из ждущих потоков

− со сбросом вручную (manual-reset).

пробуждает все ожидающие потоки

 

Ожидаемые таймеры

• Создание

HANDLE CreateWaitableTimer( … );

• Получение доступа (открытие)

HANDLE OpenWaitableTimer( … ); // необходимо знать имя

• Установка режима работы таймера

BOOL SetWaitableTimer( … ); // после создания таймера указывается время и частота срабатывания таймера.

  • Отмена ожидаемого таймера

BOOL CancelWaitableTimer(HANDLE hTimer); // Срабатывание таймера можно отменить, после чего он никогда не сработает, даже после его повторной переустановки.

 

19. Семафоры. Понятие, назначение, примеры использования.

 

Семафоры (semaphore) – объекты ядра, используемые для учета имеющихся ресурсов. Семафоры хранят два значения: максимальное количество ресурсов и счетчик свободных ресурсов.

 

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

 

Работа с семафорами

• Создание

  HANDLE CreateSemaphore( … ); // указывается максимальное число ресурсов

• Получение доступа (открытие)

  HANDLE OpenSemaphore(…);  // необходимо знать имя семафора

• Увеличение текущего числа ресурсов

  BOOL ReleaseSemaphore( … );

 

20. Мьютексы. Понятие, назначение, примеры использования.

 

Мьютексы (mutual exclusion, mutex) – объекты ядра, гарантирующие потокам взаимоисключающий доступ к единственному ресурсу

a. Содержат идентификаторы связанных потоков

b. Ведут себя также, как и критические секции, но:

  • Являются объектами ядра, а не пользовательского режима
  • Единственные позволяют синхронизовать доступ к ресурсу нескольких потоков из разных процессов; при этом можно задать максимальное время ожидания доступа к ресурсу.

Информация о работе Понятие API и WinAPI. Назначение WinAPI