3.5 Связь с операционной системой
Современные компьютеры оснащены мощным
программным обеспечением, обеспечивающим эффективную производительность и
управление вычислительным процессом. Это означает, что когда программист
создает свою программу, он должен учитывать, что его программа будет только
частью более сложной программы. Обычно говорят, что прикладная программа
(программа пользователя) в процессе выполнения взаимодействует с операционной
системой. Операционная система - это совокупность программ, создающая сервис по
вводу и выводу информации на конкретные устройства, а также осуществляющая управление этими
устройствами. Кроме того, она обеспечивает поддержку файловой системы и
управление задачами. Здесь важно отметить, что прикладная программа сама не вводит и
не выводит информацию, а использует возможности операционной системы(ОС).
Обычно та часть ОС, которая отвечает за ввод/вывод информации, называют BIOS
(Basic Input Output System).
Механизм взаимодействия с BIOS основан
на так называемых программных прерываниях. Мы уже вскользь говорили о
прерываниях (см. раздел «Модель вычислений»). Однако не рассматривали
программных прерываний. Ввод/вывод обычно организован асинхронно., т.е. если
устройство вводит или выводит информацию, то это делается на основе аппаратного
прерывания, с которым связана некоторая программа, называемая драйвером
устройства. Этот драйвер обычно пишет или читает информацию в специально
выделенном участке ОП, называемом буфером. Программное прерывание - это приказ
BIOS прочитать или записать информацию в этот буфер. Рассмотрим пример,
клавиатура - устройство посимвольного ввода информации, для нее существует
специальное прерывание и драйвер. Когда пользователь нажимает клавишу,
происходит аппаратное прерывание, текущая программа прерывается и выполняется
драйвер клавиатуры, который читает код нажатой клавиши из регистра данных
устройства и записывает этот код в выделенный буфер, который называется
кольцевым. После того, как код символа помещен в кольцевой буфер, возобновляется
выполнение прерванной программы. Каким образом, прикладная программа может
прочитать код нажатой клавиши, как раз это и делает программное прерывание.
Т.е. прикладная программа дает приказ операционной системе прочитать код
нажатой клавиши из кольцевого буфера и вернуть этот код прикладной программе.
Каким образом записать вызов
программного прерывания? Это можно сделать. используя ассемблерную вставку. Но
в настоящее время для соответствующего компилятора строятся системные
библиотеки, где практически все программные прерывания записаны в виде
функций.
Прототипы этих функций записываются в
заголовочных файлах, поставляемых вместе компилятором. А сами функции находятся
в системных библиотеках
|