Лекции на уроках Операційні системы
Рис. 2.3. Приклад необхідності синхронізації Нехтування питаннями синхронізації процесів, виконуються як мультипрограммирования, можуть призвести до неправильної роботі або навіть змусити краху системи. Розглянемо, наприклад (малюнок 2.3), програму друку файлів (принт-сервер). Ця програма друкує почергово все файли, чиї імена послідовний у порядку надходження записують їх у спеціальний… Читати ще >
Лекции на уроках Операційні системы (реферат, курсова, диплом, контрольна)
Запровадження Визначення ОС Операційна система найбільше визначає образ всієї обчислювальної системи загалом. Попри це, користувачі, активно використовують обчислювальну техніку, найчастіше відчувають труднощі при спробі дати визначення операційній системі. Частково це пов’язано з тим, що ОС виконує дві сутнісно мало пов’язані функції: забезпечення пользователю-программисту зручностей у вигляді надання йому розширеній машини та підвищення ефективність використання комп’ютера шляхом раціонального управління його ресурсами. ОС як розширена машина Використання більшості комп’ютерів лише на рівні машинного мови важко, особливо це ж стосується виводу-введення-висновку. Наприклад, для організації читання блоку даних із гнучкого диска програміст може використовувати 16 різних команд, кожна з яких вимагає 13 параметрів, як-от номер блоку на диску, номер сектора на доріжці тощо. п. Коли виконання операції з диском завершується, контролер повертає 23 значення, що відбивають наявність і типи помилок, які, очевидно, треба аналізувати. Навіть якщо взяти не укладати курс реальні проблеми програмування вводу-виводу, ясно, що з програмістів не знайшлося б не багато бажаючих безпосередньо займатися програмуванням операцій. Працюючи з диском программисту-пользователю досить представляти її в вигляді деякого набору файлів, кожен із яких має ім'я. Фундаментальна обізнаність із файлом у його відкритті, виконанні читання чи записи, потім у закритті файла. Питання подібні таких як чи варто під час запису використовувати удосконалену частотну модуляцію чи якому ж стані нині двигун механізму переміщення считывающих головок, не повинні хвилювати користувача. Програма, яка приховує від програміста все реалії апаратури і дає можливість простого, зручного перегляду зазначених файлів, читання чи записи — це, звісно, операційна система. Так само, як ОС захищає програмістів від апаратури дискового нагромаджувача і дає йому простий файловий інтерфейс, операційна система перебирає малоприємні справи, пов’язані з обробкою переривань, управлінням таймерами і оперативної пам’яттю, і навіть інші низькорівневі проблеми. У кожній оказії та абстрактна, уявна машина, з якою, завдяки операційній системі, тепер може мати справу користувач, набагато простіше й зручніше у спілкуванні, ніж реальна апаратура, що у основі цієї абстрактної машини. З цього погляду функцією ОС є надання користувачеві деякою розширеній чи віртуальної машини, яку легше програмувати і з якою легше працювати, ніж безпосередньо з апаратурою, складової реальну машину. ОС як систему управління ресурсами Ідея у тому, що ОС передусім система, забезпечує зручний інтерфейс користувачам, відповідає розгляду згори донизу. Інший погляд, знизу вгору, дає чітке уявлення про ОС як і справу деякому механізмі, управляючому усіма частинами складної системи. Сучасні обчислювальні системи складаються з процесорів, пам’яті, таймерів, дисків, накопичувачів на магнітних стрічках, мережевих комунікаційної апаратури, принтерів та інших пристроїв. У відповідності зі другим підходом функцією ОС є розподіл процесорів, пам’яті, пристроїв та об'єктивності даних між процесами, конкуруючими за ці ресурси. ОС повинна управляти усіма ресурсами обчислювальної машини в такий спосіб, щоб забезпечити максимальну її функціонування. Критерієм ефективності то, можливо, наприклад, пропускна спроможність чи реактивність системи. Управління ресурсами включає рішення двох загальних, які залежать від типу ресурсу задач:
. планування ресурсу — тобто визначення, кому, коли, а подільних ресурсів немає і скільки, необхідно виділити даний ресурс;
. відстеження стану ресурсу — тобто підтримку оперативної інформації у тому, зайнятий або зайнятий ресурс, а подільних ресурсів — скільки ресурсу вже розподілено, а яке вільно. Аби вирішити цих загальних завдань управління ресурсами різні ОС використовують різні алгоритми, що в рахунку й визначає їх образ загалом, включаючи характеристики продуктивності, сферу застосування і навіть користувальницький інтерфейс. Приміром, алгоритм управління процесором значною мірою визначає, чи є ОС системою поділу часу, системою пакетної обробки чи системою реального времени.
Эволюция ОС.
Перший період (1945 -1955).
Известно, що було винайдено англійським математиком Чарльзом Бэбиджем наприкінці вісімнадцятого століття. Його «аналітична машина «не змогла но-настоящему заробити, оскільки технології на той час не задовольняли вимогам з виготовлення деталей точної механіки, які були необхідні обчислювальної техніки. Відомо також, що цей комп’ютер у відсутності ОС. Певний прогрес у створенні цифрових обчислювальних машин стався після Другої світової війни. У 40-х були перші лампові обчислювальні устрою. Тоді сама й той самий група людей брала участь й у проектуванні, й у експлуатації, й у програмуванні обчислювальної машини. Це була радше науково-дослідна праця на ниві обчислювальної техніки, а чи не використання РС як інструмента розв’язання будь-яких практичних завдань з деяких інших прикладних областей. Програмування здійснювалося виключно на машинному мові. Про операційні системи бо й промови, завдання організації обчислювального процесу вирішувалися вручну кожним програмістом з пульта управління. Немає будь-якого іншого системного програмного забезпечення, крім бібліотек математичних і службових подпрограмм.
Второй період (1955 — 1965).
С середини 1950;х років почалося нове період у розвитку обчислювальної техніки, пов’язані з появою нової технічної бази — напівпровідникових елементів. Комп’ютери другого покоління стали надійними, тепер вони змогли безупинно працювати так довго, щоб у на них можна було покласти виконання справді практично найважливіших завдань. Саме на цей період відбувся розподіл персоналу на програмістів і операторів, експлуатаційників і розробників обчислювальних машин. Тоді ж з’явилися перші алгоритмічні мови, отже й перші системні програми — компілятори. Вартість процесорного часу зросла, що вимагало зменшення непродуктивних витрат часу між запусками програм. З’явилися перші системи пакетної обробки, які просто автоматизували запуск однієї програм одною і тим самим збільшували коефіцієнт завантаження процесора. Системи пакетної обробки з’явилися прообразом сучасних операційними системами, вони почали першими системними програмами, призначеними управління обчислювальним процесом. У результаті реалізації систем пакетної обробки розробили формалізований мову управління завданнями, з допомогою якого програміст повідомляв системи та оператору, яку роботу хоче виконати на обчислювальної машині. Сукупність кількох завдань, зазвичай як колоди перфокарт, отримав назву пакета заданий.
Третий період (1965 — 1980).
Следующий важливий період розвитку обчислювальних машин належить до 1965;1980 років. Саме тоді у Вищій технічній базі стався перехід від окремих напівпровідникових елементів типу транзисторів до інтегральним мікросхемах, що було набагато більше можливостей новому, третьому поколінню комп’ютерів. І тому періоду характерно також створення сімейств программно-совместимых машин. Першим сімейством программно-совместимых машин, побудованих на інтегральних мікросхемах, стала серія машин IBM/360. Побудоване на початку 1960;х років це сімейство значно перевершувало машини другого покоління критерієм цена/произ-водительность. Невдовзі ідея программно-совместимых машин стала загальновизнаною. Програмна сумісність вимагала і сумісності операційними системами. Такі операційні системи мала б працюватимете, і великих, і малих обчислювальних системах, з великим і малим кількістю різноманітної периферії, у комерційній області й області наукових досліджень про. Операційні системи, побудовані з наміром задовольнити всього цього суперечливим вимогам, виявилися надзвичайно складними «монстрами ». Вони складалася з багатьох ассемблерных рядків, написаних тисячами програмістів, і вони містили тисячі помилок, викликають нескінченний потік виправлень. У новій версії ОС виправлялися одні помилки і вносилися інші. Проте, попри неозорі розміри і чимало закутків, OS/360 і інші подібні операційні системи машин третього покоління справді задовольняли більшості вимог споживачів. Найважливішим досягненням ОС цього покоління стала реалізація мультипрограммирования. Мультипрограммирование — це спосіб організації обчислювального процесу, у якому однією процесорі поперемінно виконуються кілька програм. Поки програми виконує операцію вводу-виводу, процесор не простоює, як це робилося при послідовному виконанні програм (однопрограммный режим), а виконує іншу програму (многопрограммный режим). У цьому кожна програма завантажується на свій ділянку оперативної пам’яті, званий розділом. Інше нововведення — спулинг (spooling). Спулинг тоді визначався як засіб організації обчислювального процесу, відповідно до яким завдання считывались з перфокарт на диск у цьому темпі, де вони з’являлися у приміщенні обчислювального центру, та був, коли чергове завдання завершувалося, нове завдання з диска завантажувалося в звільнений розділ. Поруч із мультипрограммной реалізацією систем пакетної обробки з’явився новим типом ОС — системи поділу часу. Варіант мультипрограммирования, застосовуваний у системах поділу часу, націлений створення кожному за окремого користувача ілюзії одноосібного використання обчислювальної машины.
Четвертый період (1980 — справжнє время) Следующий період еволюції операційними системами пов’язані з появою великих інтегральних схем (БІС). Тоді ж сталося різке зростання ступеня інтеграції і здешевлення мікросхем. Комп’ютер став доступний окремому людині, і настала ера персональних комп’ютерів. З погляду архітектури персональні комп’ютери нічим не відрізнялися від класу миникомпьютеров типу PDP-11, а от ціна вони істотно відрізнялася. Якщо миникомпьютер дозволив мати власну обчислювальну машину відділу підприємства чи університету, то персонального комп’ютера зробив можливим для окремої людини. Комп’ютери стали широко використовуватися нефахівцями, що вимагало розробки «дружнього «програмного забезпечення, це поклало край кастовості програмістів. На ринку операційними системами домінували дві системи: MS-DOS і UNIX. Однопрограммная однопользовательская ОС MS-DOS широко використовувалася для комп’ютерів, побудованих з урахуванням мікропроцесорів Intel 8088, та був 80 286, 80 386 і 80 486. Мультипрограммная многопользовательская ОС UNIX домінувала серед «не-интеловских «комп'ютерів, особливо побудованих на базі високопродуктивних RISC-процессоров. У 1980;х стали бурхливо розвиватися мережі персональних комп’ютерів, працюючі під керівництвом мережевих чи розподілених ОС. У мережевих ОС користувачі мали бути зацікавленими обізнані з інших комп’ютерів, і повинні це робити логічний вхід на другий комп’ютер, щоб скористатися його ресурсами, переважно файлами. Кожна машина в мережі виконує своє власне локальну операційну систему, відрізнятиметься від ОС автономного комп’ютера наявністю додаткові засоби, дозволяють комп’ютера працювати у мережі. Мережевий ОС немає фундаментальних відмінностей від ОС однопроцессорного комп’ютера. Вона обов’язково містить програмну підтримку для мережевих интерфейсных пристроїв (драйвер мережного адаптера), і навіть кошти на віддаленого входу до інших комп’ютери сіті й кошти доступу до віддаленим файлам, проте ці доповнення істотно не змінюють структуру самої операційній системы.
Классификация ОС Операционные системи можуть різнитися особливостями реалізації внутрішніх алгоритмів управління основними ресурсами комп’ютера (процесорами, пам’яттю, пристроями), особливостями використаних методів проектування, типами апаратних платформ, областями використання коштів і багатьма іншими властивостями. Нижче приведено класифікація ОС з кількох найбільш основним признакам.
Особенности алгоритмів управління ресурсами От ефективності алгоритмів управління локальними ресурсами комп’ютера у що свідчить залежить ефективність всієї мережевий ОС загалом. Тому, характеризуючи мережну ОС, часто наводять найважливіші особливості реалізації функцій ОС по управлінню процесорами, пам’яттю, зовнішніми пристроями автономного комп’ютера. Приміром, залежно від особливостей використаного алгоритму управління процесором, операційні системи ділять на многозадачные і однозадачные, многопользовательские і однопользовательские, на системи, підтримують многонитевую обробку та котрі підтримують її, на многопроцессорные і однопроцессорные системи. Підтримка багатозавдань. За кількістю одночасно виконуваних завдань операційні системи можна розділити на два класса:
. однозадачные (наприклад, MS-DOS, MSX) и.
. многозадачные (OC EC, OS/2, UNIX, Windows 95). Однозадачные ОС переважно виконують функцію надання користувачеві віртуальної машини, роблячи простішим і дуже зручним процес взаємодії користувача з комп’ютером. Однозадачные ОС включають засоби управління периферійними пристроями, засоби управління файлами, кошти спілкування з користувачем. Многозадачные ОС, крім перелічених вище функцій, управляють поділом спільно використовуваних ресурсів, як-от процесор, оперативна пам’ять, файли і його зовнішні устрою. Підтримка многопользовательского режиму. За кількістю одночасно працюючих користувачів ОС діляться на:
. однопользовательские (MS-DOS, Windows 3. x, ранні версії OS/2);
. многопользовательские (UNIX, Windows NT). Головним відзнакою многопользовательских систем від однопользовательских служить наявність засобів захисту інформації кожного користувача від несанкціонованого доступу інших користувачів. Слід зазначити, що ні всяка многозадачная система є многопользовательской, і всяка однопользовательская ОС є однозадачной. Вытесняющая і невытесняющая многозадачность. Найважливішим поділюваним ресурсом є процессорное час. Спосіб розподілу процесорного часу між кількома одночасно що у системі процесами (чи нитками) багато чому визначає специфіку ОС. Серед сили-силенної існуючих варіантів реалізації багатозавдань можна назвати дві групи алгоритмов:
. невытесняющая многозадачность (NetWare, Windows 3. x);
. вытесняющая многозадачность (Windows NT, OS/2, UNIX). Основним відмінностями між вытесняющим і невытесняющим варіантами багатозавдань є ступінь централізації механізму планування процесів. У першому випадку механізм планування процесів повністю зосереджений в операційній системі, тоді як у другому — розподілено між системою та прикладними програмами. При невытесняющей багатозавдань активний процес виконується до того часу, що він сам, з власної ініціативи, не віддасть управління операційній системі у тому, щоб вибрала з черги інший готова до виконання процес. При вытесняющей багатозавдань постанову по переключенні процесора з однієї процесу на інший приймається операційній системою, а чи не самим активним процесом. Підтримка многонитевости. Важливим властивістю операційними системами є можливість розпаралелювання обчислень у межах одного завдання. Многонитевая ОС поділяє процессорное час не між завданнями, а поміж їхніми окремими гілками (нитками). Многопроцессорная обробка. Іншою важливою властивістю ОС є або наявність у ній коштів підтримки многопроцессорной обробки — мультипроцессирование. Мультипроцессирование призводить до ускладнення всіх алгоритмів управління ресурсами. Нині стає загальноприйнятим введення у ОС функцій підтримки многопроцессорной обробки даних. Такі функції є у операційних системах Solaris 2. x фірми Sun, Open Server 3. x компанії Santa Crus Operations, OS/2 фірми IBM, Windows NT фірми Microsoft і NetWare 4.1 фірми Novell. Многопроцессорные ОС можуть класифікуватися за способом організації обчислювального процесу у системі з многопроцессорной архітектурою: асиметричні ОС і симетричні ОС. Асиметрична ОС повністю виконується одному з процесорів системи, розподіляючи прикладні завдання іншим процесорам. Симетрична ОС повністю децентралізована і використовує весь пул процесорів, поділяючи їх між системними і прикладними завданнями. Вище було розглянуто характеристики ОС, пов’язані з міським управлінням лише одним типом ресурсів — процесором. Важливе впливом геть образ операційній системи загалом, спроможності її використання їх у тій чи іншій області надають особливості та інших підсистем управління локальними ресурсами — підсистем управління пам’яттю, файлами, пристроями вводу-виводу. Специфіка ОС виявляється у тому, яким чином вона реалізує мережні функції: розпізнавання і перенапрямок до мережі запитів до віддаленим ресурсів, передача повідомлень через мережу, виконання віддалених запитів. При реалізації мережевих функцій виникає комплекс завдань, що з розподіленим характером збереження і обробки даних у мережі: ведення довідкової інформації про усіх можливих у мережі ресурсах і серверах, адресація взаємодіючих процесів, забезпечити прозорість доступу, тиражування даних, узгодження копій, підтримка безпеки данных.
Особенности апаратних платформ На властивості ОС безпосередній вплив надають апаратні кошти, куди вона орієнтована. На кшталт апаратури розрізняють операційні системи персональних комп’ютерів, мини-компьютеров, мейнфреймов, кластерів та мереж ЕОМ. Серед перелічених типів комп’ютерів могли трапитися як однопроцессорные варіанти, і многопроцессорные. У будь-якому разі специфіка апаратних коштів, зазвичай, віддзеркалюється в специфіці операційними системами. Вочевидь, що ОС великий машини є складною і функціональної, ніж ОС самого персонального комп’ютера. Так було в ОС великих машин функції планування потоку виконуваних завдань, очевидно, реалізуються шляхом використання складних пріоритетних дисциплін і вимагають більшої обчислювальної потужності, ніж у ОС персональних комп’ютерів. Аналогічно само і коїться з іншими функціями. Мережевий ОС має у собі кошти передачі повідомлень між комп’ютерами лініями зв’язку, що цілком непотрібні в автономної ОС. За підсумками цих повідомлень мережна ОС підтримує поділ ресурсів комп’ютера між віддаленими користувачами, під'єднаними до неї. Для підтримки функцій передачі повідомлень мережні ОС містять спеціальні програмні компоненти, реалізують популярні комунікаційні протоколи, такі як ІР, IPX, Ethernet та інші. Многопроцессорные системи вимагає від ОС особливої організації, з допомогою якій саме операційна система, і навіть підтримувані нею докладання міг би виконуватися паралельно окремими процесорами системи. Паралельна робота окремих частин ОС створює додаткові проблеми для розробників ОС, позаяк у цьому випадку набагато складніше забезпечити узгоджений доступ окремих процесів до загальним системним таблицям, виключити ефект гонок й інші небажані наслідки асинхронного виконання. Інші вимоги висуваються до операційним системам кластерів. Кластер — слабко пов’язана сукупність кількох обчислювальних систем, працюючих спільно до виконання загальних додатків, і які здавалися користувачеві єдиної системою. Поруч із спеціальної апаратурою для функціонування кластерных систем необхідна, і програмна підтримку з боку ОС, що зводиться переважно до синхронізації доступу до поділюваним ресурсів, виявлення відмов і динамічної реконфигурации системи. Однією із перших розробок у галузі кластерных технологій були рішення компанії Digital Equipment з урахуванням комп’ютерів VAX. Нещодавно цій компанією укладено угоди з корпорацією Microsoft про розробку кластерної технології, використовує Windows NT. Кілька компаній пропонують кластери з урахуванням UNIX-машин. Поруч із ОС, орієнтованими на цілком певний тип апаратної платформи, існують операційні системи, спеціально розроблені таким чином, що вони були легко перенесені з комп’ютера одного типу на комп’ютер іншого типу, звані мобільні ОС. Найяскравішим прикладом такий ОС популярна система UNIX. У цих системах аппаратно-зависимые місця старанно локалізовано, отже при перенесення системи нові платформу переписуються лише вони. Засобом, що полегшує перенесення решти ОС, є написання в машиннонезалежному мові, наприклад, на З, який був розроблений для програмування операційних систем.
Особенности областей использования Многозадачные ОС поділяються втричі типу відповідно до використаними їх розробники критеріями эффективности:
. системи пакетної обробки (наприклад, OC EC),.
. системи поділу часу (UNIX, VMS),.
. системи реального часу (QNX, RT/11). Системи пакетної обробки призначалися вирішення завдань переважно обчислювального характеру, які потребують швидкого результатів. Головна мета і критерієм ефективності систем пакетної обробки є максимальна пропускну здатність, тобто рішення максимальної кількості завдань в одиницю часу. Досягнення цього в системах пакетної обробки використовуються наступна схема функціонування: на початку роботи формується пакет завдань, кожне завдання містить вимогу до системним ресурсів; від цього пакета завдань формується мультипрограммная суміш, то є чимало одночасно виконуваних завдань. Для одночасного виконання вибираються завдання, що пред’являють відмінні вимоги до ресурсів, те щоб забезпечувалася збалансована завантаження всіх пристроїв обчислювальної машини; так, наприклад, в мультипрограммной суміші бажано одночасна наявність обчислювальних завдань і завдань із інтенсивним уведенням-висновком. Отже, вибір нового завдання з пакету завдань залежить від внутрішній ситуації, що складається у системі, тобто вибирається «вигідне «завдання. Отже, в ОС неможливо гарантувати виконання тієї чи іншої завдання протягом певного періоду часу. У системах пакетної обробки переключення процесора з виконання одного завдання виконання інший відбувається у разі, якщо активна завдання сама цурається процесора, наприклад, через необхідності виконати операцію виводу-введення-висновку. Тому одним це може надовго зайняти процесор, що унеможливлює виконання інтерактивних завдань. Отже, взаємодія користувача з обчислювальної машиною, де установлено систему пакетної обробки, зводиться до того що, що він приносить завдання, віддає його диспетчеру-оператору, тож під кінець дні після виконання всього пакета завдань отримує результат. Вочевидь, що така порядок знижує ефективності роботи користувача. Системи поділу часу покликані виправити основний недолік систем пакетної обробки — ізоляцію пользователя-программиста від процесу виконання його завдань. Кожному користувачеві системи поділу часу надається термінал, із якої він може вести діалог із своєї програмою. Позаяк у системах поділу часу кожного завдання виділяється лише квант процесорного часу, жодна завдання займає процесор надовго, та палестинці час відповіді виявляється прийнятним. Якщо квант обраний досить невеликим, те в всіх користувачів, одночасно працівників одному й тому ж машині, видається, що з них одноосібно використовує машину. Зрозуміло, що системи поділу часу мають меншою пропускною спроможністю, ніж системи пакетної обробки, бо в виконання приймається кожна запущена користувачем завдання, а чи не та, яка «вигідна «системі, та, крім того, є накладні витрати обчислювальної потужності більш часте переключення процесора з завдання на завдання. Критерієм ефективності систем поділу часу не максимальна пропускну здатність, а зручність і ефективності роботи користувача. Системи реального часу застосовуються керувати різними технічними об'єктами, такими, наприклад, як верстат, супутник, наукова експериментальну установку чи технологічними процесами, такі як гальванічна лінія, доменний процес тощо. В усіх цих випадках існує гранично дозволене час, протягом якого має бути виконано та чи інша програма, управляюча об'єктом, інакше може відбутися аварія: супутник вийде із зони видимості, експериментальні дані, вступники з датчиків, буде втрачено, товщина гальванічного покриття ні відповідатиме нормі. Отже, критерієм ефективності для систем реального часу був частиною їхнього здатність витримувати заздалегідь задані інтервали часу між запуском програми розвитку й отриманням результату (управляючого впливу). Це час називається часом реакції системи, а відповідне властивість системи — реактивністю. Для цих систем мультипрограммная суміш є фіксований набір заздалегідь розроблених програм, а вибір програми на виконання здійснюється з поточного стану об'єкта чи відповідність до розписом планових робіт. Деякі операційні системи можуть поєднувати у собі властивості систем різних типів, наприклад, частина завдань може виконуватися як пакетної обробки, а частина — як реального часу, чи як поділу часу. У разі режим пакетної обробки часто називають фоновим режимом.
Особенности методів построения При описі ОС часто вказуються особливості її структурної організації та основні концепції, призначені у її основу. До таких базовим концепціям относятся:
. Способи побудови ядра системи — монолітне ядро чи мікроядерний підхід. Більшість ОС використовує монолітне ядро, яке компонується як біжать програма, яка у привілейованому режимі яка використовує швидкі переходи з одного процедури в іншу, які потребують перемикання з привілейованого режиму на користувальницький і навпаки. Альтернативою є будування ОС з урахуванням мікроядра, працюючого й у привілейованому режимі виконує лише мінімум функцій із управління апаратурою, тоді як функції ОС вищого рівня виконують спеціалізовані компоненти ОС — сервери, працюють у користувальному режимі. За такої побудові ОС працює більш як повільно, оскільки часто виконуються переходи між привілейованим режимом і користувальницьким, зате система виходить гнучкішою — її функції можна нарощувати, модифікувати чи звужувати, додаючи, модифікуючи чи виключаючи сервери користувальницького режима.
З іншого боку, сервери добре захищені друг від одну немов й зняти будь-які користувальні процессы.
. Побудова ОС з урахуванням объектно-ориентированного підходу дає можливість вільно використовувати усі його гідності, добре зарекомендували себе рівні додатків, всередині ОС, саме: акумуляцію вдалих рішень на формі стандартних об'єктів, можливість створення нових об'єктів з урахуванням наявних з допомогою механізму наслідування, хорошу захист даних у цих колегіях инкапсуляции у внутрішні структури об'єкта, що робить дані недоступними для несанкціонованого використання ззовні, структуризованность системи, що з набору добре певних объектов.
. Наявність кількох прикладних середовищ дає можливість у однієї ОС одночасно виконувати докладання, розроблені для кількох ОС.
Багато сучасні операційні системи підтримують одночасно прикладні середовища MS-DOS, Windows, UNIX (POSIX), OS/2 чи навіть деякого підмножини від цього популярного набору. Концепція багатьох прикладних середовищ найбільш просто реалізується у ОС з урахуванням мікроядра, з якого працюють різні сервери, частина яких реалізують прикладну середу тій чи іншій операційній системы.
. Розподілена організація ОС дозволяє спростити роботу користувачів і програмістів в мережевих середовищах. У розподіленої ОС реалізовані механізми, які дозволяють користувачеві бути і сприймати мережу вигляді традиційного однопроцессорного комп’ютера. Характерними ознаками розподіленої організації ОС є: наявність єдиної довідкової служби поділюваних ресурсів, єдиної служби часу, використання механізму виклику віддалених процедур (RPC) для прозорого розподілу програмних процедур по машинам, многонитевой обробки, що дозволяє распараллеливать обчислення у межах одного завдання і виконуватиме цю завдання відразу на кількох комп’ютерах мережі, і навіть наявність інших розподілених служб.
Сетевые операційні системы.
Структура мережевий операційній системы Сетевая операційна система лежить в основі будь-який обчислювальної мережі. Кожен комп’ютер у мережі значною мірою автономний, тому під мережевий операційній системи у широкому значенні розуміється сукупність операційними системами окремих комп’ютерів, котрі взаємодіють із метою обміну повідомленнями й міжнародного поділу ресурсів за правилами — протоколів. У вузькому сенсі мережна ОС — це операційна система окремого комп’ютера, забезпечує можливість працювати у сети.
[pic].
Рис. 1.1. Структура мережевий ОС У мережевий операційній системі окремої машини можна виокремити декілька частин (малюнок 1.1):
. Засоби управління локальними ресурсами комп’ютера: функції розподілу оперативної пам’яті між процесами, планування і диспетчеризації процесів, управління процесорами в мультипроцессорных машинах, управління периферійними пристроями та інші функцій управління ресурсами локальних ОС.
. Кошти надання власних ресурсів немає і послуг у загальне користування — серверна частина ОС (сервер). Ці цифри забезпечують, наприклад, блокування файлів і записів, що потрібно спільного використання; ведення довідників імен мережевих ресурсів; обробку запитів віддаленого доступу до власного файловою системи та базі даних; управління чергами запитів віддалених користувачів до своїх периферійним устройствам.
. Кошти запиту доступу до віддаленим ресурсів і послугам та його використання — клієнтська частина ОС (редиректор). Ця частина виконує розпізнавання і перенапрямок до мережі запитів до віддаленим ресурсів від додатків і користувачів, у своїй запит йде від докладання в локальної формі, а передається до мережі на другий формі, відповідної вимогам серверу. Клієнтська частина також здійснює прийом відповідей від серверів і перетворення в локальний формат, отож у докладання виконання локальних віддалених запитів неразличимо.
. Комунікаційні кошти ОС, з допомогою яких обмін повідомленнями у мережі. Ця частина забезпечує адресацію і буферизацію повідомлень, вибір маршруту передачі повідомлення через мережу, надійність передачі й т.п., тобто є способом транспортування сообщений.
В залежність від функцій, покладених на конкретний комп’ютер, у його операційній системі може відсутні або клієнтська, або серверна частини. На малюнку 1.2 показано взаємодія мережевих компонентів. Тут комп’ютер 1 виконує роль «чистого «клієнта, а комп’ютер 2 — роль «чистого «серверу, відповідно на першої машині відсутня серверна частина, але в другий — клієнтська. На малюнку окремо показаний компонент клієнтської частини — редиректор. Саме редиректор перехоплює все запити, які від додатків, і аналізує їх. Якщо видано запит до ресурсу даного комп’ютера, він переадресовується відповідної підсистемі локальної ОС, Якщо ж це запит до віддаленому ресурсу, він переправляється до мережі. У цьому клієнтська частина перетворює запити з локальної форми в мережевий формат і передає його транспортної підсистемі, що відповідає за доставку повідомлень зазначеному серверу. Серверна частина ОС комп’ютера 2 приймає запит, перетворює його й передає до виконання своєї локальної ОС. Потому, як наслідок отримано, сервер звертається до транспортної підсистемі і направляє відповідь клієнту, выдавшему запит. Клієнтська частина перетворює результат в відповідний формат і адресує його додатку, яку видало запрос.
[pic].
Рис. 1.2. взаємодія компонентів ОС при взаємодії комп’ютерів Насправді склалося кілька підходів побудувати мережевих операційних систем (малюнок 1.3). Перші мережні ОС виглядали сукупність існуючої локальної ОС і надстроєної з неї мережевий оболонки. Причому у локальну ОС встраивался мінімум мережевих функцій, необхідні роботи мережевий оболонки, яка виконувала основні мережні функції. Прикладом такого підходу використання з кожної машині мережі ОС MS DOS (що має починаючи з її третьої версії з’явилися такі вбудовані функції, як блокування файлів і записів, необхідних спільного доступу до файлам). Принцип побудови мережевих ОС як мережевий оболонки над локальної ОС використовують і у сприйнятті сучасних ОС, таких, наприклад, як LANtastic чи Personal Ware.
[pic].
Рис. 1.3. Варіанти побудови мережевих ОС Однак більш ефективним представляється шлях розробки операційних систем, спочатку виділені на роботи у мережі. Мережні функції у ОС подібного типу глибоко вмонтовані в основні модулі системи, що забезпечує їх логічний стрункість, простоту експлуатації і модифікації, і навіть високу продуктивність. Прикладом такої ОС є система Windows NT фірми Microsoft, яка з допомогою встроенности мережевих коштів забезпечує більш високі наведені цифри щодо й захищеності інформації з порівнянню з мережевий ОС LAN Manager тієї ж фірми (спільне вироблення з IBM), що є надбудовою над локальної операційній системою OS/2.
Одноранговые мережні ОС і ОС з виділеними серверами В залежність від того, як розподілені функції між комп’ютерами мережі, мережні операційні системи, отже, і мережі діляться на два класу: однорангові і двухранговые (малюнок 1.4). Останні частіше називають мережами з виділеними серверами.
[pic].
(а).
[pic].
(б).
Рис. 1.4. (а) — Одноранговая мережу, (б) — Двухранговая мережу Якщо комп’ютер надає свої фінансові ресурси іншим користувачам мережі, він ж виконує функцію серверу. У цьому комп’ютер, яка звертається ресурсів інший машини, є клієнтом. Як було зазначено, комп’ютер, працював у мережі, може виконувати функції або клієнта, або серверу, або поєднувати обидві цих функцій. Якщо виконання будь-яких серверних функцій є основним призначенням комп’ютера (наприклад, надання файлів на загальне користування всім іншим користувачам сіті або організація спільного використання факсу, чи надання всім користувачам мережі можливості запуску на даному комп’ютері своїх додатків), такий комп’ютер називається виділеним сервером. Залежно від цього, який ресурс серверу є поділюваним, вона називається файл-сервером, факс-сервером, принт-сервером, сервером додатків тощо. Вочевидь, що у виділених серверах бажано встановлювати ОС, спеціально оптимизированные до виконання тих чи інших серверних функцій. Тож у мережах із виділеними серверами найчастіше використовують мережні операційні системи, до складу яких входить кількох варіантів ОС, відмінних можливостями серверних частин. Наприклад, мережна ОС Novell NetWare має серверний варіант, оптимізований до роботи на ролі файл-сервера, і навіть варіанти оболонок для робочих станцій з різними локальними ОС, причому ці оболонки виконують виключно функції клієнта. Іншим прикладом ОС, яка орієнтована побудова мережі з виділеним сервером, є операційна система Windows NT. На відміну від NetWare, обидва варіанти даної мережевий ОС — Windows NT Server (для виділеного серверу) і Windows NT Workstation (для робочої станції) — можуть підтримувати функції і імені клієнта й серверу. Але серверний варіант Windows NT має більші можливості надання ресурсів свого комп’ютера іншим користувачам мережі, оскільки може виконувати ширший набір функцій, підтримує більше одночасних сполук з клієнтами, реалізує централізоване управління мережею, має як розвинені засоби захисту. Виділений сервер немає звичаю використовувати як комп’ютера для виконання поточних завдань, які пов’язані з його основним призначенням, оскільки це може зменшити продуктивність його роботи, як серверу. У зв’язку з такими міркуваннями в ОС Novell NetWare на серверної частини можливість виконання звичайних прикладних програм взагалі передбачена, тобто сервер зовсім позбавлений клієнтської частини, але в робочих станціях відсутні серверні компоненти. Однак у інших мережевих ОС функціонування на виділеному сервері клієнтської частини цілком імовірно. Наприклад, під управлінням Windows NT Server можуть запускатися звичайні програми локального користувача, що потенційно можуть зажадати виконання клієнтських функцій ОС у разі запитів до ресурсів інших комп’ютерів мережі. При цьому робочі станції, у яких встановлено ОС Windows NT Workstation, можуть виконувати функції невыделенного серверу. Важливо зрозуміти, що попри те що мережі з виділеним сервером все комп’ютери у випадку можуть виконувати одночасно ролі й серверу, і клієнта, ця мережа функціонально не симетрична: апаратно і програмно в ній реалізовані два типу комп’ютерів — одні, більшою мірою зорієнтовані виконання серверних функцій і що під управлінням спеціалізованих серверних ОС, інші - переважно виконують клієнтські функції і що під керівництвом відповідного цього призначення варіанта ОС. Функціональна несиметричність, зазвичай, викликає і несиметричність апаратури — для виділених серверів використовуються потужніші комп’ютери з більшими на обсягами оперативної та зовнішньої пам’яті. Отже, функціональна несиметричність у мережах з виділеним сервером супроводжується несимметричностью операційними системами (спеціалізація ОС) і апаратної несимметричностью (спеціалізація комп’ютерів). У одноранговых мережах все комп’ютери рівні правах доступу до ресурсів друг друга. Кожен користувач може за власним бажанням оголосити будь-якої ресурс свого комп’ютера поділюваним, після чого інші користувачі можуть його експлуатувати. У цих мережах усім комп’ютерах встановлюється одна й та ОС, що надає всім комп’ютерів у мережі потенційно рівні можливості. Однорангові мережі може бути побудовано, наприклад, на базі ОС LANtastic, Personal Ware, Windows for Workgroup, Windows NT Workstation. У одноранговых мережах він може виникнути функціональна несиметричність: одні користувачі не бажають розділяти свої фінансові ресурси з іншими, й у такому випадку їхнє комп’ютери виконують роль клієнта, за іншими комп’ютерами адміністратор закріпив лише функції організації спільного використання ресурсів, отже є серверами, в третьому разі, коли локальний користувач не заперечує використання ресурсів немає і сам він не виключає можливості звернення до іншим комп’ютерів, ОС, встановлювана з його комп’ютері, повинна мати і серверную, і клієнтську частини. На відміну від мереж з виділеними серверами, в одноранговых мережах відсутня спеціалізація ОС залежно від переважної функціональної спрямованості - клієнта чи серверу. Усі варіації реалізуються засобами конфигурирования однієї й тієї ж варіанта ОС. Однорангові мережі простіше у створенні і експлуатації, але вони застосовуються переважно для об'єднання невеликих груп користувачів, не предъявляющих великих вимог до обсягам береженої інформації, її захищеності від несанкціонованого доступу і до швидкості доступу. При підвищених вимоги до цим характеристикам більш підходящими є двухранговые мережі, де сервер краще переймається тим обслуговування користувачів своїми ресурсами, оскільки його апаратура й мережеву операційна система спеціально спроектовані з цією цели.
ОС для робочих груп, і ОС для мереж масштабу предприятия Сетевые операційні системи мають різні властивості залежно від цього, призначені вони для мереж масштабу робочої групи (відділу), для мереж масштабу кампусу або заради мереж масштабу предприятия.
. Мережі відділів — використовуються невеличкий групою співробітників, вирішальних спільні завдання. Головна мета мережі відділу є поділ локальних ресурсів, як-от докладання, дані, лазерні принтери і модемы.
Мережі відділів звичайно поділяються на подсети.
. Мережі кампусів — з'єднують кілька мереж відділів всередині окремого будівлі всередині однієї території підприємства. Ці мережі є всі ще локальними мережами, хоч і можуть покривати територію України у кілька квадратних кілометрів. Сервіси такий мережі включають взаємодія між мережами відділів, доступом до баз даних підприємства, доступом до факссерверам, високошвидкісним модемів і високошвидкісним принтерам.
. Мережі підприємства (корпоративні мережі) — об'єднують все комп’ютери всіх територій окремого підприємства. Вони можуть покривати місто, регіон і навіть континент. У цих мережах користувачам надається доступом до інформації та додатків, які у інших робочих групах, інших відділах, підрозділах і штаб-квартирах корпорації. Головне завдання ОС, яка у мережі масштабу відділу, є організація поділу ресурсів, як-от докладання, дані, лазерні принтери і, можливо, низкоскоростные модеми. Зазвичай мережі відділів мають одну чи дві файлових серверу та лише 30 користувачів. Завдання управління лише на рівні відділу щодо прості. До завдань адміністратора входить додавання нових користувачів, усунення простих відмов, інсталяція нових вузлів і установка нових версій програмного забезпечення. Операційні системи мереж відділів добре відпра-цьовані й досить різноманітні, також, як і держава сама мережі відділів, віддавна застосовувані і налагоджені. Така мережу зазвичай використовує одну чи максимум дві мережні ОС. Найчастіше це мережу з виділеним сервером NetWare 3. x чи Windows NT, або ж одноранговая мережу, наприклад мережу Windows for Workgroups. Користувачі і адміністратори мереж відділів невдовзі усвідомлюють, що можуть поліпшити ефективність своєї роботи шляхом отримання доступу до інформації інших відділів свого підприємства. Якщо працівник, займається продажами, може мати простий доступом до характеристикам конкретного продукту й реально ввімкнути їх в презентацію, ця інформація буде більш свіжої та триватиме більший вплив на покупців. Якщо відділ маркетингу може мати простий доступ до характеристикам продукту, який поки лише розробляється інженерним відділом, він може швидко підготувати маркетингові матеріали відразу ж потрапити по закінченні розробки. Отже, наступним кроком у еволюції мереж є об'єднання локальних мереж кількох відділів на єдину мережу будівлі групи будинків. Такі мережі називають мережами кампусів. Мережі кампусів можуть сягати сталася на кілька кілометрів, та заодно глобальні сполуки зайві. Операційна система, яка у мережі кампусу, мають забезпечувати для співробітників одних відділів доступом до деяким файлам й адміністративного ресурсів мереж інших відділів. Послуги, надані ОС мереж кампусів, не обмежуються простим поділом файлів і принтерів, а часто надають доступ і до серверам інших типів, наприклад, до факс-серверам і до серверів високошвидкісних модемів. Важливим сервісом, наданих операційними системами даного класу, є доступом до корпоративних баз даних, незалежно від цього, розташовуються вони на серверах баз даних чи миникомпьютерах. На рівні мережі кампусу починаються проблеми інтеграції. Загалом разі, відділи вже вибрали собі типи комп’ютерів, мережного устаткування і мережевих операційними системами. Наприклад, інженерний відділ може використовувати операційну систему UNIX та мережеве устаткування Ethernet, відділ продажів може використовувати операційні середовища DOS/Novell і устаткування Token Ring. Найчастіше мережу кампусу з'єднує різнорідні комп’ютерні системи, тоді як мережі відділів використовують однотипні комп’ютери. Корпоративна мережу з'єднує мережі всіх підрозділів підприємства, загалом разі що є великих відстанях. Корпоративні мережі використовують глобальні зв’язку (WAN links) для сполуки локальних мереж чи окремих комп’ютерів. Користувачам корпоративних мереж потрібні всі ті докладання і комунальні послуги, які у мережах відділів і кампусів, плюс деякі додаткові докладання і комунальні послуги, наприклад, доступом до додатків мейнфреймов і миникомпьютеров і до глобальних зв’язкам. Коли ОС розробляється для локальної сіті або робочої групи, що його головною обов’язком є поділ файлів та інших мережевих ресурсів (зазвичай принтерів) між локально під'єднаними користувачами. Такий їхній підхід не застосуємо до рівня підприємства. Поруч із базовими сервісами, пов’язані з поділом файлів і принтерів, мережна ОС, яка розробляється для корпорацій, повинна підтримувати ширший набір сервісів, куди зазвичай входять поштова служба, кошти колективної роботи, підтримка віддалених користувачів, факс-сервис, обробка голосових повідомлень, організація відеоконференцій і ін. З іншого боку, багато існуючі методи лікування й підходи до вирішення традиційних завдань мереж менших масштабів для корпоративної мережі виявилися непридатними. На першому плані вийшли завдання і проблеми, які у мережах робочих груп, відділів і навіть кампусів чи мали другорядне значення, або взагалі виявлялися. Наприклад, найпростіша для невеличкий мережі завдання ведення облікової інформації про користувачів зріс у складну проблему для мережі масштабу підприємства. А використання глобальних зв’язків жадає від корпоративних ОС підтримки протоколів, добре працівників низкоскоростных лініях, і від деяких традиційно використовуваних протоколів (наприклад, тих, які активно використовують широкомовні повідомлення). Особливого значення придбали завдання подолання гетерогенності - у мережі з’явилися численні шлюзи, щоб забезпечити узгоджену роботу різних ОС і мережевих системних додатків. До ознаками корпоративних ОС можна віднести також такі особливості. Підтримка додатків. У корпоративних мережах виконуються складні докладання, потребують до виконання великий обчислювальної потужності. Такі докладання поділяються сталася на кілька частин, наприклад, однією комп’ютері виконується частина докладання, що з виконанням запитів до бази даних, іншою — запитів до файловому сервісу, але в клієнтських машинах — частина, реалізує логіку обробки даних докладання і організує інтерфейс з користувачем. Обчислювальна частину спільних для корпорації програмних систем може бути об'ємної і непідйомною для робочих станцій клієнтів, тому докладання робитиметься ефективніше, якщо найбільш складні в обчислювальному відношенні частини перенести на спеціально готовий до цього потужний комп’ютер — сервер додатків. Сервер додатків має базуватися на потужної апаратної платформі (мультипроцессорные системи, часто з урахуванням RISC-процессоров, спеціалізовані кластерні архітектури). ОС серверу додатків повинна забезпечувати високу продуктивність обчислень, отже підтримувати многонитевую обробку, вытесняющую многозадачность, мультипроцессирование, віртуальну пам’ять і найпопулярніші прикладні середовища (UNIX, Windows, MS-DOS, OS/2). У цьому плані мережну ОС NetWare складно зарахувати до корпоративним продуктам, позаяк у ній відсутні майже всі вимоги, які пред’являються серверу додатків. У той самий час хороша підтримка універсальних додатків у Windows NT власне і дозволяє їй на у світі корпоративних продуктів. Довідкова служба. Корпоративна ОС повинна мати здатністю зберігати інформацію про користувачів і ресурсах в такий спосіб, щоб забезпечувалося управління нею з однієї центральної точки. Подібно великий організації, корпоративна мережу потребує централізованому зберіганні як можна повнішої довідкової інформації про собі (починаючи з даних про користувачів, серверах, робочих станціях і закінчуючи даними про кабельної системі). Природно організувати цю інформацію як бази даних. Дані з цього бази можуть бути затребуваними багатьма мережними системними додатками, насамперед системами управління і адміністрування. Крім цього, така база корисна з організацією електронної пошти, систем колективної роботи, служби безпеки, служби інвентаризації програмного і апаратного забезпечення мережі, та й практично будь-якого великого бизнес-приложения. База даних, що зберігає довідкову інформацію, надає усе ж розмаїття можливостей та породжує усе ж чимало закутків, як і будь-яка інша велика база даних. Вона дозволяє здійснювати різні операції пошуку, сортування, модифікації тощо., що дуже полегшує життя як адміністраторам, і користувачам. Але ті зручності доводиться розплачуватися рішенням проблем распределенности, реплікації і синхронізації. У ідеалі мережна довідкова інформація мусить бути реалізована як єдиної бази даних, а чи не являти собою набір баз даних, що спеціалізуються з зберіганні інформації тієї чи іншої виду, як і це часто буває у реальних операційні системи. Наприклад, в Windows NT є по крайнього заходу п’ять різних типів довідкових баз даних. Головний довідник домену (NT Domain Directory Service) зберігає інформацію про користувачів, що використовується з організацією їх логічного входу в мережу. Дані про ті самі користувачів можуть утримуватися в іншому довіднику, використовуваному електронною поштою Microsoft Mail. Ще три бази даних підтримують дозвіл низкоуровневых адрес: WINS — встановлює відповідність Netbios-имен IP-адресам, довідник DNS — сервер імен домену — виявляється корисним при підключенні NT-сети до Internet, і, нарешті, довідник протоколу DHCP використовується для автоматичного призначення IPадрес комп’ютерів мережі. Ближче до ідеалу перебувають довідкові служби, що їх фірмою Banyan (продукт Streettalk III) і фірмою Novell (NetWare Directory Services), які пропонують єдиний довідник всім мережевих додатків. Наявність єдиної довідкової служби для мережевий ОС — одне з найважливіших ознак її корпоративності. Безпека. Особливу важливість для ОС корпоративної мережі набирають питання безпеки даних. З одного боку, в великомасштабної мережі об'єктивно існує більші можливості для несанкціонованого доступу — через децентралізації даних, і великий распределенности «законних «точок доступу, через великі числа користувачів, благонадійність яких важко встановити, і навіть через великі числа можливих точок несанкціонованого підключення до неї. З іншого боку, корпоративні бизнес-приложения працюють із даними, які мають життєво важливе значення на шляху успішної роботи корпорації у цілому. І на захисту таких даних в корпоративних мережах поруч із різноманітними апаратними засобами використовується всього спектра засобів захисту, наданий операційній системою: виборчі чи мандатні права доступу, складні процедури аутентифікації користувачів, програмна шифрация. | |.
[pic] Управління локальними ресурсами Найважливішою функцією ОС є організація раціонального використання всіх апаратних і програмних ресурсів системи. До основним ресурсів можна віднести: процесори, пам’ять, зовнішні устрою, дані і програми. Що Володіє одними й тими самими ресурсами, але керована різними ОС, обчислювальна система може працювати з різною ступенем ефективності. Тому знання внутрішніх механізмів операційній системи дозволяє побічно будувати висновки про її експлуатаційних можливості та характеристиках. | |.
[pic].
Управление процессами Важнейшей частиною ОС, безпосередньо впливає на функціонування обчислювальної машини, є підсистема управління процесами. Процес (чи інакше, завдання) — абстракція, яка описувала выполняющуюся програму. Для ОС процес представляє собою одиницю роботи, заявку споживання системних ресурсів. Підсистема управління процесами планує виконання процесів, тобто розподіляє процессорное час між кількома одночасно що у системі процесами, і навіть створює і знищенням процесів, забезпечує процеси необхідними системними ресурсами, підтримує взаємодія між процессами.
Состояние процессов В многозадачной (многопроцессной) системі процес може у одному із трьох основних станів: ВИКОНАННЯ — активний стан процесу, під час яких процес має усіма необхідними ресурсами так і безпосередньо виконується процесором; ОЧІКУВАННЯ — пасивне стан процесу, процес заблокований, вона може виконуватися за своїми внутрішніми причин, чекає здійснення деякого події, наприклад, завершення операції виводу-введення-висновку, одержання повідомлення від іншого процесу, звільнення будь-якого необхідного йому ресурсу; ГОТОВНІСТЬ — також пасивне стан процесу, але нинішнього разі процес заблокований у зв’язку з зовнішніми стосовно нього обставинами: процес має всі необхідні йому ресурси, готовий виконуватися, проте процесор зайнятий виконанням іншого процесу. У результаті життєвого циклу кожен процес переходить вже з стану в інше відповідно до алгоритмом планування процесів, реализуемым в даної операційній системі. Типовий граф станів процесу показаний на малюнку 2.1. У стані ВИКОНАННЯ в однопроцессорной системі може тільки один процес, а кожному з станів ОЧІКУВАННЯ і ГОТОВНІСТЬ — кілька процесів, ці процеси утворюють черги відповідно чекає і готових процесів. Життєвий цикл процесу починається з стану ГОТОВНІСТЬ, коли процес готовий до виконання і чекає своєї черги. При активізації процес перетворюється на стан ВИКОНАННЯ й у ньому до того часу, поки або він сам звільнить процесор, перейшовши до стану ОЧІКУВАННЯ якогось події, або перебуватиме насильно «витіснений «з процесора, наприклад, внаслідок вичерпання відведеного даному процесу кванта процесорного часу. У цьому разі процес повертається у стан ГОТОВНІСТЬ. У цей стан процес переходить зі стану ОЧІКУВАННЯ, по тому, як очікуване подія произойдет.
[pic].
Рис. 2.1. Граф станів процесу у многозадачной среде Контекст і дескриптор процесса На протязі існування процесу його виконання то, можливо багаторазово перервано і продовжене. А, щоб відновити виконання процесу, необхідно відновити стан його операційній середовища. Стан операційній середовища відображається станом регістрів та програмного лічильника, режимом роботи процесора, покажчиками на відкриті файли, інформацією щодо незавершених операціях виводу-введення-висновку, кодами помилок виконуваних даним процесом системних викликів тощо. Цю інформацію називається контекстом процесу. Крім цього, операційній системі для реалізації планування процесів потрібно додаткову інформацію: ідентифікатор процесу, стан процесу, даних про ступеня привілейованості процесу, місце перебування кодового сегмента й інша інформація. У деяких ОС (наприклад, в ОС UNIX) інформацію що така, що використовується ОС для планування процесів, називають дескриптором процесу. Дескриптор процесу з порівнянню з контекстом містить понад оперативну інформацію, що має бути легко доступна підсистемі планування процесів. Контекст процесу містить менш актуальну інформації і використовується операційній системою тільки тоді, як вирішили про поновлення перерваного процесу. Черги процесів є дескриптори окремих процесів, об'єднані у списки. Отже, кожен дескриптор, крім іншого іншого, містить по крайнього заходу один покажчик в інший дескриптор, що сусідить із ним черги. Така була черг дозволяє легко їх переупорядочивать, включатиме й виключати процеси, переводити процеси з одного стану до іншого. Програмний код тільки тоді ми почне виконуватися, коли йому операційній системою буде створено процес. Створити процес — це значит:
1. створити інформаційні структури, описують цей процес, тобто його дескриптор і контекст;
2. включити дескриптор нового процесу у чергу готових процессов;
3. завантажити кодовий сегмент процесу у оперативну пам’ять чи область свопинга.
Алгоритмы планування процессов Планирование процесів включає у собі рішення наступних задач:
1. визначення моменту часу для зміни виконуваного процесса;
2. вибір процесу виконання з черги готових процессов;
3. переключення контекстів «старого «і «нового «процесів. Перші два завдання вирішуються програмними засобами, а остання в значною мірою апаратно (див. розділ 2.3. «Кошти апаратної підтримки управління пам’яттю і многозадачной середовища в мікропроцесорах Intel 80 386, 80 486 і Pentium »). Існує масу різноманітних алгоритмів планування процесів, по різного вирішальних перелічені вище завдання, які мають різні цілі й які забезпечують різне якість мультипрограммирования. Серед цього безлічі алгоритмів розглянемо докладніше дві групи — найбільш часто можна зустріти алгоритмів: алгоритми, засновані на квантуванні, і алгоритми, засновані на пріоритетах. Відповідно до алгоритмами, заснованими на квантуванні, зміна активного процесу відбувається, если:
. процес завершився залишив систему,.
. відбулася ошибка,.
. процес перейшов у стан ОЖИДАНИЕ,.
. вичерпаний квант процесорного часу, відведений даному процесу. Процес, який вичерпав свій квант, перетворюється на стан ГОТОВНІСТЬ і очікує, коли йому буде створено новий квант процесорного часу, а виконання відповідно до певним правилом вибирається новий процес з черги готових. Отже, жоден процес не займає процесор надовго, тому квантування широко використовують у системах поділу часу. Граф станів процесу, зображений малюнку 2.1, відповідає алгоритму планування, заснованого на квантуванні. Кванти, виділені процесам, може бути однаковими всім процесів чи різними. Кванти, виділені одному процесу, може бути фіксованою величини чи змінюватися різні періоди життя процесу. Процеси, які в повному обсязі використовували виділений їм квант (наприклад, через догляду на виконання операцій виводу-введення-висновку), можуть одержати або отримати компенсацію як привілеїв при наступному обслуговуванні. По різного то, можливо організована чергу готових процесів: циклічно, за правилом «перший прийшов — перший обслужился «(FIFO) чи з правилу «останній прийшов — перший обслужился «(LIFO). Другу групу алгоритмів використовує поняття «пріоритет «процесу. Пріоритет — їх кількість, характеризує ступінь привілейованості процесу при використанні ресурсів обчислювальної машини, зокрема, процесорного часу: що стоїть пріоритет, тим більша привілеї. Пріоритет може виражатися цілими чи дробовими, позитивним чи негативним значением. Чем вище привілеї процесу, тим менше він проводитиме у чергах. Пріоритет може призначатися директивно адміністратором системи залежно від важливості роботи, чи внесеної плати, або обчислюватися самої ОС за правилами, може залишатися фіксованим протягом усього життя процесу або змінюватися у часі відповідно до деяким законом. У разі пріоритети називаються динамічними. Існує чи два різновиди пріоритетних алгоритмів: алгоритми, використовують відносні пріоритети, і алгоритми, використовують абсолютні пріоритети. У обох випадках вибір процесу виконання з черги готових здійснюється однаково: вибирається процес, має найвищий пріоритет. По різного вирішується проблема визначення моменту зміни активного процесу. У системах з відносними пріоритетами активний процес виконується до того часу, що він сам він не залишить процесор, перейшовши до стану ОЧІКУВАННЯ (або ж станеться помилка, чи процес завершиться). У системах з абсолютними пріоритетами виконання активного процесу переривається іще за одному умови: тоді як черги готових процесів з’явився процес, пріоритет якого вище пріоритету активного процесу. І тут перерваний процес перетворюється на стан готовності. На малюнку 2.2 показані графи станів процесу задля алгоритмів з відносними (чи абсолютними (б) пріоритетами. Багато операційні системи алгоритми планування побудовано з використанням як квантування, і пріоритетів. Наприклад, основу планування лежить квантування, але величина кванта і/або порядок вибору процесу з черги готових визначається пріоритетами процессов.
[pic].
Рис. 2.2. Графи станів процесів в системах.
(і з відносними пріоритетами; (б)с абсолютними приоритетами Вытесняющие і невытесняющие алгоритми планирования Существует дві основні типу процедур планування процесів — вытесняющие (preemptive) і невытесняющие (non-preemptive). Non-preemptive multitasking — невытесняющая многозадачность — це спосіб планування процесів, у якому активний процес виконується до тих пір, що він сам, з власної ініціативи, не віддасть управління планировщику ОС у тому, щоб він вибрав з черги інший, готова до виконання процес. Preemptive multitasking — вытесняющая многозадачность — це таке спосіб, у якому постанову по переключенні процесора з виконання процесу виконання іншого процесу приймається планувальником операційній системи, а чи не найактивнішої завданням. Поняття preemptive і non-preemptive іноді ототожнюються з поняттями пріоритетних і бесприоритетных дисциплін, що зовсім не так, ні з поняттями абсолютних і відносних пріоритетів, що не так почасти. Вытесняющая і невытесняющая многозадачность — це як широкі поняття, ніж типи пріоритетності. Пріоритети завдань можуть як використовуватися, і не вживатись і при вытесняющих, і за невытесняющих засобах планування. Так було в разі використання пріоритетів дисципліна відносних пріоритетів може бути зарахована до класу систем з невытесняющей многозадачностью, а дисципліна абсолютних пріоритетів — до класу систем з вытесняющей многозадачностью. А бесприоритетная дисципліна планування, джерело якої в виділенні рівних квантів часу всім завдань, належить до вытесняющим алгоритмам. Основним відмінностями між preemptive і non-preemptive варіантами багатозавдань є ступінь централізації механізму планування завдань. При вытесняющей багатозавдань механізм планування завдань повністю зосереджений в операційній системі, і програміст пише своє додаток, не переймаючись тим, що буде виконуватися паралельно коїться з іншими завданнями. У цьому операційна система виконує такі функції: визначає момент виведення з виконання активної завдання, запам’ятовує її контекст, вибирає з черги готових завдань наступну і запускає в виконання, завантажуючи її контекст. При невытесняющей багатозавдань механізм планування розподілено між системою та прикладними програмами. Прикладна програма, отримавши управління ОС, сама визначає момент завершення своєї черговий ітерації і передає управління ОС з допомогою будь-якого системного виклику, а ОС формує черги завдань і вибирає відповідно до деяким алгоритмом (наприклад, з урахуванням пріоритетів) таку завдання на виконання. Такий механізм створює проблеми як користувачів, і для розробників. Для користувачів це, що управління системою втрачається на довільний період, що визначається додатком (а чи не користувачем). Якщо додаток витрачає занадто чимало часу виконання будь-якої роботи, наприклад, на форматування диска, користувач неспроможна перемкнутися з це завдання в іншу завдання, наприклад, на текстовий редактор, тоді як форматування тривало в фоновому режимі. Така ситуація небажана, оскільки користувачі звичайно хочуть довго чекати, коли машина завершить своє завдання. Тому розробники додатків для non-preemptive операційній середовища, покладаючи він функції планувальника, повинні створювати докладання так, що вони виконували свої завдання невеликими частинами. Наприклад, програма форматування може відформатувати одну доріжку дискети й повернути управління системі. По виконанні інші завдання система поверне управління програмі форматування, щоб отформатировала таку доріжку. Такий метод поділу часу між завданнями працює, але істотно утруднює розробку програм, тож пред’являє підвищені вимоги до кваліфікації програміста. Програміст має забезпечити «дружнє «ставлення своєї програми решти виконуваних одночасно із нею програмам, досить часто віддаючи управління. Крайнім проявом «недружественности «докладання є його зависання, яке призводить до загальному краху системи. У системах з вытесняющей многозадачностью такі ситуації, зазвичай, виключені, оскільки центральний планеруючий механізм зніме завислу завдання за виконання. Проте розподіл функцій планувальника між системою та додатками не завжди є недоліком, а за певних умов може бути перевагою, тому що дає можливість розробникові додатків самому проектувати алгоритм планування, найпридатніший для даного фіксованого набору завдань. Оскільки розробник сам визначає програмі час віддачі управління, то виключаються нераціональні переривання програм, у «незручні «їм моменти часу. З іншого боку, легко дозволяються проблеми спільного використання даних: завдання у час кожної ітерації використовує їх монопольно й упевнена, що протягом цього періоду ніхто інший не змінить ці дані. Істотним перевагою non-preemptive систем є висока швидкість перемикання з завдання на завдання. Прикладом ефективне використання невытесняющей багатозавдань є файл-сервер NetWare, у якому, значною мірою таким чином, досягнуто висока швидкість виконання файлових операцій. Менш вдалим виявилося використання невытесняющей багатозавдань в операційній середовищі Windows 3.х. Однак майже переважають у всіх сучасних операційні системи, орієнтованих високопродуктивне виконання додатків (UNIX, Windows NT, OS/2, VAX/VMS), реалізована вытесняющая многозадачность. Останнім часом дійшла чергу, й до ОС класу настільних систем, наприклад, OS/2 Warp і Windows 95. Можливо у зв’язку з цим вытесняющую многозадачность часто називають істинної многозадачностью.
Средства синхронізації і взаємодії процессов Проблема синхронізації Процесам часто потрібно взаємодіяти друг з одним, наприклад, один процес може передавати дані іншому процесу, чи кілька процесів можуть обробляти дані із загального файла. В усіх цих випадках виникає проблема синхронізації процесів, яка можна розв’язувати припиненням і активізацією процесів, організацією черг, блокуванням і визволенням ресурсов.
[pic].
Рис. 2.3. Приклад необхідності синхронізації Нехтування питаннями синхронізації процесів, виконуються як мультипрограммирования, можуть призвести до неправильної роботі або навіть змусити краху системи. Розглянемо, наприклад (малюнок 2.3), програму друку файлів (принт-сервер). Ця програма друкує почергово все файли, чиї імена послідовний у порядку надходження записують їх у спеціальний загальнодоступний файл «замовлень «інші програми. Особлива змінна NEXT, також доступна всім процессам-клиентам, містить номер першій вільній для записи імені файла позиції файла «замовлень ». Процессы-клиенты читають цю зміну, записують їх у відповідну позицію файла «замовлень «ім'я свого файла і нарощують значення NEXT на одиницю. Припустимо, що у певний момент процес R вирішив роздрукувати свій файл, при цьому він прочитав значення перемінної NEXT, значення для визначеності припустимо рівним 4. Процес запам’ятав це значення, але помістити ім'я файла я не встиг, оскільки його виконання було перервано (наприклад, у результаті вичерпання кванта). Черговий процес P. S, бажаючий роздрукувати файл, прочитав те саме значення перемінної NEXT, помістив в четверту позицію ім'я свого файла і наростив значення перемінної на одиницю. Коли вкотре управління передають процесу R, він, продовжуючи своє виконання, в повній відповідності до значенням поточної вільної позиції, отриманим у час попередньої ітерації, запише ім'я файла й у позицію 4, поверх імені файла процесу P. S. Отже, процес P. S будь-коли побачить свій файл распечатанным. Складність проблеми синхронізації полягає у нерегулярності виникаючих ситуацій: у минулому прикладі можна уявити і інше розвитку подій: було втрачено файли кількох процесів чи, навпаки, ні втрачено ні один файл. У разі все визначається взаємними швидкостями процесів і моментами їх переривання. Тому налагодження взаємодіючих процесів є складною завданням. Ситуації на кшталт тієї, коли чи більш процесів обробляють розділяються дані, і кінцевий результат залежить від співвідношення швидкостей процесів, називаються гонками. Критична секція Важливим поняттям синхронізації процесів є поняття «критична секція «програми. Критична секція — це частина програми, у якій здійснюється доступом до поділюваним даним. Щоб виключити ефект гонок по відношення до деякому ресурсу, необхідно забезпечити, щоб у кожен той час у критичної секції, що з цим ресурсом, перебував максимум один процес. Цей прийом називають взаємним винятком. Найпростіший спосіб забезпечити взаємне виняток — дозволити процесу, що у критичної секції, забороняти все переривання. Однак це спосіб не годиться, оскільки небезпечно довіряти управління системою користувальницькому процесу; може надовго зайняти процесор, а під час краху процесу у критичної області крах потерпить всю систему, оскільки переривання будь-коли буде розв’язано. Іншим способом є використання блокуючих змінних. Із кожним поділюваним ресурсом пов’язується двоичная змінна, яка значення 1, якщо ресурс вільний (тобто не один процес не в сьогодні у критичної секції, що з даним процесом), і значення 0, якщо ресурс зайнятий. На малюнку 2.4 показаний фрагмент алгоритму процесу, котрий використовує для реалізації взаємного винятку доступу до разделяемому ресурсу D блокирующую зміну F (D). Перш ніж ввійти в критичну секцію процес перевіряє, вільний чи ресурс D. Якщо він зайнятий, то перевірка циклічно повторюється, коли вільний, ті значення перемінної F (D) встановлюється в 0, та інформаційний процес входить у критичну секцію. Після того, як процес виконає всі дії з поділюваним ресурсом D, значення перемінної F (D) знову встановлюється рівним 1.
[pic].
Рис. 2.4. Реалізація критичних секцій з допомогою блокуючих змінних Якщо всі процеси написані з допомогою вищеописаних угод, то взаємне виняток гарантується. Слід зазначити, що операція із перевірки та настанови котра блокує перемінної мусить бути неподільної. Пояснимо це. нехай у результаті перевірки перемінної процес визначив, що ресурс вільний, але одразу після цього, яка встигла встановити зміну в 0, був перерваний. Протягом часу його припинення інший процес зайняв ресурс, ввійшов у свою критичну секцію, але й був перерваний, не завершивши роботи з поділюваним ресурсом. Коли управління повернули першому процесу, він, вважаючи ресурс вільним, встановив ознака зайнятості і почав виконувати свою критичну секцію. Отже було порушено принцип взаємного винятку, що потенційно можуть призвести до нежелаемым наслідків. У запобігання таких ситуацій у системі команд машини бажано мати єдину команду «проверка-установка », або ж реалізовувати системними засобами відповідні програмні примітиви, які забороняли переривання на протязі всієї операції перевірки та настанови. Реалізація критичних секцій з допомогою блокуючих змінних має недолік: протягом часу, коли той процес перебуває у критичної секції, інший процес, якій потрібно хоча б ресурс, буде виконувати рутинні дії з опитування котра блокує перемінної, марно витрачаючи процессорное час. Для усунення таких ситуацій то, можливо використаний так званий апарат подій. З допомогою цього кошти можуть вирішуватися як проблеми взаємного винятку, але й спільні завдання синхронізації процесів. У різних операційні системи апарат подій реалізується зі свого, але у будь-якому разі використовуються системні функції аналогічного призначення, які умовно назвемо WAIT (x) і POST (x), де x — ідентифікатор деякого події. На малюнку 2.5 показаний фрагмент алгоритму процесу, котрий використовує цих функцій. Якщо ресурс зайнятий, то процес не виконує циклічний опитування, а викликає системну функцію WAIT (D), тут D позначає подія, що полягає у звільненні ресурсу D. Функція WAIT (D) переводить активний процес у стан ОЧІКУВАННЯ і робить позначку його дескрипторі у тому, що очікує події D. Процес, який на той час використовує ресурс D, після виходу з критичної секції виконує системну функцію POST (D), у результаті операційна система переглядає чергу очікують процесів і переводить процес, котрий очікує події D, до стану ГОТОВНІСТЬ. Узагальнююче засіб синхронізації процесів запропонував Дейкстра, який ввів дві нові примітиву. У абстрактної формі ці примітиви, обозначаемые P і V, оперують над цілими неотрицательными перемінними, званими семафорами. Нехай P. S такий семафор. Операції визначаються наступним образом:
V (S): змінна P. S поповнюється 1 одним неподільним дією; вибірка, прибуток і запам’ятовування неможливо знайти перервані, і до P. S немає доступу іншим процесам під час виконання цієї операції. P (S): зменшення P. S на 1, якщо може бути. Якщо S=0, то неможливо зменшити P. S і залишитись у області цілих неотрицательных значень, у тому разі процес, викликає P-операцию, чекає, це тільки зменшення стане можливим. Успішна перевірка і зменшення є також неподільної операцией.
[pic].
Рис. 2.5. Реалізація критичної секції з допомогою системных.
функцій WAIT (D) і POST (D) У приватному разі, коли семафор P. S може приймати тільки значення 0 і одну, він перетворюється на блокирующую зміну. Операція P укладає у собі потенційну можливість переходу процесу, що її виконує, в стан очікування, тоді як V-операция в деяких обставин активізувати інший процес, який був загальмований операцією P (порівняйте ці операції з системними функціями WAIT і POST). Розглянемо використання семафорів на класичному прикладі взаємодії двох процесів, виконуються як мультипрограммирования, одне із яких пише дані в буферний пул, а інший зчитує їх із буферного пулу. Нехай буферний пул складається з N буферів, кожен із яких може утримувати одну запис. Процес «письменник «повинен припинятися, коли все буфера виявляються зайнятими, й активізуватися після звільнення хоча самого буфера. Навпаки, процес «читач «припиняється, коли все буферы порожні, і активізується у разі хоча б однієї записи. Введемо два семафори: e — число порожніх буферів і f — число заповнених буферів. Припустимо, що поставив запис в буфер і зчитування з буфера є критичними секціями (як і прикладі з принт-сервером на початку даного розділу). Введемо також двоїчний семафор b, використовуваний задля забезпечення взаємного винятку. Тоді процеси може бути описані так: // Глобальні перемінні #define N 256 int e = N, f = 0, b = 1; void Writer () { while (1) { PrepareNextRecord (); /* підготовка нової записи */ P (e); /* Зменшити число вільних буферів, якщо що є */.
/* інакше — чекати, коли вони звільняться */ P (b); /* Вхід у критичну секцію */ AddToBuffer (); /* Додати нову запис в буфер */ V (b); /* Вихід із критичної секції */ V (f); /* Збільшити число зайнятих буферів */ } } void Reader () { while (1) { P (f); /* Зменшити число зайнятих буферів, якщо що є */.
/* інакше чекати, коли вони з’являться */ P (b); /* Вхід у критичну секцію */ GetFromBuffer (); /* Взяти запис з буфера */ V (b); /* Вихід із критичної секції */ V (e); /* Збільшити число вільних буферів */ ProcessRecord (); /* Обробити запис */ } } Глухі Куточки Наведений вище приклад допоможе нам проілюструвати ще одне проблему синхронізації - взаємні блокування, звані також дедлоками (deadlocks), клинчами (clinch) чи безвиходями. Якщо переставити місцями операції P (e) і P (b) у програмі «письменника », то, при деякому збігу обставин ці дві процесу можуть взаємно заблокувати одне одного. Справді, нехай «письменник «першим ввійде у критичну секцію і знайде відсутність вільних буферів; він почне чекати, коли «читач «візьме чергову запис з буфера, але «читач «зможе цього, оскільки цього необхідно ввійти у критичну секцію, вхід у якому заблокований процесом «письменником ». Розглянемо іще одна приклад глухого кута. Нехай двом процесам, выполняющимся в режимі мультипрограммирования, до виконання його роботи потрібно два ресурсу, наприклад, принтер і диск. На малюнку 2.6,а показані фрагменти відповідних програм. І хоча по тому, як процес, А зайняв принтер (встановив блокирующую зміну), він був перерваний. Управління отримав процес У, який спершу зайняв диск, але за виконанні наступній команди був заблокований, оскільки принтер опинилася зайнятим процесом А. Управління знову отримав процес А, що у відповідності зі своєї програмою спробував зайняти диск і він заблокований: диск вже розподілено процесу У. У стані процеси Проте й У можуть бути як завгодно довго. Залежно від співвідношення швидкостей процесів, можуть або повністю незалежно використовувати розділяються ресурси (р), або утворювати черги до поділюваним ресурсів (в), або взаємно блокувати одне одного (б). Тупикові ситуації треба відрізняти від простих черг, хоч і й інші виникають за спільної використанні ресурсів немає і зовні виглядають схоже: процес припиняється і чекає звільнення ресурсу. Проте чергу — це явище нормальне, невід'ємною ознакою високого коефіцієнта використання ресурсів при випадковому вступі запитів. Вона виникає тоді, коли ресурс недоступний в момент, та за час він звільняється, та інформаційний процес продовжує свою виконання. Безвихідь ж, що це випливає з його назви, в певному сенсі нерозв’язною ситуацією. [pic] Рис. 2.6. (a) фрагменти програм Проте й У, поділяючих принтер і диск;
(б) взаємна блокування (клинч);(в) чергу до разделяемому диску;
(г) незалежне використання ресурсів У розглянутих прикладах глухий кут було створено двома процесами, але взаємно блокувати одне одного можуть бути більше процесів. Проблема глухих кутів включає у собі такі задачи:
. запобігання тупиков,.
. розпізнавання тупиков,.
. відновлення системи після глухих кутів. Глухі Куточки може бути запобігти на стадії написання програм, тобто програми повинні прагнути бути написані в такий спосіб, щоб глухий кут було виникнути ні за якому співвідношенні взаємних швидкостей процесів. То в попередньому прикладі процес Проте й процес У просили ресурси однаковою мірою послідовності, то глухий кут був би принципі неможливий. Другий підхід до запобіганню глухих кутів називається динамічним й у використанні певних правил щодо призначення ресурсів процесам, наприклад, ресурси можуть виділятися у певному послідовності, загальної всім процесів. У окремих випадках, коли тупикова ситуація освічена багатьма процесами, використовуючи багато ресурсів, розпізнавання глухого кута є нетривіальною завданням. Існують формальні, программно-реализованные методи розпізнавання глухих кутів, засновані на віданні таблиць розподілу ресурсів немає і таблиць запитів до зайнятих ресурсів. Аналіз цих таблиць дозволяє знайти взаємні блокування. Якщо ж тупикова ситуація виникла, то ми не обов’язково знімати з виконання все заблоковані процеси. Можна зняти лише з них, у своїй звільняються ресурси, очікувані іншими процесами, можна повернути деякі процеси до області свопинга, можна зробити «відкіт «деяких процесів до так званої контрольної точки, у якій запам’ятовується вся інформація, необхідна на відновлення виконання програми з даного місця. Контрольні точки розставляються у програмі у місцях, після чого можливо виникнення глухого кута. Із усього вищесказаного ясно, що використовувати семафори треба дуже обережно, оскільки одна незначна помилка можуть призвести до останову системи. А, щоб полегшити написання коректних програм, було запропоновано высокоуровневое засіб синхронізації, зване монітором. Монітор — це набір процедур, змінних і структур даних. Процеси можуть викликати процедури монітора, але мають доступу до внутрішнім даним монітора. Монітори мають важливе властивість, який робить їх корисними для досягнення взаємного винятку: лише одне процес то, можливо активним по відношення до монітора. Компілятор обробляє виклики процедур монітора певним чином. Зазвичай, коли процес викликає процедуру монітора, то перші кілька інструкцій цієї процедури перевіряють, не активний якийчи інший процес стосовно цьому монітора. Якщо можна, то викликає процес припиняється, поки інший процес не звільнить монітор. Таким чином, виняток входу кількох процесів в монітор реалізується не програмістом, а компілятором, що робить помилки менш ймовірними. У розподілених системах, які з кількох процесорів, кожен із яких має власну оперативну пам’ять, семафори і монітори виявляються непридатними. У цих системах синхронізація то, можливо реалізована лише за допомогою обміну повідомленнями. Докладніше звідси дивіться розділ «Синхронізація в розподілених системах » .
Нити Многозадачность є найважливішим властивістю ОС. Для підтримки цього властивості ОС визначає і оформляє собі ті внутрішні одиниці роботи, між які й буде розділятися процесор та інші ресурси комп’ютера. Ці внутрішні одиниці роботи у різних ОС носять різні назви — завдання, завдання, процес, нитку. У окремих випадках сутності, обозначаемые цими поняттями, принципово різняться друг від друга. Ведучи мову про процесах, ми відзначали, що операційна система підтримує їх відособленість: в кожного процесу є своє віртуальне адресне простір, кожному процесу призначаються свої фінансові ресурси — файли, вікна, семафори тощо. Така відособленість потрібна у тому, щоб захистити один процес від іншого, оскільки вони, спільно використовуючи все ресурси машини, конкурують із одне одним. У випадку процеси належать різним користувачам, поділяючим один комп’ютер, і ОС перебирає роль арбітра в суперечках процесів за ресурси. При мультипрограммировании підвищується пропускну здатність системи, але окремий процес будь-коли можуть виконати швидше, ніж якби він виконувався в однопрограммном режимі (всяке поділ ресурсів уповільнює роботу однієї з учасників з допомогою додаткових витрат часу на очікування звільнення ресурсу). Проте завдання, розв’язувана у межах одного процесу, може мати внутрішнім паралелізмом, який у принципі дозволяє прискорити його виконання. Наприклад, під час виконання завдання відбувається звернення зовнішнього влаштуванню, й тимчасово цієї операції можна не блокувати повністю виконання процесу, а продовжити обчислення по інший «галузі «процесу. Для цього сучасні ОС пропонують використовувати порівняно новий механізм многонитевой обробки (multithreading). У цьому вводиться нове поняття «нитку «(thread), а поняття «процес «значною мірою змінює сенс. Мультипрограммирование тепер реалізується лише на рівні ниток, і завдання, оформлена у кількох ниток у межах процесу, то, можливо виконано швидше з допомогою псевдопараллельного (чи паралельного в мультипроцессорной системі) виконання її окремих частин. Наприклад, якщо електронна таблиця розробили з урахуванням можливостей многонитевой обробки, то користувач може запросити перерахунок свого робочого аркуша» й одночасно продовжувати заповнювати таблицю. Особливо ефективно можна використовувати многонитевость до виконання розподілених додатків, наприклад, многонитевый сервер може паралельно виконувати запити відразу кількох клієнтів. Нитки, які стосуються одному процесу, так ізольовані друг від одну немов процеси у традиційній многозадачной системі, з-поміж них легко організувати тісний контакт. Справді, на відміну процесів, які належать різним, власне кажучи, конкуруючим додатків, все нитки процесу завжди належать одному додатку, тому програміст, що пише це додаток, може заздалегідь продумати роботу безлічі ниток процесу в такий спосіб, що вони могли взаємодіяти, а чи не виборювати ресурси. У традиційних ОС поняття «нитку «тотожне поняттю «процес ». У дійсності це часто буває бажано мати кілька ниток, поділяючих єдине адресне простір, але виконуються квазипараллельно, завдяки чому нитки стають подібними процесам (крім яке поділяється адресного простору). Нитки іноді називають полегшеними процесами чи мини-процессами. Справді, нитки у багатьох відносинах подібні процесам. Кожна нитку виконується суворо послідовно і має власний програмний лічильник і стік. Нитки, як і процеси, можуть, наприклад, породжувати ниткинащадки, можуть переходити зі стану до стану. Подібно традиційним процесам (тобто процесам, що складається з однієї нитки), нитки можуть перебуває у одному з таких станів: ВИКОНАННЯ, ОЧІКУВАННЯ і ГОТОВНІСТЬ. Поки одна нитку заблоковано, інша нитку тієї самої процесу може виконуватися. Нитки поділяють процесор оскільки роблять процеси, в відповідність до різними варіантами планування. Проте різні нитки у межах процесу так незалежні, як окремі процеси. Усі такі нитки мають один і той ж адресне простір. Це означає, що поділяють одні й самі глобальні перемінні. Оскільки кожна нитку може мати доступом до кожному віртуальному адресою, одна нитку може використовувати стік інший нитки. Між нитками немає повної захисту, оскільки, по-перше, це пояснити неможливо, а по-друге, не потрібно. Усі нитки процесу завжди вирішують спільне завдання одного користувача, і апарат ниток використовується тут до швидшого рішення завдання шляхом її розпаралелювання. У цьому програмісту дуже важливо отримати у своє розпорядження зручні кошти організації взаємодії частин одного завдання. Крім поділу адресного простору, всі нитки поділяють також набір відкритих файлів, таймерів, сигналів тощо. Отже, нитки мають собственные:
. програмний счетчик,.
. стек,.
. регистры,.
. нити-потомки,.
. стан. Нитки разделяют:
. адресне пространство,.
. глобальні переменные,.
. відкриті файлы,.
. таймеры,.
. семафоры,.
. статистичну інформацію. Многонитевая обробка підвищує ефективності роботи системи з порівнянню з многозадачной обробкою. Наприклад, в многозадачной середовищі Windows можна одночасно працювати з електронною таблицею і текстовим редактором. Проте, якщо користувач затребувана перерахунок свого робочого аркуша, електронна таблиця блокується до того часу, доки операція не завершиться, що нафта може зажадати значного часу. У многонитевой середовищі у разі, якщо електронна таблиця розробили з урахуванням можливостей многонитевой обробки, наданих програмісту, цієї проблеми немає, і користувач має доступом до електронної таблиці. Широке застосування знаходить многонитевая обробка в розподілених системах. Дивіться це у розділі «Процеси і нитки в розподілених системах ». Деякі прикладні завдання легше програмувати, використовуючи паралелізм, наприклад завдання типу «писатель-читатель », у яких одна нитку виконує запис в буфер, іншу зчитує записи потім із нього. Оскільки поділяють загальний буфер, годі їх робити окремими процесами. Інший приклад використання ниток — це управління сигналами, такі як переривання з клавіатури (del чи break). Замість обробки сигналу переривання, одна нитку призначається для постійного очікування надходження сигналів. Отже, використання ниток може потреба у прерываниях користувальницького рівня. У цих прикладах немає значення паралельне виконання, якою є ясність програми. Нарешті, в мультипроцессорных системах для ниток вже з адресного простору є можливість виконуватися паралельно різними процесорах. Це одна з головних шляхів реалізації поділу ресурсів у таких системах. З іншого боку, правильно сконструйовані програми, що використовують нитки, мають працювати однаково добре як у однопроцессорной машині як поділу часу між нитками, і на теперішньому мультипроцессоре. | |.
[pic].
Управление памятью Память є найважливішим ресурсом, які вимагають ретельного управління з боку мультипрограммной ОС. Розподілу підлягає вся оперативна пам’ять, не зайнята операційній системою. Зазвичай ОС розташований у найменших адреси, проте може обіймати свою і самі старші адреси. Функціями ОС із управління пам’яттю є: відстеження вільної громадської та зайнятою пам’яті, виділення пам’яті процесам і приніс визволення пам’яті при завершенні процесів, витіснення процесів з оперативної пам’яті на диск, коли розміри основний пам’яті недостатні розміщувати у ній всіх процесів, й забезпечити повернення в оперативну пам’ять, як у ній звільняється місце, і навіть настроювання адрес програми на конкретну область фізичної памяти.
Типы адресов Для ідентифікації змінних і команд використовуються символьні імена (мітки), віртуальні адреси — й фізичні адреси (малюнок 2.7). Символьні імена привласнює користувач під час написання програми на алгоритмическом мові чи ассемблері. Віртуальні адреси виробляє транслятор, переводить програму на машинний мову. Оскільки під час трансляції у випадку невідомо, в яке оперативної пам’яті завантажать програма, то транслятор привласнює змінним і командам віртуальні (умовні) адреси, зазвичай вважаючи за умовчанням, що буде розміщена, починаючи з нульового адреси. Сукупність віртуальних адрес процесу називається віртуальним адресним простором. Кожен процес має власний віртуальне адресне простір. Максимальний розмір віртуального адресного простору обмежується розрядністю адреси, властивою даної архітектурі комп’ютера, і, зазвичай, не збігаються з обсягом фізичної пам’яті, наявних у комп’ютері. [pic] Рис. 2.7. Типи адрес Фізичні адреси відповідають номерам осередків оперативної пам’яті, де у дійсності розташовані чи розміщуватимуться перемінні і команди. Перехід від віртуальних адрес фізичних може здійснюватися двома способами. У першому випадку заміну віртуальних адрес на фізичні робить спеціальна системна програма — перемещающий завантажник. Перемещающий завантажник виходячи з наявних проблем нього вихідних даних про початковому адресі фізичної пам’яті, у якому доведеться завантажувати програму, та інформації, наданої транслятором про адресно-зависимых константи програми, виконує завантаження програми, поєднуючи її заміняючи віртуальних адрес фізичними. Другий спосіб у тому, що ваша програма завантажується на згадку про в незміненому вигляді у віртуальних адреси, у своїй операційна система фіксує усунення дійсного розташування програмного коду щодо віртуального адресного простору. Під час виконання програми при кожному зверненні до оперативної пам’яті виконується перетворення віртуального адреси в фізичний. Другий спосіб є гнучкішим, він допускає переміщення програми під час виконання, в нас саме перемещающий завантажник жорстко прив’язує програму до спочатку наголошеного їй ділянці пам’яті. Разом про те використання перемещающего завантажника зменшує накладні витрати, оскільки перетворення кожного віртуального адреси відбувається одного разу під час завантаження, тоді як у другий випадок — щоразу при зверненні у цій адресою. У окремих випадках (зазвичай, у спеціалізованих системах), коли заздалегідь достеменно відомо, якій галузі оперативної пам’яті виконуватиметься програма, транслятор видає виконуваний код відразу в фізичних адресах.
Методы розподілу пам’яті без використання дискового пространства Все методи управління пам’яттю можна розділити на два класу: методи, що використовують переміщення процесів між оперативної пам’яттю і диском, та художні засоби, які роблять цього (малюнок 2.8). Почати з останнього, більш простого класу методів. [pic] Рис. 2.8. Класифікація методів розподілу памяти Распределение пам’яті фіксованими разделами Самым у простий спосіб управління оперативної пам’яттю є поділ в кілька розділів фіксованою величини. Це може бути здійснене вручну оператором під час старту системи чи під час її генерації. Чергова завдання, яка виконання, поміщається або у загальну чергу (малюнок 2.9,а), або у чергу до певного поділу (малюнок 2.9,б). [pic] Рис. 2.9. Розподіл пам’яті фіксованими разделами:
а — із загальною чергою; б — з окремими чергами Підсистема управління пам’яттю у разі виконує такі задачи:
. порівнюючи розмір програми, що надійшла виконання, і вільних розділів, вибирає підходящий раздел,.
. здійснює завантаження програми розвитку й надстройку адрес. При очевидному перевагу — простоті реалізації - даний метод має недолік — жорсткість. Позаяк у кожний розділ може виконуватися лише одне програма, то рівень мультипрограммирования заздалегідь обмежений числом розділів незалежно від цього, який обсяг мають програми. Навіть якщо його програма має невеличкий обсяг, вона займати весь розділ, що зумовлює неефективного використання пам’яті. З іншого боку, навіть якщо обсяг оперативної пам’яті машини дозволяє виконати деяку програму, розбивка пам’яті на розділи дозволяє зробити этого.
Распределение пам’яті розділами перемінної величины В цьому випадку пам’ять машини не ділиться заздалегідь на розділи. Спочатку вся пам’ять вільна. Кожній знову котра надходить завданню виділяються необхідні їй пам’ять. Якщо достатній обсяг пам’яті відсутня, то завдання приймається виконання і слід у черзі. Після закінчення завдання пам’ять звільняється, на це місце то, можливо завантажена інше завдання. Таким чином, в довільний час оперативна пам’ять представляє собою випадкову послідовність зайнятих і вільних ділянок (розділів) довільного розміру. На малюнку 2.10 показано стан пам’яті в різні моменти часу під час використання динамічного розподілу. Так було в момент t0 у пам’яті знаходиться лише ОС, а на момент t1 пам’ять розділена між 5 завданнями, причому завдання П4, завершуючи, залишає пам’ять. На звільнене після завдання П4 місце завантажується завдання П6, яка в останній момент t3. [pic] Рис. 2.10. Розподіл пам’яті динамічними розділами Завданнями ОС при реалізації цього методу управління пам’яттю является:
. ведення таблиць вільних і зайнятих областей, у яких вказуються початкові адреси — й розміри ділянок памяти,.
. на час вступу нового завдання — аналіз запиту, перегляд таблиці вільних і вибір розділу, розмір якого достатній розміщувати що надійшла задачи,.
. завантаження завдання у виділений їй розділ і коригування таблиць вільних і зайнятих областей,.
. після завершення завдання коригування таблиць вільних і зайнятих областей. Програмний код не переміщається під час виконання, тобто то, можливо проведена одноразова настроювання адрес з використання перемещающего завантажника. Вибір розділу для знову що надійшла завдання може здійснюватися з різних правилам, таким, наприклад, як «перший-ліпший розділ достатнього розміру », чи «розділ, має найменший достатній розмір », чи «розділ, має найбільший достатній розмір ». Всі ці правила мають переваги та недоліки. У порівняні з методом розподілу пам’яті фіксованими розділами даний метод має вищою гнучкістю, але притаманний дуже серйозна недолік — фрагментація пам’яті. Фрагментація — це наявність значної частини несуміжних ділянок вільної пам’яті надзвичайно маленької розміру (фрагментів). Настільки маленького, жодна з знову вступників програм неспроможна поміститися в жодному із дільниць, хоча сумарний обсяг фрагментів може скласти значну величину, яка перевищує необхідний обсяг памяти.
Перемещаемые разделы Одним з методів боротьби з фрагментацією є переміщення всіх зайнятих ділянок убік старших або у бік молодших адрес, те щоб вся вільна пам’ять утворювала єдину вільну область (малюнок 2.11). У доповнення функцій, що виконує ОС під час розподілу пам’яті перемінними розділами, у разі вона повинна переважно ще раз у раз копіювати вміст розділів вже з місця пам’яті до іншого, коригуючи таблиці вільних і зайнятих областей. Цю процедуру називається «на стиснення ». Стиснення може виконуватися або за кожному завершенні завдання, або тільки тоді, коли для знову що надійшла завдання немає вільного розділу достатнього розміру. У першому випадку потрібно менше обчислювальної роботи за коригуванні таблиць, тоді як у другому — рідше виконується процедура стискування. Оскільки програми переміщаються по оперативної пам’яті під час свого виконання, то перетворення адрес з віртуальної форми в фізичну мало виконуватися динамічним способом. [pic] Рис. 2.11. Розподіл пам’яті перемещаемыми розділами Хоча процедура стискування і призводить до ефективнішого використанню пам’яті, вони можуть зажадати значного часу, що часто переважує переваги даного метода.
Методы розподілу пам’яті з допомогою дискового пространства.
Поняття віртуальної памяти Уже досить давно користувачі зіштовхнулися з проблемою розміщення у пам’яті програм, розмір яких перевищував наявну у наявності вільну пам’ять. Рішенням було розбивка програми на частини, звані оверлеями. 0- ой оверлей починав виконуватися першим. Коли він закінчував своє виконання, він викликав інший оверлей. Усі оверлеи зберігалися на диску й пересувалися між пам’яттю і диском засобами ОС. Проте розбивка програми на частини й планування їх завантаження в оперативну пам’ять повинен був здійснювати програміст. Розвиток методів організації обчислювального процесу в напрямі призвело до появи методу, відомого під назвою віртуальна пам’ять. Віртуальним називається ресурс, який користувачеві чи користувальницької програмі представляється які мають властивостями, яким він в дійсності не має. Приміром, користувачеві то, можливо надано віртуальна оперативна пам’ять, розмір якої перевершує всю наявну у системі реальну оперативну пам’ять. Користувач пише програми оскільки мов у розпорядженні є однорідна оперативна пам’ять великого об'єму, але насправді всі дані, використовувані програмою, зберігаються однією чи навіть кількох різнорідних запам’ятовувальних пристроях, зазвичай на дисках, й за необхідності частинами відбиваються в реальну пам’ять. Отже, віртуальна пам’ять — це сукупність програмно-апаратних коштів, дозволяють користувачам писати програми, розмір яких перевершує наявну оперативну пам’ять; при цьому віртуальна пам’ять вирішує такі задачи:
. розміщає дані в запам’ятовувальних пристроях різного типу, наприклад, частина програми оперативному пам’яті, а частина на диске;
. переміщає за необхідності дані між запоминающими пристроями різного типу, наприклад, довантажує потрібну частина програми з диска в оперативну память;
. перетворює віртуальні адреси в фізичні. Всі ці дії виконуються автоматично, й без участі програміста, то є механізм віртуальної пам’яті є прозорим стосовно користувачеві. Найпоширенішими реализациями віртуальної пам’яті є страничное, сегментное і странично-сегментное розподіл пам’яті, і навіть свопинг.
Страничное распределение На малюнку 2.12 показано схема сторінкового розподілу пам’яті. Віртуальний адресне простір кожного процесу ділиться на частини однакового, фіксованого для даної системи розміру, звані віртуальними сторінками. У випадку розмір віртуального адресного простору перестав бути кратним розміру сторінки, тому остання сторінка кожного процесу доповнюється фіктивної областю. Уся оперативна пам’ять машини також ділиться на частини такої ж розміру, звані фізичними сторінками (чи блоками). Розмір сторінки зазвичай вибирається рівним ступеня двійки: 512, 1024 тощо., це дозволяє спростити механізм перетворення адрес. При завантаженні процесу частину його віртуальних сторінок міститься у оперативну пам’ять, інші ж — на диск. Суміжні віртуальні сторінки не обов’язково містяться у суміжних фізичних сторінках. При завантаженні операційна система ставить кожного процесу інформаційну структуру — таблицю сторінок, якою встановлено відповідність між номерами віртуальних і фізичних сторінок для сторінок, завантажених в оперативну пам’ять, чи робиться позначка у тому, що віртуальна сторінка выгружена на диск. З іншого боку, в таблиці сторінок міститься управляюча інформація, така як свідчення модифікації сторінки, ознака невыгружаемости (вивантаження деяких сторінок то, можливо заборонена), ознака звернення до сторінки (використовується для підрахунку числа звернень за певний період) та інші дані, формовані і використовувані механізмом віртуальної пам’яті. [pic] Рис. 2.12. Страничное розподіл пам’яті При активізації чергового процесу у спеціальний регістр процесора завантажується адресу таблиці сторінок цього процесу. При кожному зверненні до пам’яті відбувається читання з таблиці сторінок інформації про віртуальної сторінці, до котрої я сталося звернення. Якщо дана віртуальна сторінка перебуває у оперативної пам’яті, то виконується перетворення віртуального адреси в фізичний. Якщо ж потрібна віртуальна сторінка в момент выгружена на диск, це відбувається зване страничное переривання. Выполняющийся процес перетворюється на стан очікування, і активізується інший процес з черги готових. Паралельно програма обробки сторінкового переривання знаходить на диску необхідну віртуальну сторінку і намагається завантажити їх у оперативну пам’ять. Якщо пам’яті є вільна фізична сторінка, то завантаження виконується негайно, Якщо ж вільних сторінок немає, то вирішується питання, яку сторінку слід вивантажити з оперативної пам’яті. У такій ситуації можна використовувати багато різних критеріїв вибору, найпопулярніші їх следующие:
. найбільше не вдавалися страница,.
. перша попавшаяся страница,.
. сторінка, до якої останній час було найменше звернень. У деяких системах використовується поняття робочого безлічі сторінок. Робоча безліч визначається кожному за процесу є перелік найчастіше використовуваних сторінок, які мають постійно перебувати у оперативної пам’яті і тому підлягають розвантаження. Потому, як обрано сторінка, які мають залишити оперативну пам’ять, аналізується її ознака модифікації (з таблиці сторінок). Якщо выталкиваемая сторінка з завантаження була модифікована, що його нова версія мусить бути переписана на диск. Якщо ні, вона то, можливо просто знищена, тобто відповідна фізична сторінка оголошується вільної. Розглянемо механізм перетворення віртуального адреси в фізичний при страничной організації пам’яті (малюнок 2.13). Віртуальний адресу при страничном розподілі то, можливо представлено вигляді пари (p, p. s), де p — номер віртуальної сторінки процесу (нумерація сторінок починається з 0), а p. s — усунення не більше віртуальної сторінки. З огляду на, що розмір сторінки дорівнює 2 певною мірою до, усунення p. s то, можливо отримано простим відділенням k молодших розрядів в двоичной записи віртуального адреси. Решта старші розряди є двійкову запис номери сторінки p. [pic] Рис. 2.13. Механізм перетворення віртуального адреси в физический при страничной організації пам’яті При кожному зверненні до оперативної пам’яті апаратними засобами виконуються такі действия:
1. виходячи з початкового адреси таблиці сторінок (вміст регістру адреси таблиці сторінок), номери віртуальної сторінки (старші розряди віртуального адреси) і довжини запис у таблиці сторінок (системна константа) визначається адресу потрібної запис у таблице,.
2. з цього записи витягається номер фізичної страницы,.
3. до номера фізичної сторінки приєднується усунення (молодші розряди віртуального адреси). Використання у пункті (3) той факт, що розмір сторінки дорівнює ступеня 2, дозволяє застосувати операцію конкатенації (приєднання) замість більш тривалої операції складання, що зменшує час отримання фізичного адреси, отже підвищує продуктивність комп’ютера. На продуктивність системи з страничной організацією пам’яті впливають тимчасові витрати, пов’язані з обробкою страничных переривань і перетворенням віртуального адреси в фізичний. При часто виникаючих страничных прерываниях система може витрачати багато часу даремно, на свопинг сторінок. Щоб зменшити частоту страничных переривань, було б збільшувати розмір сторінки. З іншого боку, підвищення розміру сторінки зменшує розмір таблиці сторінок, отже зменшує витрати пам’яті. З іншого боку, якщо сторінка велика, отже великою і фіктивна область у вищій віртуальної сторінці кожної програми. У середньому становив кожної програмі втрачається половина обсягу сторінки, що сумарно за великої сторінці може становити істотну величину. Час перетворення віртуального адреси в фізичний значною мірою визначається часом доступу до таблиці сторінок. У зв’язку з цим таблицю сторінок прагнуть безкоштовно розміщувати у «швидких «запам'ятовувальних пристроях. Це то, можливо, наприклад, набір спеціальних регістрів чи пам’ять, яка використовує для зменшення часу доступу асоціативний пошук і освоєння кэширование даних. Страничное розподіл пам’яті може бути реалізований в спрощеному варіанті, без вивантаження сторінок на диск. І тут все віртуальні сторінки всіх процесів постійно перебувають у оперативної пам’яті. Такий варіант страничной організації хоча й надає користувачеві віртуальної пам’яті, але виключає фрагментацію завдяки тому, що програма може завантажуватися в несмежные області, і навіть те, що при завантаженні віртуальних сторінок будь-коли утворюється остатков.
Сегментное распределение При страничной організації віртуальне адресне простір процесу ділиться механічно на однакові частини. Не дозволяє диференціювати способи доступу до різних частин програми (сегментам), але це властивість часто буває дуже корисним. Наприклад, можна заборонити поводження з операціями запису і читання в кодовий сегмент програми, а сегмента даних розв’язати лише читання. З іншого боку, розбивка програми на «осмислені «частини робить принципово можливим поділ одного сегмента кількома процесами. Наприклад, якщо процеси використовують те ж математичну підпрограму, то оперативну пам’ять то, можливо завантажена лише одне копія цієї підпрограми. Розглянемо, як сегментное розподіл пам’яті реалізує ці можливості (малюнок 2.14). Віртуальний адресне простір процесу ділиться на сегменти, розмір яких визначається програмістом з урахуванням смислового значення котра міститься у яких інформації. Окремий сегмент може являти собою підпрограму, масив даних, і т.п. Іноді сегментація програми виконується за умовчанням компілятором. При завантаженні процесу частина сегментів міститься у оперативну пам’ять (при цьому кожного з цих сегментів операційна система підшукує підходящий ділянку вільної пам’яті), а частина сегментів розміщається в дискової пам’яті. Сегменти однієї програми можуть тривати оперативному пам’яті несмежные ділянки. Під час завантаження система створює таблицю сегментів процесу (аналогічну таблиці сторінок), у якій кожному за сегмента вказується початковий фізичний адресу сегмента оперативному пам’яті, розмір сегмента, правила доступу, ознака модифікації, ознака звернення до цього сегменту в останній інтервал часу й деяка інша інформація. Якщо віртуальні адресні простору кількох процесів включають і той ж сегмент, то таблицях сегментів цих процесів робляться посилання і той ж ділянку оперативної пам’яті, в який даний сегмент завантажується в єдиному примірнику. [pic] Рис. 2.14. Розподіл пам’яті сегментами Система з сегментной організацією функціонує аналогічно системи з страничной організацією: раз у раз відбуваються переривання, пов’язані із повною відсутністю потрібних сегментів у пам’яті, за необхідності звільнення пам’яті деякі сегменти вивантажуються, при кожному зверненні до оперативної пам’яті виконується перетворення віртуального адреси в фізичний. Крім того, при зверненні до пам’яті перевіряється, чи дозволений доступ необхідного типу до цього сегменту. Віртуальний адресу при сегментной організації пам’яті то, можливо представлений парою (g, p. s), де g — номер сегмента, а p. s — усунення у сегменті. Фізичний адресу виходить шляхом складання початкового фізичного адреси сегмента, знайденого таблиці сегментів за двозначним номером g, і усунення p. s. Вадою цієї методу розподілу пам’яті є фрагментація на рівні сегментів і більше повільне порівняно з страничной організацією перетворення адреса.
Странично-сегментное распределение Как це випливає з назви, даний метод є комбінацію сторінкового і сегментного розподілу пам’яті і, як наслідок, поєднує у собі гідності обох підходів. Віртуальний простір процесу ділиться на сегменти, а кожен сегмент своєю чергою ділиться на віртуальні сторінки, які нумеруються не більше сегмента. Оперативна пам’ять ділиться на фізичні сторінки. Завантаження процесу виконується операційній системою посторінково, у своїй частина сторінок розміщається в оперативної пам’яті, а частина на диску. До кожного сегмента створюється своя таблиця сторінок, структура якої цілком збігається зі структурою таблиці сторінок, використовуваної при страничном розподілі. До кожного процесу створюється таблиця сегментів, у якій вказуються адреси таблиць сторінок всім сегментів цього процесу. Адреса таблиці сегментів завантажується у спеціальний регістр процесора, коли активізується відповідний процес. На малюнку 2.15 показано схема перетворення віртуального адреси в фізичний для цього методу. [pic] Рис. 2.15. Схема перетворення віртуального адреси в фізичний для сегментно-страничной організації памяти Свопинг Разновидностью віртуальної пам’яті є свопинг. На малюнку 2.16 показаний графік залежності коефіцієнта завантаження процесора залежно від кількості одночасно виконуваних процесів і частки часу, проведеного цими процесами може очікування вводу-виводу. [pic] Рис. 2.16. Залежність завантаження процесора від кількості завдань і інтенсивності вводу-виводу З малюнка видно, що з завантаження процесора на 90% достатньо лише трьох рахункових завдань. Але, щоб забезпечити ті ж самі завантаження інтерактивними завданнями, які виконують інтенсивний вхід-видобуток, знадобляться десятки завдань. Необхідною передумовою виконання завдання є завантаження їх у оперативну пам’ять, обсяг якої обмежений. У умовах було запропоновано метод організації обчислювального процесу, званий свопингом. Відповідно до цим методом деякі процеси (зазвичай перебувають у стані очікування) тимчасово вивантажуються на диск. Планувальник ОС виключає їх із на свій розгляд, і за наступі умов активізації деякого процесу, що у області свопинга на диску, той процес переміщається в оперативну пам’ять. Якщо вільного місця у оперативної пам’яті бракує, то вивантажується інший процес. При свопинге, на відміну розглянутих раніше методів реалізації віртуальної пам’яті, процес переміщається між пам’яттю і диском повністю, то є можливість протягом певного часу процес може цілком відсутні в оперативної пам’яті. Є різноманітні алгоритми вибору процесів на завантаження і розвантаження, і навіть різні способи виділення оперативної та дискової пам’яті загружаемому процессу.
Иерархия запам’ятовувальних пристроїв. Принцип кэширования данных Память обчислювальної машини є ієрархію запам’ятовувальних пристроїв (внутрішні регістри процесора, різні типи сверхоперативной і оперативної пам’яті, диски, стрічки), відмінних середнім часом доступу та вартістю зберігання даних для один біт (малюнок 2.17). Користувачу хотілося хотів би мати і недорогу і швидку пам’ять. Кеш-пам'ять представляє деяке компромісне розв’язання проблеми. [pic] Рис. 2.17. Ієрархія ЗУ Кеш-пам'ять — це спосіб організації спільного функціонування двох типів запам’ятовувальних пристроїв, відмінних часом доступу та вартістю зберігання даних, що дозволяє зменшити середнє час доступу до даних з допомогою динамічного копіювання в «швидке «ЗУ найчастіше використовуваної інформації з «повільного «ЗУ. Кэш-памятью часто називають як спосіб роботи двох типів запам’ятовувальних пристроїв, а й одна з пристроїв — «швидке «ЗУ. Воно стоїть дорожче і, зазвичай, має порівняно невеличкий обсяг. Важливо, що механізм кеш-пам'яті є прозорим для користувача, який повинен повідомляти немає інформації про інтенсивності використання даних, і не повинен ніяк брати участь у переміщенні даних із ЗУ одного типу в ЗУ іншого типу, це автоматично системними засобами. Розглянемо окреме питання використання кеш-пам'яті зменшення середнього часу доступу до даних, що зберігається у оперативної пам’яті. І тому між процесором і оперативної пам’яттю поміщається швидке ЗУ, зване просто кэш-памятью (малюнок 2.18). У ролі такої можна використовувати, наприклад, асоціативна пам’ять. Вміст кеш-пам'яті є сукупність записів про завантажених у ній елементах даних. Кожна запис про елемент даних включає у собі адресу, який цю елемент даних має у оперативної пам’яті, і управляючу інформацію: ознака модифікації і ознака звернення до даних за певний останній період часу. [pic] Рис. 2.18. Кеш-пам'ять У системах, оснащених кэш-памятью, кожен запит до оперативної пам’яті виконується відповідно до наступним алгоритмом:
1. Проглядається вміст кеш-пам'яті з метою визначення, не чи потрібні дані в кеш-пам'яті; кеш-пам'ять перестав бути адресуемой, тому пошук потрібних даних здійснюється за содержимому.
— значенням поля «адресу оперативному пам’яті «, взятого з запроса.
2. Якщо є виявляються кеш-пам'яті, всі вони зчитуються з її, і результати передається в процессор.
3. Якщо потрібних даних немає, всі вони разом із адресою копіюються з оперативної пам’яті в кеш-пам'ять, і результати виконання запиту передається в процесор. При копіюванні даних може бути, що у кеш-пам'яті немає вільного місця, тоді вибираються дані, яких у останній період було найменше звернень, для витискування зі кешпам’яті. Якщо вытесняемые дані було модифіковано під час перебування у кеш-пам'яті, всі вони переписуються в оперативну память.
Якщо ці дані були модифіковані, їх місце у кеш-пам'яті оголошується вільним. Насправді в кеш-пам'ять зчитується чимало елемент даних, якого сталося звернення, а цілий блок даних, це збільшує ймовірність так званого «влучення в кеш », тобто перебування потрібних даних в кешпам’яті. Покажемо, як середнє час доступу до даних залежить від можливості влучення в кеш. Нехай є основне запам’ятовуючі пристрій із середнім часом доступу до даних t1 і кеш-пам'ять, має час доступу t2, очевидно, що t2.