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

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

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

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

Файлы: 1 файл

Ответы.docx

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

 

Работа с мьютексами

• Создание

HANDLE CreateMutex( … );

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

HANDLE OpenMutex( … ); // необходимо знать имя мьютекса

• Освобождение

BOOL ReleaseMutex(HANDLE hMutex);

• Отказ от мьютекса (автоматическое освобождение) при завершении потока, захватившего мьютекс

 

21. Понятие взаимоблокировки. Методика исключения взаимоблокировок.

 

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

Например, имеется два потока (или процесса), один из которых занимает некоторый ресурс A, а другой – ресурс B и оба каким-то образом с ними работают (рис. 18). По прошествии некоторого времени первому потоку для завершения своей работы с ресурсом A требуется получить доступ к занятому вторым потоком ресурсу B. Аналогичная ситуация у второго потока – для завершения его работы с ресурсом B ему необходимо получить доступ к занятому первым потоком ресурсу A. Оба потока в данном случае будут находиться в режиме ожидания доступа к нужному ресурсу. Если время ожидания никак не ограничено, то оно будет бесконечным и вызовет «зависание» программы.

 

Рисунок 18 – Взаимная блокировка потоков

 

Подобная ситуация может быть решена введением одной критической секции, которая будет защищать оба ресурса: и ресурс A и ресурс B.

 

22. Каналы (pipes). Понятие, назначение, свойства, сценарий использования. Именованные и неименованные каналы.

 

Канал (Pipe) – это коммуникационный шлюз с двумя «концами», через который можно организовать обмен данными между процессами.

Различают именованные и неименованные каналы:

• Неименованные каналы (anonymous pipe)

    • однонаправленные каналы для передачи данных только в одном направлении (только для записи или только для чтения)
    • Предназначены для передачи данных между родительским и дочерним процессами или между двумя дочерними процессами одного и того же родительского процесса.
    • Необходимо осуществить однонаправленную передачу данных между двумя процессами (один процесс является родительским, а другой дочерним, либо оба процесса являются дочерними процессами одного и того же родительского процесса). - один процесс знает дескриптор записи канала, а другой – дескриптор чтения.

• Именованные каналы (named pipe)

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

 

23.  «Почтовые ящики» (mailslots). Понятие, назначение, свойства, сценарий использования.

Почтовый ящик (mailslot) – это механизм однонаправленного межпроцессного взаимодействия(IPC), используемый обычно для широковещательной рассылки сообщений внутри домена. Данные сообщений почтового ящика могут быть в любой форме, но размер любого из сообщений не может превышать 424 байта при передаче между компьютерами. (свыше используйте именованные каналы, либо Windows-сокеты). Mailslots – временные файлы. Когда все дескрипторы почтового ящика закрываются, то он и все содержащиеся в нем данные – удаляются.

Для передачи сообщений используется протокол User Datagram Protocol (UDP)

• негарантированная доставка сообщений

• высокая скорость передачи сообщений

 

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

 

Взаимодействие через Mailslots

• Mailslot-сервер

  • создатель и владелец mailslot’а
  • может читать сообщения

• Mailslot-клиент

  • получает доступ к mailslot’у по имени
  • может отправлять сообщения

 

