Министерство образования Российской Федерации
Комсомольский-на-Амуре государственный технический университет
Факультет компьютерных технологий
кафедра «Математического обеспечения и применения ЭВМ»
Тихомиров В.А.
АСИНХРОННЫЙ ФАЙЛОВЫЙ ВВОД/ВЫВОД в
ОПЕРАЦИОННОЙ СИСТЕМЕ
WINDOWS
лабораторная работа по курсу
“Операционные системы (защищенный режим работы процессора)”
специальность 2204
2001 г.
Цель лабораторной работы: Изучить теоретические вопросы организации асинхронного файлового ввода-вывода в ОС Windows и освоить приемы его практической реализации с использованием системных функций.
Задание на лабораторную работу:
- внимательно изучить ниже прилагаемый теоретический материал;
- набрать и проверить работоспособность программных модулей, представленных на листингах 1-3. Тексты программ вместе с результатами их тестирования вставить в отчет;
- выполнить индивидуальное задание в соответствии с выданным преподавателем вариантом:
№ вар. |
Содержание задания |
1 |
Организовать асинхронный ввод данных из файла и с клавиатуры с немедленным выводом принятых данных на экране. |
2 |
Осуществить ввод/вывод данных с одновременным выполнением каких-либо других полезных действий, например сложных математических вычислений. |
3 |
На основе технологии перекрывающегося ввода-вывода сделать программу, которая получает данные непрерывным перечитыванием заданного файла (выводит их на экран) и от клавиатуры. Если приходят данные от клавиатуры, они сразу же записываются в конец читаемого файла. |
4 |
Написать программу позволяет осуществлять обмен сообщениями между клиентом и сервером по технологии канала для перекрывающегося ввода/вывода. Если она запускается без аргументов командной строки, она начинает работу в режиме сервера. Если в командной строке указано имя компьютера, программа переходит в режим клиента и пытается соединиться с сервером, который обладает указанным именем. Все символы, набранные на клавиатуре клиента, передаются и печатаются в окне сервера и наоборот. |
5 |
Сделать программу, аналогичную п.4, однако добавить использование порта завершения, чтобы во время ожидания ввода программа не простаивала, а выполняла какие-либо полезные действия, например – генерировала случайные данные. |
6 |
На основе технологии отображения файлов в память создать консольную программу, которая принимает в качестве аргумента командной строки список имен файлов, и копирует содержимое этих файлов один за другим в стандартный поток вывода. Таким образом, при помощи этой утилиты можно объединить несколько файлов в один или отобразить содержимое файлов на экране консоли. |
- тщательно откомментированный текст составленной программы вместе с результатами ее тестирования представить в отчете. Там же привести теоретический материал, на основе которого выполнялось задание.
- отчет оформить в электронной форме согласно СТП КнАГТУ.
Асинхронный ввод/вывод.
Асинхронный ввод/вывод — это механизм, позволяющий программе осуществлять обмен данными с каким-либо устройством ввода/вывода и одновременно с этим выполнять какую-либо другую полезную работу. Например, программа отдает команду на чтение данных из файла, а затем, не ожидая завершения чтения данных, приступает к выполнению математических вычислений. Когда данные из файла перемещаются в оперативную память, программа завершает вычисления и приступает к обработке прочитанных данных. Удобно, не правда ли? Это лишь один из множества возможных сценариев использования асинхронного ввода/ вывода.
Представим, что вы разрабатываете Web-сервер. Каждый раз, когда клиент запрашивает страницу, сервер создает новый программный поток, который обслуживает запрос клиента. Конечно, это будет работать, однако не забывайте, что каждый раз при создании нового потока расходуется процессорное время и системные ресурсы. Кроме того, максимальное допустимое количество потоков, которые можно создать в системе, ограничено. Конечно, если нагрузка на ваш сервер будет небольшой, вы можете не придумывать ничего экстраординарного. Однако в наше время многие узлы Web рассчитаны на обслуживание нескольких тысяч запросов одновременно. Если операционная система каждую секунду будет занята созданием нескольких тысяч программных потоков, возможно, у нее не хватит ресурсов на выполнение других операций. Будет лучше, если в системе будут постоянно работать несколько программных потоков, которые будут распределять между собой нагрузку. Если вы хотите реализовать подобную схему, вам не обойтись без асинхронного ввода/вывода.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.