Реферат Курсовая Конспект
Свободные программы и системы в школе - раздел Образование, Максим Отставнов ...
|
Максим Отставнов
Свободные программы и системы в школе
Глава 1. Краткое введение в открытые ОС
Традиционно существовало два жанра введений в ОС: введение в архитектуру ОС с точки зрения программиста, и введение в пользование ОС с точки зрения оператора. Как правило, такие книги освещают также элементы администрирования (чаще – какой‑то конкретной ОС).
В последнее десятилетие появился специфический третий жанр. Он предполагает «полное погружение» студента в материал, и в нем параллельно вводятся сведения, необходимые для оператора и для администратора. Появление этого жанра связано с массовым введением в эксплуатацию открытых ОС на весьма капризном «персонально‑компьютерном» оборудовании и с тем, что во все возрастающем количестве новые пользователи открытых ОС осваивали их самостоятельно.
В последние годы ситуация опять изменилась: сегодня доступно множество дистрибутивов свободных ОС, позволяющих в большинстве случаев получить по крайне мере базовую стандартную функциональность «из коробки», и продается достаточное количество компьютеров «персонального» и «домашнего» класса с предустановленной ОС «ГНУ/Линукс». Поэтому новичок может совершенно спокойно освоить сначала основы пользования системой, а затем, при необходимости, ее администрирование.
Предлагаемый в настоящем разделе курс подпадает под определение второго из перечисленных жанров, а его отличительными особенностями являются:
компактность (в случае необходимости в жертву приносились «технические» аспекты в пользу «гуманитарных», т.е. сведениям, необходимым для понимания литературы и общения на заданную тему, отдавалось предпочтение перед сведениями, необходимыми для осуществления тех или иных действий),
ориентация на современную версию стандарта ОС (ИСО/МЭК 9945:2001), а не особенности той или иной ОС.
Существенной сложностью при изучении открытых систем остается неполнота переводов встроенной документации, поэтому приложены (раздел 1.10) справочные страницы обсуждаемых команд (полностью или в части, соответствующей учебному материалу).
Для воспроизведения примеров и другой практической работы потребуется доступ к терминалу открытой ОС. Идеальным вариантом является доступ к администрируемой и поддерживаемой в порядке системе. Если такой возможности нет, можно установить на имеющийся компьютер ОС «ГНУ/Линукс» или «БСД», руководствуясь документацией к дистрибутиву. Пользователи «Макинтошей» с установленной «МакОС X» могут получить доступ к терминалу ОС в соответствии с документацией последней.
Наименее проблемной будет установка из дистрибутива «Дебиан ГНУ/Линукс», особых сложностей также не должно быть с «АЛЬТ Линукс», «АСПЛинукс», «РедХэт Линукс», «Линукс‑Мандрейк» или «ФриБСД». Любой из этих дистрибутивов позволяет осуществить установку на компьютеры самой популярной архитектуры IA‑32 («IBM PC‑совместимые»). Еще лучше, если у студента есть знакомый, администрирующий любую открытую ОС, который сможет помочь с установкой; тогда дистрибутив должен порекомендовать он.
При установке следует обратить внимание на правильные национальные установки (кириллица с кодовой таблицей «KOI8‑R», клавиша переключения кодовых подстраниц) и на то, чтобы после загрузки не осуществлялся автоматический запуск графической оконной системы «Икс» («X Window System»). Последняя в нашем курсе вообще не нужна.
Для нормальной работы с оболочкой и утилитами должно хватить возможностей процессора Intel 386‑DX66 или аналога, 16 МБ ОЗУ, 100 МБ дискового пространства, хотя некоторые из перечисленных дистрибутивов могут требовать расширенного набора команд «Пентиум» и содержать программу установки, более требовательную к ресурсам (особенно к ОЗУ).
Современные загрузчики позволяют осуществлять попеременную загрузку на одном компьютере более одной ОС (в том числе альтернативных), так что если тот же компьютер эксплуатируется и под «МС‑ДОС» («Майкрософт Уиндоуз»), это не будет помехой (прочитайте внимательно разделы документации по установке и не забудьте осуществить резервное копирование данных перед переразбиением дисков на разделы, если таковое потребуется).
В крайнем случае можно запустить оболочку и команды под «Майкрософт Уиндоуз», пользуясь такими пакетами, как «Cygwin», «Unix Services for Windows» или «UWIN», что, впрочем, не рекомендуется.
Несвободные открытые операционные системы
Свое значение сохраняют и несвободные открытые операционные системы, такие как «Солярис», «AIX», «Тру64 Юникс». Как правило, они применяются в сочетании с соответствующими аппаратными платформами, сопровождаются и поддерживаются производителями последних. Большинство свободных прикладных программ и пакетов перенесены или легко переносятся на такие ОС.
Файлы и файловые структуры
Управление заданиями и сигнализация процессов
В среде стандартной оболочки и команд открытой ОС запустить бесконечный процесс можно, введя команду «( while : ; do : ; done )», запускающую бесконечный цикл в подчиненном экземпляре оболочки (Рис. 1‑47).
Пока не нужно беспокоиться о понятности синтаксиса управляющих конструкций.
Рис. 1‑47
Если Алиса все сделала правильно, то сценарий сам по себе уже не остановится никогда (скорее всего, до разгрузки системы). Приглашения оболочки Алиса тоже уже не получит, поэтому даже не сможет выйти из системы.
Справиться с этой ситуацией ей поможет клавиатурная комбинация Control‑C. Как и комбинация Control‑D, она не отображается на экране, но после ее нажатия Алиса получает приглашение оболочки и при помощи команды «ps» убеждается, что никаких процессов, кроме самой оболочки и «ps», под этой оболочкой не выполняется.
Рис. 1‑48
Клавиатурная комбинация Control‑C побуждает драйвер терминала отправить сигнал нормального завершения выполняемому процессу (в данном случае, подчиненной оболочке).
Клавиатурная комбинация Control‑Z побуждает драйвер терминала отправить выполняемому процессу другой сигнал – приостановки[41].
Рис. 1‑49
После нажатия Control‑Z оболочка выдает сообщение, состоящее из числа в квадратных скобках, слова «остановлен» («stopped» в стандартной локали) и введенной ранее команды (Рис. 1‑49).
Число в квадратных скобках – это номер задания . Заданием является любая начавшая выполняться простая команда.
Состояние соответствующего процесса (колонка «S» в выводе «ps ‑l» (эль)) обозначено буквой «T», означающей, что процесс остановлен . Задание, соответствующее такому процессу, также называется остановленным.
Возобновить исполнение задания можно двумя способами. Команда «fg» возобновляет выполнение задания на переднем плане , а команда «bg» – на заднем плане (или в фоновом режиме )[42]. Заданием переднего плана называется задание, завершения ведущего процесса (первого процесса, запущенного подачей команды) которого ожидает оболочка перед выводом очередного приглашения, и которое может свободно выводить данные на управляющий терминал и вводить их с терминала.
В любой момент времени на переднем плане каждого управляющего терминала находится не более одного задания. Заданий заднего плана может быть неограниченное[43]количество.
Рис. 1‑50
В примере на Рис. 1‑50 Алиса запускает сценарий «цикл», останавливает его нажатием Control‑Z, затем возобновляет его выполнение на переднем плане командой «fg», снова останавливает, и затем возобновляет на заднем плане командой «bg». После этого Алиса сразу получает приглашение и, введя команду «ps ‑l», видит соответствующий выполнению сценария процесс «bash» (PID 2765) с состоянием «R» («выполняемый»).
Нажатие клавиатурных комбинаций Control‑C и Control‑Z всегда вызывает передачу сигнала заданию переднего плана. Заданию заднего плана передавать сигнал можно только явно, для чего служит команда «kill». Указание в качестве ее единственного аргумента идентификатора процесса приводит к тому, что процессу передается сигнал «нормально завершиться» (это соответствует нажатию комбинации Control‑C для задания переднего плана) (Рис. 1‑51).
Рис. 1‑51
Подача команды «kill» с ключом «‑s» и идентификатором сигнала в качестве параметра этого ключа позволяет подать процессу произвольный сигнал. Стандартом определены восемь сигналов, перечисленных в таблице на Рис. 1‑52.
Рис. 1‑52
Реализация может предусматривать большее их количество[44]. Практически во всех системах реализован сигнал SIGSTOP, его отправка процессу переднего плана большинством современных оболочек осуществляется нажатием Control‑Z, как описано выше.
На пользовательском уровне применяются обычно сигналы SIGTERM и SIGKILL. Отличие их в том, что при получении первого из них процесс по возможности завершается «чисто»: сбрасывает содержимое внутренних буферов в файлы и закрывает их, а второго – завершается немедленно. Второй используется обычно для «убиения» процесса, выполняющего ошибочную программу.
До сих пор Алиса отправляла сигналы по собственной инициативе. Отправляющим процессом выступали оболочка (при передаче сигналов процессу переднего плана нажатием клавиш) или команда «kill». Но передача сигналов (межпроцессная коммуникация) может осуществляться между любыми процессами, и является широко используемым в системном и прикладном программировании механизмом ОС. Как и при доступе к файлам, при доступе к процессам ОС руководствуется системой распределения полномочий. Стандартное поведение проще, чем в случае с файлами: процесс, запущенный обычным пользователем (не главным пользователем), может сигнализировать процессу, запущенному тем же пользователем, и не может сигнализировать процессу, которым «владеет» другой пользователь. В примере на Рис. 1‑53 попытка Алисы «убить» процесс, принадлежащий другому пользователю, привела к сообщению об ошибке.
Рис. 1‑53
Реализацией может быть определено более сложное поведение[45].
Программа может переопределить смысл сигналов, которые получает процесс (в частности, отменить завершение процесса), за исключением сигнала SIGKILL. Все стандартные команды ОС обрабатывают сигналы стандартным образом[46].
Если вам не удается завершить запущенный вами процесс подачей команды «kill ‑s SIGKILL», значит, в системе возникли очень серьезные неполадки.
Вы также можете столкнуться с ситуацией, когда программа переопределяет SIGINT, SIGSTOP и входит в бесконечный цикл (или ожидает события, наступления которого в обозримом будущем не предвидится). Запустив такую программу на переднем плане, вы не сможете завершить ее нажатием Control‑C или приостановить нажатием Control‑Z, а подать SIGKILL командой «kill» также будет невозможно, поскольку оболочка ожидает завершения процесса переднего плана.
Простого выхода из этой ситуации нет, но обычно можно зарегистрироваться на другом терминале (включая виртуальную консоль) и «убить» хитрый процесс командой «kill ‑s SIGKILL». Если таким образом «завис» сеанс в окне виртуального терминала, его обычно можно «убить» средствами оконного менеджера (закрыв окно). Наконец, если вы работаете на последовательном терминале, можно попытаться выключить и снова включить его. Оболочка по выключении получит сигнал SIGHUP и «убьет» подчиненные себе процессы.
Сложные команды и задания
Чтобы запустить задание на заднем плане, не обязательно запускать его на переднем плане, приостанавливать и возобновлять командой «bg». Можно воспользоваться символом завершения команды «&» (читается «амперсенд») (Рис. 1‑54).
Рис. 1‑54
Использование символа завершения «&» позволяет ввести в одной строке более одной команды (и, соответственно, запустить более одного задания), связав их этим символом (Рис. 1‑55). Список заданий можно получить командой «jobs».
Рис. 1‑55
Знак «+» после номера задания обозначает «текущее» задание, то есть задание, которым можно управлять командами «bg» и «fg» без аргументов. Знаком «‑» помечено «предыдущее» задание (которое станет текущим по завершению текущего). При переводе задания переднего плана на задний или запуске нового задания текущее задание (если оно есть) становится «предыдущим», а вновь запущенное – текущим.
Если нужно возобновить исполнение задания на переднем или заднем плане, или перевести задание на передний план, можно воспользоваться командами «fg» и «bg», задав им аргумент, состоящий из «%» («процент»), и следующим за ним слитно номером задания (Рис. 1‑56).
Рис. 1‑56
Другим символом завершения команды, также позволяющим подать более одной команды и инициировать более одного задания одной строкой является «;» (точка с запятой). Команда, завершенная этим символом, будет выполняться на переднем плане, а последующие команды (задания) будут выполняться после ее завершения.
При подаче сложных команд (команд, включающих в себя более одной команды) их можно группировать с использованием круглых скобок. Сгруппированные скобками команды (вне зависимости от использованного символа завершения) образуют группу команд[47], выполняемых как одно задание (Рис. 1‑57).
Рис. 1‑57
Кроме того, группировка бывает полезна, чтобы передать значение переменной сразу всем командам, или перенаправить ввод и/или вывод всех команд.
Механизм управления заданиями (являющийся позднейшей добавкой к концепции открытых систем) чрезвычайно полезен при выполнении сложных работ с алфавитно‑цифрового терминала. Сегодня операторы предпочитают при возможности запускать разные программы в разных окнах виртуальных терминалов в графической среде. Тем не менее, полезно хотя бы в общих чертах представлять, что это такое.
Существуют также символы завершения команды «&&» и «||». Их действие связано с понятием кода завершения , возвращаемого каждой командой. Код завершения определяется программой, но обычно успешно выполнившаяся команда возвращает код «0» (ноль), а выполнившаяся с ошибкой – числовое значение кода ошибки. Явную работу с кодами завершения мы обсудим при введении элементов программирования оболочки, а здесь лишь упомянем, что символ завершения «&&» означает, что заданную за ним команду следует выполнить только в случае, если указанная перед ним команда выполнилась успешно, а символ «||» – наоборот, что «правую» команду следует выполнить только при ошибочном завершении «левой» (Рис. 1‑58).
Рис. 1‑58
Многовариантное условное исполнение
Для многовариантного условного исполнения в зависимости от значения строковой переменной оболочка поддерживает оператор «case» с на редкость причудливым синтаксисом (Рис. 1‑86).
Рис. 1‑86
Указанная строка (обычно – результат раскрытия значения переменной) поочередно сравнивается с шаблонами и при первом совпадении выполняется соответствующий список команд (до конструкции «;;»), после чего выполнение оператора «case» завершается.
Строки, указанные в качестве шаблонов, подвергаются обычному раскрытию, за исключением того, что специальные символы «*», «*», «[ ... ]» не приводят к поиску файлов, а используются (по тем же правилам, что и при раскрытии шаблонов имен файлов) как метасимволы при сравнении.
Чаще всего многовариантное условное исполнение применяется при разборе списка параметров, с которыми сценарий был вызван для исполнения. Примеры настолько громоздки, что мы их опускаем.
Ввод‑вывод
Вывод значений переменных и выражений сценарием как правило осуществляется известной нам командой «echo» или командой «printf» (предназначенной для форматированного вывода), которую мы в этом курсе не рассматриваем.
Ввести данные (т.е. присвоить значения переменным) можно с помощью команды «read». Эта команда читает из стандартного ввода строку, разделяет ее на отдельные аргументы (пробелами, табуляцией, знаком переноса или символами, содержащимися в переменной окружения $IF), и присваивает их перечисленным в команде переменным. Если аргументов оказывается больше, чем переменных, остаток строки присваивается последней переменной (Рис. 1‑87).
Рис. 1‑87
Однако во многих случаях вывод (и ввод) осуществляется не только командой «echo», но и прочими командами, применяемыми в сценарии. Следует понимать, что каждая команда, ввод‑вывод которой не переназначен явно и не включен в конвейер, наследует , в числе прочих атрибутов, дескрипторы стандартных ввода‑вывода от подающего ее процесса. Таким образом, переназначив, например, стандартный вывод сценария в файл, мы тем самым переназначаем стандартный вывод каждой вызываемой программы, если только ее вывод не переназначается отдельно или не передается по конвейеру.
Глава 2. Графический пользовательский интерфейс
До середины девяностых существовали отдельно компьютерная графика и отдельно – настольные игры в компьютерную графику. Помнящие историю отечественной школьной информатизации читатели, возможно, сталкивались с чудом техники под названием «цифровой дисплей растровый» (ЦДР), которое удавалось подключить к первому отечественному персональному компьютеру ДВК, чтобы отображать на экране телевизора несколько тысяч пикселов в четырех цветах. В то время в Лабораториях Компьютерной Графики некоторых вузов можно было встретить Графические Рабочие Станции с векторными устройствами и X‑терминалами, и даже плоттерами.
Закон Мура тем временем делал свое (в данном случае, не черное, а многоцветное) дело, и к середине девяностых на компьютере с процессором Intel 486 уже запускалась та самая система, которую пятью годами раньше наблюдать можно было лишь на X‑терминалах и графических станциях, стоивших каких‑то немыслимых (что по тем временам, что сегодня) денег.
Игры в самодельную графику, конечно, продолжаются и сегодня, но в целом мир воссоединился, и особой нужды в таких играх давно нет. Хотя – такова диалектика массовых рынков – именно эти игры (включая игры в буквальном смысле) породили спрос на дешевые устройства (прежде всего, графические акселераторы), которые и делают настоящую компьютерную графику доступной пользователю массовой x86‑ и PowerPC‑техники, даже устаревшие «персоналки» – сопоставимыми с X‑терминалами, а более новые и мощные – соперниками и с профессиональных графических рабочих станций начального и среднего уровня.
2.1 Оконная система «Икс» и XFree86
Оконная система «Икс» – один из самых больших и успешных проектов в истории компьютерной техники – восходит к 1984 г., когда разработчики двух систем компьютерной графики, претендующих на универсальность – проектов Athena (Массачусетский технологический институт) и W Windowing (Стэнфордский университет) – решили объединить свои усилия. С тех пор практически каждая компания, серьезно занимающаяся графикой, считала своим долгом внести какие‑либо разработки в систему, формальным «хозяином» которой в 1987 г. стал вновь созданный X Consortium (ныне Open Group, www.X.org).
С тех пор «Икс» прошла через одиннадцать основных релизов и множество версий.
Дальнейшее изложение ориентировано на свободную реализацию «Икс», которая называется XFree86, поддерживается одноименным партнерством (www.xfree86.org) и воплощает на сегодня версию 4.2 текущего релиза. XFree86 – самая популярная реализация «Икс», она поставляется в составе подавляющего большинства открытых систем (как свободных, так и несвободных) для x86‑совместимых компьютеров, поддерживает беспрецедентно широкий спектр оборудования и, благодаря доступности исходных текстов и пользовательской аудитории в десятки миллионов человек, достаточно «вылизана», по крайней мере, насколько это возможно для такого разнообразия «железа». Несмотря на то, что исторически цифры «86» в названии пакета относятся к соответствующему семейству процессоров от Intel, современные версии XFree86 реализованы для большинства других популярных процессоров. XFree86 доступен и для некоторых альтернативных архитектур ОС, включая «Майкрософт Уиндоуз НТ».
Большинство нижесказанного справедливо для любой реализации «Икс» на любом оборудовании и под любой ОС, список которых можно найти на www.X.org.
– Конец работы –
Используемые теги: Свободные, программы, системы, школе0.062
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Свободные программы и системы в школе
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов