Главная страница  Межпроцессное взаимодействие (состязание) 

1 2 3 4 5 [ 6 ] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

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

Чтобы исправить ситуацию, один из авторов этой книги (Э. Таненбаум) решил написать собственную операционную систему, которая с точки зрения пользователя была бы совместима с UNIX, но внутри была бы совершенно самостоятельной. Так как в этой системе не используется ни строчки кода AT&T, она не попадает под действие лицензионных ограничений и может свободно использоваться при обучении. Таким образом, студенты могут вскрывать реальную операционную систему, чтобы увидеть, как она устроена изнутри, точно так же, как студенты-медики вскрывают лягушек. Название MINIX происходит от mini-UNIX, так как эта система достаточно мала, чтобы даже не-гуру мог понять, как она работает.

У MINIX есть и еще одно преимущество перед UNIX. Она на десять лет моложе UNIX, поэтому ее код обладает более модульной структурой. Например, файловая система MINIX вообще не является частью ядра, а работает как отдельная пользовательская программа. Другое отличие в том, что UNIX создавалась, чтобы быть эффективной. MINIX же создавалась, чтобы быть читаемой (насколько может быть читаемым текст любой программы на сотни страниц). Поэтому, например, в коде MINIX имеются тысячи комментариев.

ОС MINIX разрабатывалась в расчете на совместимость с UNIX Version 7. Эта версия была выбрана за основу благодаря ее простоте и элегантности. Иногда говорят, что Version 7 была улучшением не только по сравнению с предыдущими версиями, но и по сравнению с последующими. С пришествием POSIX, развитие MINIX начало стремиться к новому стандарту, поддерживая в то же время обратную совместимость с существующими программами. Это обычный для компьютерной индустрии путь развития, так как никакой производитель не захочет представлять систему, которой никто не сможет пользоваться. Рассматриваемая в этой книге версия MINIX базируется на стандарте POSIX (в отличие от версии, рассматриваемой в первом издании, которая базировалась на V7).

Как и UNIX, MINIX написана на языке программирования С, чтобы упростить ее перенос на различные компьютеры. Первая реализация предназначалась для IBM PC, так как эти компьютеры были широко распространены. Затем система была перенесена на Atari, Amiga, Macintosh и SPARC. Придерживаясь философии маленькое есть прекрасное , MINIX изначально не требовала для работы жесткий диск, тем самым вписываясь в студенческий бюджет (сейчас это может показаться удивительным, но в середине 80-х, когда MINIX впервые увидела свет, жесткие диски все еще были дорогой новинкой). Со временем и функциональность, и объем системы росли, и в итоге потребовался жесткий диск. Но философия MINIX не была забыта, и для работы вполне достаточно раздела объемом 30 мегабайт. В противоположность этому сейчас для коммерческих UNIX 200 мегабайт считается абсолютным минимумом.



Для среднего пользователя, сидящего за IBM PC, MINIX мало отличается от UNIX. Имеются стандартные профаммы, такие как cat, grep, Is, make, выполняющие те же действия, что и их аналоги в UNIX. Как и сама операционная система, эти программы были полностью переписаны автором, студентами и некоторыми другими посвященными людьми.

По всей этой книге в качестве примера будет использоваться MINIX, но большинство комментариев (конечно, кроме тех, которые ссылаются на сами исходные коды) применимы и к UNIX. Многие применимы и к другим операционным системам. Это замечание нужно учитывать, читая книгу.

Отступая от темы, можно сказать несколько слов о LINUX и связи LINUX с MINIX. Вскоре после создания MINIX, для обсуждения этой операционной системы была сформирована группа новостей USENET. За несколько недель на нее подписалось более сорока тысяч подписчиков, и большинство из них хотели добавить в систему множество новых возможностей, чтобы сделать ее лучше и больше (ну, или хотя бы просто больше). Каждый день несколько сотен человек давали советы, предлагали идеи и куски кода. Создатель системы несколько лет успешно сопротивлялся этому напору, чтобы система оставалась достаточно маленькой и понятной для студентов. Постепенно стало понятно, что автор будет придерживаться этой стратегии. Именно в этот момент финский студент, Линус Торвальдс, решил создать собственный клон MINIX, который должен был стать рабочей системой со множеством возможностей. А не учебным пособием для студентов. Это и было рождение LINUX.

1.3. Понятия операционной системы

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

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

Мы выбрали второй подход. Он сложнее, но дает больше понимания того, как работают операционные системы. В разделе 1.4 дан более подробный обзор системных вызовов, имеющихся в MINIX и UNIX. Для простоты мы будем рассматривать только MINIX, но в большинстве случаев соответствующие вызовы UNIX основаны на стандарте POSIX. Тем не менее перед рассмотрением реальных сис-



темных вызовов имеет смысл окинуть взглядом MINIX с высоты птичьего полета, чтобы почувствовать, что это за система. Этот обзор в равной степени применим и к UNIX.

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

1.3.1. Процессы

Ключевое понятие MINIX и любой другой операционной системы - процесс. Процессом, по существу, называют программу в момент выполнения. С каждым процессом связывается его адресное пространство - список адресов в памяти от некоторого минимума (обычно нуля) до некоторого максимума, которые процесс может прочесть и в которые он может писать. Адресное пространство содержит саму программу, данные к ней и ее стек. Со всяким процессом связывается некий набор регистров, включая счетчик команд, указатель стека и другие аппаратные регистры, плюс вся остальная информация, необходимая для запуска программы.

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

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

Таким образом, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (соте image, core в переводе означает сердечник , в честь использовавшейся давным-давно памяти на магнитных сердечниках), и компонентов таблицы процесса, содержащей, помимо других величин, его регистры.

Главными системными вызовами, управляющими процессами, являются вызовы, связанные с созданием и окончанием процессов. Рассмотрим типичный пример. Процесс, называемый интерпретатором команд или оболочкой (shell).



1 2 3 4 5 [ 6 ] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.