39279

АРХИТЕКТУРА СПЕЦИАЛИЗИРОВАННЫХ СИСТЕМ ОБРАБОТКИ, АНАЛИЗА И ИНТЕРПРЕТАЦИИ ДАННЫХ

Книга

Информатика, кибернетика и программирование

Содержание: Введение Параллельная обработка данных на ЭВМ Классификации параллельных ВС Классификация Кришнамарфи Используемые источники Введение Стремительное развитие науки и проникновение человеческой мысли во все новые области вместе с решением поставленных прежде проблем постоянно порождает поток вопросов и ставит новые как правило более сложные задачи. К настоящему времени спроектированы и опробованы сотни различных компьютеров использующих в своей архитектуре тот или иной вид параллельной обработки данных. Параллельная обработка...

Русский

2013-10-01

1.13 MB

1 чел.

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

РЯЗАНСКИЙ   ГОСУДАРСТВЕННЫЙ   РАДИОТЕХНИЧЕСКИЙ   УНИВЕРСИТЕТ                                              

                                                                                                             

ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Кафедра Электронных Вычислительных Машин

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

по дисциплине

АРХИТЕКТУРА СПЕЦИАЛИЗИРОВАННЫХ СИСТЕМ ОБРАБОТКИ, АНАЛИЗА И ИНТЕРПРЕТАЦИИ ДАННЫХ

магистерская подготовка  

для направления 230100 « Информатика и вычислительная техника »

Очная форма обучения

Рязань 2011

Лабораторная работа № 1

по теме: «Классификация параллельных вычислительных систем».

Цель работы: получить представление о видах классификации параллельных вычислительных систем, сформировать понятие о классификации параллельных вычислительных систем Е. Кришнамарфи.

Содержание:

Введение

Параллельная обработка данных на ЭВМ

Классификации параллельных ВС

Классификация Кришнамарфи

Используемые источники

Введение

Стремительное развитие науки и проникновение человеческой мысли во все новые области вместе с решением поставленных прежде проблем постоянно порождает поток вопросов и ставит новые, как правило более сложные, задачи. Во времена первых компьютеров казалось, что увеличение их быстродействия в 100 раз позволит решить большинство проблем, однако    гигафлопная[S1] производительность современных суперЭВМ сегодня является явно недостаточной для многих ученых. Электро и гидродинамика, сейсморазведка и прогноз погоды, моделирование химических соединений, исследование виртуальной реальности - вот далеко не полный список областей науки, исследователи которых используют каждую возможность ускорить выполнение своих программ.

Наиболее перспективным и динамичным направлением увеличения скорости решения прикладных задач является широкое внедрение идей параллелизма[S2] в работу вычислительных систем. К настоящему времени спроектированы и опробованы сотни различных компьютеров, использующих в своей архитектуре тот или иной вид параллельной обработки данных.

Параллельная обработка данных на ЭВМ

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

Параллельная обработка. Если некое устройство выполняет одну операцию за единицу времени, то тысячу операций оно выполнит за тысячу единиц. Если предположить, что есть пять таких же независимых устройств, способных работать одновременно, то ту же тысячу операций система из пяти устройств может выполнить уже не за тысячу, а за двести единиц времени. Аналогично система из N устройств ту же работу выполнит за 1000/N единиц времени. Подобные аналогии можно найти и в жизни: если один солдат вскопает огород за 10 часов, то рота солдат из пятидесяти человек с такими же способностями, работая одновременно, справятся с той же работой за 12 минут - принцип параллельности в действии!

Кстати, пионером в параллельной обработке потоков данных был академик А.А.Самарский, выполнявший в начале 50-х годов расчеты, необходимые для моделирования ядерных взрывов. Самарский решил эту задачу, посадив несколько десятков барышень с арифмометрами за столы. Барышни передавали данные друг другу просто на словах и откладывали необходимые цифры на арифмометрах. Таким образом, в частности, была расчитана эволюция взрывной волны. Работы было много, барышни уставали, а Александр Андреевич ходил между ними и подбадривал. Это, можно сказать, и была первая параллельная система. Хотя расчеты водородной бомбы были мастерски проведены, точность их была очень низкая, потому что узлов в используемой сетке было мало, а время счета получалось слишком большим.

Конвейерная обработка. Что необходимо для сложения двух вещественных чисел, представленных в форме с плавающей запятой? Целое множество мелких операций таких, как сравнение порядков, выравнивание порядков, сложение мантисс, нормализация и т.п. Процессоры первых компьютеров выполняли все эти "микрооперации" для каждой пары аргументов последовательно одна за одной до тех пор, пока не доходили до окончательного результата, и лишь после этого переходили к обработке следующей пары слагаемых.

Идея конвейерной обработки заключается в выделении отдельных этапов выполнения общей операции, причем каждый этап, выполнив свою работу, передавал бы результат следующему, одновременно принимая новую порцию входных данных. Получаем очевидный выигрыш в скорости обработки за счет совмещения прежде разнесенных во времени операций. Предположим, что в операции можно выделить пять микроопераций, каждая из которых выполняется за одну единицу времени. Если есть одно неделимое последовательное устройство, то 100 пар аргументов оно обработает за 500 единиц. Если каждую микрооперацию выделить в отдельный этап (или иначе говорят – ст упень) конвейерного устройства, то на пятой единице времени на разной стадии обработки такого устройства будут находится первые пять пар аргументов, а весь набор из ста пар будет обработан за 5+99=104 единицы времени - ускорение по сравнению с последовательным устройством почти в пять раз (по числу ступеней конвейера).

Казалось бы конвейерную обработку можно с успехом заменить обычным параллелизмом, для чего продублировать основное устройство столько раз, сколько ступеней конвейера предполагается выделить. В самом деле, пять устройств предыдущего примера обработают 100 пар аргументов за 100 единиц времени, что быстрее времени работы конвейерного устройства! В чем же дело? Ответ прост, увеличив в пять раз число устройств, мы значительно увеличиваем как объем аппаратуры, так и ее стоимость. Представьте себе, что на автозаводе решили убрать конвейер, сохранив темпы выпуска автомобилей. Если раньше на конвейере одновременно находилась тысяча автомобилей, то действуя по аналогии с предыдущим примером надо набрать тысячу бригад, каждая из которых (1) в состоянии полностью собрать автомобиль от начала до конца, выполнив сотни разного рода операций, и (2) сделать это за то же время, что машина прежде находилась на конвейере. Представили себестоимость такого автомобиля? Нет? Согласен, трудно, разве что Ламборгини приходит на ум, но потому и возникла конвейерная обработка...

Классификации параллельных ВС

В научной литературе и технической документации можно найти более десятка различных названий, характеризующих лишь общие принципы функционирования параллельных машин: векторно-конвейерные[S3], массивно-параллельные[S4], компьютеры с широким командным словом[S5], систолические массивы[S6], гиперкубы[S7], спецпроцессоры[S8] и мультипроцессоры[S9], иерархические и кластерные компьютеры, dataflow, матричные ЭВМ и многие другие. Если же к подобным названиям для полноты описания добавить еще и данные о таких важных параметрах, как, например, организация памяти, топология связи между процессорами, синхронность работы отдельных устройств или способ исполнения арифметических операций, то число различных архитектур станет и вовсе необозримым.

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

Подобную классификацию хотелось бы найти и для архитектур параллельных вычислительных систем. Основной вопрос - что заложить в основу классификации, может решаться по-разному, в зависимости от того, для кого данная классификация создается и на решение какой задачи направлена. Так, часто используемое деление компьютеров на персональные ЭВМ, рабочие станции, мини--ЭВМ, большие универсальные ЭВМ, минисупер--ЭВМ и супер--ЭВМ, позволяет, быть может, примерно прикинуть стоимость компьютера. Однако она не приближает пользователя к пониманию того, что от него потребуется для написания программы, работающий на пределе производительности параллельного компьютера, т.е. того, ради чего он и решился его использовать. Как это ни странно, но от обилия разных параллельных компьютеров страдает, прежде всего, конечный пользователь, для которого, вроде бы, они и создавались: он вынужден каждый раз подбирать наиболее эффективный алгоритм, он испытывает на себе "прелести" параллельного программирования и отладки, решает проблемы переносимости и затем все повторяется заново.

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

 

Классификация Кришнамарфи

Е.Кришнамарфи для классификации параллельных вычислительных систем предлагает использовать четыре характеристики, очень похожие на характеристики классификации А.Базу:

  1.  степень гранулярности;
  2.  способ реализации параллелизма;
  3.  топология и природа связи процессоров;
  4.  способ управления процессорами.

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

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

Второй уровень в классификационном дереве фиксирует метод реализации алгоритма. С появлением сверхбольших интегральных схем (СБИС) стало возможным реализовывать аппаратно не только простые арифметические операции, но и алгоритмы целиком. Например, быстрое преобразование Фурье, произведение матриц и LU-разложение относятся к классу тех алгоритмов, которые могут быть эффективно реализованы в СБИС'ах. Данный уровень классификации разделяет системы с аппаратной реализацией алгоритмов и системы, использующие традиционный способ программной реализации.

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

Наконец, последний, четвертый уровень - способ управления процессорами, определяет общий принцип функционирования всей совокупности процессоров вычислительной системы: синхронный, dataflow или асинхронный.

На основе выделенных четырех характеристик нетрудно определить место наиболее известных классов архитектур в данной систематике.

Векторно-конвейерные компьютеры:

  •  гранулярность - на уровне данных;
  •  реализация параллелизма - аппаратная;
  •  связь процессоров - простая топология со средней связностью;
  •  способ управления - синхронный.

Классические мультипроцессоры:

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

Матрицы процессоров:

  •  гранулярность - на уровне данных;
  •  реализация параллелизма - аппаратная;
  •  связь процессоров - двумерные массивы с сильной связностью;
  •  способ управления - синхронный.

Систолические массивы:

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

Архитектура типа wavefront:

  •  гранулярность - на уровне данных;
  •  реализация параллелизма - аппаратная;
  •  связь процессоров - двумерная топология с сильной связностью;
  •  способ управления - dataflow.

Архитектура типа dataflow:

  •  гранулярность - на уровне команд;
  •  реализация параллелизма - комбинированная;
  •  связь процессоров - простая топология с сильной либо средней связностью и использованием принципа dataflow;
  •  способ управления - асинхронно-dataflow.

Несмотря на то, что классификация Е. Кришнамарфи построена лишь на четырех признаках, она позволяет выделить и описать такие "нетрадиционные" параллельные системы, как систолические массивы, машины типа dataflow и wavefront. Однако эта же простота является и основной причиной ее недостатков: некоторые архитектуры нельзя однозначно отнести к тому или иному классу, например, компьютеры с архитектурой гиперкуба и ассоциативные процессоры. Для более точного описания таких машин потребуется ввести еще целый ряд характеристик, таких, как размещение задач по процессорам, способ маршрутизации сообщений, возможность реконфигурации, аппаратная поддержка языков программирования и другие. Вместе с тем ясно, что эти признаки формализовать гораздо труднее, поэтому есть опасность вместо ясности внести в описание лишь дополнительные трудности.

Используемые источники

  1.  http://www.chair36.msiu.ru/education/cs/2-cs/2-cs-1/materials-new/taxonomy/
  2.  http://spb.parallel.ru/
  3.  http://num-meth.srcc.msu.su/zhurnal/tom_2000/art2_6.html 
  4.  http://www.hpc.nw.ru/COURSES/HPC/
  5.  http://www.ctc.msiu.ru/program/t-system/diploma/node16.html
  6.  http://www.csa.ru/skif/kurs_3/q_9.html

Конец формы

Лабораторная работа № 2-3

Технологии разработки распределенных информационных систем

Цель работы: Познакомиться с общими принципами организации распределенных ИС. Получить представление о компонентной объектной модели (COM). Научиться использовать механизм автоматизации для обработки данных с использованием внешних приложений.

Указания к выполнению лабораторной работы

Классическая компьютерная информационная система включает в себя следующие обязательные элементы:

  •  Информационная база, которая является основным хранилищем данных ИС. В подавляющем большинстве случаев она представляет собой серверную базу данных, которая управляется некоторой СУБД. Иные варианты (например, совместно используемый набор файлов) встречаются значительно реже.
  •  Клиентские приложения, которые используются для работы с данными и устанавливаются на ЭВМ пользователей информационной системы. Клиентские приложения не только выполняют просмотр и редактирование данных (так называемые презентационные функции информационной системы), но и обеспечивают решение более сложных задач: контроль корректности вводимой информации, статистическая обработка данных, формирование отчетов и т.п. (функции ИС по прикладной обработке данных).
  •  Средства обеспечения доступности данных информационной базы из клиентских приложений. К таким средствам, прежде всего, относятся средства сетевого доступа, которые обычно реализованы соответствующими средствами сетевых операционных систем (например, поддержка протоколов TCP/IP). Кроме того, сюда следует отнести средства взаимодействия пользовательского приложения и сервера баз данных. Некоторые из них были изучены в ходе выполнения предыдущих лабораторных работ (процессор баз данных BDE, технологии ODBC и ADO и т.п.).

При эксплуатации описанных информационных систем нередко возникают следующие проблемы:

  •  Необходимость использования ЭВМ с высокими требованиями к аппаратной части при организации рабочих мест пользователей. Клиентские приложения, которые реализуют не только презентационные, но и прикладные функции ИС, обычно требуют для своей работы довольно значительных вычислительных ресурсов. Кроме того, дополнительные ресурсы необходимы для установки и использования средств обеспечения доступа к данным.
  •  Необходимость приобретения (лицензирования) и установки специальных средств доступа к данным (например, компонентов BDE или поставщиков данных OLE DB) на каждом компьютере пользователя ИС.
  •  Сложность конфигурирования средств доступа к данным (например, организация BDE-псевдонимов или настройка источников данных ODBC на всех пользовательских ЭВМ).
  •  Возможные конфликты между средствами доступа к данным, установленным для работы с различными информационными системами.

Указанные проблемы могут существенно повысить стоимость эксплуатации ИС и значительно уменьшить (или вовсе устранить) экономический эффект от ее внедрения. Для преодоления этих проблем в последние годы все чаще рекомендуется проектировать сложные информационные системы на базе многоуровневой (многозвенной) архитектуры.

Рассмотренная классическая структура информационной системы соответствует двухуровневой модели клиент-сервер. Клиентами в данном случае являются приложения, установленные на ЭВМ пользователей, а сервером – очевидно, сервер базы данных (СУБД либо сетевая ОС – если база данных состоит из множества совместно используемых файлов). Клиенты напрямую обращаются к серверу (посредством служебных средств обеспечения доступа к данным) и единственной информационной услугой, которую они запрашивают, являются хранящиеся в информационной базе данные. Большая часть прикладной обработки данных выполняется клиентским приложением самостоятельно.

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

  •  Данные по-прежнему хранятся в информационной базе, в роли которой чаще всего выступает серверная БД.
  •  Функции прикладной обработки данных сосредоточены в так называемом сервере приложений (Application Server), который предоставляет клиентским пользовательским приложениям множество информационных услуг (сервисов) высокого уровня. Серверы приложений выступают в качестве промежуточного уровня между серверами данных и клиентскими приложениями. С одной стороны, они взаимодействуют с информационной базой ИС, запрашивая необходимые данные и отсылая запросы на модификацию данных. В этом случае они выступают в качестве клиентов. С другой стороны, они взаимодействуют с клиентскими пользовательскими приложениями, выдавая по их запросам результаты обработки данных или транслируя полученные запросы на модификацию данных в информационную базу. В этом случае они выступают в качестве серверов. Серверы приложений являются объектами высокого уровня, поэтому их реализация может не зависеть от специфики конкретной операционной системы или СУБД. Это обеспечивает целый ряд важных достоинств многоуровневой архитектуры ИС, в том числе:
    •  Возможность подключения к серверу приложений клиентских приложений, работающих под управлением различных ОС.
    •  Возможность простого и единообразного подключения клиентских приложений. Для их взаимодействия с сервером приложений может быть использована простая, но достаточно эффективная технология, не требующая установки сложного программного обеспечения на пользовательские ЭВМ. Все средства доступа к данным информационной базы (менеджеры драйверов, поставщик данных для конкретной СУБД, библиотеки, реализующие прикладной программный интерфейс и т. п.) в этом случае сосредоточены на уровне сервера приложений, а не на уровне клиентов.
  •  Клиентские приложения реализуют только презентационные функции ИС (просмотр и редактирования данных). Это соответствует концепции так называемого «тонкого» клиента, предъявляющего минимальные требования к аппаратной части пользовательских ЭВМ.
  •  Средства обеспечения доступности данных теперь распределены между клиентами и серверами приложений. Средства сетевого взаимодействия по-прежнему необходимы на всех уровнях, однако средства взаимодействия с базами данных необходимы только на уровне серверов приложений (см. выше).

