os

os


1. Класифікація ОС.

Існує декілька схем класифікації операційних систем. Нижче приведена класифікація по деяких ознаках з погляду користувача.

Реалізація багатозадачності

По числу одночасно виконуваних задач операційні системи можуть бути розділені на два класи:

-                  багатозадачні (Linux, Unix, Windows XP).

-                  однозадачні (наприклад, MS-DOS) .

Багатозадачна ОС, вирішуючи проблеми розподілу ресурсів і конкуренції, повністю реалізує мультипрограмний режим.

Підтримка розрахованого на багато користувачів режиму.

По числу одночасно працюючих користувачів ОС можна розділити на:

-                  однокористувацькі (MS-DOS, Windows 9.x);

-                  багатокористувацькі (Windows XP, Linux).

Найістотніша відмінність полягає в наявності у розрахованих на багато користувачів систем механізмів захисту персональних даних кожного користувача.

Багатопроцесорна обробка

Багатопроцесорні системи складаються з двох або більш центральних процесорів, що здійснюють паралельне виконання команд. Підтримка мультипроцесування є важливою властивістю ОС і приводить до ускладнення всіх алгоритмів управління ресурсами. Багатопроцесорна обробка реалізована в таких ОС, як Linux, Solaris, Windows XP і у ряді інших.

Багатопроцесорні ОС розділяють на симетричні і асиметричні. У симетричних ОС на кожному процесорі функціонує одне і те ж ядро і задача може бути виконана на будь-якому процесорі, тобто обробка повністю децентралізована. У асиметричних ОС процесори нерівноправні.

Системи реального часу.

У розряд багатозадачних ОС, разом з пакетними системами і системами розділення часу, включаються також системи реального часу.

Вони використовуються для управління різними технічними об'єктами або технологічними процесами. Такі системи характеризуються гранично допустимим часом реакції на зовнішню подію, протягом якого повинна бути виконана програма, що управляє об'єктом. Система повинна обробляти дані швидше, ніж ті можуть поступати, причому від декількох джерел одночасно.

Такі жорсткі обмеження позначаються на архітектурі систем реального часу, наприклад, в них може бути відсутнім віртуальна пам'ять, підтримка якої дає непередбачувані затримки у виконанні програм.

2. Алгоритми планування

Алгоритми SJF і гарантованого планування є окремими випадками пріоритетного планування. При пріоритетному плануванні кожному процесу привласнюється певне числове значення — пріоритет, відповідно до якого йому виділяється процесор. Процеси з однаковими пріоритетами плануються у порядку FCFS. Для алгоритму SJF як такий пріоритет виступає оцінка тривалості наступного CPU burst. Чим менше значення цієї оцінки, тим більш високий пріоритет має процес. Для алгоритму гарантованого планування пріоритетом є коефіцієнт справедливості. Чим він менше, тим більше пріоритет у процесу.

Принципи призначення пріоритетів можуть спиратися як на внутрішні критерії обчислювальної системи, так і на зовнішні по відношенню до неї. Внутрішні використовують різні кількісні і якісні характеристики процесу для обчислення його пріоритету. Це можуть бути, наприклад, певні обмеження за часом використання процесора, вимоги до розміру пам'яті, число відкритих файлів і використовуваних пристрої ввводу-виводу, відношення середньої тривалості I/O burst до CPU burst і т.п. Зовнішні критерії виходять з таких параметрів, як важливість процесу для досягнення яких-небудь цілей, вартість сплаченого процесорного часу і інших чинників. Високий зовнішній пріоритет може бути привласнений задачі лектора або того, хто заплатив $100 за роботу протягом однієї години.

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

3. Методы по управлению памятью

Под памятью (memory) здесь подразумевается оперативная память компьютера. В отличие от памяти жесткого диска, которую называют внешней памятью (storage), оперативной памяти для сохранения информации требуется постоянное электропитание.

Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Особая роль памяти объясняется тем, что процессор может выполнять инструкции протравы только в том случае, если они находятся в памяти. Память распределяется как между модулями прикладных программ, так и между модулями самой операционной системы.

В ранних ОС управление памятью сводилось просто к загрузке программы и ее данных из некоторого внешнего накопителя (перфоленты, магнитной ленты или магнитного диска) в память. С появлением мультипрограммирования перед ОС были поставлены новые задачи, связанные с распределением имеющейся памяти между несколькими одновременно выполняющимися программами.