Сценарий использования:

  • Временный файл, который находится в памяти до момента закрытия всех указателей на него
    • Для доступа к Mailslot можно использовать стандартные файловые операции
      • Открытие (получение доступа)
          • CreateFile()
        • Запись (передача)
          • WriteFile()
        • Чтение (прием)
          • ReadFile()
      • При создании и получении информации используются специализированные функции
        • CreateMailslot()
        • GetMailslotInfo()

     

    24. Сокеты. Организация взаимодействия.

    Windows-сокеты (Windows Sockets, Winsock) – это интерфейс между прикладным и транспортным уровнем хоста, который позволяет организовать передачу данных по сети в обоих направлениях и широковещательную рассылку сообщений.

    • Работает на основе протокола TCP (Transmission Control Protocol, протокол управления передачей)

    гарантированная доставка сообщений

    • Сокет - это не объект ядра

    25. Транслятор, компилятор, интерпретатор. Псевдокод и машинный код. Понятие JIT-компиляции.

     

    Транслятор – это программа, которая переводит входной текст на исходном (входном) языке в эквивалентный текст на результирующем (выходном) языке. Исходный текст должен удовлетворять синтаксическим и семантическим требованиям входного языка. Результирующий текст также строится по синтаксическим правилам выходного языка. При этом важным требованием в определении транслятора является семантическая эквивалентность входного и выходного текста.

     

    Компилятор – это транслятор, который осуществляет перевод текста программы, написанного на некотором языке программирования, в эквивалентный машинный код или программу на языке низкого уровня (например, на языке ассемблера).

     

    Интерпретатор – это транслятор, который анализирует (транслирует) входную программу на исходном языке и выполняет (интерпретирует) ее. Анализ и исполнение входной программы осуществляется, как правило, построчно (или покомандно). В отличие от трансляторов интерпретаторы не порождают результирующую программу (и вообще какого-либо результирующего кода) – и в этом принципиальная разница между ними. Результатом работы интерпретатора будет результат, заданный смыслом исходной программы.

     

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

     

    Динамическая компиляция (Just-in-time compilation, JIT) – трансляция псевдокода в машинный код непосредственно во время выполнения программы, инструкции которой записаны на некотором псевдоязыке. Такая технология позволяет исполнять один и тот же код на разных платформах. Такое же преимущество дают и интерпретируемые языки, поскольку псевдокод более низкоуровневый, его эффективность значительно выше. Just-in-time (JIT) компилятор транслирует псевдокод в машинный код непосредственно во время выполнения программы (динамическая компиляция).

     

    26. Структура .NET Framework. Понятие и назначение CLR. Понятие IL. Отличие IL от машинного кода.

     

    .NET Framework - платформа для разработки программного обеспечения

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

     

    .NET Framework состоит из двух частей: общеязыковой исполняющей среды (Common Language Runtime, CLR) и библиотеки классов (Framework Class Library, FCL). CLR предоставляет модель программирования, используемую во всех типах приложений. FCL представляет объектно-ориентированный API-интерфейс, используемый всеми моделями приложений.

     

    CLR тесно связана с типами. Типы представляют определенную функциональность приложениям и компонентам. Они являются механизмом, позволяющим коду, написанному на одном языке программирования, взаимодействовать с кодом, написанном на другом. Поскольку типы являются основой CLR, Microsoft создала формальную спецификацию – общую систему типов (Common Type System, CTS), описывающую определение типов и их поведение.

     

    IL (Intermediate Language) — код на специальном языке, напоминающим ассемблер, но написанном для .NET. В него преобразуется код из других языков верхнего уровня.

     

    27. Управляемый модуль. Формат управляемого модуля. Процесс загрузки и исполнения управляемого модуля.

    • Управляемый модуль (managed module)

    стандартный переносимый исполняемый файл (portable executable, PE), который требует для своего выполнения CLR

    Формат управляемого модуля

    Процесс загрузки и исполнения управляемого модуля

    • Анализ заголовка

    • Определение типа запускаемого приложения (32-, 64-разрядный или WoW64)
    • Загрузка необходимого ядра CLR – MSCorEE.dll (x86, x64, IA64 и др.)

    • Запуск

    • Инициализация CLR
    • Загрузка EXE в оперативную память
    • Передача управления главной функции приложения (Main)

     

    28. DLL. Понятие, назначение, сценарии использования. Статическое и динамическое подключение, их отличие. Точка входа в Win32 DLL: назначение.

     

    Динамические подключаемые библиотеки (Dynamic Link Libraries, DLLs)– являются хранилищем общедоступных ресурсов и функций.

     

    Файлы, составляющие основу Win32, - а также файлы различных драйверов, драйверы мониторов и принтеров – все это динамические подключаемые библиотеки. Внешний интерфейс может быть один, но файл может видоизменяться. Данный механизм позволяет разрабатывать библиотеки, которые могут быть использованы в нескольких проектах.

     

    Подключения

    • Статическое подключение

    • Добавление в проект приложения ссылки (reference) на используемую DLL
    • Нет необходимости самостоятельно загружать и выгружать используемые сборки, определять адреса используемых функций и т.д.
    • Проверка доступности DLL производится до запуска программы
    • Быстрый доступ к функционалу библиотеки
    • Используемые сборки загружаются в память до запуска программы и выгружаются по окончанию ее работы

    • Динамическое подключение

    • Вызывающая программа самостоятельно производит загрузку нужной DLL, определяет адрес необходимых функций, ресурсов.
    • Библиотека загружается только на время своего использования, когда вызывающая программа нуждается в ее функционале.
    • Возможность управления загрузкой DLL.
    • Программа работоспособна даже при отсутствии DLL.
    • Необходимо самостоятельно загружать сборку в память и заботится о ее своевременной выгрузке, определять адреса необходимых функций.
    • Более медленный доступ к функционалу библиотеки

     

    DLLMain() – функция для обработки событий загрузки и выгрузки DLL, в которую передается информация об осуществляемом действии.

     

    • Инициализация библиотеки (например, нужно создать необходимые объекты, временные файлы)
    • Выгрузка библиотеки - Деинициализация (например:удалить временные файлы, освободить используемые ресурсы и проч.)

     

    29. Сборки (assemblies). Декларация сборки. Многофайловые сборки. Подпись сборок. Глобальный кэш сборок (GAC).

     

    Сборка (assembly) - набор из одного или нескольких файлов с определениями типов и файлами ресурсов. Один из файлов сборки выбирают для хранения ее декларации. Декларация (manifest) – это еще один набор таблиц метаданных, которые в основном содержат имена файлов, составляющих сборку. Эти таблицы также описывают версию и региональные стандарты сборки, ее издателя, общедоступные экспортируемые типы.

     

    Многофайловые сборки

    • Плюсы

    • Распределение типов на несколько файлов
    • Возможность добавлять к сборке файлы с ресурсами и данными
    • Создавать сборки, состоящие из типов, написанных на разных языках программирования

    • Минусы

    • Увеличение времени загрузки

     

    Подпись сборки

    • Уникальная идентификация сборки:

    • Имя файла (без расширения)
    • Номер версии
    • Идентификатор регионального стандарта
    • Открытый ключ (маркером открытого ключа)

    Строгие имена позволяют уникально идентифицировать сборку:

    MyLib Version=1.0.8123.0 Culture=neutral PublicKeyToken=b77a5c561934e89

     

    Глобальный кэш сборок (GAC)

    • Глобальный кэш сборок (global assembly cache, GAC)

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

      %SystemRoot%\Assembly (обычно, C:\Windows\Assembly)

    GACUtil.exe (при разработки, тестировании)

    MSI (для развертывания на машине  пользователя)


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