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

Обновлено: 07.07.2024

По своему назначению они близки системам программирования. К инструментальным программам, например, относятся:

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

    Инструментальные программные средства могут оказать помощь на всех стадиях разработки ПО.6.13. Что такое текстовый редактор?

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

    Этими данными могут быть программа или какой-либо документ или же книга. Редактируемый текст выводится на экран, и пользователь может в диалоговом режиме вносить в него свои изменения.

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

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

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


      Рис. 6.5. Окно редактора Microsoft Word

      Наиболее известный текстовый редактор - Microsoft Word.

      Полнофункциональные издательские системы - Microsoft Publisher, Corel Ventura и Adobe PageMaker. Издательские системы незаменимы для компьютерной верстки и графики. Значительно облегчают работу с многостраничными документами, имеют возможности автоматической разбивки текста на страницы, расстановки номеров страниц, создания заголовков и т.д. Создание макетов любых изданий - от рекламных листков до многостраничных книг и журналов - становится очень простым, даже для новичков.

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

      ПО современных компьютеров включает множество разнообразных программ, которое можно условно разделить на три группы (рис. 3.1):

      1. Системное программное обеспечение (системные программы);

      2. Прикладное программное обеспечение (прикладные программы);

      3. Инструментальное обеспечение (инструментальные системы).

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

      Центральное место среди системных программ занимают операционные системы (англ. operating systems). Операционная система (ОС) – это комплекс программ, предназначенных для управления загрузкой, запуском и выполнением других пользовательских программ, а также для планирования и управления вычислительными ресурсами ЭВМ, т.е. управления работой ПЭВМ с момента включения до момента выключения питания. Она загружается автоматически при включении компьютера, ведет диалог с пользователем, осуществляет управление компьютером, его ресурсами (оперативной памятью, дисковым пространством и т.д.), запускает другие программы на выполнение и обеспечивает пользователю и программам удобный способ общения – интерфейс – с устройствами компьютера. Другими словами, операционная система обеспечивает функционирование и взаимосвязь всех компонентов компьютера, а также предоставляет пользователю доступ к его аппаратным возможностям.

      ОС определяет производительность системы, степень защиты данных, выбор программ, с которыми можно работать на компьютере, требования к аппаратным средствам. Примерами ОС являются MS DOS, OS/2, Unix, Windows 9х, Windows XP.

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

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

      Для организации более удобного и наглядного интерфейса пользователя с компьютером используются программные оболочки операционных систем – программы, которые позволяют пользователю отличными от предоставляемых ОС средствами (более понятными и эффективными) осуществлять действия по управлению ресурсами компьютера. К числу наиболее популярных оболочек относятся пакеты Norton Commander (Symantec), FAR (File and Archive manageR) (Е.Рошаль).

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

       программы-упаковщики (архиваторы), которые позволяют более плотно записывать информацию на дисках, а также объединять копии нескольких файлов в один, так называемый, архивный файл (архив);

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

       программы оптимизации и контроля качества дискового пространства;

       программы восстановления информации, форматирования, защиты данных;

       программы для записи компакт-дисков;

       драйверы – программы, расширяющие возможности операционной системы по управлению устройствами ввода/вывода, оперативной памятью и т.д. При подключении к компьютеру новых устройств необходимо установить соответствующие драйверы;

       коммуникационные программы, организующие обмен информацией между компьютерами и др.

      Некоторые утилиты входят в состав операционной системы, а некоторые поставляются на рынок как самостоятельные программные продукты, например, многофункциональный пакет сервисных утилит Norton Utilities (Symantec).

      Прикладное программное обеспечение (ППО) предназначено для решения задач пользователя. В его состав входят прикладные программы пользователей и пакеты прикладных программ (ППП) различного назначения .

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

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

      ППП общего назначения – универсальные программные продукты, предназначенные для автоматизации широкого класса задач пользователя. К ним относятся:

      Текстовые редакторы (например, MS Word, Word Perfect, Лексикон);

      Табличные процессоры (например, MS Excel, Lotus 1-2-3, Quattro Pro);

      Системы динамических презентаций (например, MS Power Point, Freelance Graphics, Harvard Graphics);

      Системы управления базами данных (например, MS Access, Oracle, MS SQL Server, Informix);

      Графические редакторы (например, Сorel Draw, Adobe Photoshop);

      Издательские системы (например, Page Maker, Venture Publisher);

      Системы автоматизации проектирования (например, BPWin, ERWin);

      Электронные словари и системы перевода (например, Prompt, Сократ, Лингво , Контекст);

      Системы распознавания текста (например, Fine Reader, Cunei Form).

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

      методо-ориентированные ППП, в основе которых лежит реализация математических методов решения задач. К ним относятся, например, системы математической обработки данных (Mathematica, MathCad, Maple), системы статистической обработки данных (Statistica, Stat).;

      проблемно-ориентированные ППП предназначены для решения определенной задачи в конкретной предметной области. Например, информационно-правовые системы ЮрЭксперт, ЮрИнформ; пакеты бухгалтерского учета и контроля 1С: Бухгалтерия, Галактика, Анжелика; в области маркетинга –Касатка, Marketing Expert; банковская система СТБанк;

      интегрированные ППП представляют собой набор нескольких программных продуктов, объединенных в единый инструмент. Наиболее развитые из них включают в себя текстовый редактор, персональный менеджер (органайзер), электронную таблицу, систему управления базами данных, средства поддержки электронной почты, программу создания презентационной графики. Результаты, полученные отдельными подпрограммами, могут быть объединены в окончательный документ, содержащий табличный, графический и текстовый материал. К ним относят, например, MS Works. Интегрированные пакеты, как правило, содержат некоторое ядро, обеспечивающее возможность тесного взаимодействия между составляющими.

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

      К инструментальному программному обеспечению относят: системы программирования – для разработки новых программ, например, Паскаль, Бейсик. Обычно они включают: редактор текстов, обеспечивающий создание и редактирование программ на исходном языке программирования (исходных программ), транслятор, а также библиотеки подпрограмм; инструментальные среды для разработки приложений, например, C++, Delphi, Visual Basic, Java, которые включают средства визуального программирования; системы моделирования , например, система имитационного моделирования MatLab, системы моделирования бизнес-процессов BpWin и баз данных ErWin и другие.

      Транслятор (англ. translator – переводчик) – это программа-переводчик, которая преобразует программу с языка высокого уровня в программу, состоящую из машинных команд. Трансляторы реализуются в виде компиляторов или интерпретаторов, которые существенно различаются по принципам работы.

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

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

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

      В компьютерных системах кроме процессора и оперативной памяти присутствует множество разнообразных устройств ( device ) – жесткие диски, приводы оптических дисков (CD, DVD , Blu-Ray Disk ), устройства флеш-памяти, принтеры, сканеры, звуковые и видеокарты, модемы, сетевые карты и т. п.

      Операционная система должна обеспечивать управление всеми этими устройствами, т. е. предоставлять способы обмена информацией между приложениями и устройствами.

      Управление устройствами в Windows осуществляется подсистемой ввода вывода, включающей несколько компонентов (см. рис.4.1 в лекции 4 " Архитектура Windows "):

      • диспетчер ввода-вывода (I/O manager – Input/Output manager) – основной компонент; обеспечивает интерфейс между приложениями и устройствами;
      • диспетчер PnP (Plug and Play manager) – компонент, реализующий принцип Plug and Play ("подключи и работай") – автоматическое распознавание и конфигурацию подключаемых к системе устройств;
      • диспетчер электропитания (power manager) – обеспечивает поддержку различных режимов энергопотребления системы и устройств;
      • драйверы устройств – программы, реализующие операции ввода-вывода для конкретного устройства; драйверы больше других компонентов системы "знают" о специфике своего устройства;
      • HAL (Hardware Abstraction Layer) – уровень абстрагирования от аппаратных средств; скрывает от других компонентов особенности реализации конкретных процессоров, системных плат и контроллеров прерываний;
      • реестр (registry) – используется как база данных для параметров устройств и драйверов.

      Далее будут рассмотрены общая схема ввода-вывода, функции и структуры данных диспетчера ввода-вывода, представленные в WRK, а также пример выполнения операции чтения.

      Принцип управления устройствами

      Рассмотрим схематично принцип управления внешними устройствами, а затем перейдем к изучению соответствующих структур и функций WRK.

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

      Файл (file) – совокупность данных, имеющих имя и допускающих операции чтения-записи. Типичная последовательность работы с файлом: открытие файла , выполнение команд чтения-записи, закрытие файла .

      При открытии файла создается файловый объект типа FILE_OBJECT , который связан с объектом, представляющим конкретное устройство ( DEVICE_OBJECT ). В объекте-устройстве содержится информация о драйвере, который управляет этим устройством. Драйвер в системе описывается объектом типа DRIVER_OBJECT . Объекты DRIVER_OBJECT создаются при загрузке в систему нового драйвера. Затем объект DRIVER_OBJECT может создать несколько объектов DEVICE_OBJECT – по количеству управляемых драйвером устройств (рис.15.1).

      Объекты для управления вводом-выводом

      Как видно из рис.15.1, в объекте DRIVER_OBJECT содержится указатель на список объектов-устройств, а в каждом из этих объектов хранится ссылка на управляющий драйвер . Таким образом, имея информацию об объекте DRIVER_OBJECT , можно найти все устройства, которыми он управляет и, наоборот, по объекту DEVICE_OBJECT легко определяется драйвер устройства.

      Приложение , которому необходимо произвести некоторую операцию с устройством (файлом), вызывает соответствующую WinAPI функцию (CreateFile, ReadFile, WriteFile и др.), которая, в свою очередь , обращается к функции диспетчера ввода-вывода.

      Операция, которая запрашивается приложением, представляется в системе объектом типа IRP ( I/O Request Packet – пакет запроса на ввод/вывод ). В этом объекте хранится информация о типе операции ввода/вывода (создание, чтение, запись и т. п.), а также необходимые параметры для данной операции . Пакет IRP передается диспетчером ввода-вывода в очередь IRP потока, который запросил операцию ввода-вывода, после чего вызывается соответствующий драйвер , непосредственно выполняющий запрошенную операцию.

      Структуры данных для ввода-вывода

      Драйвер в системе описывается объектом типа DRIVER_OBJECT ( файл base\ntos\inc\io.h, строка 1603), имеющим следующие основные поля:

      • Type – поле, определяющее тип структуры подсистемы ввода-вывода. Значения этого поля могут быть следующими – IO_TYPE_DRIVER, IO_TYPE_FILE, IO_TYPE_DEVICE, IO_TYPE_IRP и др. (см. файл base\ntos\inc\io.h, строка 25);
      • Size – размер объекта в байтах;
      • DeviceObject – ссылка на первый объект DEVICE_OBJECT в списке устройств, управляемых данным драйвером (см. рис.15.1). Следующие устройства в списке можно определять по полю NextDevice объекта DEVICE_OBJECT ;
      • Flags – флаги, определяющие тип драйвера (см. файл base\ntos\inc\io.h, строка 1530);
      • DriverName – имя драйвера в системе;
      • HardwareDatabase – путь в реестре к информации о драйвере;
      • DriverStart , DriverSize , DriverSection – информация о расположении драйвера в памяти;
      • DriverInit – адрес процедуры DriverEntry (точка входа в драйвер), отвечающей за инициализацию драйвера;
      • DriverUnload – адрес процедуры выгрузки драйвера;
      • MajorFunction – массив адресов процедур, каждая из которых отвечает за определенную операцию с устройством. Максимальное количество таких процедур равно константе IRP_MJ_MAXIMUM_FUNCTION+ 1 = 2 8 (файл base\ntos\inc\io.h, строка 80), которая определяет также количество кодов IRP (см. далее).

      Устройства представлены объектами типа DEVICE_OBJECT , который включает следующие главные поля ( файл base\ntos\inc\io.h, строка 1397):

      • Type , Size – совпадают по назначению с полями типа DRIVER_OBJECT ;
      • ReferenceCount – счетчик количества открытых дескрипторов для устройства. Позволяет отслеживать, используется кем-либо устройство или нет;
      • DriverObject – ссылка на драйвер, который управляет устройством;
      • NextDevice – указатель на следующее устройство в списке устройств для данного драйвера;
      • Flags , Characteristics – поля, уточняющие характеристики устройства;
      • DeviceType – тип устройства; возможные типы перечислены в файле public\sdk\inc\devioctl.h (строка 26);
      • SecurityDescriptor – дескриптор безопасности, сопоставленный с устройством (см. лекцию 9 "Безопасность в Windows").

      Пакеты запроса на ввод- вывод описываются типом IRP ( I/O Request Packet ), состоящим из двух частей – заголовка фиксированной длины (тело IRP ) и одного или нескольких блоков стека. В заголовке описывается информация , общая для запроса. Каждый блок стека содержит данные об одной операции ввода-вывода.

      Заголовок включает следующие основные поля:

      • Type , Size – поля, по назначению аналогичные соответствующим полям типов DRIVER_OBJECT и DEVICE_OBJECT ;
      • IoStatus – статус операции при завершении;
      • RequestorMode – режим, в котором работает поток, инициировавший операцию ввода-вывода, – пользовательский или режим ядра;
      • StackCount – количество блоков стека;
      • Tail.Overlay.Thread – указатель на структуру ETHREAD потока, запросившего операцию ввода-вывода;
      • Tail.Overlay.CurrentStackLocation – указатель на блок стека (IRP Stack Location), который описывается структурой IO_STACK_LOCATION .

      Структура блока стека IO_STACK_LOCATION описана в файле base\ntos\inc\io.h, строка 2303) и имеет следующие главные поля:

      • MajorFunction – номер основной функции, определяющий запрошенную операцию ввода-вывода и совпадающий с номером функции драйвера в массиве MajorFunction (структура DRIVER_OBJECT, см. выше), которую нужно вызвать для выполнения запрошенной операции. Как уже отмечалось, всего кодов 28 (IRP_MJ_MAXIMUM_FUNCTION + 1) , они описаны в файле base\ntos\inc\io.h (строки 51–79);
      • DeviceObject – указатель на структуру DEVICE_OBJECT , определяющую устройство для данной операции ввода-вывода;
      • FileObject – указатель на структуру FILE_OBJECT (файл base\ntos\inc\io.h, строка 1763), которая ассоциирована со структурой DEVICE_OBJECT .

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

      Пример ввода-вывода

      Для ввода-вывода используются следующие основные функции:

      • создание/открытие файла – IoCreateFile (файл base\ntos\io\iomgr\iosubs.c, строка 4795);
      • чтение из файла – NtReadFile (файл base\ntos\io\iomgr\read.c, строка 90);
      • запись в файл – NtWriteFile (файл base\ntos\io\iomgr\write.c, строка 87);
      • закрытие файла – IopDeleteFile файл base\ntos\io\iomgr\objsup.c, строка 465).

      Рассмотрим пример чтения с устройства, используя изученные структуры данных и функцию NtReadFile (рис.15.2).

      Последовательность операций и структуры данных при чтении с устройства


      Рис. 15.2. Последовательность операций и структуры данных при чтении с устройства

      Предположим, некоторому приложению требуется прочитать данные с устройства, например, из файла на жестком диске. Предварительно приложение должно получить дескриптор объекта FILE_OBJECT , например, при помощи WinAPI функции CreateFile .

      Для чтения из файла приложение вызывает WinAPI-функцию ReadFile , которая обращается к функции диспетчера ввода-вывода NtReadFile и передает ей дескриптор объекта FILE_OBJECT .

      Функция NtReadFile определена в файле base\ntos\io\iomgr\read.c (строка 90) и выполняет две основные задачи – создает объект IRP (строка 517) и вызывает функцию IopSynchronousServiceTail (строка 725). При создании объекта IRP в блок стека заносится номер основной функции (Major Function ), в случае операции чтения этот код равен константе IRP_MJ_READ (строка 558) и указывает на функцию чтения в массиве MajorFunction структуры DRIVER_OBJECT .

      Функция IopSynchronousServiceTail определена в файле base\ntos\io\iomgr\internal.c (строка 7458). Эта функция помещает переданный ей объект IRP в очередь потока ( функция IopQueueThreadIrp , строка 7468). Указатель на очередь IRP потока хранится в поле IrpList структуры ETHREAD ( файл base\ntos\inc\ps.h, строка 623). Кроме этого, функция IopQueueThreadIrp вызывает соответствующий драйвер ( функция IoCallDriver, строка 7494).

      Драйвер выполняет определенную кодом IRP функцию и возвращает статус операции .

      Резюме

      В лекции представлены компоненты подсистемы ввода вывода в Windows , рассмотрен принцип управления устройствами, а также реализация этого принципа на основе структур данных и функций Windows Research Kernel . Разобран пример ввода вывода для операции чтения из файла.

      В следующей лекции подробно рассматривается структура основной файловой системы Windows – NTFS .

      Программное обеспечение ввода / вывода часто организовано на следующих уровнях:

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

      Программное обеспечение ввода / вывода

      Драйверы устройств

      Драйвер устройства выполняет следующие задания:

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

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

      User-Space I / O Software

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

      Библиотеки ввода / вывода (например, stdio) находятся в пользовательском пространстве, чтобы предоставить интерфейс к независимому от устройства резидентному программному обеспечению ввода / вывода. Например, putchar (), getchar (), printf () и scanf () являются примером stdio библиотеки ввода-вывода пользовательского уровня, доступной в C-программировании.

      Подсистема ввода / вывода ядра

      Подсистема ввода / вывода ядра отвечает за предоставление многих услуг, связанных с вводом / выводом. Ниже приведены некоторые из предоставляемых услуг.

      Читайте также: