- •Затверджую заст. Директора з навчальної роботи _____Майдан а.В.
- •Розглянуто та схвалено
- •На засіданні вкс
- •Обслуговування комп’ютрних систем і мереж
- •____________2015Р.Прот.№___
- •Голова вкс_______н.М.Пархоменко
- •Розробив викладач
- •__________Л.О.Ціпоренко
- •Призначення ядра Linux і його особливості
- •Модулі ядра
- •Виконавча система
- •Наперед визначені системні процеси
- •Застосування користувача
- •Висновки до розділу 2.
- •Контрольні запитання та завдання
- •Паралелізм взаємодії з користувачем
- •Паралелізм розподілених застосувань
- •Ієрархія процесів
- •Особливості створення потоків
- •Особливості завершення потоків
- •Методи розподілюваної пам'яті
- •Методи передавання повідомлень
- •Технологія відображуваної пам'яті
- •Особливості міжпроцесової взаємодії
- •Черги повідомлень
- •20 Найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);
- •Перетворення адрес в архітектурі іа-32
- •Типи файлів
- •Імена файлів
- •Каталоги
- •Абсолютний і відносний шляхи
- •Єдине дерево каталогів. Монтування файлових систем
- •Літерні позначення розділів
- •Символічні зв'язки
- •Підтримка символічних зв'язків на рівні системних викликів
- •Фізична організація розділів на диску
- •Основні вимоги до фізичної організації файлових систем
- •Прості зв'язні списки.
- •Зв'язні списки з таблицею розміщення файлів
- •Розріджені файли
- •Елементи каталогу.
- •Спочатку інформацію зберігають у журналі (у ньому створюють новий запис). Таку операцію називають випереджувальним записуванням (write-ahead) або веденням журналу (journaling).
- •Необхідність реалізації буферизації
- •Способи реалізації буферизації
- •Буферизація і кешування
- •Використання спеціальних файлів
- •Передавання даних між рівнями підсистеми
- •Категорії драйверів пристроїв
- •Структура драйвера пристрою
- •Обслуговування переривань
- •Завершення запиту введення-виведення
- •Обробка даних багаторівневими драйверами
- •Поняття термінала
- •Емуляція термінала
- •Віддалені термінали і консоль
- •Термінальне введення
- •Термінальне виведення
- •Програмне керування терміналом
- •Наперед визначені дескриптори у Win32
- •Програмне керування консоллю
- •Протокол iPv4
- •Підтримка транспортного рівня
- •Однорідний доступ до пам'яті
- •Неоднорідний доступ до пам'яті
- •Асиметрична багатопроцесорність
- •Симетрична багатопроцесорність
- •Підтримка numa-архітектур
- •Масштабування навантаження
- •Продуктивність окремих застосувань
- •Криптографічні алгоритми
- •Обмін повідомленнями із використанням криптографії із секретним ключем
- •Криптографічні алгоритми з відкритим ключем
- •Обмін повідомленнями з використанням криптографії із відкритим ключем
- •Односторонні хеш-функції
- •Підписи із відкритим ключем і односторонніми хеш-функціями
- •Облікові записи
- •Словникові атаки і сіль
- •Аутентифікація за принципом «виклик-відповідь»
- •Списки контролю доступу
- •Можливості
Термінальне введення
Є два підходи до організації термінального введення.
У режимі без обробки, або неканонічному режимі (non-canonical mode), дані передають програмі без зміни (включаючи керуючі коди, такі, як переведення каретки або Backspace). За інтерпретацію цих кодів відповідає програма. Такий режим складніший у використанні (потрібно інтерпретувати керуючі коди), але більш гнучкий. Найчастіше його використовують текстові редактори.
У разі використання режиму з обробкою, або канонічного режиму (canonical mode), дані додатково оброблятимуться перед тим як надійти у програму. Така обробка відбувається після натискання користувачем клавіші Enter (введення символу переведення рядка), при цьому керуючі коди буде інтерпретовано і відповідно до них змінено весь уведений рядок (наприклад, якщо в ньому тричі поспіль трапиться Backspace, ці три символи і ще три, введені перед ними, із рядка будуть вилучені). Такий режим простіший для програміста, у програму в даному разі потрапляє вже підготовлений символьний рядок.
Прикладом програмного забезпечення, що реалізує компроміс між цими режимами, може бути розповсюджена в UNIX-системах бібліотека readline. Вона надає розширені засоби редагування введеного рядка, які потребують підтримки неканонічного режиму, але її програмний інтерфейс аналогічний до введення в канонічному режимі (у програму потрапляє підготовлений внаслідок редагування рядок).
Введені із клавіатури символи зберігаються у буфері, навіть у неканонічному режимі (трапляються ситуації, коли застосування не може відразу прийняти дані від клавіатури, і потрібно зберегти їх до того моменту, коли з'явиться така можливість). У канонічному режимі дані із буфера передаються програмі після введення символу переведення рядка, у неканонічному - як тільки програма буде готова їх прийняти. Звичайно для кожного термінала створюється свій окремий буфер введення. У разі заповнення буфера може бути виділена додаткова пам'ять.
У більшості випадків уведені символи відразу відображаються на екрані (робота в режимі луни). Можливе відключення цього режиму, наприклад під час введення паролів або команд текстових редакторів.
Термінальне виведення
Для виведення на термінал теж використовують буферизацію. Буфер виводу заповнюють у тому випадку, коли термінал не готовий прийняти символ; у міру його готовності символи із буфера передають терміналу. Відображаючи дані, він інтерпретує керуючі послідовності, після чого показує інформацію, виділяє кольорами окремі ділянки, переміщає курсор тощо.
Головна проблема полягає в тому, що різні модифікації терміналів сприймають різні набори послідовностей. Для її вирішення у сучасних ОС звичайно створюють базу даних терміналів, що містить список терміналів і послідовності, які відповідають кожному із них. В UNIX-системах таку базу називають terminfo.
Логічна структура термінального введення-виведення показана на рис. 17.
2.
Файли термінальних пристроїв і консоль
Кожному терміналу в Linux (як і в інших UNIX-системах) відповідає файл символьного пристрою. Наприклад, файли /dev/ttyn (п = 1, 2.....63) відповідають терміналам віртуальної консолі (доступний набір таких терміналів, що дає можливість відкривати кілька паралельних сесій користувача; для перемикання між віртуальними консолями використовують комбінації клавіш Ctrl+Fn), файли /dev/ttySn -терміналам, пов'язаним із з'єднаннями через послідовний порт. Відкривши такий файл, можна працювати із відповідним терміналом.
tty2 = open("/dev/tty2",0_RDWR, 0644);
write(tty2, "Виведення на другу віртуальну консоль\n", ...);
Консоль Linux емулює спеціальний вид термінала, який називають Linux. Він надає доволі широкі можливості щодо керування відображенням інформації (підтримку кольору, керуючих клавіш, перевизначення символьної таблиці «на ходу»). Поточну консоль відображають файлом /dev/console.
Псевдотермінали
Раніше вже йшлося про принцип роботи протоколу telnet. Виникає запитання: яким чином telnet-сервер перехоплює дані, що їх застосування відсилають на термінал? Для відповіді потрібно ознайомитися із концепцією псевдотперміналів.
Псевдотерміналом (pty) називають спеціальний пристрій, який створює і контролює процес режиму користувача (ведучий процес, pty master). Для всіх інших процесів (ведених процесів, pty slaves) цей пристрій має вигляд реального термінала. У результаті всі дані, якими ведені процеси обмінюються із псевдотерміналом, опиняються під повним контролем ведучого процесу. Зокрема, ведучим процесом у разі telnet є telnet-сервер, веденим - процес, який запускають у telnet-сесії. У результаті сервер має змогу перехоплювати всі дані, які будуть згене-ровані під час сесії, та відсилати їх мережею.
Псевдотермінал відображають двома спеціальними файлами пристроїв: файлом ведучого (pty master file) і файлом веденого (pty slave file). Із файлом ведучого працює ведучий процес, усі інші процеси працюють із файлом веденого. Усі дані, записані у файл веденого, можуть бути зчитані із файла ведучого і навпаки. У Linux є різні домовленості на імена для цих файлів, наприклад, файли ведучого можуть бути згенеровані за запитом у каталозі /dev/pts.
Є кілька цікавих застосувань псевдотерміналів. Так, є утиліта screen, що перехоплює весь ввід-вивід інтерактивної програми або сесії користувача і зберігає його у файлі. Для цього screen створює псевдотермінал і змушує програму обмінюватися даними не із консоллю, а із цим терміналом.
Керуючий термінал процесу
Процес в UNIX-системі може мати керуючий термінал (controlling terminal), з якого отримуватиме сигнали від клавіатури (SIGINT у разі натискання користувачем Ctrl+C, SIGQUIT - Ctri-D). Звичайно це термінал, із якого ввійшов у систему користувач, що створив такий процес. Для процесу доступний файл /dev/tty, що відповідає цьому терміналу. Далі в розділі ознайомимося із деякими додатковими особливостями взаємодії між процесами і керуючими терміналами.
Наперед визначені файлові дескриптори
Відкривати щоразу файл керуючого термінала під час введення-виведення не дуже зручно. Розглянемо засоби, які надають ОС для спрощення роботи із таким терміналом.
Під час створення нового процесу у його таблиці файлових дескрипторів fd заздалегідь створюють три елементи, котрі використовують як наперед визначені файлові дескриптори. Вони відповідають трьом заздалегідь відкритим файлам, доступним для кожного процесу і за замовчуванням пов'язаних із керуючим терміналом користувача, що створив цей процес:
stdin - файл стандартного вводу (йому відповідає дескриптор fd[0]);
stdout - файл стандартного виводу (йому відповідає fd[l]);
stderr - файл повідомлень про помилки (йому відповідає fd[2]).
Виклик write(1. ...) або write(2. ...) означає виведення на відповідний термінал, read(0. ...) - введення із клавіатури, пов'язаної із цим терміналом. Таку концепцію сьогодні використовують і в інших ОС, які підтримують термінальне введення-виведення. Для можливості перенесення, замість чисел 0, 1 і 2, рекомендують вживати константи STDIN_FILENO, STD0UT_FILEN0 і STDERR_FILENO:
int bytes_read; char buf[1024];
// зчитати дані з файла стандартного вводу
bytes_read = read(STDIN_FILENO, buf,sizeof(buf));
// вивести їх же у файл стандартного виводу
wrіte(STDOUT_FILENO, buf, Bytes_read):
Є багато прикладних і системних програм, які розраховані на отримання даних з файла стандартного вводу і відображення результатів у файл стандартного виводу. Такі програми називають фільтрами. Серед найвідоміших фільтрів можна виділити sort (сортування файла стандартного вводу, записування результату на стандартний вивід) і дгер (пошук заданого підрядка у стандартному вводі, записування рядків, де знайдено цей підрядок, на стандартний вивід).