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

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

каталог include/net и вложенный в него include/net/gen/. Но в данной книге обсуждаются только коды, необходимые для работы системы.

Каталог src/ содержит три важнейших вложенных каталога, где размещаются исходные коды операционной системы:

1. kernel/ - первый и второй уровни (процессы, сообщения и драйверы).

2. mm/ - коды менеджера памяти.

3. fs/ - коды файловой системы.

Кроме того, есть еще три каталога, содержимое которых в книге не рассматривается, но которые важны для получения работающей среды, это:

1. src/lib/ - исходные коды библиотечных процедур (например, open, read).

2. src/tools/ - коды программы init, используемой при загрузке системы.

3. src/boot/ - коды зафузки и установки MINIX.

В стандартной комплектации MINIX вы найдете еще несколько каталогов. Суть операционной системы в том, чтобы поддерживать некоторый набор команд (то есть программ), таких как cat, ср, date. Is, pwd. Исходные тексты этих профамм расположены в каталоге src/commands/. Помимо того, MINIX является учебной системой, которую можно изменять, поэтому в каталоге src/test/ имеется набор программ для тестирования. Наконец, в каталоге src/inet/ находятся коды профамм для компиляции MINIX с поддержкой сети.

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

Код первого и второго уровней системы находится в каталоге src/kernel/. В этой главе мы рассмотрим те файлы, которые относятся к управлению процессами, нижнему уровню MINIX на рис. 2.13. Этот уровень включает в себя функции для инициализации системы, обработки прерываний, передачи сообщений и планирования процессов. В третьей главе мы доберемся до остальных файлов этого каталога, ответственных за выполнение различных задач со второго уровня. В главе 4 мы рассмотрим менеджер памяти, коды которого расположены в src/mm/, и в 5-й главе изучим файловую систему (src/fs/).

При компиляции системы все файлы с исходными кодами преобразуются в объектные файлы. Затем объектные файлы из каталога src/kernel/ связываются в единый исполняемый файл kernel. Объектные файлы из src/mm/ также связываются в отдельный исполняемый файл, mm. Подобным образом получается и fs. Расширение системы достигается включением в нее дополнительных серверов. Например, чтобы добавить поддержку сетей, нужно изменить файл include/minix/ config.h, включив компиляцию файлов из каталога src/inet/, которые образуют профамму inet. Еще одна профамма, init, строится в каталоге src/tools. Профамма installboot, коды которой лежат в src/boot/, именует все эти профаммы, дополняет так, чтобы размер каждой был кратен длине сектора диска (чтобы было проще



загружать их по отдельности) и объединяет в единый файл. Последний и представляет собой двоичный код операционной системы. Его можно скопировать либо в корневой каталог, либо в каталог /minix/ на жестком диске или дискете. Впоследствии загрузчик будет загружать операционную систему из этого файла.

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

Scr/tools/lnet Scr/inet/lnet (опционально)

Scr/fs/fS

Scr/mm/mm

Память ТОЛЬКО для чтения и память контролпера ввода/ вывода (недоступна MINIX)Z/

scr/kernel/kernel

Память, доступная пользовательским профаммам

Init

Задача Inet

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

Менеджер памяти

7 /А

Памят!

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

Задача Ethernet Задача принтера

Задача терминала

Задача памяти

Задача часов

Задача диска

Ядро

ОНе используетсяу;

Векторы прерываний

Предел памяти

2383 К 2372 К

2198 К (Зависит от количества буферов в файловой системе)

1077 К 1024 К

640 К

129 К (Зависит от количества задач ввода/вывода)

2 К Начало области ядра 1 К

Рис. 2.14. Распределение памяти после загрузки MINIX. Четыре (или пять, если включена поддержка сети) отдельных блока полностью разделены



Важно понимать, что MINIX состоит из трех или более совершенно независимых программ, взаимодействующих при помощи сообщений. Поэтому процедура с именем panic в src/fs/ не конфликтует с процедурой painc в src/mm/. Единственные процедуры, видимые и доступные всем частям системы, расположены в каталоге lib/. Благодаря такой модульной структуре очень просто изменить одну ее часть, скажем, файловую систему, не затронув других частей. Модульность позволяет даже целиком перенести файловую систему на удаленную машину, сделав ее файловым сервером, который взаимодействует с другими пользовательскими машинами, обмениваясь сообщениями через сеть.

Другим примером модульности MINIX может служить то, что наличие или отсутствие поддержки сети в скомпилированной системе не оказывает никакого влияния на менеджер памяти, затрагивая только ядро системы (так как задача Ethernet входит в ядро, как и другие задачи устройств ввода/вывода). Сетевой сервер, если он нужен в системе, встраивается в MINIX точно так же, как сервер памяти и файловый сервер и работает с тем же уровнем приоритета. В его задачи входит передача больших объемов данных за небольшое время, поэтому ему требуется больший приоритет, чем может понадобиться пользовательским процессам. Но это интересует только задачу Ethernet, а многие другие сетевые функции могут быть реализованы на пользовательском уровне. Сетевые функции не являются традиционными системными функциями и детальное их рассмотрение не входит в задачи этой книги. В последующих главах и разделах мы будем изучать систему MINIX, скомпилированную без поддержки сети.

2.6.2. Общие заголовочные файлы

в каталоге include/ содержится набор файлов, определяющих общие константы, типы данных и макроопределения. Большинство этих определений обусловлены стандартом POSIX, который указывает, какое определение в каком файле каталога include/ или его подкаталоге include/sys/ находится. Файлы, которые присутствуют в этих каталогах, называются заголовочными или включаемыми файлами и имеют расширение .h. Подключаются они директивой #include языка С. Благодаря включаемым файлам упрощается поддержка большой системы.

Для компиляции пользовательских программ требуются по большей части заголовочные файлы из include/, а файлы из include/sys/ традиционно нужны для компиляции системных утилит. Но это не слишком важное ограничение, и в типичной программе, будь то пользовательская программа или часть системы, используются файлы из обоих каталогов. Здесь мы обсудим файлы, необходимые для компиляции MINIX, сначала те из них, которые лежат в include/, а затем из состава include/sys/. В следующем разделе мы рассмотрим файлы в каталогах include/minix/ и include/ibm/, которые соответственно содержат код, специфичный для системы MINIX и ее реализации на IBM-совместимых компьютерах.

Файлы в каталоге include/ в действительности предназначены для решения общих задач, поэтому в большинство модулей с исходным кодом системы они не включаются. Вместо этого они присоединяются в другие заголовочные файлы, например в главный заголовочный файл src/kernel/kernel.h, файл src/mm/mm.h



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 - 2018 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.