Развитием трехуровневой архитектуры является так называемая многоуровневая (n-уровневая) организация вычислений (Multi-tier computing), когда информационная система состоит из большого количества удаленных друг от друга объектов (серверов), каждый из которых может предоставлять другим объектам (клиентам) разнообразные информационные услуги. При этом различные серверы могут работать под управлением различных ОС или использовать для хранения данных СУБД различных типов. Для синхронизированного и согласованного функционирования таких объектов в состав информационной системы также включают специальные служебные сервисы – системы мониторинга и управления распределенными транзакциями, агенты запуска и управления серверами и др.

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

  •  Технология COM и ее  развитие (DCOM, COM+);
  •  Технология MIDAS (на базе компонентной объектной модели COM);
  •  Технология CORBA;
  •  Платформа .NET.

Сокращение COM означает Component Object Model, что можно перевести с английского языка как компонентная объектная модель. Технология была разработана фирмой Microsoft в начале 90-ых годов прошлого века для обеспечения взаимодействия  между различными приложениями, запущенными на одном или даже на разных компьютерах1.

Сущность технологии COM заключается в программировании с использованием компонентов – подход, который знаком всем программистам, использующим в своей работе среду разработки Delphi или C++ Builder. Под компонентом в данном случае понимается законченный (и откомпилированный) объект со своими свойствами и методами, который может легко встраиваться в различные приложения и распространяться как отдельный продукт. Компоненты, созданные в соответствии со спецификацией COM, могут функционировать в различной языковой и операционной средах. Это значит, что если разработчик оформил некоторый набор функций как объект COM, то функциями этого объекта могут воспользоваться программисты самых разных языков программирования: C++, Delphi, Visual Basic и т. д. – достаточно, чтобы соответствующая среда разработки поддерживала технологию COM. По этой причине модель COM может являться базовой для создания распределенных информационных систем – составляющие ее объекты могут быть реализованы с использованием различных технологий и инструментов программирования, однако их взаимодействие может осуществляться в соответствии со спецификацией COM (посредством определенных интерфейсов и протоколов).

Принципы обращения к свойствам и методам COM-объекта из других приложений полностью соответствуют модели клиент-сервер. Компонент, в котором реализованы некоторые полезные свойства и методы, выступает в качестве COM-сервера, а обращающиеся к нему приложения – в качестве клиентов. Одно и то же приложение, очевидно, может выступать и в качестве клиента, и в качестве COM-сервера, в зависимости от характера взаимодействия с другими приложениями в каждый конкретный момент времени. Чтобы взаимодействие «клиент-сервер» между произвольной парой приложений состоялось успешно, необходимо выполнение следующих условий:

  •  Приложение-клиент должно «иметь представление» о тех сервисах (полезных свойствах и методах), которые предоставляет приложение-сервер. Если бы речь шла о приложениях, написанных на одном языке программирования, то для решения этой проблемы достаточно было бы распространять вместе с компонентом описания соответствующих ему классов. Например, для компонента, написанного на C++, описания его классов хранятся в заголовочных файлах с расширением “.h”. Поскольку технология COM является не зависимой от языка программирования, то для определения сервисных функций COM-объекта используется специальный язык – язык описания интерфейса (IDL, Interface Description Language2).
  •  Все COM-объекты должны иметь уникальные имена, по которым их можно отличать друг от друга и обращаться к ним. При этом уникальность должна носить глобальный характер, поскольку одни и те же COM-объекты могут использоваться десятками тысяч разработчиков в сотнях тысяч различных приложений. Для именования объектов COM используются так называемые глобальные уникальные идентификаторы (Globally unique identifier, GUID3). Глобальный уникальный идентификатор представляет собой 128-разрядное число, которое генерируется с использованием алгоритмов получения случайных чисел и специальной хеш-функции. Вероятность повторения глобального уникального идентификатора такой разрядности чрезвычайно мала. Таким образом, для того чтобы все COM-серверы были поименованы уникальными именами, разработчикам достаточно использовать один и тот же заранее определенный алгоритм генерации глобальных уникальных идентификаторов. В ОС Windows для генерирования GUID используются функции API UuidCreate и CoCreateGuid. Глобальный уникальный идентификатор принято записывать в следующем формате:

XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,

например:

B502D1BE-9A57-11d0-8FDE-00C04FD9189D

  •  Операционная система должна хранить список доступных COM-объектов и информацию о месте их хранения (то есть путь к соответствующим исполняемым модулям, в которых реализованы сервисы этих объектов). В ОС Windows для этих целей используется специальный подраздел системного реестра: HKEY_CLASSES_ROOT\CLSID\, у которого в качестве вложенных подразделов выступают имена (глобальные уникальные идентификаторы) зарегистрированных в системе  объектов, например:

{00000000-0E4D-0463-87B5-D411BEBE0010}

{00000001-4FEF-40D3-B3FA-E0531B897F98}

{00000010-0000-0010-8000-00AA006D2EA4}

{00000100-0000-0010-8000-00AA006D2EA4}

Каждый из указанных разделов содержит описание свойств соответствующего COM-объекта. Например, свойство ProgID содержит программный идентификатор объекта – кодовое наименование, которое присваивается разработчиком и которое, в отличие от глобального уникального идентификатора, несет некоторую смысловую нагрузку. Чтобы задать местонахождение исполняемого модуля для объекта COM используются свойства InprocServer32 (если реализация объекта располагается в DLL-файле), LocalServer32 (если объект реализован как EXE-файл) или RemoteServer32 (для объектов, расположенных на удаленных ЭВМ в компьютерной сети).

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

 

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

Среда разработки Borland C++ Builder предоставляют программисту возможность не только создавать собственные, но и эффективно использовать уже существующие COM-объекты в своих приложениях. В некоторых случаях взаимодействие создаваемого приложения с объектами COM реализуется незаметно («прозрачно») для разработчика, в других – требует от него осознанных действий.

Полезным примером практического и осознанного использования технологии COM является использование механизма автоматизации для взаимодействия с внешними приложениями. Механизм автоматизации (Automation5) позволяет разработчикам приложения привлекать для обработки данных функциональные возможности других приложений. Например, для формирования отчетов часто используются возможности Microsoft Excel или Microsoft Word.

Взаимодействие в данном случае осуществляется между объектами и контроллерами автоматизации. Объект автоматизации – это объект, созданный по технологии COM, в котором реализован доступ к полезным свойствам и методам некоторого приложения или его части. Контроллер автоматизации – это приложение, которое имеет доступ к свойствам и методам COM-объекта и использует их для обработки своих данных. В указанном ранее примере, приложение разработчика – это контроллер, а Microsoft Excel либо Microsoft Word – объекты автоматизации.

Рассмотрим общую схему работы контроллера автоматизации при взаимодействии с каким-либо приложением Microsoft Office:

  1.  Проверить, запущена ли копия приложения-сервера (объекта автоматизации).
  2.  В зависимости от результатов проверки (либо исходя из конкретной ситуации) запустить копию приложения-сервера либо подключиться к уже имеющейся копии.
  3.  Если необходимо, сделать окно приложения-сервера видимым.
  4.  Выполнить какие-то действия с приложением-сервером (например, создать или открыть документы, изменить их данные, сохранить документы и т. п.).
  5.  Закрыть приложение-сервер, если его копия была запущена данным контроллером, или отключиться от него, если контроллер подключился к уже имеющейся копии (или если работа с приложением будет продолжена).

Ниже приведен программный код для указанной схемы (в качестве объекта автоматизации выбрано приложение Microsoft Excel, которое запускается по нажатию на кнопку Button1 и закрывается по нажатию кнопки Button2):

#include <comobj.hpp>

...

TForm1 *Form1;

// глобальные переменные модуля

Variant Server;  

bool ServerIsRunning;

...

void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString ServerProgID;

IUnknown *UnknownInterface;

HResult Res;

 

 // Свойство ProgID для приложения Microsoft Excel = "Excel.Application"

ServerProgID = "Excel.Application";

 // Проверяем наличие запущенной копии приложения

 Res = GetActiveObject(ProgIDToClassID(ServerProgID),0,&UnknownInterface);

 if SUCCEEDED(Res)

 {

  // подключаемся к существующему экземпляру приложения-сервера

  Server = GetActiveOleObject(ServerProgID);

  ServerIsRunning = true;

 }

 else

 {

  // запускаем новый экземпляр приложения-сервера

  Server = CreateOleObject(ServerProgID);

  ServerIsRunning = false;

 }

 

 // Показываем окно приложения-сервера на экране

 Server.OlePropertySet("Visible", true);

try

 {

  //------------------------------------------

  // Здесь выполняются некоторые действия

  // с объектами приложения Office

  // ------------------------------------------

 }

catch(...)

 {

  // Сообщение об ошибке работы с MS Excel 

 }

Button1->Enabled = false;

Button2->Enabled = true;

}

//-------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

// отключаемся либо закрываем приложение-сервер

 if (ServerIsRunning)

 Server= Unassigned;

 else

 Server.OleProcedure("Quit");

Button2->Enabled = false;

Button1->Enabled = true;

}

Для обращения к свойствам и методам объектов автоматизации можно использовать следующие методы класса Variant:

  •  Variant OlePropertyGet(const String& name, TAutoArgsBase* args = 0) – получить значение свойства name некоторого COM-объекта. В качестве второго параметра метода обычно передаются дополнительные аргументы;
  •  void OlePropertySet(const String& name, TAutoArgsBase& args) – установить значение свойства name некоторого COM-объекта. В качестве второго параметра метода обычно передается устанавливаемое значение;
  •  void OleProcedure (const String& name, TAutoArgsBase* args = 0) – запустить метод (процедуру) с именем name для некоторого COM-объекта. В качестве второго параметра метода обычно передаются дополнительные параметры процедуры;
  •  Variant OleFunction (const String& name, TAutoArgsBase* args = 0) – запустить метод (функцию) с именем name для некоторого COM-объекта. В качестве второго параметра метода обычно передаются дополнительные параметры функции;

Используя перечисленные методы, можно обращаться к тем объектам приложения Microsoft Excel (Workbooks, WorkSheets, Cells и т. п.), которые изучались в лабораторной работе № 2 курса «Информационные системы».

Примеры:

  1.  Открываем новую рабочую книгу

Server.OlePropertyGet("WorkBooks").OleProcedure("add");

  1.  Устанавливаем ширину колонки “B” равной 40 на первом рабочем листе:

Variant Sheet1 = Server.OlePropertyGet("WorkSheets",1);

Variant ColumnB =

Sheet1.OlePropertyGet("Cells",1,2).OlePropertyGet("EntireColumn");

ColumnB.OlePropertySet("ColumnWidth",40);

  1.  Устанавливаем значение ячейки c RC-адресом (Row, Column) равным значению переменной (или Variant-объекта) Data:

Sheet1.OlePropertyGet("Cells",Row,Column).OlePropertySet("Value",Data);

  1.  Устанавливаем жирный  шрифт для ячейки c RC-адресом (Row, Column)

Sheet1.OlePropertyGet("Cells",Row,Column).

OlePropertyGet("Font").OlePropertySet("Bold",true);

  1.  Закрываем последнюю открытую рабочую книгу. Если в нее были внесены изменения, то пользователь будет предупрежден об их возможной потере.

Variant WorkBook = Server.OlePropertyGet("WorkBooks",

 Server.OlePropertyGet("WorkBooks").OlePropertyGet("Count"));

WorkBook.OleProcedure("close");

  1.  Закрываем последнюю открытую рабочую книгу без сохранения изменений и без предупреждения пользователя.

Variant WorkBook = Server.OlePropertyGet("WorkBooks",

 Server.OlePropertyGet("WorkBooks").OlePropertyGet("Count"));

WorkBook.OleProcedure("close",false);

Задания к лабораторной работе

  1.  Исследовать перечень COM-объектов, зарегистрированных на компьютере, на котором выполняется лабораторная работа. Для этого запустить редактор системного реестра (это можно, сделать, например, через команду Выполнить кнопки Пуск; имя приложения редактора реестра – regedit.exe). В редакторе реестра найти раздел HKEY_CLASSES_ROOT и подраздел CLSID. В отчет о выполнении лабораторной работы включить рисунок с частью системного реестра, отображающий перечень нескольких первых объектов COM.
  2.  Найти в списке зарегистрированных COM-объектов объекты со следующими глобальными уникальными идентификаторами:

{00000011-0000-0010-8000-00AA006D2EA4}

{00000100-0000-0010-8000-00AA006D2EA4}

{00024500-0000-0000-C000-000000000046}

В отчете о выполнении лабораторной работы  указать, какие из указанных объектов были обнаружены. Для найденных объектов привести значения свойств ProgID и InprocServer32/LocalServer32/RemoteServer32.

  1.  С использованием механизма автоматизации доработать БД-приложение из лабораторной работы № 5 таким образом, чтобы у пользователя была возможность экспортировать в Microsoft Excel данные из основной таблицы приложения. Обратить внимание на удобство восприятия экспортированных данных (предусмотреть выделение заголовков столбцов, подбор ширины ячеек и т.п.).
  2.  В отчете отразить ход выполнения работы, результаты тестирования и сделанные выводы.

Контрольные вопросы и задания

  1.  Двухзвенная архитектура ИС.
  2.  Достоинства и недостатки двухзвенной архитектуры.
  3.  Особенности трехзвенной архитектуры ИС.
  4.  Распределенные (многозвенные) ИС.
  5.  Принципы технологии COM.
  6.  Понятие глобального уникального идентификатора.
  7.  Механизм автоматизации как средство межпроцессного взаимодействия.
  8.  Общая схема работы контроллера автоматизации.
  9.  Приведите примеры «прозрачного» использования механизма автоматизации при разработке приложений в Borland C++ Builder.
  10.  Функции и методы для взаимодействия с объектами автоматизации в Borland C++ Builder.

Рекомендованная литература

  1.  Елманова Н. Распределенные вычисления и технологии Inprise. Часть I. Общие вопросы организации вычислений // «Компьютер Пресс», 1999 № 1; http://compress.ru/Archive/CP/1999/1/6/
  2.  Елманова Н. Использование COM технологии в C++ Builder: удаленный запуск серверов автоматизации; создание и использование OLE документов в приложениях // «Компьютер Пресс», 1999 № 1; http://compress.ru/Archive/CP/1999/1/2/
  3.  Роджерсон Д. Основы COM. 2-ое издание // М. «Русская редакция», 2000;
  4.  Безверхов М. Архив статей «Что такое технология COM» http://www.developing.ru/com/.

Лабораторная работа 8

Создание базы данных, операции с таблицами

Задание. Создать базу данных Автомагазин, состоящую из одной таблицы Склад, которая имеет следующую структуру:

Имя поля

Тип данных

Размер поля, формат

Марка

Текстовый

30 символов

Объем двигателя

Числовой

Одинарное с плавающей точкой

Цвет

Текстовый

20 символов

Тип кузова

Текстовый

20 символов

Год выпуска

Числовой

Целое

Номер кузова

