Курсовая работа по дисциплине : «Информатика» тема: «Особенности операционной системы unix» - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Отчет по лабораторной работе по курсу «Операционные системы» 1 59kb.
4 февраля 1943 года в Новом Орлеане (штат Луизиана) родился Кеннет... 1 113.84kb.
Курсовая работа по информатике на тему: " Классификация ос unix" 1 169.81kb.
Курсовая работа по дисциплине «Динамические интеллектуальные системы»... 1 168.94kb.
Лабораторная работа №1 Структура операционной системы Windows xp... 1 142.22kb.
Unix-подобные операционные системы, характеристики, особенности,... 1 40.07kb.
Методические указания к лабораторным работам по дисциплине «Операционные... 1 276.28kb.
Лабораторная работа №3 «Практическое знакомство с потоками и синхронизацией... 1 41.69kb.
Курсовая работа по дисциплине «Микропроцессорные системы» 1 51.76kb.
Курсовая работа по дисциплине: «География и рекреалогия туризма»... 1 343.44kb.
Рабочая программа по дисциплине «Операционная система unix» для специальности... 1 150.47kb.
Обучающихся по специальности "менеджмент" 23 5104.7kb.
Направления изучения представлений о справедливости 1 202.17kb.

Курсовая работа по дисциплине : «Информатика» тема: «Особенности операционной системы - страница №1/1




Особенности операционной системы UNIX