Функциями ОС по управлению памятью в мультипрограммной системе являются:

-                  отслеживание свободной и занятой памяти;

-                  выделение памяти процессам и освобождение памяти по завершении процессов;

-                  вытеснение кодов и данных процессов из оперативной памяти на диск (полное или частичное), когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место;

-                  настройка адресов программы на конкретную область физической памяти.

4. Потоки.

Концепция процесса, пришедшая из мира UNIX, плохо реализуется в многозадачной системе, поскольку процесс имеет тяжелый контекст. Возникает понятие потока (thread), который понимается как подпроцесс, или легковесный процесс (light-weight process), выполняющийся в контексте полноценного процесса.

С помощью процессов можно организовать параллельное выполнение программ.

Для организации параллельного выполнения и взаимодействия процессов можно использовать механизм многопоточности. Основной единицей здесь является поток, который представляет собой облегченную версию процесса. Чтобы понять, в чем состоит его особенность, необходимо вспомнить основные характеристики процесса.

-                  Процесс располагает определенными ресурсами. Он размещен в некотором виртуальном адресном пространстве, содержащем образ этого процесса. Кроме того, процесс управляет другими ресурсами (файлы, устройства ввода/вывода и т.д.).

-                  Процесс подвержен диспетчеризации. Он определяет порядок выполнения одной или нескольких программ, при этом выполнение может перекрываться другими процессами. Каждый процесс имеет состояние выполнения и приоритет диспетчеризации.

Если рассматривать эти характеристики независимо друг от друга (как это принято в современной теории ОС), то:

·                   владельцу ресурса, обычно называемому процессом или задачей, присущи:

-        виртуальное адресное пространство;

-        индивидуальный доступ к процессору, другим процессам, файлам, и ресурсам ввода — вывода.

·                   Модулю для диспетчеризации, обычно называемому потоком или облегченным процессом, присущи:

-        состояние выполнения (активное, готовность и т.д.);

-        сохранение контекста потока в неактивном состоянии;

-        стек выполнения и некоторая статическая память для локальных переменных;

-        доступ к пространству памяти и ресурсам своего процесса.

Все потоки процесса разделяют общие ресурсы. Изменения, вызванные одним потоком, становятся немедленно доступны другим.

При корректной реализации потоки имеют определенные преимущества перед процессами. Им требуется:

-                  меньше времени для создания нового потока, поскольку создаваемый поток использует адресное пространство текущего процесса;

-                  меньше времени для завершения потока;

-                  меньше времени для переключения между двумя потоками в пределах процесса;

-                  меньше коммуникационных расходов, поскольку потоки разделяют все ресурсы, и в частности адресное пространство. Данные, продуцируемые одним из потоков, немедленно становятся доступными всем другим потокам.

5. Процессы

Термин «процесс» впервые появился при разработке операционной системы Multix и имеет несколько определений, которые используются в зависимости от контекста, согласно которым процесс — это:

-                  программа на стадии выполнения

-                  «объект», которому выделено процессорное время

-                  асинхронная работа

Примером контекстной зависимости применения термина «процесс» является ОС Android. В этой системе процесс и приложение не являются тесно связанными сущностями: программы для андроидмогут выглядеть выполняющимися при отсутствии процесса; несколько программ могут использовать один процесс; либо одно приложение может использовать несколько процессов; процесс может присутствовать в системе даже если его приложение бездействует. 

Для описания состояний процессов используется несколько моделей. Самая простая — модель трех состояний. Она определяет следующие состояния процесса:

-                  состояния выполнения

-                  состояния ожидания

-                  состояния готовности

Операции над процессами

Над процессами можно производить следующие операции:

1.     Создание процесса — это переход из состояния рождения в состояние готовности

2.     Уничтожение процесса — это переход из состояния выполнения в состояние смерти

3.     Восстановление процесса — переход из состояния готовности в состояние выполнения

4.     Изменение приоритета процесса — переход из выполнения в готовность

5.     Блокирование процесса — переход в состояние ожидания из состояния выполнения

6.     Пробуждение процесса — переход из состояния ожидания в состояние готовности

7.     Запуск процесса (или его выбор) — переход из состояния готовности в состояние выполнения

Иерархия процессов

Процесс не может взяться из ниоткуда: его обязательно должен запустить какой-то процесс. Процесс, запущенный другим процессом, называется дочерним (child) процессом или потомком. Процесс, который запустил новый процесс называется родительским (parent), родителем или просто — предком. У каждого процесса есть два атрибута — PID (Process ID) - идентификатор процесса и PPID (Parent Process ID) — идентификатор родительского процесса.