Текстовый

30 символов, ключевое поле

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

Для этого необходимо выполнить следующие действия.

  1.  Для создания базы данных запустите Microsoft Access и выберите вменю Файл команду Создать, затем в панели задач Создание файла выберите вариант Новая база данных. После этого в окне Файл новой базы данных откройте нужную папку, например Новая папка, и задайте имя создаваемого файла базы данных, например «Автомагазин.MDB».
  2.  Вызвав справку Access, на вкладке Содержание выберите тему Создание баз данных и работа с ними. Изучите разделы справки: Разработка баз данных, Поиск и открытие баз данных. Выбрав тему Работа с таблицами, изучите разделы: Создание таблицы, Настройка полей. После изучения справочной информации закройте окно справки.
  3.  Для создания таблицы выберите в списке вкладок в левой части окна базы данных вкладку Таблица. После этого в окне базы данных будут отображены ярлыки вариантов создания таблицы: в режиме конструктора, с помощью мастера и путем ввода данных. Дважды щелкнув мышью по строке «Создание таблицы в режиме конструктора», откройте окно таблицы в режиме конструктора.
  4.  В режиме конструктора таблицы в столбце Имя поля введите имя Марка. В столбце Тип данных оставьте тип Текстовый. В столбце Описание введите описание данных, которые будет содержать это поле, например, марка автомобиля. Текст описания будет выводиться в строке состояния при добавлении данных в поле, а также будет включен в описание объекта таблицы. Вводить описание не обязательно. Перейдите в бланк Свойства поля в нижней части окна и задайте значение Размер поля: 30 символов. Действуя аналогично, задайте названия, укажите тип и свойства данных для остальных полей, как показано на рис. 1.

Рис. 1. Создание таблицы в режиме конструктора

  1.  После ввода описания всех полей таблицы укажите ключевое поле, для чего, щелкнув область выделения строки с записью поля Номер кузова, нажмите кнопку «Ключевое поле на панели инструментов». После этого в области выделения поля Номер кузова появится знак ключевого поля - ключ, как показано на рис. 1.
  2.  Сохраните структуру таблицы командой Файл-Сохранить как. В диалоговом окне Сохранение задайте имя таблицы Автомобили, в поле Как выберите вариант Таблица и щелкните кнопку «ОК» для сохранения и закройте окно конструктора таблицы. После этого в окне базы данных Автомагазин на вкладке Таблицы появится новый объект - таблица Автомобили.
  3.  Выбрав объект Таблица, выделите таблицу Автомобили, щелкните по кнопке «Открыть» и введите данные, как показано на рис. 2. (для перехода к следующему полю нажимайте клавишу Tab, в конце каждой записи нажимайте Enter).
  4.  Сохраните таблицу, щелкнув кнопку «Сохранить» на панели инструментов, и закройте ее.
  5.  Откройте таблицу Автомобили и выполните сортировку записей по объему двигателя в порядке убывания. Для этого, установив курсор в столбец Объем двигателя, щелкните кнопку «Сортировка» по убыванию на панели инструментов.

Рис. 2. Таблица Автомобили

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

  1.  Используя фильтр, выберите в таблице Автомобили записи об автомобилях с кузовом «седан». Для этого в поле Тип кузова найдите экземпляр значения «седан». Выделив это значение, щелкните кнопку «Фильтр» по выделенному на панели инструментов. Просмотрев отфильтрованные записи, для отмены фильтра щелкните кнопку «Удалить фильтр» на панели инструментов.
  2.  Используя расширенный фильтр, выберите в таблице Автомобили записи об автомобилях с кузовом «седан», год выпуска которых не старше 1995 г. Для этого выберите в меню Записи команду Фильтр, а затем - опцию Расширенный фильтр. После этого на экране будет раскрыт бланк создания расширенного фильтра.

Добавьте в бланк поля Тип кузова и Год выпуска. Затем, установив курсор в строке Условие отбора в поле Год выпуска, задайте условие отбора [Автомобили]![Год выпуска]>1995. В этой же строке в поле Тип кузова задайте условие отбора «седан». Чтобы указать порядок сортировки, выберите ячейку Сортировка в поле Год выпуска и, щелкнув стрелку, выберите порядок сортировки по возрастанию. Чтобы применить фильтр, нажмите кнопку «Применение фильтра» на панели инструментов. После этого данные в таблице будут отображаться так:

Марка

Объем двигателя

Цвет

Тип кузова

Год выпуска

Номер кузова

ГАЗ-3201

3000

черный

седан

1998

G03298U5

После просмотра отфильтрованных записей для отмены фильтра щелкните кнопку «Удалить фильтр на панели инструментов».

  1.  Закройте таблицу с сохранением и завершите работу СУБД MS Access.

 

Лабораторная работа 9

 Модификация базы данных. Использование связанных таблиц. Создание форм и отчетов

Задание. Создайте в базе данных Автомагазин таблицу Поставщики, в таблицу Автомобили добавьте столбец Поставщик и создайте связь этих таблиц. Создайте форму и отчет для связанных таблиц.

Для этого выполните следующие действия.

1.         Загрузите программу MS Access и откройте базу данных Автомагазин.

2.         Откройте таблицу Автомобили в режиме конструктора, для чего, указав в списке объектов базы данных Автомагазин вкладку Таблицы, выберите таблицу Автомобили и щелкните кнопку «Конструктор».

3.         Вставьте в таблицу Автомобили новое поле, для чего, выделив поле Объем двигателя, выберите в меню Вставка команду Строки. Введите в новой строке следующее описание:

Имя поля

Тип данных

Размер, формат

Описание

Поставщик

Текстовый

30 символов

Фирма-поставщик автомобиля

4.         Сохраните изменения в структуре таблицы, для чего щелкните кнопку «Сохранить» на панели инструментов, а затем закройте ее, выбрав вменю Файл команду Закрыть.

5.         Создайте таблицу Поставщики, описав ее поля следующим образом:

Имя поля

Тип данных

Размер поля, формат

Описание

Фирма

Текстовый

30 символов, ключевое поле

Название фирмы

ФИО

Текстовый

50 символов

Фамилия, имя отчество руководителя

Телефон

Текстовый

12 символов, маска ввода, (9999)-999-99-99

Номер телефона

Адрес

Текстовый

50 символов

Почтовый адрес

 

Для создания таблицы выберите вкладку Таблицы и щелкните кнопку «Создание таблицы» в режиме конструктора.

В режиме конструктора таблицы в столбце Имя поля введите имя Фирма. В столбце Тип данных оставьте тип Текстовый. В столбце Описание можно ввести описание данных, которые будет содержать это поле, например, Название фирмы. Перейдите в бланк Свойства поля в нижней части окна и задайте значения Размер поля: 30 символов. Действуя аналогично, задайте названия, укажите тип и свойства данных для остальных полей.

Для поля Телефон в бланке Свойства поля задайте маску ввода, которая обеспечит контроль ввода телефонного номера с кодом города, например, (0243)-456-75-98. Для этого введите в строке Маска ввода текст маски (9999)-999-99-99.

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

6.         Установите связь между таблицами Автомобили и Поставщики. Для этого выберите команду Схема данных в меню Сервис. После этого раскроется пустое окно Схема данных, а в главном меню Access появится новый пункт меню Связи. Выбрав в меню Связи команду Добавить таблицу, в диалоговом окне Добавление таблицы выберите вкладку Таблицы. Выбирая из списка таблиц открытой базы данных Автомагазин и щелкая кнопку «Добавить», добавьте в окно схемы данных таблицы Автомобили и Поставщики. Закройте окно «Добавление таблицы», щелкнув кнопку «Закрыть».

Для установления связи между двумя таблицами методом «Drag-and-Drop» переместите имя поля с первичным ключом главной таблицы (Фирма) на поле Поставщик подчиненной таблицы. Как только вы отпустите левую кнопку мыши, на экране появится диалоговое окно Изменение связей. Для включения механизма поддержки целостности данных в связываемых таблицах установите флажок Обеспечение целостности данных.

Активизируйте флажок Обеспечение целостности данных, а затем включите переключатели каскадной модификации - обновления и удаления связанных записей. Завершите создание связи, щелкнув кнопку «Создать». После этого в окне Схема данных появится графическое изображение установленной связи. Пометки у концов линии связи 1 -  означают, что одна запись таблицы Поставщики может иметь сколько угодно связанных записей в таблице Автомобили.

7.         Создайте форму для связанных таблиц. Для этого откройте базу данных Автомагазин и, выбрав объект Формы, щелкните в правой области окна кнопку «Создание формы с помощью мастера».

На первом шаге диалога мастера Создание форм, выбрав таблицы Поставщики, а затем и Автомобили, включите в форму все поля таблицы Поставщики, а также все поля таблицы Автомобили, кроме поля Поставщик (это поле дублирует поле Фирма таблицы Поставщики), и щелкните кнопку «Далее».

На следующем шаге диалога с мастером выберите вид представления данных, указав в качестве главной таблицу Поставщики и включив опцию Подчиненные формы. Щелкнув кнопку «Далее», выберите внешний вид подчиненной формы - табличный, далее выберите стиль оформления Рисовая бумага.

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

Для запуска созданной формы щелкните ярлычок главной формы Поставщики. После этого на экране раскроется окно формы Поставщики с подчиненной формой Автомобили.

8.         Попробуйте ввести данные в форме. Если вы обнаружите, что размер поля в форме мал для представления данных, то измените форму. Для этого, закрыв окно формы, укажите главную форму Поставщики и щелкните кнопку «Конструктор» на панели инструментов. Измените размеры элементов управления формы, как показано на рис. 3, и закройте режим конструктора, сохранив изменения макета формы.

Рис. 3. Изменение размеров поля Адрес в форме Поставщики

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

10.      Создайте отчет, для чего, выбрав в списке объектов Отчеты, щелкните кнопку «Создание отчета» с помощью мастера. На первом шаге мастера Создание отчетов, выбрав таблицу Поставщики, включите в отчет поля Фирма и Телефон. Выбрав таблицу Автомобили, включите в отчет поля Марка, Объем двигателя, Цвет, Тип кузова, Год выпуска, Номер кузова. Щелкнув кнопку «Далее», выберите в качестве главной таблицы таблицу Поставщики. На следующем шаге диалога с мастером Создание отчетов добавьте уровень группировки, выбрав поле Марка. Щелкнув кнопку «Далее», выберите сортировку по возрастанию по полю Год выпуска. Щелкнув кнопку «Итоги», включите опцию Мах в поле Объем двигателя. Включите опцию данные и итоги и, щелкнув кнопку «ОК», закройте окно выбора вычисляемых итогов. Щелкнув кнопку «Далее», выберите вид макета ступенчатый и включите опцию настройки ширины полей для размещения их на одной странице. Затем выберем стиль оформления создаваемого отчета - Деловой. На заключительном этапе Создания отчета задайте имя Пример отчета1 и, выбрав просмотр отчета, щелкните кнопку «Готово» для завершения создания отчета и просмотра полученного отчета. После просмотра отчета закройте его, щелкнув кнопку «Закрыть» на панели инструментов.

11.      Завершите работу СУБД Access.

 

Лабораторная работа 10.

 Работа с данными при помощи запросов

Задание 1. Создать запрос к таблицам базы данных Автомагазин, который отберет данные об автомобилях, произведенных не ранее 1997 г. и поставленных фирмой АвтоВАЗ.

  1.  Загрузите программу Access и откройте базу данных Автомагазин. Выбрав вкладку Запросы, щелкните кнопку «Создание запроса» в режиме конструктора.
  2.  В окне Добавление таблицы, выделяя таблицы Поставщики, а затем - Автомобили и щелкая кнопку «Добавить», добавьте обе таблицы базы данных Автомагазин. Щелкнув кнопку «Закрыть», закройте окно Добавление таблицы.
  3.  Перетаскивая поля из таблиц Автомобили и Поставщики в бланк запроса, определите поля таблиц для запроса, порядок их размещения. В строке Вывод на экран включите флаг отображения полей. В строке Условие отбора в столбце Фирма задайте условие отбора «АвтоВАЗ»,а в столбце Год выпуска задайте условие отбора > 1997, как показано на рис. 4.

Рис. 4. Сформированный запрос в режиме конструктора

  1.  Перейдем в режим таблицы и просмотрим записи базы данных, отобранные согласно созданному запросу. Закроем окно запроса, сохранив макет запроса под именем Запрос АвтоВАЗ не старше 1997 г.

Задание 2. Создать запрос с параметром Поиск автомобилей по марке.

  1.  Для создания запроса с параметром, выбрав вкладку Запросы, щелкните кнопку «Создание запроса в режиме конструктора». В окне Добавление таблицы, выделяя таблицы Поставщики, а затем - Автомобили и щелкая кнопку «Добавить», добавьте обе таблицы базы данных Автомагазин. Щелкнув кнопку «Закрыть», закройте окно Добавление таблицы. Перетаскивая поля из таблиц Автомобили и Поставщики в бланк запроса, определите поля таблиц для запроса, порядок их размещения. В строке Вывод на экран включите флаг отображения полей. В строке Условие отбора в столбце поля Фирма, которое предполагается использовать как параметр, введите в ячейку строки Условие отбора текст приглашения [Введите марку автомобиля]. Сохраните запрос, задав ему имя Запрос нужной марки авто.
  2.  Для проверки действия запроса выберите в меню Вид опцию Режим таблицы. В окне Введите значение параметра введите значение искомой марки автомобиля, например, ВАЗ-3107. Для поиска автомобилей других марок закройте окно запроса и, выбрав Режим таблицы, задайте новый параметр поиска.
  3.  Закройте окно таблицы-запроса и завершите работу программы MS Access.

 

Конец формы

Лабораторная работа №4

Реестр Windows 2000

Продолжительность работы : 2 часа

