Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Початкове завантаження. Процеси 0 та 1

Завантаження ядра системи в основну пам’ять та її запуск називають початковим завантаженням. Ця процедура виконується при:

1. Увімкненні комп’ютера.

2. Якщо відбувся крах системи.

3. Система була свідомо зупинена.

Початкове завантаження відбувається в декілька етапів.

1–й етап. Спочатку з диску апаратно читається в пам’ять вміст першого блоку. Перший блок файлової системи резервується для запису спеціальної короткої програми, що виконує початкове завантаження. Після зчитування ця програма виконується. При виконанні ця коротка програма–завантажувач шукає та читає в пам’яті файл з іменем “unix”, що знаходиться в кореневому каталозі (”/unix”). Цей файл містить ядро ОС в машинних командах. Він створений шляхом компіляції та зв’язку файлів, що включають вхідні коди ОС.

2–й етап. Другий етап початкового завершення починається з читання та наступного виконання файлу “/unix”. Перша функція ядра – ініціалізація декількох апаратних інтерфейсів. Це стосується системного годинника та диспетчера пам’яті. Ядро формує також початкові значення декількох структур даних в тому числі набори буферів блоків, списки символів, буфери індексних дескрипторів та змінну, що показує розмір основної пам’яті.

Після завершення цих операцій ядро починає ініціалізувати процес 0. Процес 0, на відміну від інших процесів, що ініціалізуються функцією fork, створюється ядром шляхом резервування пам’яті для його контексту та занесення відповідних посилань в перший елемент таблиці процесів.

Процес 0 є унікальним з таких причин:

1. Він не має кодового сегменту і складається тільки з контексту. Всі інші процеси містять код, який виконує певні функції. Вони є певними образами, отриманими в результаті компіляції та наступного виконання деякої програми. Процес 0 не є образом, це просто структура даних, що використовується ядром.

2. Процес 0 існує на протязі всього періоду роботи системи.

3. Процес 0 – це дійсно системний процес, він є активним виключно в той час, коли процесор знаходиться в режимі ядра.

4. Процес 0 називається процесом виключно тому, що він є каталогізованим в таблиці процесів, але це тільки структура даних ядра.

Після створення процесу 0 система копіює його і створює процес 1. При цьому виконуються ті ж процедури, що і при виконанні користувачем системного виклику fork. Алгоритм створення процесу 1 в значній степені нагадує стандартну процедуру створення процесів, але дещо спрощену. Спочатку процес 1 є точною копією процесу 0, у нього немає області коду. Після створення процесу 1 відразу збільшується його розмір. Це створюється тими самими підпрограмами, що і при обробці системного виклику break (збільшення розміру виділеної пам’яті).

До цього моменту обидва процеси: 0 та 1 тільки повинні бути в майбутньому виконані.

Далі процесу 1 надається життєздатність, тобто у тільки що створену область копіюється дуже проста програма. Ця програма складається з машинних кодів, що реалізують системний виклик exec, необхідний для виконання програми “/etc/init”.

Таким чином, ініціалізація процесів 0 та 1 завершена. Процес 0 – це структура даних користувача, за допомогою якої ядро організує мультипрограмування та керує процесами. Процес 1 дуже подібний на реальний образ процесу, отриманого в результаті компіляції деякої програми, хоча насправді вона спеціальним чином створена ядром. Після ініціалізації 0 та 1 UNIX переходить до виконання програми диспетчера.

На цьому ініціалізація ядра завершається. Але ініціалізація системи в цілому тільки починається.

Програма – диспетчер відповідає за прийняття рішень про те, який процес повинен бути виконаний, для якого потрібен стопінг на диск, а для якого – свопінг з диску. При першому виклику диспетчера прийняти рішення неважко, тому що свопінга немає і тільки один процес повинен виконуватись – процес 1.

Робота процесу 1 приводить до негайної видачі системного виклику exec, який замінить команди процесу 1 кодом, що знаходиться у файлі ”/etc/init”. Тепер, коли цей процес отримав свою остаточну форму він має ім’я init.

Процес init настроює структури процесів системи UNIX. Звичайно він може створювати як мінімум два типи обчислювального середовища: однокористувацький та багатокористувацький. Цей процес починає свою роботу з підключення інтерпретатора команд ОС shell до системної консолі та присвоєння shell статусу привілейованого користувача. Такий режим часто називають однокористувацьким. Консоль (дисплей, клавіатура, периферія) автоматично реєструється як користувач, що зайшов з кореневими привілеями і ні по жодні лінії зв’язку вхід більше не можливий. Такий однокористувацький режим застосовується для перевірки та відновлення файлових систем, для виконання основних функцій тестування і інших дій, що вимагають монопольного використання комп’ютера.

 

 

При виході з однокористувацького режиму процес init створює багатокористувацьке середовище. З цією метою він створює процес getty для кожного активного каналу зв’язку. Init також продовжує процес shell для виконання команд, що зберігаються у файлі “/etc/rc”. Цей файл вміщує послідовність команд shell, що дозволяють монтувати файлові системи, запускати процеси, що слідкують за подіями, вилучати застарілі тимчасові файли та ініціювати виконання програм обміну для користувачів. Вміст файлу “/etc/rc” індивідуальний для кожної системи UNIX.

Під час роботи ОС, init пасивний, в очікуванні завершення довільного з породженого ним процесів. Як тільки це відбувається, init активізується і створює нову програму getty для відповідної лінії зв’язку (Саме getty може завершитись, оскільки shell існує на протязі всього часу функціонування системи). Таким чином init не тільки створює багатокористувацьку структуру, але і підтримує її під час існування системи.

Останній учасник ініціалізації системи програма getty. Кожна з цих програм очікує, коли хтось зайде в систему через визначений канал зв’язку. При виконанні такої процедури getty виконує декілька налаштувань відповідно до протоколу каналу, а потім за системним викликом exec передає керування програмі login, яка реалізує перевірку паролю. Якщо пароль коректний, то знову за допомогою виклику exec контроль передається shell, що приймає команди користувача. Після завершення роботи активізується єдина “жива” рідна програма init і послідовністю fork–exec створюється новий процес getty, що керує каналом, який очікує нового входу по даному каналу.

 

 

<== предыдущая лекция | следующая лекция ==>
Процеси | Будова файлової системи UNIX
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 456; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.