Процессы создают иерархию в виде дерева. Самым «главным» предком, то есть процессом, стоящим на вершине этого дерева, является процесс init (PID=1).

6. Синхронізація потоків з використанням критичних секцій

Цей синхронизирующий об'єкт може використовуватися лише локально всередині процесу, який створив його. Інші об'єкти можна використовувати для синхронізації потоків різних процесів. Назва об'єкта “критична секція” пов'язані з деяким абстрактним виділенням частини програмного коду (секції), виконує деякі операції, порядок яких немає може бути порушений. Тобто спроба двома різними потоками одночасно виконувати код цієї секції призведе до помилці.

Наприклад, такий секцією то, можливо зручно захистити функции–писатели, оскільки одночасний доступ кількох письменників може бути виключений.

Для критичної секції вводять дві операції:

-                  ввійти у секцію;

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

-                  залишити секцію;

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

Власне кажучи, за іншими АПІ, відміннихWin32 (наприклад,OS/2), критична секція розглядається не як синхронизующий об'єкт, бо як фрагмент коду програми, котрі можуть виконуватися лише одною потоком докладання. Тобто вхід в критичну секцію сприймається як тимчасове вимикання механізму перемикання потоків до виходу з цього секції. УWin32 АПІ критичні секції розглядаються як об'єкти, що зумовлює певної плутанини — вони близькі за своїми властивостями донеименованним об'єктах виняткового володіння (>mutex, див. нижче).

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

Наприклад, стосовно вже розглянутим купам — втрачає сенс всі функції роботи з купою захищати критичної секцією, оскільки функции–читатели можуть виконуватися паралельно. Понад те, застосування критичної секції навіть синхронізації письменників насправді представляється малоудобним — оскільки для синхронізації письменника з читачами останнім все–равно доведеться укладати цю секцію, що він практично призводить до захисту всіх функцій єдиної секцією.

Можна виділити декілька випадків ефективного застосування критичних секцій:

-       читачі не конфліктують з письменниками (захищати треба лише письменників);

-       все потоки мають приблизно однакові права доступу (скажімо, не можна виокремити чистих письменників та читачів);

-       при побудові складових синхронизирующих об'єктів, які з кількох стандартних, за захистом послідовних операцій над складовим об'єктом.

 

 

7. Використання interlocked - функцій

 

Используются в случае, если разным потокам необходимо изменять одну и ту же переменную. Например, увеличивать счетчик числа операций.

Код вида var++; компилятором генерируется в что-то вроде

MOV EAX, [var]; 1

INC EAX; 2

MOV [var], EAX; 3

Соответственно, если будут два потока с таким кодом, то нельзя гарантировать, что выполняться строки 1,2,3 первого потока, а потом 1,2,3 второго, первая строчка второго потока может выполнится до того, как первый запишет новое значение в переменную, и тогда второй поток изменит старое значение и перетрет изменения первого. Использование Interlocked-функций гарантирует, что операция будет выполнена атомарно, и описанная выше проблема отпадает. При использование процессоров х86 они выдают по шине аппаратный сигнал, не давая другим процессорам процессорам обратится по тому же адресу памяти на время работы функции.

Существуют ещё функции, которые реализуют:

-       декремент: LONG InterlockedDecrement(LONG volatile *Addend), возвращает значение декрементированной переменной и 64-битная версия — InterlockedDecrement64

-       монопольную замены текущего значения: LONG InterlockedExchange(LONG volatile *Target, LONG Value), которая всегда оперирует 32-разрядными значениямии возвращает начальное значение параметра Target, и PVOID InterlockedExchangePointer с такой же сигнатурой, которая в случае 64-разрядной программе будет оперировать с 64-разрядными значениями, возвращает указатель на Target

-       логические операции: логическое «И» LONG InterlockedAnd(LONG volatile *Destination, LONG Value), логическое «ИЛИ» InterlockedOr и сумму по модулю два InterlockedXor. У них одинаковая сигнатура, все они результат выполнения записывают в первый параметр и возвращают исходное значение первого параметра