Цель работы : в результате выполнения лабораторной работы студент должен получить представление о реестре Windows 2000 (в дальнейшем W`2000), основных возможностях, представляемых данным инструментарием и приобрести навыки работы в части изменения пользовательского интерфейса W`2000 посредством работы с реестром.

Краткие теоретические сведения

Реестр — это хранилище личных параметров и параметров установки, системной конфигурации и другой важной информации. Реестр W`2000 содержит 12 и более Мб данных. В реестре W`2000 находится вся информация обо всем, что нужно знать операционной системе. Реестр хранит параметры установки, личные параметры и данные для удаления приложений и оболочки проводника; системные параметры и разрешения для подключающихся по сети компьютеров; сопоставления расширений файлов; описания, состояния и свойства аппаратных компонентов; счетчики производительности и другую низкоуровневую информацию о состоянии системы и много чего еще. Реестр сводит в единое хранилище (и обеспечивает стандартизацию и защиту) всю информацию о конфигурации, которая ранее была разбросана по различным INI-файлам. Реестр — это сложная база данных. Без него W`2000 не сможет загрузиться. Любое повреждение этого набора файлов вызовет массу неполадок, даже если W`2000 и сможет выполнить загрузку.

Невозможность редактировать эту базу данных из командной строки DOS — потенциальная проблема. Но существуют Regedit и Regedt32 — прекрасные редакторы реестра под Windows. Помимо современных элементов пользовательского интерфейса таких, как контекстные меню, Regedit обладает мощными возможностями поиска: позволяет искать разделы, параметры и значения.

Внимание! Редактор реестра предназначен для настройки работы W`2000 и ее приложений опытными пользователями. Хотя он и позволяет находить нужную информацию, повышать производительность системы, настраивать различные параметры работы ОС и облегчать работу с приложениями, его неправильное использование может привести к непредсказуемым результатам. Никогда не редактируйте запись, если точно не уверены, для чего она служит. Несоблюдение этой меры предосторожности может вызвать потерю данных или даже невозможность загрузки W`2000.

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

Если вы можете редактировать реестр на своем компьютере, то можно выполнить следующие действия:

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

Эти и другие детали работы ОС скрыты от рядового пользователя.

Внимание! При неосторожной работе с реестром можно уничтожить или повредить информацию, необходимую для загрузки системы, что приведет к сбоям в работе W`2000 или даже к невозможности выполнить загрузку вообще. Поэтому, внося изменения в реестр, соблюдайте все меры предосторожности, чтобы не удалить, скажем, целую ветвь или каким-либо иным способом не повредить существенную информацию, содержащуюся в этой базе данных.

У редактора реестра Regedit есть окно, разделенное на части, а сам он внешне очень похож на проводник. В самом деле, две панели выполняют в обеих этих программах одинаковые функции. В левой части окна программы Regedit вы видите путь и набор вложенных разделов (аналогично пути и вложенным папкам в проводнике), которые помогают вам находить разделы и значения, хранящиеся в реестре. Щелкнув значок (+) рядом с разделом, вы раскрываете список его подразделов так же, как щелчок папки в проводнике раскрывает список ее подпапок. Чтобы свернуть этот список, щелкните значок (-). Чтобы просмотреть содержимое раздела, которое будет отображаться на правой панели, щелкните интересующий вас раздел на левой панели. На правой панели программы Regedit вы видите аналог имени файла — имя определенного элемента данных. Эти данные называются значениями, хранящимися под данным именем.

Познакомимся с организацией реестра. Чтобы запустить программу Regedit, выберите в меню Пуск команду Выполнить и введите строку regedit.

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

  1.  В меню Пуск выберите команду Выполнить и введите строку regedit;
  2.  В редакторе реестра в меню Реестр выберите команду Экспорт файла реестра. На экране появится диалоговое окно Экспорт файла реестра. В поле Имя файла введите любое имя, например Regback;
  3.  Убедитесь, что в группе параметров Диапазон экспорта выбран переключатель Весь реестр;
  4.  Нажмите кнопку Сохранить. Полученный файл (например, Regback. REG) содержит полную копию текущего реестра. Это текстовая версия реестра.

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

Общие сведения о реестре

Реестр делится на пять основных областей:

  1.  HKEY_CLASSES_ROOT
  2.  HKEY_CURRENT_USER
  3.  HKEY_LOCAL_MACHINE
  4.  HKEY_USERS
  5.  HKEY_CURRENT_CONFIG

1. HKEY_CLASSES_ROOT

В этой категории есть два различных типа записей. Первый из них — расширение файла. W`2000 по-прежнему использует их, чтобы отличить один тип файлов от другого. Кроме того, с их помощью Windows ассоциирует типы файлов с определенными действиями. Второй тип записей — сами сопоставления. Записи сопоставлений обычно связывают файл данных с приложением или исполняемый файл — с определенной функцией W`2000. Под разделами сопоставлений находятся записи для меню, которые выводятся при щелчке элемента правой кнопкой мыши в проводнике.

2. HKEY_CURRENT_USER

Эта категория хранит множество программных параметров вашего компьютера. Эти параметры управляют конфигурацией рабочего стола и клавиатуры. Они также хранят используемые цвета и конфигурацию главного меню. Все параметры, относящиеся к пользователям, находятся в этой категории, также как и параметры для установленных приложений. Категория HKEY_CURRENT_USER — это псевдоним для соответствующего раздела области HKEY_USERS базы данных реестра. Когда пользователь выходит из системы, W`2000 сохраняет все параметры в пользовательском файле реестра. Из этой области W`2000 получает информацию о параметрах. В этой же области сохраняются внесенные изменения. Рассмотрим некоторые разделы этой области :

  •  Console. Для работы консольных приложений необходимо приглашение DOS. Окно DOS, как и любая другая часть W`2000, требует предварительной настройки параметров. Все изменения, связанные с такой настройкой, регистрируются в разделе Console реестра.
  •  Environment. В этом разделе содержатся переменные среды DOS. Эти данные доступны по пути USERPROFILE и используются при запуске сеансов DOS и приложений Windows.
  •  Keyboard Layout. В этом разделе находятся сведения о клавиатуре. Данные сведения идентичны у всех пользователей, за исключением случаев изменения языка или раскладки. Раздел Preload области Keyboard отражает использование разных языков, a Substitutes — раскладку клавиатуры.
  •  Software. В этом разделе находятся сведения о конфигурации некоторых приложений (например, Microsoft содержит дополнительные разделы по различным программам, независимо от их фактического наличия на компьютере).
  •  Volatile Environment (временная среда). В этом разделе хранятся сведения о месте расположения данных пользователя и имени компьютера. Название обусловлено тем, что все параметры в W`2000 либо становятся постоянными, либо сбрасываются при загрузке. Постоянные параметры записываются в другой раздел реестра.

3. HKEY_LOCAL_MACHINE

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

  •  Hardware. В W`2000 раздел Hardware используется для хранения всех необходимых сведений об оборудовании. Сюда относятся все аппаратные средства, начиная с процессоров и заканчивая устройствами, подключенными к контроллерам дисков. Ниже подробнее рассмотрены основные подразделы:
  •  Description. Его основная функция — регистрировать последовательные порты, типы процессоров и все процессоры с плавающей точкой в компьютере. В нем отсутствуют какие-либо сведения о конфигурации, которые можно было бы изменить.
  •  Devicemap. В этот раздел вносятся записи, которые сопоставляют систему с устройствами.
  •  Resourcemap. Для работы каждому устройству в системе необходимы определенные ресурсы. В данном подразделе содержатся сведения об этих ресурсах.
  •  SAM. В этом разделе хранятся сведения диспетчера учетных записей безопасности (Security Account Manager, SAM) — базы данных проверки подлинности учетных записей пользователей.
  •  Security. В нем содержатся такие сведения, как ссылки на файлы с учетной записью или безопасность.
  •  Software. Здесь содержатся данные о драйверах устройств и общие сведения о приложениях. В подразделе Microsoft также содержатся интересные разделы, среди которых стоит остановиться на New Users Settings. Именно здесь большинство 32-разрядных и некоторые 16-разрядные приложения записывают общие параметры, применяемые всеми пользователями для работы с программами (до тех пор, пока не внесены изменения в параметры).
  •  System. Основное назначение раздела System — управление устройствами. В частности, он содержит дополнительные сведения, необходимые для работы сложных устройств. Очевидно, что в System также находятся и другие подразделы, распределенные Microsoft на четыре больших группы: Control, Enum, Hardware Profiles и Services.

Вначале рассмотрим раздел Control, в котором хранятся подразделы, влияющие на взаимодействие пользователя и системы. Один из подразделов ControlNls. В нем находятся средства поддержки различных языков. Изменяя значение одного из подразделов Nls, можно добавить поддержку хоть для марсианского языка (при наличии драйвера). Кроме того, в Control расположены подразделы, имеющие отношение к администрированию. Один из них — имя компьютера, необходимое для входа в сеть. Другие подразделы служат для настройки быстродействия системы.

Третий подраздел в SystemHardware Profiles, в котором, находится несколько разделов, обозначенных номерами. При выборе профиля оборудования на панели управления содержимое одного из нумерованных разделов копируется в раздел Current, в котором хранится текущая конфигурация системы. В каждом из этих разделов находятся сведения для установки оборудования, например разрешение видеоадаптера. В Hardware Profiles перечислено исключительно оборудование с настраиваемыми параметрами, которое в большинстве случаев представлено только видеоадаптером.

В Services находятся подразделы для всего, что как-то связано с набором управления.

4. HKEY_USERS

Здесь перечислены параметры для всех пользователей данного реестра. Изменение разделов этой категории немедленно отражается на соответствующих разделах в HKEY_USERS. Кроме того, при выходе из системы параметры сохраняются в файле NTUSER. DAT, из которого они используются при входе. Многопользовательская конфигурация создается в W`2000 не за счет нескольких реестров. Фактически каждый профиль — это результат комбинирования файла NTUSER. DAT с папками пользователей в каталоге WINNT\Profiles. С технической точки зрения, NTUSER. DAT —это куст реестра, т. е. файл, содержащий один или несколько разделов (содержимое реестра распределено по нескольким файлам на жестком диске). Когда пользователь входит в W`2000, то его куст загружается в раздел HKEY_USERS и используется для создания рабочей среды.

5. HKEY_CURRENT_CONFIG

Это самая простая часть реестра, в которой находятся два раздела Software и System. В ней хранятся сведения о профилях оборудования, созданных при помощи приложения системной панели управления — вкладка Оборудование. Профили оборудования схожи с профилями пользователей, позволяющими по-разному настраивать один и тот же компьютер. Выбрать нужный профиль можно при каждом запуске W`2000 и при перезагрузке компьютера в режиме последней удачной конфигурации. После этого будут загружены все драйверы и службы, описанные в этом профиле. Все различия между обычными параметрами аппаратных средств и профилями оборудования сохраняются в данной категории.

Основные приемы работы с реестром

Чтобы увидеть эффект от некоторых изменений в реестре, иногда требуется перезагрузить компьютер, поскольку эти данные (например, название «Корзина») заменяются при автозагрузке. С остальными сведениями (например, значок «Мой компьютер» на рабочем столе) дело обстоит по-другому. В случае связи файлов с программой изменения немедленно вступают в силу, а для смены значка «Мой компьютер» надо обновить рабочий стол. Для этого щелкните фоновый рисунок (не на значке и не в пределах окна) и нажмите клавишу F5. Если ничего не произошло после изменения реестра, то прежде чем перезагружать компьютер, нажмите сначала клавишу F5.

  •  Скорость появления меню. Чтобы понаблюдать за текущей скоростью, нажмите кнопку Пуск и наведите указатель мыши на пункт Программы. Появится меню, из которого выберите пункт Стандартные. Откроется следующее меню. Для W`2000 задержка в появлении меню составляет по умолчанию 400 миллисекунд. Чтобы изменить время задержки, выполните следующие действия:
    1.  Запустите Regedit. Найдите и щелкните подраздел HKEY_CURRENT_ USER\Control Panel\Desktop так, чтобы его значок изменился на открытую папку. В правой части окна отображаются значения различных параметров панели управления.
    2.  Если в Desktop отсутствует подраздел MenuShowDelay, то создайте его. Для этого вызовите меню щелчком правой кнопки мыши значка Desktop, либо щелкните правой кнопкой мыши свободное пространство на правой панели.
    3.  Выберите пункт Создание, а затем команду Строковый параметр, после чего на правой панели появится новая запись.
    4.  Введите MenuShowDelay в качестве имени объекта. Чтобы завершить создание подраздела, щелкните любую другую запись или свободное пространство в окне реестра.
    5.  Чтобы установить значение данного подраздела, щелкните его правой кнопкой мыши (при этом строка выделяется) и выберите в контекстном меню команду Изменить, либо дважды щелкните название подраздела. Откроется диалоговое окно Изменение строкового параметра.
    6.  Введите в текстовое поле число в диапазоне от 0 до 1000 (в миллисекундах), другими словами, от отсутствия задержки до интервала в 1 секунду.
    7.  Чтобы закрыть окно Изменение строкового параметра, нажмите кнопку ОК.
    8.  Чтобы изменения вступили в силу, перезагрузите компьютер.
      •  Автоматический вход в систему. Вместо ручного входа в систему  можно настроить автоматический вход.
        1.  Найдите раздел HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Winlogon. Найдите строку AutoAdminLogon (при отсутствии создайте ее).
        2.  Дважды щелкните раздел AutoAdminLogon и измените его с 0 на 1.
        3.  Щелкните правой кнопкой мыши свободное пространство на правой панели и в контекстном меню выберите пункт Создание, а затем команду Строковый параметр. Введите DefaultPassword в качестве имени строки.
        4.  Дважды щелкните DefaultPassword и введите свой пароль. Если вы работаете без пароля, то ничего не вводите в поле DefaultPassword.
        5.  Закройте реестр и завершите работу с W`2000. После запуска компьютера загрузка будет происходить как обычно, только будут отсутствовать запросы на вход в систему.
  •  Удаление значка «Мой компьютер». К сожалению, значок «Мой

компьютер» отсутствует в перечне постоянных значков рабочего стола, и удалить его сложнее, чем что-либо еще в W`2000. Сделать это можно только одним способом: удалить все значки с рабочего стола. Чтобы убрать с рабочего стола все значки, необходимо добавить в реестр параметр NoDesktop, выполнив следующие действия.

  1.  Запустите Regedit и найдите в реестре раздел HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Policies\Explorer.
  2.  Выделите папку Explorer и выберите в меню Правка, пункт Создать, а затем команду Параметр DWORD.
  3.  Щелкните правой кнопкой мыши новую запись Новый параметр 1 и выберите в контекстном меню команду Переименовать.
  4.  Введите NoDesktop и нажмите клавишу Enter.
  5.  Щелкните правой кнопкой мыши NoDesktop и выберите в контекстном меню команду Изменить.
  6.  Введите 1 и нажмите кнопку ОК.
  7.  Закройте Regedit, выбрав в меню Реестр пункт Выход.

Чтобы изменения вступили в силу, перезагрузите компьютер. В процессе загрузки W`2000 проверит реестр, найдет изменения и очистит рабочий стол. Чтобы отменить сделанные изменения, выполните следующее :

  1.  Запустите Regedit и найдите в реестре раздел HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Policies\Explorer.
  2.  Щелкните правой кнопкой мыши NoDesktop и выберите в контекстном меню команду Удалить.
  3.  Закройте Regedit, выбрав в меню Реестр пункт Выход.

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

  •  Изменение значка «Мой компьютер». Для изменения значка «Мой компьютер» выполните действия :
  1.  Запустите Regedit и найдите в реестре раздел  HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon. Для изменения значка элемента Мой компьютер необходимо изменить значение параметра (По умолчанию).
  2.  Щелкните правой кнопкой мыши (По умолчанию) и выберите в контекстном меню команду Изменить.
  3.  Измените в строке %SystemRoot%\Explorer.exe,0 число 0 на 1 и нажмите кнопку ОК.
  4.  Закройте Regedit, выбрав в меню Реестр пункт Выход.

Чтобы изменения вступили в силу, необходимо обновить рабочий стол.

Контрольные вопросы

  1.  Реестр ─ это сложная база данных. Что она содержит?
  2.  Какими способами можно вносить изменения в реестр?
  3.  Каковы могут быть последствия некорректной работы с реестром?
  4.  Опишите работу с редактором реестра Regedit?
  5.  В чем различие между редакторами реестра Regedit и Regedt32?
  6.  Перечислите основные разделы реестра.
  7.  Кратко охарактеризуйте содержание основных разделов реестра.

Задания

  1.  Запустите редактор реестра Regedit. По значению разделов определите конфигурацию системы. Не вносите никаких изменений в реестр и выйдите из Regedit.
  2.  Сохраните при помощи Regedit копию реестра в безопасном месте.
  3.  Измените скорость появления меню без задержки.
  4.  Измените реестр для автоматического входа в систему (без нажатия вначале клавиш Ctrl+Alt+Del и ввода пароля). Восстановите ручной вход в систему.
  5.  Измените запуск компьютера так, чтобы при входе в систему появлялось окно сообщения для всех пользователей. Для этого откройте раздел HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon и создайте строковый параметр LegalNoticeCaption. Значением этого параметра должна быть строка, которая будет в заголовке сообщения. Теперь создайте строковый параметр LegalNoticeText в том же разделе и в его значении пропишите текст сообщения, которого будет появляться при входе в систему. После проверки действия изменений уберите появление сообщения.
  6.  Измените значок «Мой компьютер» .
  7.  Удалите и восстановите значок «Мой компьютер».
  8.  Внесите изменения в установки консоли. Например, откройте раздел HKEY_CURRENT_USER\Console и понаблюдайте за действием значений параметров FullScreen и HistoryBufferSize. Для начала посмотрите на работу консоли по умолчанию. Для этого в командной строке Пуск->Выполнить введите cmd и нажмите Enter. Откроется окно консоли Microsoft Windows. Формат командной строки будет следующим : С:\ и будет мигать курсор. Это эмуляция DOS, поэтому все команды DOS`а поддерживаются здесь. Введите команды cd WINNT, Enter и cd \, Enter. Теперь при нажатии клавиш стрелка вверх и стрелка вниз вы сможете просмотреть историю ввода ваших команд.

Теперь измените значения параметров FullScreen и HistoryBufferSize на 1 и 0 соответственно. Посмотрите на эффект, повторив вышеперечисленные действия.

                  Лабораторная работа № 6

Монтирование сетевой файловой системы в ОС Linux

Целью работы является изучение сетевой файловой системы Linux NFS, а также получения практических навыков монтирования и демонтирования NFS.

Введение

Погружаясь в мир Unix/Linux систем, вы рано или поздно столкнетесь с проблемой монтирования файловых систем, расположенных на различных физических устройствах или, даже, внутри обычных файлов. Дискета, CD-диск, раздел на винчестере, flash-drive, цифровой фотоаппарат, Zip drive, iso-образ или просто замаскированная под файл файловая система (ФС), хранящая, возможно, некоторую секретную информацию. Для работы со всеми этими файловыми системами требуется подключить информацию об этих файловых системах к операционной системе (ОС). Выполнение такой операции необходимо в любой ОС, но ОС ориентированные на пользователя, могут скрывать эту операцию путем автоматизации процесса.

Сетевая файловая система

Начнем с определения ФС. "Файловая система это логическая организация данных, определяющая способ хранения файлов и их заголовков". Таким образом, любая ФС состоит как минимум из двух частей - в одной части хранятся собственно файлы, а в другой - их заголовки.

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

Различают три типа файловых систем: линейные, иерархические и сетевые. Иерархические системы, до недавнего времени, были наиболее распространены. Они позволяют организовать систему каталогов и подкаталогов для удобной файловой классификации. Самыми распространенными реализациями такой математической модели были файловые системы FAT и начальные версии NTFS. Линейные файловые системы являются наиболее простыми и не поддерживают структуру каталогов. Такие системы использовались, например, в ОС CP/M и DOS версии 1.х. Наиболее сложными файловыми системами являются сетевые. Помимо поддержки структуры каталогов они позволяют организовывать произвольные связи между связанными цепочками данных каждого из файлов и системой заголовков. Т.е. одна и та же цепочка данных физического файла может иметь множество различных, и, даже, одинаковых имен в системе заголовков. Причем, имена не имеют приоритетов друг перед другом и физическое удаление файла происходит после удаления его последнего имени. Unix был рожден в концепции сетевых файловых систем и сильно зависит от этой абстракции. Последнии версии NTFS также построены на основе сетевой модели, но, пока, использование такой модели не является для Windows принципиальным.

Сетевая ФС, или NFS (Network File System), позволяет пользователям совместно работать с файлами, расположенными на разных компьютерах. NFS почти прозрачна для пользователей и не поддерживает понятие сеанса, т.е. при сбое сервера никакие данные в удаленных файловых системах не пропадают. Клиенты просто ждут, когда сервер вновь начнет функционировать, а затем продолжают работать так, будто ничего не произошло.

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

Сетевую ФС разработала компания Sun Microsystems в 1985 году. Первоначально NFS была реализована как суррогат ФС для бездисковых клиентов, однако предложенный протокол оказался столь удачным, что со временем стал универсальным решением проблемы совместного использования файлов. Практически во всех современных дистрибутивах Linux имеются хотя бы минимальные средства поддержки NFS.

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

Для того чтобы воспользоваться файловой системой NFS, должны быть выполнены два условия:

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

NFS предлагает ряд преимуществ:

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

Cекретные ключи и монтирование без учета состояния

Прежде чем начать работать с файловой системой NFS, клиент должен ее смонтировать, так если бы это была ФС, находящаяся на локальном диске. Но NFS не хранит информацию о сеансах, поэтому сервер не "знает", какие клиенты смонтировали ту или иную ФС. Вместо этого сервер вручает клиенту секретный ключ по факту успешного завершения операции монтирования. Этот ключ идентифицирует каталог монтирования на сервере NFS и дает клиенту возможность получить доступ к содержимому каталога.

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

Если у клиента есть секретный ключ, он может посредством механизма RPC посылать файловой системе запросы, например, на создание файла или чтение блока данных. Поскольку в NFS нет понятия сеанса, серверу все равно, какие запросы клиент делал (или не делал) ранее. В частности, прежде чем удалять свою копию данных, подлежащих записи, клиент самостоятельно должен убедиться в том, что сервер подтвердил запрос на запись.

Безопасность и NFS

NFS представляет собой удобное средство доступа к файлам по сети, потому является источником серьезным угроз для безопасности. Ее можно использовать в качестве тренажера для проверки брешей, существующих или когда-либо существовавших в UNIX. Изначально в NFS не были предусмотрены никакие средства защиты — такова цена, которую пользователи вынуждены были платить за удобство работы. К счастью, в Linux имеются средства защиты, позволяющие решить многие традиционные проблемы NFS.

Доступ к томам NFS предоставляют записи файла /etc/exports. В нем перечислены сетевые имена (или IP-адреса) компьютеров, которым разрешен доступ к файловым системам сервера. Конечно, о должной степени безопасности говорить не приходится, так как сервер не проверяет подлинность клиентов. Подменить идентификаторы клиента не так уж сложно, поэтому доверять такому способу взаимодействия нельзя. Но меры предосторожности следует соблюдать в полном объеме: файловые системы должны экспортироваться только проверенным клиентам. Следите за тем, чтобы случайно не сделать ФС общедоступной.

Ограничить число узлов, которые имеют доступ к сетевым файловым системам, можно с помощью пакета TCP-оболочек. Рекомендуется отредактировать файл /etc/hosts.deny так, чтобы доступ к демону portmap был закрыт для всех. Если нужно ослабить ограничение для отдельных узлов или подсетей, редактируйте файл /etc/hosts.allow. В записях portmap этих файлов должны указываться только IP-адреса, поскольку для поиска сетевых имен может понадобиться доступ к демону portmap, вследствие чего возникнет цикл.

Как и в локальных файловых системах, в NFS доступ к файлам контролируется посредством идентификаторов пользователей и групп, а также с помощью прав доступа. Однако, сервер NFS доверяет сведениям, которые клиент предоставляет о себе. Если пользователи mary и bob имеют одинаковый идентификатор на двух разных клиентских компьютерах, они смогут получить доступ к файлам друг друга. Кроме того, если пользователь имеет доступ к учетной записи root, он сможет подменить любой идентификатор — и ничего не подозревающий сервер разрешит ему обратиться к соответствующим файлам. По этой причине мы настоятельно рекомендуем пользоваться глобально уникальными идентификаторами и описанной в табл. 1 опцией root_squash.

При наличии брандмауэра заблокируйте доступ к TCP- и UDP-портам, которые используются протоколом NFS. Кроме того, необходимо перекрыть доступ к демону portmap, который обычно прослушивает TCP- и UDP-порты. За всеми этими предосторожностями не стоит также забывать правило, обычно подразумеваемое неявно: сетевые файловые системы не должны экспортироваться на нелокальные компьютеры.

Учетные записи root и nobody

В общем случае пользователи должны иметь одинаковые привилегии в любой системе, к которой они получают доступ. Однако традиционно стараются ограничивать возможности неконтролируемого применения прав суперпользователя в файловых системах, смонтированных посредством NFS. По умолчанию сервер NFS в Linux перехватывает входящие запросы, посылаемые от имени пользователя с идентификатором 0, и "делает вид", будто они поступают от другого пользователя. Таким образом, учетная запись root не отменяется, но уравнивается в правах с обычными учетными записями.

Для этого специально определена фиктивная учетная запись nobody, чтобы под нее "маскировался" пользователь root, работающий на сервере NFS. Традиционно ее идентификатор равен 65534 (обратный код числа -2). Изменить значения UID и GID для пользователя root позволяют опции экспортирования anonuid и anongid. С помощью опции all_squash можно заставить систему преобразовывать все клиентские идентификаторы пользователей в одинаковый серверный идентификатор. В такой конфигурации все различия между пользователями стерты и образуется нечто вроде ФС общего доступа. В то же время существует и противоположное средство — опция no_root_squash, отключающая преобразование идентификатора пользователя root. Она иногда нужна для поддержки бездисковых клиентов и программ, которым необходим доступ к файловой системе с правами суперпользователя.

Даже будучи клиентом NFS, пользователь root может с помощью команды su "принять облик" любого пользователя, так что файлы никогда не бывают полностью защищены. Системные учетные записи, такие как bin и sys, не подвергаются смене идентификатора, поэтому принадлежащие им файлы (некоторые системные программы и приложения) открыты для нападений. Единственный эффект от смены идентификаторов заключается в том, что предотвращается доступ к файлам, которые принадлежат пользователю root и недоступны для чтения или записи остальным пользователям.

Серверная часть NFS

Говорят, что сервер "экспортирует" ФС, если он делает ее доступной для использования другими компьютерами.

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

Демоны mountd и nfsd совместно эксплуатируют общую базу данных с информацией о правах доступа, где указано, какие файловые системы следует экспортировать, и какие клиенты могут их монтировать. Рабочая копия этой базы данных обычно хранится в файле /usr/lib/nfs/xtab; часть таблиц находится в ядре. Поскольку файл базы данных представлен в нечитаемом формате, для добавления и редактирования записей существует вспомогательная утилита exportfs. Чтобы удалить записи, воспользуйтесь командой exportfs -u. Формат команды для экспортирования:

exportfs   –o   <опции>   клиент:/путь монтирования

В табл. 1 описаны наиболее распространенные опции экспортирования файловых систем.

Табл. 1.

Опция

Описание

го

Экспорт только для чтения

rw

Экспорт для чтения и записи (по умолчанию)

rw=список

Экспорт главным образом для чтения; в списке перечислены клиенты, которым разрешено монтирование для записи, в то время как все остальные клиенты должны монтировать ФС только для чтения

root_squash

Подмена значений UID и GID, равных 0, значениями, указанными в опциях anonuid и anongid; это установка по умолчанию

no_root_squash

Разрешает обычный доступ от имени пользователя root (небезопасно)

all_squash

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

anonuid=xxx

Значение UID, которое нужно использовать для запросов, поступающих от пользователя root

anongid=xxx

Значение GID, которое нужно использовать для запросов, поступающих от пользователя root

secure

Требует, чтобы запрос на удаленный доступ поступал из привилегированного порта

insecure

Разрешает удаленный доступ с любого порта

noaccess

Предотвращает доступ к каталогу и его подкаталогам (используется при экспорте вложенных каталогов)

NFS работает не на физическом, а на логическом уровне ФС. Экспортировать можно любой каталог; не обязательно, чтобы он был точкой монтирования или корневым каталогом физической ФС. Тем не менее из соображений безопасности NFS определяет границы между файловыми системами, относящимися к различным устройствам, и требует, чтобы каждая такая ФС экспортировалась отдельно. К примеру, если раздел смонтирован как /users, то корневой каталог можно экспортировать независимо от этого раздела.

Обычно клиентам разрешается монтировать подкаталоги экспортированного каталога. Скажем, если сервер экспортирует каталог /chimchim/users, то клиент может смонтировать подкаталог /chimchim/users/joe, а остальную часть каталога users — проигнорировать. Большинство версий UNIX не позволяет экспортировать подкаталоги с параметрами, отличными от параметров родительского экспортируемого каталога, но Linux — исключение из правила.

Клиентская часть NFS

Процесс монтирования сетевых и локальных файловых систем во многом схож. Команда mount понимает запись вида имя_компьютера:каталог как путь к каталогу, расположенному на указанном компьютере. Этому каталогу будет поставлен в соответствие каталог локальной ФС. По завершении монтирования доступ к сетевой файловой системе осуществляется традиционными средствами. Таким образом, команда mount и ее NFS-расширения — самая важная для системного администратора на NFS-клиенте.

Команда mount использует следующий синтаксис:

mount  -t  «файловая система>  [ -о <ключ1>, <ключ2>, ...]  <имя устройства> <точка монтирования>

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

showmount -e coyote

Export list for coyote: /home/boggs inura.toadranch.com

Как следует из этого примера, каталог /home/boggs на сервере coyote экспортирован в клиентскую систему inura.toadranch.com. К команде showmount следует прибегать в первую очередь, если сетевая ФС по какой-то причине не работает.

Реальное монтирование ФС осуществляется примерно такой командой:

mount  -о  rw,hard,intr,bg  coyote:/home/boggs   /coyote/home/boggs

Смонтированная таким образом ФС представляется на клиентском компьютере как часть локальной ФС.

Флаги, указанные после опции , говорят о том, что ФС монтируется в режиме чтения/записи, файловые операции разрешается прерывать, а повторные попытки монтирования должны делаться в фоновом режиме. Все эти параметры являются довольно типичными. Наиболее распространенные флаги приведены в табл. 2.

Табл. 2.

Флаг

Назначение

rw

Монтирование ФС для чтения/записи (она должна экспортироваться сервером в режиме чтения/записи)

го

Монтирование ФС только для чтения

bg

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

hard

Если сервер отключился, операции, которые пытаются получить к нему доступ, блокируются до тех пор, пока сервер не включится вновь

soft

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

intr

Позволяет прерывать с клавиатуры заблокированные операции (будут выдаваться сообщения об ошибке)

nointr

Не позволяет прерывать с клавиатуры заблокированные операции

rsize=n

Задает размер буфера чтения равным л байтов

wsize=n

Задает размер буфера записи равным л байтов

tcp

Выбирает TCP в качестве транспортного протокола; по умолчанию принят протокол UDP

Файловые системы, смонтированные с флагом hard (установка по умолчанию), могут вызывать зависание процессов при отключении сервера. Это особенно неприятно, когда такими процессами оказываются стандартные демоны. Вот почему не рекомендуется обслуживать ключевые системные программы через NFS. В общем случае использование флагов soft и intr позволяет сократить число проблем, связанных с NFS.

Размеры буферов чтения и записи применимы в отношении обоих протоколов — TCP и UDP, но оптимальные значения различны. В случае TCP буфер должен быть большим, поскольку данные передаются эффективнее. Хорошее значение — 32 Кбайт. В случае UDP, если сервер и клиент находятся в одной сети, оптимальный размер равен 8 Кбайт.

Разделы NFS демонтируются командой umount. Формат команды:

umount  <точка демонтирования>

Если сетевая ФС кем-то используется в момент демонтирования, будет выдано сообщение об ошибке:

umount: /coyote/home/boggs: device is busy

Подобно другим файловым системам, NFS запрещает подобное демонтирование. Когда ядро сообщает, что демонтируемая ФС занята, запустите команду fuser, с помощью которой можно узнать, кто работает с файловой системой. Команда fuser -mv точка_монтирования выводит идентификаторы всех процессов, обращающихся к файлам или каталогам указанной ФС:

fuser -mv /usr

user

pid

access

command

/usr

root

444

....m

atd

root

499

....m

sshd

root

520

....m

lpd

Буквенные коды в колонке ACCESS указывают причину, по которой демонтирование не может быть выполнено. Назначение кодов описано в табл. 3.

Табл. 3.

Флаг

Назначение

f

Процесс открыл файл для чтения или записи

c

В файловой системе находится текущий каталог процесса

e

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

r

В Файловой системе находится корневой каталог процесса (задается с помощью команды chroot)

m

Процесс отображает в памяти файл или совместно используемую библиотеку (обычно неактивно исполняемый файл)

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

Например:

ps -fp “444 499 520”

UID

PID

PPID

C

STIME

TTY

TIME

CMD

daemon

444

1

0

01/04/11

?

00:00:00

/usr/sbin/atd

root

499

1

0

01/04/11

?

00:00:23

/usr/sbin/sshd

lp

520

1

0

01/04/11

?

00:00:00

[lpd]

Список идентификаторов взят в кавычки, чтобы интерпритатор передал его команде ps как один аргумент.

При наличии опции -k команда пошлет всем найденным процессам сигнал kill. Это очень опасное действие, и для его выполнения следует иметь привилегии пользователя root. Альтернативой команде fuser служит утилита lsof. Результаты ее работы являются более содержательными.

Если ничего не помогает или сервер отключен, воспользуйтесь командой umount -f для принудительного демонтирования.

Практическая часть

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

Подготовка к работе

  1.  Зарегистрируйтесь в системе как суперпользователь (root);
  2.  Создайте рабочий каталог (например /home/user1) и четыре подкаталога (например /home/User1/D1, /home/User1/D2, /home/User1/Mnt1,  /home/User1/Mnt2);
  3.  В каждом из подкаталогов D1 и D2 создайте по текстовому файлу (например File1.txt и File2.txt)

После выполнения выше указанных пунктов должно получиться дерево, представленное на рисунке 1.

Серверная часть

  1.  Просмотрите список экспортируемых каталогов вашей машины, воспользовавшись командой exportfs (результаты занесите в отчет);
  2.  Экпортируйте каталог D1 для соседней машины в режиме «Только чтение»;
  3.  Экспортируйте каталог D2  в режиме «Чтение-запись», разрешив доступ от  имени пользователя root;
  4.  Просмотрите внесенные изменения в список экспортируемых каталогов (зафиксируйте результаты в отчете);

В случае пустого списка экспортируемых каталогов, после выполнения утилиты exportfs сообщений не выдается.

Клиентская часть

  1.  Убедитесь в правильности экспортирования ресурсов соседней машиной, для этого просмотрите список клиентов (с помощью команды showmount), которым предоставляется доступ к информационным ресурсам NFS сервера. В случаи, если ресурсы были экспортированы неправильно, выдается сообщение об ошибке или пустой список;
  2.  Определите доступные для монтирования каталоги соседней машины (занесите результаты в отчет);
  3.  Смонтируйте соответствующие доступные ресурсы (например каталог D1 соседний машины в каталог Mnt1 своей, а D2 в Mnt2, соответственно) в режиме «Чтение-запись» с блокировкой операций в случаи сбоя сервера (параметр hard);
  4.  Просмотрите содержимое каталога Mnt1. Просмотрите содержимое файла, содержащегося в каталоге (например File1.txt). Попробуйте удалить файл. (результаты занесите в отчет);
  5.  Просмотрите содержимое каталога Mnt2. Просмотрите содержимое файла, содержащегося в каталоге (например File2.txt). Попробуйте удалить файл. (результаты занесите в отчет);
  6.  Перейдите в каталог Mnt1; Попробуйте демонтировать ФС данного каталога. Воспользуйтесь командой fuser, определите причину ошибки демонтирования (результаты зафиксируйте в отчете);
  7.  Перейдите в корневой каталог системы.
  8.  Демонтируйте файловые системы в каталогах Mnt1 и Mnt2;

Заключительная часть

  1.  Восстановите исходное состояния таблицы экспортирования каталогов, воспользовавшись утилитой exportfs  –r;
  2.  Удалите свой рабочий каталог и его содержимое.

Контрольные вопросы

  1.  Назначение и достоинства сетевой ФС.
  2.  Принцип работы сетевой ФС.
  3.  Назначение параметра root_squash. Достоинства и недостатки при его использовании.
  4.  Принцип работы демонов mountd и nfsd. Назначение команды exportfs.
  5.  Монтирование NFS. Утилита mount и ее основные параметры.
  6.  Особенности демонтирования ФС. Команда fuser.
  7.  Объясните результаты выполнения команды fuser:

user

pid

access

command

/usr

root

444

.с..

atd

  1.  Основные этапы подготовки экспортирования NFS.
  2.  Основные этапы монтирования NFS.

                    Лабораторная работа №5

Монтирование файловых систем в ОС Linux

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

Введение

Погружаясь в мир Unix/Linux систем вы рано или поздно столкнетесь с проблемой монтирования файловых систем, расположенных на различных физических устройствах или, даже, внутри обычных файлов. Дискета, CD-диск, раздел на винчестере, flash-drive, цифровой фотоаппарат, Zip drive, iso-образ или просто замаскированная под файл ФС (ФС), хранящая, возможно, некоторую секретную информацию. Для работы со всеми этими файловыми системами требуется подключить информацию об этих файловых системах к операционной системе (ОС). Выполнение такой операции необходимо в любой ОС, но ОС ориентированные на пользователя, могут скрывать эту операцию путем автоматизации процесса.

Файловая система Linux

По умолчанию ФС Linux имеет тип ext2 (extended type-2). Свойства ФС ext2 приведены табл. 1.

Табл. 1. 

Свойство

Значение

Максимальный размер файловой системы

4Тбайт

Максимальный размер файла

2Гбайт

Максимальная длина имени файла

255 символов

Минимальный размер блока

1024 байт

Количество выделяемых индексных дескрипторов

1 на 4096 байт раздела

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

Формат команды: mkfs  <раздел>

Утилита mkfs по умолчанию создает ФС типа ext2. Если инсталлируется не новый дисковый накопитель, то рекомендуется использовать утилиту mkfs с ключом для проверки существования непригодных блоков.

В результате создания ФС ext2 раздел дискового накопителя будет состоять из множества областей, которые обычно называются группами блоков (block groups). Каждая из групп блоков разделена на несколько меньших областей. На рис. 1 изображена схема расположения групп блоков, а в табл. 2 приводится описание каждой области группы блоков.

Индексный дескриптор (inode) это фактически указатель на файл. В нем содержится относящаяся к файлу информация, а именно: права доступа, владелец, дата последнего изменения и указатели на блоки с фактическими данными. Каждому файлу соответствует один индексный дескриптор. Количество индексных дескрипторов постоянно и задается во время создания ФС ext2. По умолчанию на каждые 4096 байт раздела выделяется один индексный дескриптор.

Если файл довольно небольших размеров, то он полностью помещается внутри непосредственно доступных блоков из заданной группы блоков. Если же нет, то для хранения всех данных указанного файла используется косвенный метод связывания блоков. Такая схема позволяет хранить файл размером до 2 Гбайт.

Табл. 2. 

Область группы блоков

Описание

Суперблок

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

Дескриптор группы

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

Битовая карта блоков

Это массив битов, указывающих на используемые блоки

Битовая карта индексных дескрипторов

Это массив битов, указывающих на используемые индексные дескрипторы

Таблица индексных дескрипторов

Таблица реально выделенных для данной группы блоков индексных дескрипторов

Блоки данных

Блоки, в которых хранятся фактические данные

Рис. 1. Диаграмма файловой системы ext2

Для изменения количества индексных дескрипторов, создаваемых в файловой системе, используйте ключ -i <количество> утилиты mkfs. Количество должно быть кратным 512 и обычно принимает значения 512, 1024, 2048, 4096, 8192 и т.д. Если у вас очень маленькая ФС, состоящая из множества совсем небольших файлов, то можно выделять индексный дескриптор на каждые 512 байт. Если ФС очень больших размеров с огромными файлами, то можно выбрать это значение побольше.

Каждый индексный дескриптор использует один блок. Суперблок, в зависимости от количества индексных дескрипторов, использует один или несколько блоков. В идеале при полном заполнении ФС должен остаться только небольшой процент неиспользуемых индексных дескрипторов. Если возникают трудности при выборе количества индексных дескрипторов, то используйте значение по умолчанию, являющееся лучшим вариантом для обычной ФС.

Проверка и восстановление файловых систем

Традиционная ФС Linux (ext2fs) надежна и справляется со сбоями системы и отказами аппаратных средств. Тем не менее существует вероятность повреждения файловых систем и нарушения их целостности.

Всякий раз, когда ядро выдает "паническое" сообщение или происходит сбой питания, в тех файловых системах, которые непосредственно перед сбоем находились в активном состоянии, происходят незначительные нарушения. Поскольку ядро хранит в памяти как блоки данных, так и сводку использования блоков, то самый последний образ ФС распределяется между диском и памятью. Во время сбоя часть образа, находящаяся в памяти, пропадает. Хранящиеся в памяти блоки замещаются теми их версиями, которые последними записаны на диск.

Имеются различные подходы к решению этой проблемы. Небольшие повреждения обычно поддаются устранению с помощью команды fsck (сокращение от "filesystem consistency check" — проверка целостности ФС). С концептуальной точки зрения это не очень элегантный подход, но он хорошо подходит для большинства распространенных ситуаций.

Ниже перечислены пять наиболее часто встречающихся ошибок:

наличие индексных дескрипторов, на которые нет ссылок;

неоправданно большие значения счетчиков ссылок;

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

блоки данных, помеченные как свободные, но используемые в файлах;

неверная статистическая информация в суперблоке.

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

Диски обычно проверяются на этапе начальной загрузки с помощью команды fsck -p, которая исследует локальные файловые системы, перечисленные в файле /etc/fstab, и исправляет пять вышеуказанных ошибок. Linux запоминает, какие файловые системы не были демонтированы корректно, и проверяет только их. Если ведется журнал операций, команда fsck сообщает о том, что поддерживается журнальный режим и восстанавливает последнее согласованное состояние ФС на основании записей журнала.

Команду fsck  -p можно выполнить и для отдельной ФС, например:  fsck  -p  /dev/sda5

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

блоки, принадлежащие более чем одному файлу;

блоки, находящиеся вне диапазона ФС;

слишком маленькие счетчики ссылок;

неучтенные блоки;

каталоги, содержащие ссылки на невыделенные индексные дескрипторы;

различные ошибки формата файлов.

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

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

Если поврежденная ФС содержит ценные данные, а команда fsck не смогла автоматически ее восстановить, не экспериментируйте с ней, не создав предварительно резервную копию. Можно попробовать применить к диску команду dump, но она предполагает наличие неповрежденной ФС, поэтому полученный образ может оказаться неполным (или команда завершится выдачей сообщения об ошибке). Лучше всего перестраховаться и выполнить для всего диска команду dd, чтобы создать резервный диск.

Когда команда fsck обнаруживает файл, родительский каталог которого определить невозможно, она помещает такой файл в каталог lost+found, находящийся на верхнем уровне ФС. Поскольку имя, присвоенное файлу, регистрируется только в его родительском каталоге, то имена "потерянных" файлов определить невозможно, и файлам, помещаемым в каталог lost+found, присваиваются имена, совпадающие с номерами их индексных дескрипторов.

Монтирование файловых систем

Чтобы только что созданная ФС была доступна в Linux, ее необходимо смонтировать. В отличие от ФС DOS, в которой в большинстве случаев имя диска представляет отдельный раздел, файловые системы Linux могут быть логически сгруппированы так, что они будут частями одной ФС, в то время как в действительности это не так. Для пользователя ФС, находящаяся на многих разделах, представляется в виде единой иерархии каталогов.

Сам принцип монтирования можно показать на простейшем примере. Пусть существуют две файловые системы, одна из которых является базовой рис.2., а другая присоединяемой рис.3. После проведения монтирования результирующая ФС будет иметь вид рис.4.

Для монтирования файловых систем используется системная утилита mount. Подробности по применению этой утилиты вы можете прочитать в man mount или info mount. Рассмотрим основной формат ее использования.

mount   -t   <тип_файловой_системы>   -o   <опции_монтирования> <что_монтируем>    <куда_монтируем>

 


Тип ФС. Приведем наиболее часто используемые значения типов. ext2, ext3, reiserfs - для одноименных файловых систем. FAT разделы жесткого диска использующие длинные имена файлов обозначаются типом vfat - virtual FAT. Дело в том, что оригинальный FAT предназначен для хранения имен файлов в формате 8.3. Расширение FAT для хранения длинных имен файлов, использующих национальные символы, называется виртуальным FAT. Для монтирования оригинального FAT с форматом имен 8.3 используют значение msdos для обозначения типа ФС. Значение ntfs используется для монтирования различных NTFS разделов. Для монтирования CD дисков с данными на основе спецификации ISO9660 используют значение iso9660. Достаточно часто возникает потребность в монтировании разделенных сетевых ресурсов. Unix/Linux системы, как правило, предоставляют сетевую ФС NFS (Network File System) обозначаемую значением nfs для типа ФС. Сетевая модель Windows систем прочно связана со спецификацией SMB (Simple Message Block), и для монтирования таких ресурсов используют значение smbfs. Для успешного монтирования локальных файловых систем необходимо, чтобы ядро Unix/Linux было скомпилировано с поддержкой соответствующего драйвера. При этом, драйвер для монтирования корневой ФС должен обязательно находится в ядре, иначе система не загрузится. Драйвера для дополнительных файловых систем используемых в вашей работе могут быть собраны как в составе ядра, так и в виде отдельных модулей. Для монтирования сетевых файловых систем вы должны иметь соответствующие клиенты, взаимодействующие с сетевыми серверами файловых систем. Так, для взаимодействия с файловым сервером Windows вам необходимо иметь smbclient, входящий в состав программного комплекса samba, разработанного для сетевого взаимодействия с Windows платформой. Если тип ФС не указан, то, по умолчанию, используется значение ext2. Обратите внимание, что ФС ext3 может быть смонтирована как ext2 без поддержки журнала файловых операций. Иногда такая возможность жизненно необходима.

Опции монтирования зависят от типа монтируемой ФС. Поэтому рассмотрим эти опции позже на конкретных примерах.

Что монтируем. Монтировать можно файловые системы расположенные где угодно: на физических носителях (накопители на жестких и мягких магнитных дисках, CD диски, цифровые фотоаппараты, flash drive и пр.), в сети (NFS, SMB), и даже в файлах (iso-образы, и просто файлы содержащие скрытые файловые системы). В примерах, мы рассмотрим монтирование различных файловых систем на устройствах и в файлах.

Куда монтируем. Здесь необходимо указать точку монтирования, т.е. пустой каталог в который "вольется" монтируемая ФС. Обратите внимание, что в отличие от DOS\Windows в Unix не назначается отдельная корневая литера (A:, C:, D:) для каждой монтируемой ФС. В Unix\Linux системах используется единый логический корень для всей ФС. Таким образом, с точки зрения пользователя существует только одна ФС, реально состоящая из любого количества примонтированных к различным каталогам систем. Причем, все, что было примонтировано теряет свою природу. Т.е. файлы примонтированные с CD-ROM или iso-образа неотличимы от файлов примонтированных по сети с Unix или Windows машины, или от файлов с локального корневого диска системы. Корень ФС Unix/Linux обозначается знаком "/" (слэш). По принятому соглашению, дополнительные (не системные) файловые системы монтируются в подкаталоги каталога /mnt.

Для того, чтобы отмонтировать некую ФС от общего файлового дерева Unix/Linux используется утилита umount. Подробности можно почитать в man umount или info umount. Наиболее часто используется следующая форма вызова этой утилиты:

umount <точка_монтирования>

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

Когда ядро сообщает, что демонтируемая ФС занята, запустите команду fuser, с помощью которой можно узнать, кто работает с файловой системой. Команда fuser -mv точка_монтирования выводит идентификаторы всех процессов, обращающихся к файлам или каталогам указанной ФС:

fuser -mv /usr

user

pid

access

command

usr

root

444

....m

atd

root

499

....m

sshd

root

520

....m

lpd

Буквенные коды в колонке ACCESS указывают причину, по которой демонтирование не может быть выполнено. Назначение кодов описано в табл. 3.

Табл. 3.. Флаги монтирования NFS

Флаг

Назначение

F

Процесс открыл файл для чтения или записи

c

В файловой системе находится текущий каталог процесса

e

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

r

В Файловой системе находится корневой каталог процесса (задается с помощью команды chroot)

m

Процесс отображает в памяти файл или совместно используемую библиотеку (обычно неактивно исполняемый файл)

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

Например:

ps -fp “444 499 520”

UID

PID

PPID

C

STIME

TTY

TIME

CMD

daemon

444

1

0

01/04/11

?

00:00:00

/usr/sbin/atd

root

499

1

0

01/04/11

?

00:00:23

/usr/sbin/sshd

lp

520

1

0

01/04/11

?

00:00:00

[lpd]

Список идентификаторов взят в кавычки, чтобы интерпритатор передал его команде ps как один аргумент.

Команда fuser может выдавать статистические сведения об использовании отдельных файлов, а не всей ФС.

При наличии опции -k команда пошлет всем найденным процессам сигнал kill. Это очень опасное действие, и для его выполнения следует иметь привилегии пользователя root. Альтернативой команде fuser служит утилита lsof. Результаты ее работы являются более содержательными.

Если ничего не помогает или сервер отключен, воспользуйтесь командой umount -f для принудительного демонтирования.

Понятие интерфейсов устройств

Известно, что устройствами управляют драйвера. В Unix/Linux все устройства представляются в виде файлов. Поэтому, с каждым драйвером в Unix системах связаны особые типы файлов, называемые файловыми интерфейсами устройств. Такие файлы создаются специальной командой mknod. Файловые интерфейсы устройств, в принципе, могут располагаться где угодно, но, обычно, лежат в специально отведенном для них каталоге /dev. С каждым таким интерфейсом связаны два числа - старший (major) и младший (minor) номера устройств. При обращении к файловому интерфейсу, ядро ищет драйвер, за которым закреплен старший номер соответствующего файлового интерфейса. Таким образом ядро операционной системы обрабатывает только старший номер устройства. Младший номер передается драйверу. Один драйвер может обслуживать множество однотипных устройств, различаемых по младшему номеру.

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

Изучите каталог /dev с помощью команды ls -l /dev. Пятая и шестая колонки в выводе этой команды отображают соответственно старший и младший номера устройств. Обратите внимание, что один и тот же драйвер (старший номер) часто обслуживает множество однотипных устройств, различаемых по младшему номеру.

В Unix/Linux системах существует множество нотаций, используемых для обозначения файловых интерфейсов устройств - имя не имеет значение. Это не является проблемой для опытных пользователей, но может испугать новичков. Приведем разъяснение одной из наиболее популярных нотаций, используемых для обозначения устройств, работающих на шине IDE (винчестеры и CD приводы).

В качестве первых двух литер используется аббревиатура hd - hard disk. Дальше в зависимости от способа подключения:

/dev/hda primary master
/dev/hdb primary slave
/dev/hdc secondary master
/dev/hdd secondary slave

На лазерном диске не существует понятия разделов, поэтому с CD приводами все просто. Расширение этой нотации существует только для разделов на жестком диске. Независимо от операционной системы, на нем можно создать не более четырех первичных разделов, имеющий номера от 1 до 4. Дополнительный (extended) раздел являющийся контейнером для логических дисков должен занимать один из этих четырех номеров. Логические диски, расположенные в дополнительном разделе нумеруются, начиная с номера 5.

Выполните от суперпользователя команду fdisk -l для просмотра списка (list) всех доступных системе IDE и SCSI дисков.

Стандартное устройство дисковода будет иметь сокращенную аббревиатуру от floppy disc: /dev/fd0 

Примеры монтирования

При использования этих примеров вам потребуются права суперпользователя.

Монтирование FAT раздела с дискеты

В большинстве систем устройство дисковода связано с файлом интерфейсом /dev/fd0 соответствующего драйвера. В некоторых Linux дистрибутивах, существует символическая ссылка /dev/floppy на файловый интерфейс драйвера гибкого диска. Наличие такой символической ссылки можно проверить с помощью команды ls -l /dev/floppy. Если такая ссылка существует, то вы увидите на какой файловый интерфейс она указывает: /dev/fd0, /dev/fd1 или на что-то другое. Предположим, что мы хотим примонтировать дискету к каталогу /mnt/floppy, тогда команда монтирования может выглядеть следующим образом:

mount  -t  vfat  -o  codepage=866,iocharset=cp1251,umask=0  /dev/fd0  /mnt/floppy

Оригинальные DOS дискеты следует монтировать с типом -t msdos.

mount  -t  msdos  -o  codepage=866,iocharset=cp1251,umask=0  /dev/fd0  /mnt/floppy

codepage=866 означает, что данная ФС использует кодировку CP866, для записи русских символов в именах файлов.
iocharset=cp1251 означает, что данная Unix/Linux система использует в своей локали кодировку CP1251. Узнать используемую в вашей локали кодировку можно с помощью команды locale.
umask=0. Такое значение маски атрибутов доступа позволит любому пользователю редактировать данные на подключаемом FAT-разделе.

Подробности смотрите в man mount или info mount.

Монтирование ext2 раздела с дискеты

Если используете ext2 Linux ФС на дискете, то ее монтирование можно будет произвести следующей командой:


mount  /dev/fd0  /mnt/floppy

В этом случае не придется указывать тип ФС, т.к. -t ext2 используется по умолчанию. Конечно, не исключено, что умолчание изменится. Тогда тип монтируемой ФС придется указать явно.

Монтирование CD дисков с данными

В большинстве Linux дистрибутивов существует символическая ссылка /dev/cdrom указывающая на файловый интерфейс устройства вашего CD привода. Можно проверить наличие такой ссылки командой ls -l /dev/cdrom. Если такая ссылка существует, можно увидеть файловый интерфейс на который она указывает. Это может быть /dev/hdb, /dev/hdc, /dev/hdd или что-то другое. Предположим, что CD привод установлен как secondary master и имеет, соответственно файловый интерфейс /dev/hdc (конечно, по возможности, можно воспользоваться символической ссылкой /dev/cdrom). Если, при этом, нужно примонтировать ФС с CD диска в каталог /mnt/cdrom, то команда монтирования может выглядеть следующим образом:


mount  -t  iso9660  -o  codepage=866,iocharset=cp1251  /dev/hdc  /mnt/cdrom

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

Создание и монтирование файлов, содержащих в себе файловые системы

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

Количество доступных системе loop устройств настраивается при подготовке ядра, и по умолчанию равно 16. Если в системе 16 loop устройств, то файловые интерфейсы для них обозначаются начиная с /dev/loop0, и заканчивая /dev/loop15. Для управления loop устройствами служит утилита losetup. Для полного ознакомления с ее возможностями можно прочитать man losetup.

Приступим к практическому созданию файла, содержащего в себе ФС. Удобнее всего будет разместить в таком файле ФС ext2, т.к. FAT системы капризны к размеру тех разделов на которых они должны быть установлены.

Сначала создадим пустой файл желаемого размера. Предположим, что понадобиться 20 МБт раздел. Познакомившись с man dd, выполним, например, такую команду:

dd   if=/dev/zero   of=secret_fs   bs=1024  count=20000

В качестве входного файла (if - input file) выбрано устройство /dev/zero, из которого можно доставать нули. В качестве выходного файла (of - output file) установлен файл secret_fs, который будет создан в текущем каталоге. Размер блока (bs - block size) выбран равным 1КБт = 1024Бт произвольно. Можно использовать любой другой размер. И наконец, количество блоков (count) равное 20000 позволит при размере одного блока в 1КБт создать результирующий файл размером в 20МБт.

Итак, файл состоящий из нулей создан. Теперь объявим его блочным устройством подключив с свободному loop интерфейсу. Предположим, что интерфейс /dev/loop0 совершенно свободен, тогда добьемся своей цели с помощью следующей команды:

losetup  /dev/loop0  secret_fs

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

mkfs.ext2  /dev/loop0

Теперь, учитывая, что устройство содержит ФС ext2, подмонтируем эту систему к каталогу /mnt/floppy общего файлового дерева.

mount  /dev/loop0  /mnt/floppy

Запись, в смонтированное таким образом устройство будет разрешена только суперпользователю. Для расширения прав можно использовать, например, опцию umask.

Теперь можно записать в ФС данные и отмонтировать ее.

umount  /mnt/floppy

Теперь освободим loop устройство.

losetup  -d  /dev/loop0

На этом операции над файловой системой закончены.

Практическая часть

Практическая часть работы состоит из двух частей: «Создание и монтирование файловой системы на дискете» и «Использование loop устройств и создание файлов, содержащих файловые системы». Для выполнения данной работы зарегистрируйтесь в системе как суперпользователь (root)

Создание и монтирование файловой системы на дискете

  1.  Создайте на дискете ФС ext2 с проверкой носителя на непригодные блоки (в качестве устройства укажите /dev/fd0 – дисковод);
  2.  Создайте с помощью команды mkdir новый каталог (например, workMNT) и примонтируйте к нему ФС дискеты;
  3.  Просмотрите содержимое примонтирумой ФС с помощью команды ls workMNT;
  4.  С помощью команды cd войдите в созданный вами каталог workMNT, создайте в нем новый каталог и убедитесь в его наличии командой ls;
  5.  Оставаясь в каталоге workMNT, попытайтесь отмонтировать ФС. С помощью команды fuser просмотрите идентификаторы процессов, использующих ФС;
  6.  Перейдите в каталог верхнего уровня с помощью команды cd .. . Отмонтируйте ФС.
  7.  Используя соответствующую команду убедитесь в отсутствии ошибок в файловой системе дискеты.
  8.  Повторив пункты 2 и 3 убедитесь в наличии ранее созданного на дискете каталога;
  9.  Отмонтируйте ФС.  

Использование loop устройств и создание файлов, содержащих файловые системы

  1.  Используя команду dd создайте файл размером 2МБт (например, simple);
  2.  Соответствующей командой подключите созданный файл к свободному loop устройству (например, /dev/loop0);
  3.  Создайте на нем ФС ext2;
  4.  Просмотрите информацию о всех loop устройствах системы, воспользовавшись командой losetup -a;
  5.  Примонтируйте loop0 к созданному ранее каталогу workMNT;
  6.  Просмотрите содержимое примонтирумой ФС с помощью команды ls workMNT;
  7.  С помощью команды cd войдите в созданный вами каталог workMNT, создайте в нем новый каталог и убедитесь в его наличии командой ls;
  8.  Отмонтируйте ФС и освободите используемое loop устройство;
  9.  Повторите пункт 4, убедитесь, что использованное ранее устройство свободно;
  10.  Поочередно выполнив пункты 2, 5, а затем 8, проверьте наличие ранее созданного вами каталога.

Содержание отчета

Отчет должен содержать краткие теоретические сведения относительно используемых в данной работе команд. Практическая часть предусматривает краткое пояснение результатов выполнения следующих пунктов задания: 1, 3-5, 7, 8 для раздела «Создание и монтирование файловой системы на дискете», а также, 3, 4, 6, 9, 10 для раздела «Использование loop устройств и создание файлов, содержащих файловые системы».

Контрольные вопросы

  1.  Файловые системы Linux.
  2.  Структура файловой системы ext2.
  3.  Причины ошибок, возникающих в файловых системах. Их виды. Способы исправления.
  4.  Принцип монтирования файловых систем. Утилита mount.
  5.  Принцип демонтирования. Утилита umount и команда fuser. 
  6.  Работа с интерфейсными устройствами. Их обозначение в системе.
  7.  Пример монтирования  и демонтирования файловой системы оригинальной DOS дискеты.
  8.  Пример монтирования Windows радела жесткого диска (раздел dev/hda2, ФС vfat, кодировка CP1251, локаль koi8-r).
  9.  Пример монтирования CD диска, с опцией монтирования «только чтение».
  10.   Понятие loop устройств, работа с ними.
  11.   Команда dd, назначение и параметры. Устройство /dev/zero.
  12.   Пример создания и работы с файловой системой в файле.

Лабораторная работа №7

Обработка событий клавиатуры

Цель работы

Данная лабораторная работа посвящена обработке данных

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

системы программирования Free Pascal.

Теоретическая часть

Клавиатура

Клавиатура - это одно из основных устройств ввода информации в

ЭВМ, позволяющее вводить различные виды информации. Вид вводимой

информации определяется программой, интерпретирующей нажатые или

отпущенные клавиши. С помощью клавиатуры можно вводить любые

символы - от букв и цифр до иероглифов и знаков музыкальной нотации.

Клавиатура позволяет управлять курсором на экране дисплея

-устанавливать его в нужную точку экрана, перемещать по экрану

“прокручивать” экран в режиме скроллинга, отправлять содержимое

экрана на принтер, производить выбор при наличии альтернативных

вариантов и т.д.

В последнее время наблюдаются тенденции отказа от клавиатуры в

пользу альтернативных устройств: мыши, речевого ввода, сканеров. Но

полностью эти устройства клавиатуру не заменяют.

Стандартная клавиатура IBM PC имеет несколько групп клавиш:

Алфавитно-цифровые и знаковые клавиши (с латинскими и

русскими буквами, цифрами, знаками пунктуации, математическими

знаками).

Специальные клавиши: <Esc>, <Tab>, <Enter>, <BackSpace>.

Функциональные клавиши: <F1>...<F10...>.

Служебные клавиши для управления перемещением курсора

(стрелки: <Up>, <Down>, <Left>, <Right>, клавиши <Home>, <End>,

<PgUp>, <PgDn> и клавиша, обозначенная значком “[ ]” - в центре

дополнительной цифровой клавиатуры).

Служебные клавиши для управления редактированием <Ins> <Del>.

Служебные клавиши для смены регистров и модификации кодов

других клавиш <Alt>, <Ctrl>, <Shift>.

Служебные клавиши для фиксации регистров <CapsLock>, <Scroll-

Lock>, <NumLock>.

Разные вспомогательные клавиши <PrtSc>, <Break>, <Grey +>, <Grey

->.

Если клавиша первой, четвертой, а иногда и пятой группы

оказывается нажатой дольше, чем 0,5 с, начинает генерироваться

последовательность ее основных кодов с частотой 10 раз в секунду (в IBM

PC XT), что имитирует серию очень быстрых нажатий этой клавиши.

Общее число клавиш в основной модификации клавиатуры - 83, в

расширенной клавиатуре – до 101. Количество различных сигналов от

клавиатуры значительно превышает это число, так как:

1) при нажатии и освобождении клавиши в ЭВМ передаются разные