КУРСОВАЯ РАБОТА по дисциплине : «Информатика» тема: «Особенности операционной системы UNIX» 2005 г.Задание: Дать описание основных особенностей операционной системы UNIX. СОДЕРЖАНИЕ ВВЕДЕНИЕ ……………………………………………………………………. 4 ОБЗОР ОСОБЕННОСТЕЙ СИСТЕМЫ ……………………………………4 1. ИСТОРИЯ ………………………………………………………………4 2. СТРУКТУРА СИСТЕМЫ …………………………………………….8 3. ОБЗОР С ТОЧКИ ЗРЕНИЯ ПОЛЬЗОВАТЕЛЯ …………………..10 3.1 Файловая система …………………………………………..10 3.2 Среда выполнения процессов ……………………………..14 3.3 Элементы конструкционных блоков …………………….17 4. ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ ……………………..19 5. ПРЕДПОЛАГАЕМАЯ АППАРАТНАЯ СРЕДА……………………20 5.1 Прерывания и особые ситуации …………………………. 22 5.2 Уровни прерывания процессора …………………………. 22 5.3 Распределение памяти ……………………………………... 23 6. ВЫВОДЫ ………………………………………………………………. 24ЛИТЕРАТУРА ……………………………………………………………………...25 ВВЕДЕНИЕ Впервые система UNIX была описана в 1974 году в статье Кена Томпсонаи Дэнниса Ричи в журнале "Communications of the ACM" [Thompson 74]. Сэтого времени она получила широкое распространение и завоевала широкуюпопу-лярность среди производителей ЭВМ, которые все чаще стали оснащать еюсвои машины. Особой популярностью она пользуется в университетах, гдедовольно часто участвует в исследовательском и учебном процессе. Множество книг и статей посвящено описанию отдельных частейсистемы;среди них два специальных выпуска "Bell System Technical Journal" за1978 год [BSTJ 78] и за 1984 год [BSTJ 84]. Во многих книгах описываетсяпользовательский интерфейс, в частности использование электронной почты,подготовка документа-ции, работа с командным процессором Shell; внекоторых книгах, таких как "The UNIX Programming Environment" [Kernighan84] и "Advanced UNIX Programming" [Rochkind 85], описываетсяпрограммный интерфейс. Данная работа посвящена основным особенностямсистемы UNIX. ОБЗОР ОСОБЕННОСТЕЙ СИСТЕМЫ За время, прошедшее с момента ее появления в 1969 году, системаUNIXстала довольно популярной и получила распространение на машинах сразличноймощностью обработки, от микропроцессоров до больших ЭВМ, обеспечивая нанихобщие условия выполнения программ. Система делится на две части. Однучастьсоставляют программы и сервисные функции, то, что делает операционнуюсредуUNIX такой популярной; эта часть легко доступна пользователям, онавключаеттакие программы, как командный процессор, обмен сообщениями, пакеты обработ-ки текстов и системы обработки исходных текстов программ. Другая часть вклю-чает в себя собственно операционную систему, поддерживающую эти программыифункции. В этой работе дается детальное описание собственно операционнойсис-темы. Основное внимание концентрируется на описании системы UNIX версииV,распространением которой занимается корпорация AT&T. Приводятся основныеинформационные структуры и алгоритмы, используемые в операционной системе ив конечном итоге создающие условия для функционирования стандартногопользовательского интерфейса. 1. ИСТОРИЯ В 1965 году фирма Bell Telephone Laboratories, объединив свои усилияскомпанией General Electric и проектом MAC Массачусетскоготехнологическогоинститута, приступили к разработке новой операционной системы,получившейназвание Multics [Organick 72]. Перед системой Multics были поставлены зада-чи - обеспечить одновременный доступ к ресурсам ЭВМ большогоколичествапользователей, обеспечить достаточную скорость вычислений и хранениеданныхи дать возможность пользователям в случае необходимости совместно использо-вать данные. Многие разработчики, впоследствии принявшие участие всозданииранних редакций системы UNIX, участвовали в работе над системой Multicsвфирме Bell Laboratories. Хотя первая версия системы Multics и былазапущенав 1969 году на ЭВМ GE 645, она не обеспечивала выполнение главных вычисли-тельных задач, для решения которых она предназначалась, и не было дажеясно,когда цели разработки будут достигнуты. Поэтому фирма BellLaboratoriesпрекратила свое участие в проекте. По окончании работы над проектом Multics сотрудникиИсследовательскогоцентра по информатике фирмы Bell Laboratories остались без "достаточно инте-рактивного вычислительного средства" [Ritchie 84a]. Пытаясь усовершенство-вать среду программирования, Кен Томпсон, Дэннис Ричи и другие набросалинабумаге проект файловой системы, получивший позднее дальнейшее развитиевранней версии файловой системы UNIX. Томпсоном были написаны программы,имитирующие поведение предложенной файловой системы в режиме подкачкиданных по запросу, им было даже создано простейшее ядро операционнойсистемы для ЭВМ GE 645. В то же время он написал на Фортранеигровую программу "Space Travel" ("Космическое путешествие") для системыGECOS (Honeywell 635), но программа не смогла удовлетворитьпользователей, поскольку управлять "косми-ческим кораблем" оказалось сложно, кроме того, при загрузке программазанимала много места. Позже Томпсон обнаружил малоиспользуемый компьютерPDP-7,оснащенный хорошим графическим дисплеем и имеющий дешевое машинноевремя.Создавая программу "Космическое путешествие" для PDP-7, Томпсон получил воз-можность изучить машину, однако условия разработки программ потребовали ис-пользования кросс-ассемблера для трансляции программы на машине ссистемойGECOS и использования перфоленты для ввода в PDP-7. Для того, чтобыулучшитьусловия разработки, Томпсон и Ричи выполнили на PDP-7 свой проектсистемы,включивший первую версию файловой системы UNIX, подсистему управленияпроцессами и небольшой набор утилит. В конце концов, новая система больше ненуждалась в поддержке со стороны системы GECOS в качестве операционнойсредыразработки и могла поддерживать себя сама. Новая система получиланазваниеUNIX, по сходству с Multics его придумал еще один сотрудникИсследовательского центра по информатике Брайан Керниган. Несмотря на то, что эта ранняя версия системы UNIX уже была многообещаю-щей, она не могла реализовать свой потенциал до тех пор, пока неполучилаприменение в реальном проекте. Так, для того, чтобы обеспечить функциониро-вание системы обработки текстов для патентного отдела фирмыBellLaboratories, в 1971 году система UNIX была перенесена на ЭВМ PDP-11. Систе-ма отличалась небольшим объемом: 16 Кбайт для системы, 8 Кбайт дляпрограммпользователей, обслуживала диск объемом 512 Кбайт и отводила под каждыйфайлне более 64 Кбайт. После своего первого успеха Томпсон собрался былонаписать для новой системы транслятор с Фортрана, но вместо этого занялсяязыком Би (B), предшественником которого явился язык BCPL [Richards 69]. Бибыл интер-претируемым языком со всеми недостатками, присущими подобнымязыкам, поэ-тому Ричи переделал его в новую разновидность, получившую название Си (C)иразрешающую генерировать машинный код, объявлять типы данных иопределятьструктуру данных. В 1973 году система была написана заново на Си, этобылшаг, неслыханный для того времени, но имевший огромный резонанс среди сто-ронних пользователей. Количество машин фирмы Bell Laboratories, накоторыхбыла инсталлирована система, возросло до 25, в результате чего быласозданагруппа по системному сопровождению UNIX внутри фирмы. В то время корпорация AT&T не могла заниматься продажейкомпьютерныхпродуктов в связи с соответствующим соглашением, подписанным ею с федераль-ным правительством в 1956 году, и распространяла систему UNIX среди универ-ситетов, которым она была нужна в учебных целях. Следуя буквесоглашения,корпорация AT&T не рекламировала, не продавала и не сопровождаласистему.Несмотря на это, популярность системы устойчиво росла. В 1974 году ТомпсониРичи опубликовали статью, описывающую систему UNIX, в журналеCommunications of the ACM [Thompson 74], что дало еще один импульс краспространению системы. К 1977 году количество машин, на которыхфункционировала система UNIX, увеличилось до 500, при чем 125 из нихработали в университетах. Система UNIX завоевала популярность средителефонных компаний, поскольку обеспечивала хорошие условия для разработкипрограмм, обслуживала работу в сети в режиме диалога и работу в реальноммасштабе времени (с помощью системы MERT [Lycklama 78a]). Помимоуниверситетов, лицензии на систему UNIX были переданы коммерческиморганизациям. В 1977 году корпорация Interactive Systems стала первойорганизацией, получившей права на перепродажу системы UNIX с надбавкой8к цене за дополнительные услуги ((), которые заключались в адаптациисистемы к функционированию в автоматизированных системах управленияучрежденческой деятельностью. 1977 год также был отмечен "переносом"системы UNIX на машину, отличную от PDP (благодаря чему стал возможензапуск системы на другой машине без изменений или с небольшимиизменениями), а именно на Interdata 8/32. С ростом популярности микропроцессоров другие компании сталипереноситьсистему UNIX на новые машины, однако ее простота и ясность побудилимногихразработчиков к самостоятельному развитию системы, в результате чегобылосоздано несколько вариантов базисной системы. За период между 1977 и1982годом фирма Bell Laboratories объединила несколько вариантов,разработанныхв корпорации AT&T, в один, получивший коммерческое название UNIX версияIII.В дальнейшем фирма Bell Laboratories добавила в версию III нескольконовыхособенностей, назвав новый продукт UNIX версия V (((), и эта версиясталаофициально распространяться корпорацией AT&T с января 1983 года. В тожевремя сотрудники Калифорнийского университета в Бэркли разработаливариантсистемы UNIX, получивший название BSD 4.3 для машин серии VAX иотличающийся некоторыми новыми, интересными особенностями. К началу 1984 года система UNIX была уже инсталлированаприблизительнона 100000 машин по всему миру, при чем на машинах с широким диапазоном вы-числительных возможностей - от микропроцессоров до больших ЭВМ - иразныхизготовителей. Ни о какой другой операционной системе нельзя было бысказатьтого же. Популярность и успех системы UNIX объяснялись несколькими причина-ми: . Система написана на языке высокого уровня, благодаря чему ее легко читать, понимать, изменять и переносить на другие машины. По оценкам, сделанным Ричи, первый вариант системы на Си имел на 20-40 % больший объем и работал медленнее по сравнению с вариантом на ассемблере, однако преимущества ис- пользования языка высокого уровня намного перевешивают недостатки [Ritchie 78b], стр. 1965). . Наличие довольно простого пользовательского интерфейса, в котором имеется возможность предоставлять все необходимые пользователю услуги. . Наличие элементарных средств, позволяющих создавать сложные программы из более простых. . Наличие иерархической файловой системы, легкой в сопровождении и эффектив- ной в работе. . Обеспечение согласования форматов в файлах, работа с последовательным потоком байтов, благодаря чему облегчается чтение прикладных программ. . Наличие простого, последовательного интерфейса с периферийными устройства- ми. . Система является многопользовательской, многозадачной; каждый пользователь может одновременно выполнять несколько процессов. . Архитектура машины скрыта от пользователя, благодаря этому облегчен про- цесс написания программ, работающих на различных конфигурациях аппаратных средств. Простота и последовательность вообще отличают систему UNIX иобъясняютбольшинство из вышеприведенных доводов в ее пользу. Хотя операционная система и большинство команд написаны на Си,системаUNIX поддерживает ряд других языков, таких как Фортран, Бейсик,Паскаль,Ада, Кобол, Лисп и Пролог. Система UNIX может поддерживать любой язык прог-раммирования, для которого имеется компилятор или интерпретатор, и обеспечи-вать системный интерфейс, устанавливающий соответствие между пользователь-скими запросами к операционной системе и набором запросов, принятых в UNIX. 2. СТРУКТУРА СИСТЕМЫ На Рисунке 1.1 изображена архитектура верхнего уровня системы UNIX. Тех-нические средства, показанные в центре диаграммы, выполняют функции, обеспе-чивающие функционирование операционной системы. Операционная системавзаимодействует с аппаратурой непосредственно((((), обеспечиваяобслуживание программ и их независимость от деталей аппаратнойконфигурации. Если представить систему состоящей из пластов, в нейможновыделить системное ядро, изолированное от пользовательских [pic] Рисунок 1.1. Архитектура системы UNIXпрограмм. Поскольку программы не зависят от аппаратуры, их легкопереноситьиз одной системы UNIX в другую, функционирующую на другом комплексе техни-ческих средств, если только в этих программах не подразумевается работасконкретным оборудованием. Например, программы, расчитанные наопределенныйразмер машинного слова, гораздо труднее переводить на другие машины по срав-нению с программами, не требующими подобных установлений. Программы, подобные командному процессору shell и редакторам (ed и vi)ипоказанные на внешнем по отношению к ядру слое, взаимодействуют с ядромприпомощи хорошо определенного набора обращений к операционной системе.Обращения к операционной системе понуждают ядро к выполнению различныхопераций, которых требует вызывающая программа, и обеспечивают обмен данны-ми между ядром и программой. Некоторые из программ, приведенных на рисунке,в стандартных конфигурациях системы известны как команды, однако на одномуровне с ними могут располагаться и доступные пользователю программы, такие как программа a.out, стандартное имя для исполняемого файла, созданногокомпилятором с языка Си. Другие прикладные программы располагаются вышеуказанных программ, на верхнем уровне, как это показано на рисунке.Например, стандартный компилятор с языка Си, cc, располагается на самомвнешнем слое: он вызывает препроцессор для Си, ассемблер и загрузчик(компоновщик), т.е. отдельные программы предыдущего уровня. Хотя нарисунке приведена двухуровневая иерархия прикладных программ, пользовательможет расширить иерархическую структуру на столько уровней, скольконеобходимо. В самом деле, стиль программирования, принятый в системе UNIX,допускает разработку комбинации программ,выполняющих одну и ту же, общуюзадачу. Многие прикладные подсистемы и программы, составляющие верхнийуровеньсистемы, такие как командный процессор shell, редакторы, SCCS (система обра-2ботки исходных текстов программ) и пакеты программ подготовкидокументации,постепенно становятся синонимом понятия "система UNIX". Однако все они поль-зуются услугами программ нижних уровней и в конечном счете ядра спомощьюнабора обращений к операционной системе. В версии V принято 64 типа обраще-ний к операционной системе, из которых немногим меньше половиныиспользуютсячасто. Они имеют несложные параметры, что облегчает их использование, пре-доставляя при этом большие возможности пользователю. Набор обращений к опе-рационной системе вместе с реализующими их внутренними алгоритмами составля-ют "тело" ядра, в связи с чем рассмотрение операционной системы UNIXсводится к подробному изучению и анализу обращений к системе и ихвзаимодействия между собой. Короче говоря, ядро реализует функции, накоторых основывается выполне-ние всех прикладных программ в системе UNIX, иим же определяются эти функции. Использование терминов "системаUNIX","ядро" или "система", имеется ввиду ядро операционной системы UNIX,что и должно вытекать из контекста. 3. ОБЗОР С ТОЧКИ ЗРЕНИЯ ПОЛЬЗОВАТЕЛЯ 3.1 Файловая система Файловая система UNIX характеризуется: . иерархической структурой, . согласованной обработкой массивов данных, . возможностью создания и удаления файлов, . динамическим расширением файлов, . защитой информации в файлах, . трактовкой периферийных устройств (таких как терминалы и ленточные ус- тройства) как файлов. Файловая система организована в виде дерева с одной исходнойвершиной,которая называется корнем (записывается: "/"); каждая вершина вдревовиднойструктуре файловой системы, кроме листьев, является каталогом файлов, а фай- [pic] Рисунок 1.2. Пример древовидной структуры файловой системылы, соответствующие дочерним вершинам, являются либо каталогами, либо обыч-ными файлами, либо файлами устройств. Имени файла предшествует указаниепутипоиска, который описывает место расположения файла в иерархическойструктурефайловой системы. Имя пути поиска состоит из компонент, разделенныхмеждусобой наклонной чертой (/); каждая компонента представляет собой наборсимволов, составляющих имя вершины (файла), которое является уникальнымдля каталога (предыдущей компоненты), в котором оно содержится. Полное имяпути поиска начинается с указания наклонной черты и идентифицируетфайл (вершину), поиск которого ведется от корневой вершины деревафайловой системы с обходом тех ветвей дерева файлов, которые соответствуютименам отдельных компонент. Так, пути "/etc/passwd", "/bin/who" и"/usr/src/cmd/who.c" указывают на файлы, являющиеся вершинами дерева,изображенного на Рисунке 1.2, а пути "/bin/passwd" и "/usr/ src/date.c"содержат неверный маршрут. Имя пути поиска необязательно должно начинатьсяс корня, в нем следует указывать маршрут относительно текущего длявыполняемого процесса каталога, при этом предыдущие символы "наклоннаячерта" в имени пути опускаются. Так, например, если мы находимся вкаталоге "/dev", то путь "tty01" указывает файл, полное имя пути поиска длякоторого "/dev/tty01". Программы, выполняемые под управлением системы UNIX, не содержатникакойинформации относительно внутреннего формата, в котором ядро хранитфайлыданных, данные в программах представляются как бесформатный потокбайтов.Программы могут интерпретировать поток байтов по своему желанию, приэтомлюбая интерпретация никак не будет связана с фактическим способомхраненияданных в операционной системе. Так, синтаксические правила, определяющие за-дание метода доступа к данным в файле, устанавливаются системой иявляютсяедиными для всех программ, однако семантика данных определяетсяконкретнойпрограммой. Например, программа форматирования текста troff ищет вконцекаждой строки текста символы перехода на новую строку, а программаучетасистемных ресурсов acctcom работает с записями фиксированной длины.Обепрограммы пользуются одними и теми же системными средствами для осуществле-ния доступа к данным в файле как к потоку байтов, и внутри себяпреобразуютэтот поток по соответствующему формату. Если любая из программобнаружит,что формат данных неверен, она принимает соответствующие меры. Каталоги похожи на обычные файлы в одном отношении; системапредставляетинформацию в каталоге набором байтов, но эта информация включает в себя име-на файлов в каталоге в объявленном формате для того, чтобы операционная сис-тема и программы, такие как ls (выводит список имен и атрибутовфайлов),могли их обнаружить. Права доступа к файлу регулируются установкой специальных битов разреше-ния доступа, связанных с файлом. Устанавливая биты разрешения доступа,можнонезависимо управлять выдачей разрешений на чтение, запись и выполнениедлятрех категорий пользователей: владельца файла, группового пользователяипрочих. Пользователи могут создавать файлы, если разрешен доступ ккаталогу.Вновь созданные файлы становятся листьями в древовидной структурефайловойсистемы. Для пользователя система UNIX трактует устройства так, как если быонибыли файлами. Устройства, для которых назначены специальные файлыустройств,становятся вершинами в структуре файловой системы. Обращение программ к уст-ройствам имеет тот же самый синтаксис, что и обращение к обычным файлам; се-мантика операций чтения и записи по отношению к устройствам в большой степе-ни совпадает с семантикой операций чтения и записи обычных файлов.Способзащиты устройств совпадает со способом защиты обычных файлов: путем соответ-ствующей установки битов разрешения доступа к ним (файлам). Посколькуименаустройств выглядят так же, как и имена обычных файлов, и поскольку надустройствами и над обычными файлами выполняются одни и те же операции,большинству программ нет необходимости различать внутри себя типыобрабатываемых файлов. Например, рассмотрим программу на языке Си (Рисунок 1.3), в которой соз-дается новая копия существующего файла. Предположим, что исполняемаяверсияпрограммы имеет наименование copy. Для запуска программы пользовательвводитс терминала: copy oldfile newfileгде oldfile - имя существующего файла, а newfile - имя создаваемогофайла.Система выполняет процедуру main, присваивая аргументу argc значениеколичест-ва параметров в списке argv, а каждому элементу массива argvзначение парамет-ра, сообщенного пользователем. В приведенном примере argcимеет значение 3, элемент argv[0] содержит строку символов "copy" (имяпрограммы условно являет-ся нулевым параметром), argv[1] - строкусимволов "oldfile", а argv[2] - строку символов "newfile". Затем программапроверяет, правильное ли количество параметров было указано при еезапуске. Если это так, запускается операция open (открыть) для файлаoldfile с параметром "read-only" (только для чтения), в случае успешноговыполнения которой запускается операция creat (открыть) для файлаnewfile. Режим доступа к вновь созданному файлу описывается числом 0666 (ввосьмиричном коде), что означает разрешение доступа к файлу для чтения изаписи для всех пользователей. Все обращения к операционной системе вслучае неудачи возвращают код -1; если же неудачно завершаются операцииopen и creat, программа выдает сообщение и запускает операцию exit(выйти) с возвращением кода состояния, равного 1, завершая свою работу иуказывая на возникновение ошибки. Операции open и creat возвращают целое значение, являющеесядескрипторомфайла и используемое программой в последующих ссылках на файлы. Послеэтогопрограмма вызывает подпрограмму copy, выполняющую в цикле операцию read (чи-тать), по которой производится чтение в буфер порции символов изсуществующего файла, и операцию write (писать) для записи информации вновый файл.Операция read каждый раз возвращает количество прочитанныхбайтов (0 – если достигнут конец файла). Цикл завершается, если достигнутконец файла или если произошла ошибка при выполнении операции read(отсутствует контроль возникновения ошибок при выполнении операцииwrite). Затем управление из подпрограммы copy возвращается в основнуюпрограмму и запускается операция exit с кодом состояния 0 в качествепараметра, что указывает на успешное завершение выполнения программы. Программа копирует любые файлы, указанные при ее вызове в качествеаргумен-тов, при условии, что разрешено открытие существующего файла исоздание нового файла. Файл может включать в себя как текст, который можетбыть выведен на печатающее устройство, например, исходный текст программы,так и символы, не выводимые на печать, даже саму программу. Таким образом,оба вызова: copy copy.c newcopy.c copy copy newcopyявляются допустимыми. Существующий файл также может быть каталогом.Например, по вызову: copy . dircontentsкопируется содержимое текущего каталога, обозначенного символом ".", в обыч-ный файл "dircontents"; информация в новом файле совпадает, вплоть до каждо-го байта, с содержимым каталога, только этот файл обычного типа (для созда-ния нового каталога предназначена операция mknod). Наконец, любой изфайловможет быть файлом устройства. Например, программа, вызванная следующим обра-зом: #include char buffer[2048]; int version = 1; main(argc,argv) int argc; char *argv[]; int fdold,fdnew; if (argc != 3) printf("need 2 arguments for copy program); exit(1); fdold = open(argv[1],O_RDONLY); /* открыть исходный файл толькодля чтения */ if (fdold == -1) printf("cannot open file %s",argv[1]); exit(1); fdnew = creat(argv[2],0666); /* создать новый файл сразрешением чтения и записи для всехпользователей */ if (fdnew == -1) printf("cannot create file %s",argv[2]); exit(1); copy(fdold,fdnew); exit(0); copy(old,new) int old,new; int count; while ((count = read(old,buffer,sizeof(buffer))) > 0) write(new,buffer,count); Рисунок 1.3. Программа копирования файла copy /dev/tty terminalreadчитает символы, вводимые с терминала (файл /dev/tty соответствуеттерминалупользователя), и копирует их в файл terminalread, завершая работу тольковтом случае, если пользователь нажмет. Похожая форма запускапрограммы: copy /dev/tty /dev/ttyвызывает чтение символов с терминала и их копирование обратно на терминал. 3.2 Среда выполнения процессов Программой называется исполняемый файл, а процессом называется последо-вательность операций программы или часть программы при ее выполнении. В сис-теме UNIX может одновременно выполняться множество процессов (эту особен-ность иногда называют мультипрограммированием или многозадачнымрежимом),при чем их число логически не ограничивается, и множество частейпрограммы(такой как copy) может одновременно находиться в системе. Различныесистемные операции позволяют процессам порождать новые процессы, завершаютпроцессы, синхронизируют выполнение этапов процесса и управляют реакциейна наступле-ние различных событий. Благодаря различным обращениям коперационнойсистеме, процессы выполняются независимо друг от друга. Например, процесс, выполняющийся в программе, приведенной наРисунке1.4, запускает операцию fork, чтобы породить новый процесс. Новыйпроцесс,именуемый порожденным процессом, получает значение кода завершенияоперацииfork, равное 0, и активизирует операцию execl, которая выполняетпрограммуcopy (Рисунок 1.3). Операция execl загружает файл "copy", который предполо-жительно находится в текущем каталоге, в адресное пространствопорожденногопроцесса и запускает программу с параметрами, полученными от пользователя.Вслучае успешного выполнения операции execl управление в вызвавший еепроцессне возвращается, поскольку процесс выполняется в новом адресномпространстве. Тем временем, процесс, запустивший операцию fork(родительский процесс), получает ненулевое значение кода завершенияоперации, вызывает операцию wait, которая приостанавливает его выполнениедо тех пор, пока не закончится выполнение программы copy, и завершается(каждая программа имеет выход в конце главной процедуры, после которойрасполагаются программы стандартных библиотек Си, подключаемые впроцессе компиляции). Например, если исполняемая программа называется run,пользователь запускает ее следующим образом: main(argc,argv) int argc; char *argv[]; /* предусмотрено 2 аргумента: исходный файл и новый файл */ if (fork() == 0) execl("copy","copy",argv[1],argv[2],0); wait((int *)0) printf("copy done"); Рисунок 1.4. Программа порождения нового процесса, выполняющего копиро- вание файлов run oldfile newfileПроцесс выполняет копирование файла с именем "oldfile" в файл сименем"newfile" и выводит сообщение. Хотя данная программа мало что добавилакпрограмме "copy", в ней появились четыре основных обращения коперационнойсистеме, управляющие выполнением процессов: fork, exec, wait и exit. Вообще использование обращений к операционной системе даетвозможностьпользователю создавать программы, выполняющие сложные действия, и как следс-твие, ядро операционной системы UNIX не включает в себя многие функции, яв-ляющиеся частью "ядра" в других системах. Такие функции, и среди них компи-ляторы и редакторы, в системе UNIX являются программамипользовательскогоуровня. Наиболее характерным примером подобной программы может служить ко-мандный процессор shell, с которым обычно взаимодействуют пользователипослевхода в систему. Shell интерпретирует первое слово командной строки какимякоманды: во многих командах, в том числе и в командах fork (породитьновыйпроцесс) и exec (выполнить порожденный процесс), сама командаассоциируетсяс ее именем, все остальные слова в командной строке трактуются какпараметрыкоманды. Shell обрабатывает команды трех типов. Во-первых, в качестве именикоманды может быть указано имя исполняемого файла в объектном коде,полученного в результате компиляции исходного текста программы (например,программына языке Си). Во-вторых, именем команды может быть имя командного файла, со-держащего набор командных строк, обрабатываемых shell'ом. Наконец,командаможет быть внутренней командой языка shell (в отличие от исполняемогофайла). Наличие внутренних команд делает shell языком программирования вдополнение к функциям командного процессора; командный язык shell включаеткоманды организации циклов (for-in-do-done и while-do-done), командывыполнения по условиям (if-then-else-fi), оператор выбора, командуизменения текущего для процесса каталога (cd) и некоторые другие.Синтаксис shell'а допускает сравнение с образцом и обработку параметров.Пользователям, запускающим команды, нет необходимости знать, какого типаэти команды. Командный процессор shell ищет имена команд в указанном наборе катало-гов, который можно изменить по желанию пользователя, вызвав shell.Shellобычно исполняет команду синхронно, с ожиданием завершения выполнения коман-ды прежде, чем считать следующую командную строку. Тем не менее,допускаетсяи асинхронное исполнение, когда очередная командная строка считывается и ис-полняется, не дожидаясь завершения выполнения предыдущей команды. О коман-дах, выполняемых асинхронно, говорят, что они выполняются на фоне других ко-манд. Например, ввод команды whoвызывает выполнение системой программы, хранящейся в файле /bin/who((((() и осуществляющей вывод списка пользователей, которые в настоящиймомент работают с системой. Пока команда who выполняется, командныйпроцессор shell ожидает завершения ее выполнения и только затемзапрашивает у пользователя следующую команду. Если же ввести команду who &система выполнит программу who на фоне и shell готов немедленно принять сле-дующую команду. В среду выполнения каждого процесса в системе UNIX включаетсятекущийкаталог. Текущий для процесса каталог является начальным каталогом, имя ко-торого присоединяется ко всем именам путей поиска, которые не начинаютсяснаклонной черты. Пользователь может запустить внутреннюю команду shell'аcd(изменить каталог) для перемещения по дереву файловой системы и длясменытекущего каталога. Командная строка cd /usr/src/utsделает текущим каталог "/usr/src/uts". Командная строка cd ../..делает текущим каталог, который на две вершины "ближе" к корню(корневомукаталогу): параметр ".." относится к каталогу, являющемуся родительскимдлятекущего. Поскольку shell является пользовательской программой и не входит всостав ядра операционной системы, его легко модифицировать и помещать вконкретные условия эксплуатации. Например, вместо командного процессораБаурна(называемого так по имени его создателя, Стива Баурна), являющегосячастьюверсии V стандартной системы, можно использовать процессор команд Си, обес-печивающий работу механизма ведения истории изменений и позволяющий збегатьповторного ввода только что использованных команд. В некоторых случаяхприжелании можно воспользоваться командным процессором shell сограниченнымивозможностями, являющимся предыдущей версией обычного shell'а. Системаможетработать с несколькими командными процессорами одновременно.Пользователиимеют возможность запускать одновременно множество процессов, процессы жевсвою очередь могут динамически порождать новые процессы исинхронизироватьих выполнение. Все эти возможности обеспечиваются благодаря наличиюмощныхпрограммных и аппаратных средств, составляющих среду выполненияпроцессов.Хотя привлекательность shell'а в наибольшей степени определяется еговозможнос-тями как языка программирования и его возможностями в обработкеаргументов, в данном разделе основное внимание концентрируется на средевыполнения процес-сов, управление которой в системе возложено накомандный процессор Shell. 3.3 Элементы конструкционных блоков Как уже говорилось ранее, концепция разработки системы UNIXзаключаласьв построении операционной системы из элементов, которые позволили бы пользо-вателю создавать небольшие программные модули, выступающие в качестве конст-рукционных блоков при создании более сложных программ. Одним из таких эле-ментов, с которым часто сталкиваются пользователи при работе скоманднымпроцессором shell, является возможность переназначения ввода-вывода.Говоряусловно, процессы имеют доступ к трем файлам: они читают из файла стандарт-ного ввода, записывают в файл стандартного вывода и выводят сообщенияобошибках в стандартный файл ошибок. Процессы, запускаемые с терминала,обычноиспользуют терминал вместо всех этих трех файлов, однако каждый файл незави-симо от других может быть "переназначен". Например, команда lsвыводит список всех файлов текущего каталога на устройство (в файл) стандар-тного вывода, а команда ls > outputпереназначает выводной поток со стандартного вывода в файл "output" в теку-щем каталоге, используя вышеупомянутый системный вызов creat. Подобнымжеобразом, команда mail mjb < letterоткрывает (с помощью системного вызова open) файл "letter" в качествефайластандартного ввода и пересылает его содержимое пользователю с именем"mjb".Процессы могут переназначать одновременно и ввод, и вывод, как, например,вкомандной строке: nroff -mm < doc1 > doc1.out 2> errorsгде программа форматирования nroff читает вводной файл doc1, в качестве фай-ла стандартного вывода задает файл doc1.out и выводит сообщения об ошибкахвфайл errors ("2>" означает переназначение вывода, предназначавшегосядля файла с дескриптором 2, который соответствует стандартному файлуошибок).Програм-мы ls, mail и nroff не знают, какие файлы выбраны вкачестве файлов стандартного ввода, стандартного вывода и записисообщений об ошибках; командный процессор shell сам распознает символы "<",">" и "2>" и назначает в соответствии с их указанием файлы для стандартноговвода, стандартного вывода и записи сообщений об ошибках непосредственноперед запуском процессов. Вторым конструкционным элементом является канал, механизм, обеспечиваю-щий информационный обмен между процессами, выполнение которых связано соперациями чтения и записи. Процессы могут переназначать выводнойпоток состандартного вывода на канал для чтения с него другими процессами, переназ-начившими на канал свой стандартный ввод. Данные, посылаемые в каналпервымипроцессами, являются входными для вторых процессов. Вторые процессы такжемогут переназначить свой выводной поток и так далее, в зависимости отпожеланий программиста. И снова, так же как и в вышеуказанном случае,процессам нет необходимости знать, какого типа файл используется вкачестве файластандартного вывода; их выполнение не зависит от того, будет ли файлом стан-дартного вывода обычный файл, канал или устройство. В процессепостроениябольших и сложных программ из конструкционных элементов меньшегоразмерапрограммисты часто используют каналы и переназначение ввода-вывода присборке и соединении отдельных частей. И действительно, такой стильпрограммирования находит поддержку в системе, благодаря чему новыепрограммы могут работать вместе с существующими программами. Например, программа grep производит поиск контекста в наборе файлов (яв-ляющихся параметрами программы) по следующему образцу: grep main a.c b.c c.cгде "main" - подстрока, поиск которой производится в файлах a.c, b.c и c.cсвыдачей в файл стандартного вывода тех строк, в которых она содержится. Со-держимое выводного файла может быть следующим: a.c: main(argc,argv) c.c: /* here is the main loop in the program */ c.c: main()Программа wc с необязательным параметром -l подсчитывает число строк вфайлестандартного ввода. Командная строка grep main a.c b.c c.c | wc -lвызовет подсчет числа строк в указанных файлах, где будет обнаружена подст-рока "main"; выводной поток команды grep поступит непосредственно навходкоманды wc. Для предыдущего примера результат будет такой: 3 Использование каналов зачастую делает ненужным создание временныхфайлов. 4. ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ На Рисунке 1.1 уровень ядра операционной системы изображеннепосредственно под уровнем прикладных программ пользователя. Выполняяразличные элементар-ные операции по запросам пользовательских процессов,ядро обеспечиваетфункционирование пользовательского интерфейса, описанного выше. Среди функ-ций ядра можно отметить: . Управление выполнением процессов посредством их создания, завершения или приостановки и организации взаимодействия между ними. . Планирование очередности предоставления выполняющимся процессам времени центрального процессора (диспетчеризация). Процессы работают с центральным процессором в режиме разделения времени: центральный процес- сор выполняет процесс, по завершении отсчитываемого ядром кванта времени процесс приостанавливается и ядро активизирует выполнение другого процесса. Позднее ядро запускает приостановленный процесс. . Выделение выполняемому процессу оперативной памяти. Ядро операционной системы дает процессам возможность совместно использовать участки адресного пространства на определенных условиях, защищая при этом адресное пространство, выделенное процессу, от вмешательства извне. Если системе требуется свободная память, ядро освобождает память, временно выгружая процесс на внешние запоминающие устройства, которые называют устройствами выгрузки. Если ядро выгружает процессы на устройства выгрузки целиком, такая реализация системы UNIX называется системой со свопингом (подкачкой); если же на устройство выгрузки выводятся страницы памяти, такая система называется системой с замещением страниц. . Выделение внешней памяти с целью обеспечения эффективного хранения информации и выборка данных пользователя. Именно в процессе реализации этой функции создается файловая система. Ядро выделяет внешнюю память под пользовательские файлы, мобилизует неиспользуемую память, структурирует файловую систему в форме, доступной для понимания, и защищает пользовательские файлы от несанкционированного доступа. . Управление доступом процессов к периферийным устройствам, таким как терми- налы, ленточные устройства, дисководы и сетевое оборудование. Выполнение ядром своих функций довольно очевидно. Например, оноузнает,что данный файл является обычным файлом или устройством, но скрываетэторазличие от пользовательских процессов. Так же оно, форматируяинформациюфайла для внутреннего хранения, защищает внутренний формат от пользователь-ских процессов, возвращая им неотформатированный поток байтов. Наконец,ядрореализует ряд необходимых функций по обеспечению выполнения процессов поль-зовательского уровня, за исключением функций, которые могут бытьреализованына самом пользовательском уровне. Например, ядро выполняет действия, необхо-димые shell'у как интерпретатору команд: оно позволяет процессору shellчитать вводимые с терминала данные, динамически порождать процессы,синхронизиро-вать выполнение процессов, открывать каналы и переадресовывать ввод-вывод. Пользователи могут разрабатывать свои версии командногопроцессора shell с тем, чтобы привести рабочую среду в соответствие сосвоими требованиями, не затрагивая других пользователей. Такие программыпользуются теми же услугами ядра, что и стандартный процессор shell. 5. ПРЕДПОЛАГАЕМАЯ АППАРАТНАЯ СРЕДА Выполнение пользовательских процессов в системе UNIX осуществляетсянадвух уровнях: уровне пользователя и уровне ядра. Когда процесспроизводитобращение к операционной системе, режим выполнения процесса переключаетсясрежима задачи (пользовательского) на режим ядра: операционная системапытается обслужить запрос пользователя, возвращая код ошибки в случаенеудачногозавершения операции. Даже если пользователь не нуждается в каких-либоопределенных услугах операционной системы и не обращается к ней сзапросами,система еще выполняет учетные операции, связанные с пользовательским процес-сом, обрабатывает прерывания, планирует процессы, управляетраспределениемпамяти и т.д. Большинство вычислительных систем разнообразной архитектуры(исоответствующие им операционные системы) поддерживают большее числоуровней, чем указано здесь, однако уже двух режимов, режима задачи ирежима ядра, вполне достаточно для системы UNIX. Основные различия между этими двумя режимами: . В режиме задачи процессы имеют доступ только к своим собственным инструк- циям и данным, но не к инструкциям и данным ядра (либо других процессов). Однако в режиме ядра процессам уже доступны адресные пространства ядра и пользователей. Например, виртуальное адресное пространство процесса может быть поделено на адреса, доступные только в режиме ядра, и на адреса, доступные в любом режиме. Некоторые машинные команды являются привилегированными и вызываютвозникновение ошибок при попытке их использования в режиме задачи.Например, в машинном языке может быть команда, управляющая регистромсостоянияпроцессора; процессам, выполняющимся в режиме задачи, она недоступна. Процессы а B C D|Режим ядра |Я | | |Я ||Режим задачи | |З |З | | Рисунок 1.5. Процессы и режимы их выполненияПроще говоря, любое взаимодействие с аппаратурой описывается в терминахрежима ядра и режима задачи и протекает одинаково для всехпользовательскихпрограмм, выполняющихся в этих режимах. Операционная система хранитвнутренние записи о каждом процессе, выполняющемся в системе. На Рисунке1.5 показано это разделение: ядро делит процессы A, B, C и D,расположенные вдольгоризонтальной оси, аппаратные средства вводят различия между режимами вы-полнения, расположенными по вертикали. Несмотря на то, что система функционирует в одном из двух режимов,ядродействует от имени пользовательского процесса. Ядро не является какой-тоособой совокупностью процессов, выполняющихся параллельно с пользовательски-ми, оно само выступает составной частью любого пользовательскогопроцесса.Сделанный вывод будет скорее относиться к "ядру", распределяющемуресурсы,или к "ядру", производящему различные операции, и это будет означать,чтопроцесс, выполняемый в режиме ядра, распределяет ресурсы и производит соот-ветствующие операции. Например, командный процессор shell считываетвводнойпоток с терминала с помощью запроса к операционной системе. Ядро операцион-ной системы, выступая от имени процессора shell, управляетфункционированиемтерминала и передает вводимые символы процессору shell. Shell переходитврежим задачи, анализирует поток символов, введенных пользователем ивыполняет заданную последовательность действий, которые могут потребоватьвыполнения и других системных операций. 5.1 Прерывания и особые ситуации Система UNIX позволяет таким устройства, как внешние устройстваввода-вывода и системные часы, асинхронно прерывать работу центральногопроцес-сора. По получении сигнала прерывания ядро операционной системысохраняетсвой текущий контекст (застывший образ выполняемого процесса),устанавливаетпричину прерывания и обрабатывает прерывание. После того, как прерывание бу-дет обработано ядром, прерванный контекст восстановится и работапродолжитсятак, как будто ничего не случилось. Устройствам обычно приписываются приори-теты в соответствии с очередностью обработки прерываний. В процессеобработки прерываний ядро учитывает их приоритеты и блокирует обслуживаниепрерывания с низким приоритетом на время обработки прерывания с болеевысоким приорите-том. Особые ситуации связаны с возникновением незапланированных событий, выз-ванных процессом, таких как недопустимая адресация, задание привилегирован-ных команд, деление на ноль и т.д. Они отличаются от прерываний, которые вы-зываются событиями, внешними по отношению к процессу. Особые ситуациивозникают прямо "посредине" выполнения команды, и система, обработав особуюситуацию, пытается перезапустить команду; считается, что прерываниявозникаютмежду выполнением двух команд, при этом система после обработкипрерыванияпродолжает выполнение процесса уже начиная со следующей команды. Для обра-ботки прерываний и особых ситуаций в системе UNIX используется один и тотжемеханизм. 5.2 Уровни прерывания процессора Ядро иногда обязано предупреждать возникновение прерываний во время кри-тических действий, могущих в случае прерывания запортить информацию. Напри-мер, во время обработки списка с указателями возникновение прерыванияотдиска для ядра нежелательно, т.к. при обработке прерывания можнозапортитьуказатели, что можно увидеть на примере в следующей главе. Обычноимеетсяряд привилегированных команд, устанавливающих уровень прерыванияпроцессорав слове состояния процессора. Установка уровня прерывания наопределенноезначение отсекает прерывания этого и более низких уровней, разрешаяобработку только прерываний с более высоким приоритетом. На Рисунке 1.6показанапоследовательность уровней прерывания. Если ядро игнорирует прерыванияотдиска, в этом случае игнорируются и все остальные прерывания, кромепрерываний от часов и машинных сбоев. [pic] Рисунок 1.6. Стандартные уровни прерываний 5.3 Распределение памяти Ядро постоянно располагается в оперативной памяти, наряду свыполняющимся в данный момент процессом (или частью его, по меньшей мере).В процессекомпиляции программа-компилятор генерирует последовательность адресов, явля-ющихся адресами переменных и информационных структур, а также адресами инст-рукций и функций. Компилятор генерирует адреса для виртуальной машинытак,словно на физической машине не будет выполняться параллельно странслируемойни одна другая программа. Когда программа запускается на выполнение, ядро выделяет для нее местовоперативной памяти, при этом совпадение виртуальных адресов,сгенерированныхкомпилятором, с физическими адресами совсем необязательно. Ядро, взаимодейс-твуя с аппаратными средствами, транслирует виртуальные адреса вфизические,т.е. отображает адреса, сгенерированные компилятором, в физические,машинныеадреса. Такое отображение опирается на возможности аппаратных средств,поэтому компоненты системы UNIX, занимающиеся им, являются машинно-зависимыми.Например, отдельные вычислительные машины имеют специальное оборудованиедля подкачки выгруженных страниц памяти. 6. ВЫВОДЫ В работе были описаны полная структура системы UNIX, взаимоотношениямежду процессами, выполняющимися в режиме задачи и в режиме ядра, а такжеаппаратная среда функционирования ядра операционной системы. Процессывыполняются в режиме задачи или в режиме ядра, в котором они пользуютсяуслугами системы благодаря наличию набора обращений к операционнойсистеме. Архитектура системы поддерживает такой стиль программирования, прикотором из небольших программ, выполняющих только отдельные функции, нохорошо, составляются более сложные программы, использующие механизм каналови переназначение ввода-вывода. Обращения к операционной системе позволяют процессам производитьоперации, которые иначе не выполняются. В дополнение к обработке подобныхобращений ядро операционной системы осуществляет общие учетные операции,управляет планированием процессов, распределением памяти и защитойпроцессов в оперативной памяти, обслуживает прерывания, управляетфайлами и устройствами и обрабатывает особые ситуации, возникающие всистеме. В функции ядра системы UNIX намеренно не включены многие функции,являющиеся частью других операционных систем, поскольку набор обращений ксистеме позволяет процессам выполнять все необходимые операции напользовательском уровне. ЛИТЕРАТУРА1. THE DESIGN OF THE UNIX OPERATING SYSTEM by Maurice J. Bach («Морис Дж. Бах. Архитектура операционной системы Unix»Перевод с английского к.т.н. Крюкова А.В.) Copyright c 1986 Корпорация Bell Telephone Laboratories. Издано корпорацией Prentice-Hall. Отделение Simon & Schuster Энглвуд Клиффс, Нью-Джерси 076322. Кристиан К. Операционная система UNIX. - М., Финансы и статистика, 1985, 320 стр.3. Баурн С. Операционная система UNIX. - М., Мир, 1986, 464 стр.4. Aho A.V., Kernighan B.W., Weinberger P.J. Awk - аPattern Scanning and Text Processing Language (2d Edition). - Bell Labs, Murray Hill, N.J.5. Feldman S.I. Make - a program for maintaining computer programs. - Bell Labs, Murray Hill, N.J. (а также в журнале Software - Practice and Experience, vol.9).(() Организации, получившие права на перепродажу с надбавкой к цене задополнительные услуги, оснащают вычислительную систему прикладнымипрограммами, касающимися конкретных областей применения, стремясьудовлетворить требования рынка. Такие организации чаще продаютприкладные программы, нежели операционные системы, под управлениемкоторых эти программы работают.((( ) А что же версия IV ? Модификация внутреннего варианта системыполучила название "версия V".(((() В некоторых реализациях системы UNIX операционная системавзаимодействует с обствен-ной операционной системой, которая, в своюочередь, взаимодействует с аппаратурой и выполняет необходимые функции пообслуживанию системы. В таких реализациях допускается инсталляция другихоперационных систем с загрузкой под их управлением прикладных программпараллельно с системой UNIX. Классическим примером подобной реализацииявилась система MERT [Lycklama 78a]. Более новым примером могут служитьреализации для компьютеров серии IBM 370 [Felton 84] и UNIVAC 100[Bodenstab 84].((((()Каталог "/bin" содержит большинство необходимых команд и обычновходит в число каталогов, в которых ведет поиск командный процессорshell.




Признательность большинства людей порождена скрытым желанием добиться еще больших благодеяний. Франсуа Ларошфуко
ещё >>