-       выполнение сравнения и присвоения как атомарной операции: LONG InterlockedCompareExchange(LONG volatile *Destination, LONG Exchange, LONG Comparand) сравнивает значение первых двух параметров, и если они совпадают, записывает в первый параметр третий. Возвращает исходное значение первого параметра и работает всегдда з 32-разрядными значениями. PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination, PVOID Exchange, PVOID Comparand) делает тоже самое, отличие в том, что в 64-разрядном приложение оперирует с 64-разрядными значениями. Также существует InterlockedCompare64Exchange128, которая тоже работает так же, сравнивает два 64-битных значения, а третий параметр у неё имеет разрядность 128 бит

 

 

 

Interlocked-функции не переводят процесс в режим ожидания, работают в пользовательском режиме, и поэтому обладают довольно большим быстродействием, так что если необходима синхронизация для доступа к одной переменной, следует использовать именно их.

 

8. Мютекси

 

М'ю́текс — призначений для захисту певного об’єкта у потоці від доступу інших потоків. М'ютекс є одним із засобів синхронізації роботи потоків або процесів

М'ютекси є одним з варіантів семафорних механізмів для організації взаємного виключення. Вони реалізовані в багатьох ОС, їхнє основне призначення — організація взаємного виключення для потоків з одного і того ж або різних процесів.

М'ютекси — це прості двійкові семафори, які можуть перебувати в одному з двох станів - сигнальному або несигнальному (відкритий і закритий відповідно). Коли потік отримує м'ютекс, той переводиться в несигнальний стан.

Організація послідовного доступу до ресурсів з використанням м'ютексів стає нескладною, оскільки в кожен конкретний момент тільки один потік може володіти цим об'єктом. Для того, щоб об'єкт mutex став доступний потокам, що належать різним процесам, при створенні йому необхідно присвоїти ім'я. Потім це ім'я потрібно передати «у спадок» завданням, які повинні його використовувати для взаємодії. Для цього вводяться спеціальні системні виклики (наприклад CreateMutex у Windows), в яких указується початкове значення м'ютекса і його ім'я. Для роботи з м'ютексом є кілька функцій. Крім вже згаданої функції створення такого об'єкта (CreateMutex), є функції відкриття (OpenMutex) і функція звільнення цього об'єкта (ReleaseMutex). Конкретні звернення до цих функцій і переліки передаваних і отримуваних параметрів потрібно дивитися в документації на відповідну ОС.

 

9. Семафори

 

Семафор — це універсальний механізм для організації взаємодії процесів.

Розв'язує задачі взаємного виключення та синхронізації потоків. Він є одним з найстаріших засобів розподілення доступу процесів, що працюють паралельно, до критичних ресурсів. Семафори використовуються для контролю доступу до спільного ресурсу, або для синхронізації процесів (потоків).

Семафор — це об'єкт ядра ОС, який можна розглядати як лічильник, що містить ціле число в діапазоні від 0 до заданого при його створенні максимального значення[1]. При досягненні семафором значення 0 він переходить у несигнальний стан, при будь-яких інших значеннях лічильника – його стан сигнальний.

Традиційне позначення семафора : S. Операції, які можна виконати над семафором:

-       Ініціалізація - встановлення початкового значення семафору.

-       Операція P(S): Вона перевіряє стан семафору. Якщо семафор не рівний нулю, то виконується операція S:=S-1. Інакше, процес блокується, поки S=0.

-       Операція V(S): Ця операція збільшує значення семафору на 1. Тобто виконується операція S:=S+1.

В залежності від значень, які може приймати семафор він поділяється на:

-       Двійковий : здатний приймати значення 0 та 1.

-       Трійковий : здатний приймати значення 0, 1 та 2.

-       і т. д.

 

 

10.Проекції файлів в памяті

 

Отображение файла в память (на память) — это способ работы с файлами в некоторых операционных системах, при котором всему файлу или некоторой непрерывной его части ставится в соответствие определённый участок памяти (диапазон адресов оперативной памяти). При этом чтение данных из этих адресов фактически приводит к чтению данных из отображенного файла, а запись данных по этим адресам приводит к записи этих данных в файл. Примечательно то, что отображать на память часто можно не только обычные файлы, но и файлы устройств.

Альтернативой отображению может служить прямое чтение файла или запись в файл. Такой способ работы менее удобен по следующим причинам:

-       Необходимо постоянно помнить текущую позицию файла и вовремя её передвигать на позицию, откуда будет производиться чтение или куда будет идти запись.

-       Каждый вызов смены/чтения текущей позиции, записи/чтения — это системный вызов, который приводит к потере времени.