41

кодовые комбинации: при нажатии - порядковый номер нажатой клавиши

на клавиатуре (ее скан-код), а при освобождении - скан-код, увеличенный

на 80h;

2) заглавные и строчные буквы первой группы клавиш (алфавитно-

цифровых и знаковых) набираются на разных регистрах. Оперативное

переключение регистров производится клавишей <Shift>. Если при

нажатой (и удерживаемой в нажатом состоянии) клавише <Shift>

“клюнуть” (от английского слова “dick”) любую алфавитную клавишу, то в

ЭВМ будет отправлен код заглавной буквы, соответствующий нажатой

клавише;

3) после однократного нажатия клавиши <CapsLock> (зажигается

лампочка на клавиатуре рядом с клавишей) изменяется порядок работы

клавиши <Shift>: без нажатия на нее будут набираться заглавные буквы, а

при нажатии (совместном) - строчные. После повторного нажатия на

<CapsLock> порядок работы клавиши <Shift> восстанавливается, а

лампочка гаснет. Такой режим (переключательный) работы клавиши

называется триггерным режимом, или flip-flop;

4) аналогично клавише <Shift> действуют <Alt> и <Ctrl> - при

одновременном нажатии с ними любой другой клавиши, в ЭВМ

передается не scancode, а расширенный код (2 байта). Иногда таким же

