- •Затверджую заст. Директора з навчальної роботи _____Майдан а.В.
- •Розглянуто та схвалено
- •На засіданні вкс
- •Обслуговування комп’ютрних систем і мереж
- •____________2015Р.Прот.№___
- •Голова вкс_______н.М.Пархоменко
- •Розробив викладач
- •__________Л.О.Ціпоренко
- •Призначення ядра Linux і його особливості
- •Модулі ядра
- •Виконавча система
- •Наперед визначені системні процеси
- •Застосування користувача
- •Висновки до розділу 2.
- •Контрольні запитання та завдання
- •Паралелізм взаємодії з користувачем
- •Паралелізм розподілених застосувань
- •Ієрархія процесів
- •Особливості створення потоків
- •Особливості завершення потоків
- •Методи розподілюваної пам'яті
- •Методи передавання повідомлень
- •Технологія відображуваної пам'яті
- •Особливості міжпроцесової взаємодії
- •Черги повідомлень
- •20 Найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);
- •Перетворення адрес в архітектурі іа-32
- •Типи файлів
- •Імена файлів
- •Каталоги
- •Абсолютний і відносний шляхи
- •Єдине дерево каталогів. Монтування файлових систем
- •Літерні позначення розділів
- •Символічні зв'язки
- •Підтримка символічних зв'язків на рівні системних викликів
- •Фізична організація розділів на диску
- •Основні вимоги до фізичної організації файлових систем
- •Прості зв'язні списки.
- •Зв'язні списки з таблицею розміщення файлів
- •Розріджені файли
- •Елементи каталогу.
- •Спочатку інформацію зберігають у журналі (у ньому створюють новий запис). Таку операцію називають випереджувальним записуванням (write-ahead) або веденням журналу (journaling).
- •Необхідність реалізації буферизації
- •Способи реалізації буферизації
- •Буферизація і кешування
- •Використання спеціальних файлів
- •Передавання даних між рівнями підсистеми
- •Категорії драйверів пристроїв
- •Структура драйвера пристрою
- •Обслуговування переривань
- •Завершення запиту введення-виведення
- •Обробка даних багаторівневими драйверами
- •Поняття термінала
- •Емуляція термінала
- •Віддалені термінали і консоль
- •Термінальне введення
- •Термінальне виведення
- •Програмне керування терміналом
- •Наперед визначені дескриптори у Win32
- •Програмне керування консоллю
- •Протокол iPv4
- •Підтримка транспортного рівня
- •Однорідний доступ до пам'яті
- •Неоднорідний доступ до пам'яті
- •Асиметрична багатопроцесорність
- •Симетрична багатопроцесорність
- •Підтримка numa-архітектур
- •Масштабування навантаження
- •Продуктивність окремих застосувань
- •Криптографічні алгоритми
- •Обмін повідомленнями із використанням криптографії із секретним ключем
- •Криптографічні алгоритми з відкритим ключем
- •Обмін повідомленнями з використанням криптографії із відкритим ключем
- •Односторонні хеш-функції
- •Підписи із відкритим ключем і односторонніми хеш-функціями
- •Облікові записи
- •Словникові атаки і сіль
- •Аутентифікація за принципом «виклик-відповідь»
- •Списки контролю доступу
- •Можливості
Програмне керування терміналом
Стандарт POSIX визначає набір системних викликів для керування режимами роботи із терміналом. Для задания атрибутів режиму термінального введення-виведення використовують системний виклик tcsetattr( ), а для отримання поточних атрибутів режиму – tcgetattr( ). Обидва ці виклики приймають параметром покажчик на структуру termios, яка містить зокрема поле с_ lflag — маску прапорців режимів, що керують поведінкою термінала (прапорець ECHO означає роботу в режимі луни):
int tcgetattr(int tfd, struct termios *modes);
int tcsetattr(int tfd, int actions, struct termios *modes):
де: tfd — дескриптор файла, що відповідає терміналу;
actions — час встановлення режиму (TCSAN0W - негайно).
Наведемо приклади використання цих викликів для відключення режиму луни і відновлення попереднього режиму.
#include <termios.h>
#include <sys/types.h>
struct termios new_mode, old_mode;
// одержання поточного режиму
tcgetattr(STDIN_FILENO,&old_mode);
new_mode = old_mode;
// відключення режиму луни
new_mode.с_lflag &= (~ECHO);
tcsetattr (STDI N_FILENO, TCSANOW, &new_mode);
// ... введення-виведення з використанням STDIN_FILENO без луни
// відновлення попереднього режиму
tcsetattr(STDIN_FIL ENO,TCSANOW,&old jnode);
3.
Основним для термінального введення-виведення у Win32 є поняття консолі . Воно відрізняється від визначеного раніше; фактично консоль - це наданий ОС спеціальний емулятор термінала.
Звичайно консоль пов'язують із конкретним процесом. Для процесів, які запускає ОС, консолі пов'язують із консольними процесами, точкою входу для яких є функція main( ). Під час виклику CreateProcess( ) виділення окремої консолі для процесу задається вмиканням прапорця створення CREATE_NEW_CONSOLE. Крім того, кілька процесів можуть спільно використовувати одну й ту саму консоль (наприклад, після виклику CreateProcess( ) новий процес за замовчуванням успадковує консоль предка).
Логічна структура консолі аналогічна до наведеної на рис. 17.1, за винятком того, що з нею може бути пов'язано кілька буферів виводу. Можна виводити дані у різні буфери, а потім перемикатися між ними.
Для роботи із консоллю є два набори функцій. Функції високого рівня дають змогу працювати зі стандартними вводом та виводом і визначати деякі режими керування консоллю. Функції низького рівня дають можливість застосуванням отримувати повну інформацію про інтерактивну роботу користувача із клавіатурою і мишею. У більшості випадків застосуванню достатньо функцій високого рівня; прикладом застосування, розробленого із використанням функцій низького рівня, є файловий менеджер far.
Наперед визначені дескриптори у Win32
Наперед визначені дескриптори у Win32 пов'язані із консоллю. Відмінність від POSIX полягає в тому, що такі дескриптори не відповідають конкретним цілим числам, а завжди є результатом виклику функції GetStdHandle( )
HANDLE GetStdHandle(DWORD std_const);
Параметр std_const визначає, який дескриптор буде повернуто функцією, і задається як константа STD_INPUT_HANDLE, STDOUTPUT_HANDLE або STD_ERROR_HANDLE.
char buf[1024]; DWORD bytes-read,bytes_written;
HANDLE stdin, stdout;
// одержати стандартні дескриптори
Stdin - GetStdHandle(STD_INPUT_HANDLE);
stdout = GetStdHandle(STD_OUTPUT_HANDLE);
// зчитати дані з файлу стандартного вводу
ReadFile(stdin, buf, sizeof(buf). &bytes_read, 0);
// вивести їх же у файл стандартного виводу
WriteFile(stdout, buf,Bytes_read, &bytes_written, 0):