-       Для работы через чтение/запись всё равно приходится выделять буферы определённого размера, таким образом, в общем виде работа состоит из трёх этапов: чтение в буфер -> модификация данных в буфере -> запись в файл. При отображении же работа состоит только из одного этапа: модификации данных в определённой области памяти.

Дополнительным преимуществом использования отображения является меньшая по сравнению с чтением/записью нагрузка на операционную систему — дело в том, что при использовании отображений операционная система не загружает в память сразу весь файл, а делает это по мере необходимости, блоками размером со страницу памяти (как правило 4 килобайта). Таким образом, даже имея небольшое количество физической памяти (например 32 мегабайта), можно легко отобразить файл размером 100 мегабайт или больше, и при этом для системы это не приведет к большим накладным расходам. Также выигрыш происходит и при записи из памяти на диск: если вы обновили большое количество данных в памяти, они могут быть одновременно (за один проход головки над диском) записаны на диск.

Файл, отображенный на память, удобен также тем, что можно достаточно легко менять его размер и при этом (после переотображения) получать в своё распоряжение непрерывный кусок памяти нужного размера. С динамической памятью такой трюк не всегда возможен из-за явления фрагментации. Когда же мы работаем с отображенным на память файлом — менеджер памяти автоматически настраивает процессор так, что странички ОЗУ, хранящие соседние фрагменты файла, образуют непрерывный диапазон адресов.

 

11.Віконні повідомлення

 

Вікно це не тільки область на екрані, за допомогою якої додаток може представити свій висновок, це ще й адресат подій і повідомлень в середовищі Windows

Вікно ідентифікується по дескриптору вікна Цей дескриптор (змінна типу HWND) однозначно визначає кожне вікно в системі Windows організовує свої вікна в ієрархічну структуру:

-       кожне вікно має батька, коренем дерева всіх вікон є вікно робочого столу, створюваного Windows при завантаженні

-       для всіх вікон верхнього рівня (для головних вікон додатків і інших перекриваються і спливаючих вікон додатків) батьківським вікном є робочий стіл

Батько дочірнього вікна вікно верхнього рівня або інше дочірнє вікно, більш високого рівня по ієрархії

Між вікнами верхнього рівня (перекриваються і спливаючі вікна) існує ще одна ієрархічна звязок Власником вікна верхнього рівня може бути інше вікно того ж рівня Вікно, що має власника, завжди відображається поверх свого власника і зникає при мінімізації вікна-власника Типовим випадком володіння одного вікна верхнього рівня іншим є додаток, що відображає діалогове вікно Діалогове вікно не є дочірнім вікном (воно є спливаючим вікном), але його власником залишається вікно програми

 

12.Стандартні та додаткові купи процессу

 

Ку́ча в информатике и программировании — название структуры данных, с помощью которой реализована динамически распределяемая память приложения.

Размер кучи — размер памяти, выделенной операционной системой (ОС) для хранения кучи (под кучу).

При запуске процесса ОС выделяет память для размещения кучи. В дальнейшем память для кучи (под кучу) может выделяться динамически.

Программа пользователя, используя функции, подобные malloc(), может получать указатели на области памяти, принадлежащие куче. Программы используют кучу для размещения динамически создаваемых структур данных. Программа может освободить память с помощью функций, подобных free().

 

Память кучи можно разделить на занятую (выделенную программе с помощью функций, подобных malloc()) и свободную (ещё не занятую или уже освобождённую с помощью функций, подобных free()).

Программа может быть уверена в том, что между вызовами функций, подобных malloc() и free(), область памяти, помеченная как занятая, не будет выделена повторно. После вызова функции, подобной free(), область памяти будет освобождена и в дальнейшем может использоваться повторно или может быть отдана ОС. Использование указателя на освобождённую область памяти будет приводить к сбоям или непредсказуемой работе программы.

Для хранения данных о том, какая область кучи является занятой, а какая — свободной, обычно используется дополнительная область памяти.

Перед началом работы программы выполняется инициализация кучи, в ходе которой память, выделенная под кучу, отмечается как свободная.

Куча представляет собой непрерывную область памяти, поделённую на занятые и свободные области (блоки) различного размера.

Информация о свободных и занятых областях кучи может храниться в списках различных форматов. От выбранного формата списка напрямую зависит производительность функций, подобных malloc() и free(), так как большую часть времени эти функции тратят на поиск по списку подходящих областей.


Report Page