образом используется клавиша <Esc>;

5) клавиша <NumLock> является триггерным переключателем

дополнительной цифровой клавиатуры: при негорящей лампочке она

работает как клавиатура для управления курсором; при зажженной - как

цифровая;

6) для переключения регистров (или даже групп регистров) иногда

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

русификаторы клавиатуры переключают РУС-ЛАТ с помощью правой

клавиши <Shift> или при одновременном нажатии двух клавиш <Shift>

(правой и левой) и т.д. Эти комбинации клавиш обладают триггерным

эффектом.

Сигналы, поступающие от клавиатуры, проходят трехуровневую

обработку: на физическом, на логическом и на функциональном уровнях.

Физический уровень имеет дело с сигналами, поступающими в

вычислительн машину при нажатии и отпускании клавиш.

На логическом уровне, реализуемом BIOS через прерывание 9, скан-

код транслируется в специальный 2-байтовый код. Младший байт для

клавиш группы 1 содержит ASCII-код, соответствующий изображенному

на клавише знаку. Этот байт называют главным. Старший байт

(вспомогательный) содержит исходный скан-код нажатой клавиши.

На функциональном уровне отдельным клавишам программным

путем приписываются определенные функции. Такое “программирование”

клавиш осуществляется с помощью драйвера-программы,

