Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_Шеховцов_1.docx
Скачиваний:
73
Добавлен:
09.11.2019
Размер:
14.73 Mб
Скачать

16.4.4. Введення-виведення з повідомленням

Системний виклик selecto

У розділі 15.5.3 ішлося про особливості введення-виведення із повідомленням і загальні принципи використання системного виклику selecto. Зараз наведемо приклад використання selecto для повідомлення про стан сокетів у реалізації вже відомого луна-сервера.

Насамперед зауважимо, що select( ) в UNIX працює з усіма файловими деск­рипторами, доступними для процесу (серед них можуть бути дескриптори со­кетів). Ці дескриптори, як зазначалося в розділі 13, - цілі числа із послідовною нумерацією від нуля. Таке відображення визначає низку особливостей викори­стання виклику selecto.

Опишемо синтаксис select О:

#іпсіude <sys/select.h> #include <sys/time.h>

int select(int fdcount. fdset *readset. fd_set *writeset. fd_set *exceptset, const struct timeval *timeout);

де: fdcount — кількість дескрипторів, зміну стану яких потрібно відстежувати (оскільки дескриптори нумеруються від нуля, це число дорівнює максималь­ному номеру дескриптора плюс один);

Розділ 19

Завантаження операційних систем

♦ Загальні принципи організацГі' процесу завантаження

♦ Процес завантаження Linux і Windows ХР

Завантаження операційної системи — складний процес, що стосується більшості підсистем ОС. Його повне розуміння неможливе без наявності базових знань про структуру різних компонентів системи.

19.1. Загальні принципи завантаження ос

Тут зробимо короткий огляд загальних принципів організації завантаження опе­раційних систем. Основну увагу буде приділено апаратній ініціалізації комп'ютера і принципам реалізації завантажувача ОС. Подальші етапи завантаження опише­мо коротко, докладніше їх буде розглянуто на прикладах у розділах, присвячених завантаженню Linux і Windows ХР.

19.1.1. Апаратна ініціалізація комп'ютера

Коли комп'ютер увімкнений в електромережу, він по суті порожній - усі його мікросхеми пам'яті містять випадкові значення, процесор не виконує код. Для по­чатку процедури завантаження на процесор подають команду RESET (скидання). Після її прийняття, деякі регістри процесора (зокрема регістр лічильника коман­ди) набувають фіксованих значень, і починається виконання коду за фізичною адре­сою OxftrrrffO. Апаратне забезпечення відображає цю адресу на спеціальну ділянку енергонезалежної пам'яті (ROM). Набір програм, що зберігається у ROM, за тради­цією називають BIOS (Basic Input/Output System, базова система введення/виве­дення), він включає набір керованих перериваннями низькорівневих процедур, які можна використати для керування пристроями, підключеними до комп'ютера.

Більшість сучасних ОС використовують BIOS тільки на етапі початкового за­вантаження (який називають bootstrapping). Після цього вони ніколи не зверта­ються до процедур BIOS і всі функції керування пристроями в ОС беруть на себе драйвери цих пристроїв. Річ у тому, що процедури BIOS можуть виконуватися тільки в реальному режимі процесора, а ядро — у захищеному режимі; крім того, звичайно код BIOS не має високої якості. Реальну адресацію використовують у коді BIOS тому, що тільки такі адреси виявляються доступними, коли ком­п'ютер тільки-но увімкнено.

Процедура початкового завантаження BIOS (bootstrap procedure) зводиться до чотирьох операцій.

1. Виконання набору тестів апаратного забезпечення для з'ясування, які при­строї в системі присутні та чи всі вони працюють коректно. Цей етап назива­ють самотпестуванням після увімкнення живлення (Power-On Self-Test, POST).

2. Ініціалізація апаратних пристроїв. Цей етап дуже важливий у сучасних архі­тектурах, заснованих на шині РСІ, оскільки він гарантує, що всі пристрої пра­цюватимуть без конфліктів у разі використання ліній переривань або портів введення-виведення. Наприкінці цього етапу буде відображено список уста­новлених РСІ-пристроїв.

3. Пошук і виконання початкового коду завантаження. Залежно від установок BIOS здійснюють спробу доступу (у заздалегідь визначеному порядку, який можна змінити) до першого сектора гнучкого диска, заданого жорсткого диска або компакт-диска. У жорсткому диску, як уже відомо з розділу 12, перший сектор називають головним завантажувальним записом (MBR).

4. Коли пристрій знайдено, BIOS копіює вміст його першого сектора в оператив­ну пам'ять (починаючи із фіксованої фізичної адреси 0x00007сОО), виконує ко­манду переходу на цю адресу і починає виконувати щойно завантажений код. За все інше відповідає операційна система.