обслуживающей клавиатуру в операционной системе.

На IBM PC AT используется клавиатура с большим количеством

клавиш. На этих машинах есть возможность управлять некоторыми

функциями клавиатуры, например, изменять время ожидания автоповтора,

частоту автоповтора, зажигать и гасить светодиоды на панели управления

клавиатурой.

Устройство клавиатуры не является простым: в клавиатуре

используется свой микропроцессор, работающий по прошитой в ПЗУ

программе. Контроллер клавиатуры постоянно опрашивает клавиши,

определяет, какие из них нажаты, проводит контроль на “дребезг” и

выдает код нажатой или отпущен-_ ной клавиши в системный блок ЭВМ.

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

также по расстоянию между клавишами, числу специальных клавиш,

способу переключения на цифровой регистр для быстрого ввода числовых

данных, углу наклона, форме и текстуре поверхности клавиш, усилию

нажима и величине хода клавиш, расположению часто используемых

клавиш и др.

Система программирования Free Pascal

Free Pascal Compiler (FPC) - это свободно распространяемый

компилятор языка Паскаль с открытыми исходными кодами. Он совместим

с Borland Pascal 7 и Object Pascal – Delphi, но при этом обладает рядом

дополнительных возможностей, например, поддерживает перегрузку

операторов. FPC — кроссплатформенный инструмент, поддерживающий

огромное количество платформ. Среди них — AmigaOS, DOS, Linux,

*BSD, OS/2, MacOS(X) и Win32.

В состав Free Pascal входит большое количество различных

библиотек, реализующих в том числе функции работы с периферийными

устройствами. Так, в частности, библиотека Crt реализует функции работы

с клавиатурой, консолью.

Модуль Crt реализует ряд мощных программ, предоставляющих

вам полную возможность управления средствами компьютера РС, такими,

как управление режимом экрана, расширенные коды клавиатуры, цвета,

окна, и звуковые сигналы.

Одним из основных преимуществ использования модуля Crt

является большая скорость и гибкость при выполнении операций работы с

экраном. Программы, не работающие с модулем Crt, выводят на экран

информацию с помощью средств операционной системы, что связано с

дополнительными непроизводительными затратами. При использовании

модуля Crt выводимая информация посылается непосредственно в

базовую систему ввода-вывода (ВIОS), или, для еще более быстрых

операций, непосредственно в видеопамять.

Использование модуля CRT

Чтобы использовать модуль Crt, его нужно указать в операторе uses

вашей программы:

uses Crt;

При инициализации модуля Crt для того, чтобы можно было

обращаться к CRТ, вместо стандартных файлов ввода и вывода DOS

назначаются стандартные входные и выходные текстовые файлы. Это

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

AssignCrt(Input); Reset(Input);

AssignCrt(Output); Rewrite(Output);

Это означает, что переопределение входных и выходных файлов

далее не допускается до тех пор, пока для данных файлов не будет

выполнено обратного переназначения и не произойдет переход к

стандартному вводу и выводу с помощью выполнения операторов:

Assing(Input,''); Reset(Input);

Assing(Output,''); RewriteOutput);

Окна CRT

Модуль Crt поддерживает простую, но, тем не менее, мощную форму

использования окон. Процедура Window позволяет вам определить в

каком-либо месте экрана окно. При записи в это окно оно ведет себя

точно также, как целый экран. При этом остальная часть экрана остается

нетронутой. Другими словами, доступ к экрану вне окна отсутствует.

Внутри окна можно добавлять и удалять строки, при этом курсор

возвращается к правому краю и при достижении курсором нижней строки

текст продвигается вверх.

Все координаты экрана, кроме тех, которые используются для

определения окна, относятся к текущему окну. Координата экрана (1,1)

соответствует левому верхнему углу экрана. По умолчанию окном

считается весь экран.

Специальные символы

При записи в выходной файл или в файл, который назначен для

модуля Crt, специальное значение имеют следующие управляющие

символы:

#7 Звонок - Вызывает звуковой сигнал, издаваемый с помощью

внутреннего динамика.

#8 Обратный пробел - Возврат на одну позицию. Вызывает

перемещение курсора влево на одну позицию. Если курсор уже находится

у левого края текущего окна, то никаких действий не производится.

#10 Перевод строки - Перемещает курсор на одну строку вниз. Если

курсор уже находится на нижней строке окна, то окно пролистывается

вверх на одну строку.

#13 Возврат каретки - Возвращает курсор с левому краю текущего

окна.

Ввод строк

При чтении из входного файла (Input) или из текстового файла,

который назначен для модуля Crt, текст вводится по одной строке. Строка

запоминается во внутреннем буфере текстового файла и когда переменные

считываются, то в качестве источника используется этот буфер. Каждый

раз когда буфер становится пустым, вводится новая строка. При вводе

строк можно использовать следующие клавиши редактирования:

Backsрасе - Удаляет последний введенный символ.

Esс - Удаляет всю вводимую строку.

Enter - Прекращает ввод строки и записывает метку конца строки

(возврат каретки/перевод строки) в буфере.

Ctrl+S - Действует также, как Backspace.

Ctrl+D - Извлекает один символ из последней вводимой строки и

выводит его на экран.

Ctrl+F - Восстанавливает на экране последнюю вводимую строку.

Ctrl+Z - Завершает ввод строки и генерирует символ конца файла.

`Для проверки состояния клавиатуры и ввода отдельных символов под

управлением программы используйте функции KeyРressed и RеаdKey.

Процедуры и функции модуля Crt

AssignCrt - Назначает текстовый файл для устройства CRT.

ClrEоl - Очищает все символы, начиная от позиции курсора до

конца строки, без перемещения курсора.

ClrScr - Очищает экран и помещает курсор в верхнем левом углу.

Dеlау - Выполняет задержку на указанное число миллисекунд.

DelLine - Удаляет строку, на которой находится курсор и перемещает

все следующие строки на одну строку вверх. Нижняя строка очищается.

GоtоХY - Выполняет позиционирование курсора. Х – это

горизонтальная позиция, Y - вертикальная позиция.

InsLine - Вставляет пустую строку в месте расположения курсора.

KeyРrеssеd - Возвращает значение Truе, если клавиша на

клавиатуре нажата и Falsе - в противном случае.

TextВаckground - Выбирает фоновый цвет.

TextColor - Выбирает цвет самого символа.

TextМоdе - Выбирает конкретный текстовый режим.

Window - Определяет на экране текстовое окно.

Rеаdкеу - Считывает символ с клавиатуры.

WherеХ - Возвращает координату Х для текущей позиции курсора,

относящуюся к текущему окну. Х представляет собой горизонтальную

позицию.

WhereY - Возвращает координату Y для текущей позиции курсора,

относящуюся к текущему окну. Y представляет собой вертикальную

позицию.

Подробную информацию о модуле Crt и его процедурах и функциях

вы можете получить с помощью справочной системы программы Free

Pascal.

Модуль keyboard

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

клавиатурой обладает стандартный модуль Free Pascal keyboard. Приведем

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

DoneKeyboard – завершает работу с драйвером клавиатуры

FunctionKeyName – возвращает строку представляющую код

функциональной клавиши

GetKeyEvent – возвращает следующее событие клавиатуры

GetKeyEventChar – возвращает символьную часть события

клавиатуры

GetKeyEventCode – возвращает функциональную часть события

GetKeyEventFlags – возвращает установленные флаги клавиатурного

события

GetKeyEventShiftState – возвращает текущее состояние клавиш Shift

GetKeyEventUniCode – возвращает клавиатурное событие в формате

Unicode

InitKeyboard – инициализирует драйвер клавиатуры

IsFunctionKey – возвращает значение Истина если нажатая клавиша

– функциональная

KeyEventToString – возвращает строковое описание клавиатурного

события

KeyPressed – проверяет наличие клавиатурного события в очереди

Более полную информацию о функциях, процедурах, константах

модуля Keyboard смотрите самостоятельно в документации к Free Pascal.

Практическая часть

В рамках выполнения данной лабораторной работы необходимо

написать программу на языке Free Pascal, обеспечивающую обработку

событий, поступающих с клавиатуры. Описание событий должно

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

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

программы и таблицей устанавливающей соответствие нажатым

клавишам кодов клавиатуры.

Лабораторная работа №8.

Обработка событий мыши

Цель работы

Целью данной лабораторной работы явялется изучение особенностей

и приемов работы с периферийным устройством компьютера – мышью.

Работа выполняется с использованием системы программирования Free

Pascal.

Теоретическая часть

Указательное устройство типа мышь позволяет эффективно

управлять работой компьютера, особенно в связке с различными типами

оконных интефейсов. Мышь представляет собой устройство

непосредственного позиционирования в рамках выделенной экранной

области. Управление осуществляется с помошью кнопок. Функционал

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

которов функционирует манипулятор типа мышь.

Особо активное применение мышь имеет в графических

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

способ эффективно управлять содержимым большого экрана, обеспечивая

точное позиционирование по всем точкам.

Работа с мышью в программном продукте Free Pascal эффективно

реализована в модуле Mouse.

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

DetectMouse – определяет наличие мыши в системе

51

DoneMouse – производит деинициализацию модуля работы с мышью

GetMouseButtons – возвращает состояние (нажаты/не нажаты)

кнопок мыши

GetMouseDriver – возвращает копию текущего драйвера мыши

GetMouseEvent – возврящает следующее в очерди событие мыши

GetMouseX – возвращает координату X

GetMouseY – возвращает координату Y

HideMouse – скрывает указатель мыши

InitMouse – инициализирует драйвер мыши

SetMouseXY – устанавливает координаты указателя мыши

ShowMouse – делает указатель мыши видимым.

Подробную информацию о вышеуказанных процедурах и функциях

смотреть в документации к системе Free Pascal.

Практическая часть

Необходимо написать программу, отслеживающую события мыши.

Информацию о событиях нужно отображать в нижней части экрана (для

этого воспользуйтесь возможностями модуля Crt). По результатам работы

необходимо подготовить отчет с приведением текста программы и

скриншота, демонстрирующим ее выполнение.

1 Распределенная модель COM – Distributed COM (DCOM) была разработана несколько позднее.

2 Часто сокращение IDL расшифровывают как Interface Definition Language.

3 GUID – это сокращение, используемое фирмой Microsoft. Разработчики идеи глобальных уникальных идентификаторов изначально обозначали свою систему уникального именования объектов как UUID (Universally unique identifier).

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

5 Раньше для обозначения указанного механизма фирма Microsoft использовала термин «OLE Automation», часто используемый до сих пор.


 

А также другие работы, которые могут Вас заинтересовать

83614. Выбор разъединителей, отделителей и короткозамыкателей 41.03 KB
  Условиями выбора разъединителей являются где номинальное напряжение сети кВ; номинальное напряжение электрического аппарата или токоведущих частей кВ; максимально возможный ток в месте установки разъединителей в рабочем режиме кА; номинальный ток электрического аппарата или токоведущих частей кА. Условия проверки электродинамической стойкости разъединителей: по способности выдерживать ударный ток Условия проверки термической стойкости разъединителей Короткозамыкатели и отделители это специальные разъединители имеющие...
83615. Выбор трансформаторов тока 38.4 KB
  В режиме короткого замыкания необходимо проверить трансформатор тока на динамическую и термическую стойкость. Условия выбора трансформатора тока: номинальное напряжение: номинальный первичный ток: по вторичной нагрузке: Проверка трансформатора тока по динамической стойкости: где кратность тока динамической стойкости. Проверка трансформатора тока по термической стойкости: где кратность тока термической стойкости.
83616. Выбор силовых трансформаторов на напряжение выше 1 кВ 44.49 KB
  Нормальный режим работы – раздельная работа трансформаторов это предусматривается в целях уменьшения токов короткого замыкания и позволяет применить более легкую и дешевую аппаратуру на стороне низшего напряжения трансформаторов. Номинальная мощность цеховых SНТ выбирается по расчетной мощности исходя из условия экономичной работы трансформаторов 6080 в нормальном режиме и допустимой перегрузки на 3040 от SНТ в послеаварийном режиме. После выбора мощности трансформаторов определим их количество: где Кз это...
83617. Типы проводников, применяемые в основных электрических цепях 29.51 KB
  Все соединения внутри закрытого РУ 610 кВ включая сборные шины выполняются жесткими голыми алюминиевыми шинами прямоугольного или коробчатого сечения. Токоведущие части в РУ 35 кВ и выше обычно выполняются сталеалюминиевыми проводами АС. В некоторых конструкциях ОРУ часть или вся ошиновка может выполняться алюминиевыми трубами. От стены ГРУ до выводов установленного вблизи ГРУ соединение выполняется жесткими алюминиевыми шинами.
83618. Выбор кабелей, марки кабелей 43.25 KB
  Если условия применения проводов и кабелей отличаются от приведённых то длительно допустимые токовые нагрузки пересчитывают по формуле: I\'доп=Iдоп K1K2 где Iдоп – длительно допустимый ток одиночного кабеля провода; K1 – коэффициент учитывающий количество кабелей; К2 – коэффициент допустимой перегрузки кабельной линии. Для кабелей напряжением до 10 кВ с бумажной пропитанной изоляцией несущих нагрузки меньше номинальных для таких кабелей допускается перегрузки в течение 5 суток в пределах указанных в таблицах справочника. Для кабелей с...
83619. Виды и системы освещения 30.21 KB
  Освещение безопасности предназначено для продолжения работы при аварийном отключении рабочего освещения. Светильники рабочего освещения и светильники освещения безопасности должны питаться от независимых источников. Устройство рабочего освещения обязательно во всех помещениях независимо от устройства в них других видов освещения.
83620. Расчет искусственного освещения методом коэффициента использования 43.18 KB
  1 где Е заданная минимальная освещенность лк; Кзап коэффициент запаса; коэффициент минимальной освещенности приближенно можно принимать z = 11 – для люминесцентных ламп z = 115 – для ламп накаливания и ДРЛ; S – освещаемая площадь м2; Еср средняя освещенность лк; N – число светильников намечается до расчета – коэффициент использования светового потока источника света доли единиц. Если такое приближение не реализуется то корректируется число светильников. Если световой поток ламп в каждом светильнике составляет...
83621. Точечный метод расчета освещенности 93.26 KB
  Расположение контрольной точки А при размещении светильников по углам квадрата и В по сторонам прямоугольника 3 по пространственным изолюксам горизонтальной освещенности находится освещенность е от каждого светильника; 4 находится общая условная освещенность от всех светильников ∑е; 5 рассчитывается горизонтальная освещенность от всех светильников в точке А: Еа = F х μ 1000х kз х ∑е где μ коэффициент учитывающий дополнительную освещенность от удаленных светильников и отраженного светового потока kз коэффициент запаса. Порядок по...
83622. Порядок расчета рабочего освещения любого цеха 73.69 KB
  Наметим число светильников в ряду: шт. тогда расстояние от торцевых стен до крайнего светильника составит: Расстояние от крайних светильников до стены принимается 03L 05L в зависимости от наличия рабочих мест у стен. Выберем расстояние между рядами LB при этом необходимо учесть следующее условие: Примем LB = 4м; Расстояние от боковых стен до крайних светильников составит: 5. Число светильников в цехе: Размещение светильников представлено на рис.