Глава 5: Управление на Файловата Система
5.1 Методи за разпределяне на файлове на диска
Управлението на Файловата Система (ФС) от операционната система решава как да се съхраняват файловете върху твърдия диск (или SSD). Основната задача е да се намери начин за бързо и ефективно преобразуване на името на файла в физически адреси на блоковете данни на диска.
Разпределянето на файлове е методът, по който Ядрото проследява кои дискови блокове принадлежат на даден файл и кои са свободни.
1. Основни Методи за Разпределяне
Има три основни начина, по които операционната система може да организира блоковете на един файл на диска:
А. Последователно (Contiguous) Разпределяне
Това е най-простият метод, при който целият файл се съхранява като един непрекъснат блок от дискови сектори, които следват един след друг.
Б. Свързано (Linked) Разпределяне
Този метод решава проблема с фрагментацията, като позволява блоковете на файла да бъдат разпръснати навсякъде по диска.
- Как Работи: Всеки дисков блок на файла съдържа две части:
- Самите данни на файла.
- Указател (Pointer) към следващия дисков блок, който принадлежи на същия файл.
- Пример: Блок №100 съдържа данни и указател към Блок №550. Блок №550 съдържа данни и указател към Блок №120.
- Предимства: Всеки дисков блок на файла съдържа две части:
- Няма Външна Фрагментация: Всеки свободен блок може да се използва.
- Лесно Нарастване: Файлът може да расте, като просто се добави указател към следващ свободен блок.
- Недостатъци: Всеки дисков блок на файла съдържа две части:
- Бавен Произволен Достъп: За да прочетете средата на файла (напр. 100-тния блок), Ядрото трябва да следва веригата от указатели от началото, което е много бавно.
- Разхищение на Място: Всеки блок губи малко място за указателя.
- Надеждност: Ако един указател се повреди, целият остатък от файла се губи.
- Недостатъци: Всеки дисков блок на файла съдържа две части:
- Бавен Произволен Достъп: За да прочетете средата на файла (напр. 100-тния блок), Ядрото трябва да следва веригата от указатели от началото, което е много бавно.
- Разхищение на Място: Всеки блок губи малко място за указателя.
- Вариант (FAT): Таблицата за Разпределяне на Файлове (FAT), използвана в стари Windows и USB памети, е вариант, при който всички указатели се съхраняват в една голяма таблица в началото на диска, което прави достъпа малко по-бърз.
В. Индексирано (Indexed) Разпределяне
Това е най-гъвкавият и най-често използваният метод в съвременните операционни системи (NTFS, ext4, APFS). Той комбинира бързината на достъп с гъвкавостта на разпръснатото съхранение.
- Как Работи: Всеки файл има свой собствен Информационен Блок (Index Block). Този блок съдържа списък с адресите на всички дискови блокове, които съставляват файла.
-
Пример:
Файлът „Проект.pdf“ сочи към Индексен Блок №50. В Блок №50 е записано: „Данните се намират в блокове 100, 550, 120, 890…“.
- Предимства:
-
Бърз Произволен Достъп:
За да прочетете средата на файла, Ядрото трябва да прочете само един Индексен Блок и веднага знае физическия адрес на желаната част.
-
Няма Външна Фрагментация:
Блоковете могат да бъдат разпръснати навсякъде.
- Недостатъци:
-
Малки Файлове:
За малки файлове се губи място, защото се разпределя цял Индексен Блок, който може да не е нужен.
-
Големи Файлове:
За много големи файлове може да са нужни няколко Индексни Блока, свързани помежду си (т.нар. многостепенен индекс), което усложнява структурата.
-
Приложение:
В Linux и macOS този Индексен Блок се нарича i-node (индексен възел) и е основният начин за проследяване на файловете.
2. Използване на Свободното Пространство
За да може да разпредели нов файл, операционната система трябва да знае кои блокове на диска са свободни.
А. Битови Карти (Bitmaps)
Най-често срещаният метод. Цялата свободна памет се представя с карта от нули и единици.
- Всеки бит (0 или 1) отговаря на един дисков блок.
- 1 означава, че блокът е зает.
- 0 означава, че блокът е свободен.
Б. Свързан Списък (Linked List)
Всички свободни дискови блокове се свързват помежду си във верига (както при Свързаното разпределяне).
- Предимство: Не хаби допълнително място в паметта (като Битовите Карти).
- Недостатък: Много бавно търсене на свободна дупка, ако трябва да се прочете цялата верига.
Разбирането на тези методи е важно, защото изборът на файлова система (NTFS, ext4, FAT) определя кой метод за разпределяне се използва и оттам зависи бързината, стабилността и ефективността на съхранение на данни на целия компютър.
5.2 Дневникови (Journaling) и Клъстерни (Clustering) файлови системи
Съвременните файлови системи (ФС) се фокусират не само върху бързото съхранение на данни, но и върху надеждността и устойчивостта при срив на системата. За тази цел са разработени Дневниковите и Клъстерните ФС.
1. Дневникови (Journaling) Файлови Системи: Гаранция за Надеждност
Дневниковата файлова система е тази, която може бързо да се възстанови след неочаквано прекъсване на захранването или срив на операционната система, без да губи или поврежда данните.
А. Какъв е Проблемът?
Когато Ядрото променя файл (напр. преместване от папка А в папка Б), то трябва да направи няколко стъпки върху диска:
- Изтриване на записа за файла от директория А.
- Създаване на нов запис в директория Б.
- Освобождаване на старото място в таблицата за разпределяне.
- Запис на новото място.
Ако сривът настъпи по средата на тези стъпки, дискът остава в непоследователно (inconsistent) състояние. Например, файлът може да е изтрит от директория А, но още да не е записан в Б, което води до загуба на данни.
Б. Механизъм на Дневника (Journal)
Дневниковата ФС (като NTFS в Windows и ext4 в Linux) решава това, като използва Дневник (Journal) – специална зона на диска:
- Преди Промяната:
Преди да извърши реалната промяна, Ядрото записва в Дневника точно какво ще направи („Премести файл X от А в Б“). Това се нарича Транзакция.
- Изпълнение: Ядрото извършва реалните промени по диска.
- Потвърждение: След като всички стъпки приключат успешно, записът в Дневника се изтрива.
В. Възстановяване След Срив
Ако операционната система се срине:
- При рестарт Ядрото първо преглежда Дневника.
- Ако види недовършени Транзакции, той може или да завърши липсващите стъпки (redo), или да отмени всички стъпки (undo) до предишния стабилен момент.
- Резултат: Дискът винаги се връща в работещо, последователно състояние за секунди, без да е необходимо сканиране на целия диск.
2. Клъстерни (Clustering) Файлови Системи: Мащабиране за Бизнеса
Клъстерните ФС са проектирани да работят на мрежа от много компютри (сървъри), които имат едновременен достъп до едни и същи данни. Те са от ключово значение за големи бази данни, облачни услуги и високопроизводителни изчисления.
А. Какъв е Проблемът?
В традиционните мрежови операционни системи (като Samba или NFS), много компютри могат да достъпват файл, но само един може да го променя в даден момент (заключване на файл). При Клъстерните ФС, трябва да се постигне пълна висока наличност (High Availability) и да се елиминира единичната точка на отказ (Single Point of Failure - SPOF).
Б. Механизъм на Клъстера
Клъстерните ФС (напр. Microsoft Cluster Shared Volume (CSV) или Oracle Cluster File System (OCFS)) имат две основни характеристики:
- Споделен Достъп до Диска:
Всички сървъри в клъстера виждат един и същ физически диск (или дисково хранилище) и могат да работят с него. ФС прави така, че дискът да изглежда като един общ ресурс.
- Разпределено Заключване (Distributed Locking):
Това е най-сложната част. Трябва да се гарантира, че когато Сървър А променя част от файл, Сървър Б знае за това и не се опитва да промени същата част едновременно. Клъстерната ФС използва сложни механизми за заключване на блокове, за да поддържа целостта на данните между всички сървъри.
В. Ползи
- Висока Наличност: Ако един от сървърите се срине, останалите незабавно поемат неговата работа, тъй като всички имат достъп до данните.
- Мащабируемост: Може лесно да се добавят нови сървъри към клъстера, за да се увеличи общата производителност.
3. Разлики и Примери
| Характеристика |
Дневникова ФС (Journaling) |
Клъстерна ФС (Clustering) |
| Основна Цел |
Надеждност и бързо възстановяване на един компютър след срив. |
Мащабируемост и Висока наличност за мрежа от компютри. |
| Ключов Механизъм |
Дневник за записване на транзакциите. |
Разпределено заключване за синхронизация между сървърите. |
| Примери |
NTFS (Windows), ext4 (Linux), APFS(macOS). |
OCFS (Linux), CSV (Windows Server), GPFS. |
Дневниковите ФС са задължителен елемент на всяка съвременна операционна система за лична и бизнес употреба, докато Клъстерните ФС са нишов, но критичен компонент за големите центрове за данни.
5.3 Права за достъп (Permissions) и Сигурност на файловете
След като разбрахме как операционната система съхранява данните физически на диска, е изключително важно да разгледаме как тя контролира достъпа до тези данни. Правата за достъп (Permissions) и сигурността на файловете са основни функции за сигурност в операционните системи.
1. Концепция за Права за Достъп (Permissions)
Правата за достъп са механизъм, чрез който Ядрото определя кой потребител или група какво може да прави с даден файл или директория. Тази система гарантира изолация и конфиденциалност на данните.
Трите Основни Типа Права:
В повечето файлови системи (Linux ext4, Windows NTFS) правата се делят на три основни действия:
- Четене (Read - R): Позволява на потребителя да отваря и преглежда съдържанието на файла. За директория: Позволява да се изброи съдържанието на папката.
- Запис (Write - W): Позволява на потребителя да променя или изтрива файла. За директория: Позволява да се създават или изтриват файлове в папката.
- Изпълнение (Execute - X): Позволява на потребителя да стартира файла, ако е програма. За директория: Позволява на потребителя да влиза в директорията (т.е. да я прави текуща).
Моделът на Linux: Потребител, Група, Други (UGO)
Операционна система Linux използва прост, но мощен модел за права, базиран на три категории субекти:
| Категория |
Кой е включен? |
Описание |
| Собственик (User - U) |
Потребителят, който е създал файла. |
Има най-пълен контрол. |
| Група (Group - G) |
Всички потребители, които са членове на определена група. |
Споделени права за екипи или общи ресурси. |
| Други (Others - O) |
Всички останали потребители на системата. |
Най-ограничени права. |
Как Работи: За всеки файл, операционната система съхранява три набора от права – един за Собственика, един за Групата и един за Другите.
2. Управление на Правата в NTFS (Windows)
Файловата система NTFS в Windows Server използва по-сложна и гъвкава система, наречена Списъци за Контрол на Достъпа (ACL - Access Control List).
- Принцип: Вместо да има само три категории (U, G, O), ACL позволява да се дефинират конкретни права за всеки отделен потребител или всяка отделна група поотделно.
- Наследяване: Правата, зададени на една родителска директория, могат автоматично да се наследяват от файловете и поддиректориите в нея, което улеснява администрирането.
- Отказ на Достъп (Deny): ACL позволява изрично да се откаже (deny) достъп на потребител, дори ако той е член на група, която има позволение.
3. Механизъм за Сигурност: Проверка на Достъпа
Как Ядрото прилага правата всеки път, когато някой се опита да достъпи файл?
- Идентификация:
Когато потребител влезе в системата, Ядрото му присвоява уникален Потребителски Идентификатор (UID) и Групов Идентификатор (GID).
- Заявка:
Когато програма (работеща под ID-то на потребителя) поиска операция (напр. „Отвори файл X за запис“), тя прави Системно Повикване към Ядрото.
- Проверка: Преди да изпълни повикването, Ядрото прави проверка:
- Ядрото взема UID и GID на заявчика.
- Ядрото проверява ACL/Permissions на Файл X.
- Ако UID/GID на заявчика имат необходимите права (R, W или X), Ядрото позволява операцията. В противен случай, връща грешка „Достъп Отказан“.
Тази проверка се извършва всеки път за всяка операция (четене на блок, запис на блок), което е критично за сигурността.
4. Допълнителни Мерки за Сигурност
За да се повиши сигурността на файловата система, се прилагат допълнителни механизми:
- Криптиране на Файловете: Операционната система може да криптира данните на диска (напр. BitLocker в Windows или FileVault в macOS). Дори ако физическият диск бъде откраднат, данните са нечетими без правилния криптиращ ключ.
- Одит (Auditing): Ядрото може да записва дневник (log) на всички успешни и неуспешни опити за достъп до критични файлове. Това е задължително за сървърни операционни системи и корпоративни операционни системи за проследяване на нарушения.
- ACL (Ограничаващ Контрол на Достъпа): Прилага се от Операционната система и гарантира, че дори ако даден потребител получи контрол над друг потребител, той не може да прехвърли правата си или да наруши системната политика.
Сигурността на файловете е двустранен процес: Ядрото гарантира, че се прилагат правилата, а Файловата Система осигурява механизмите (ACL или UGO), които дефинират тези правила.
Глава 6: Управление на Входно/Изходни (I/O) Устройства
6.1 Принципи на I/O хардуера и I/O софтуера
Управлението на I/O (Вход/Изход) е сложната задача на Ядрото да осигури абстракция – да направи така, че приложният софтуер да може да работи с всяко устройство (от мишка до твърд диск) по унифициран начин, без да се интересува от сложните хардуерни детайли.
1. I/O Хардуер: Как Устройствата Говорят с Процесора
Въпреки огромните разлики във функциите си, всички I/O устройства комуникират с Процесора чрез няколко основни механизма:
А. Портове и Регистри
Всяко I/O устройство има набор от специални адреси (Портове) или памет, която Процесорът използва за комуникация.
-
Регистри за Управление и Състояние (Control and Status Registers):
Това са малки паметни клетки в самото устройство. Ядрото записва команди в Регистъра за Управление (напр. „Стартирай трансфер на данни“), и чете от Регистъра за Състояние, за да разбере дали устройството е заето, свободно, или има грешка.
-
Регистри за Данни (Data Registers):
Използват се за прехвърляне на малки порции данни (обикновено по един байт или дума) между Процесора и устройството.
Б. I/O Команди срещу Memory-Mapped I/O
Има два основни начина за комуникация на Процесора с регистрите на устройството:
- Специални I/O Инструкции:
Процесорът използва специфични асемблерни инструкции (напр. IN и OUT), които са предназначени само за общуване с I/O портовете. Достъпът до тях е ограничен само до Ядрен Режим.
- I/O Чрез Памет (Memory-Mapped I/O):
Това е по-често срещаният метод в съвременните операционни системи. Регистрите на I/O устройството се появяват като част от адресното пространство на RAM. Това позволява на Ядрото да работи с I/O устройствата чрез обикновени инструкции за четене и запис в паметта, което опростява кода на драйверите.
2. I/O Софтуер: Многослоен Контрол layered
I/O софтуерът е организиран в строга йерархия, като всеки слой има определена роля и скрива сложността на по-долните слоеве:
А. Най-долен Слой: Хардуер и Обработчици на Прекъсвания (Interrupt Handlers)
Когато едно I/O устройство завърши задача, то изпраща електронен сигнал към Процесора, наречен Прекъсване (Interrupt).
- Принцип: Прекъсването спира текущата работа на Процесора, за да може Ядрото да реагира на събитието (напр. „Дискът прочете блок 500“).
- Обработчикът: Ядрото изпълнява Обработчик на Прекъсвания – кратък, високо-приоритетен код, който записва необходимите данни в буфер в паметта, нулира състоянието на устройството и уведомява по-горните слоеве, че операцията е приключила.
Б. Слой на Драйверите (Device Drivers)
Драйверът е най-специфичната част от I/O софтуера. Той работи като преводач в Ядрен Режим.
- Роля:
Получава общи заявки от Ядрото (напр. „Прочети файл“) и ги преобразува в последователност от ниско ниво I/O команди, специфични за конкретния хардуер (напр. „Изпрати код 0x2A към порт 0x1F0“).
- Критичност
Тъй като драйверите работят в Ядрен Режим и директно с хардуера, една грешка в драйвера може да доведе до срив на цялата операционна система.
В. Слой на Независимия I/O Софтуер (Device-Independent I/O)
Този слой в Ядрото осигурява общи функции, които са валидни за всички устройства. Той прави I/O операциите „независими от устройството“.
- Функции:
- Кеширане:
Използване на RAM за съхраняване на често достъпвани данни от диска, за да се избегне бавно четене от самото устройство.
- Буфериране:
Използване на временни буфери в RAM за компенсиране на разликите в скоростта и размера на данните между устройствата.
- Заключване:
Управление на това, кой процес може да използва устройството в даден момент.
- Имена:
Предоставяне на унифицирани имена (напр. /dev/sda в Linux или C:\ в Windows), вместо да се работи с физически адреси.
Г. Най-горен Слой: Приложни I/O Библиотеки и Системни Повиквания
Това е слоят, който виждат програмите. Приложенията използват стандартни Системни Повиквания (като open, read, write, close), за да комуникират с I/O. Ядрото прехвърля тези команди надолу по йерархията до правилния драйвер.
3. Техники за I/O: Кой Движи Данните?
Основно предизвикателство е скоростта. I/O устройствата са много бавни спрямо Процесора. Операционната система използва различни техники, за да прехвърля данни, като се стреми да минимизира участието на Процесора.
А. Програмиран I/O (PIO - Programmed I/O)
- Принцип:
Процесорът е изцяло отговорен за прехвърлянето. Той постоянно чете регистъра за състояние на устройството в цикъл (Busy Waiting), докато устройството не е готово. След това Процесорът прехвърля всеки байт данни поотделно.
- Недостатък: Изключително неефективно.
Процесорът губи цялото си време в чакане, което блокира многозадачността.
Б. I/O Чрез Прекъсване (Interrupt-Driven I/O)
- Принцип:
Процесорът стартира I/O операцията и продължава да изпълнява други процеси. Устройството работи самостоятелно и изпраща Прекъсване едва когато цялата операция приключи.
- Предимство:
Освобождава Процесора от Busy Waiting. Позволява ефективна многозадачност.
В. Директен Достъп до Паметта (DMA - Direct Memory Access)
- Принцип:
Това е най-модерната и ефективна техника. Използва се специален чип (DMA контролер), който поема цялото прехвърляне на големи блокове данни директно между I/O устройството и RAM, без никакво участие на Процесора.
- Процес:
Процесорът инструктира DMA контролера и после се оттегля. DMA контролерът прехвърля данните. Когато завърши, само тогава DMA контролерът изпраща едно-единствено Прекъсване към Процесора.
- Приложение:
Използва се за всички високоскоростни устройства като дискове (SSD/HDD) и мрежови карти, за да се запази Процесорът свободен за изпълнение на приложния софтуер.
Управлението на I/O е постижение, което балансира между скоростта (чрез DMA) и абстракцията (чрез многослойния софтуер), гарантирайки, че всяко приложение може да работи с всяко устройство по един и същ, сигурен начин.
6.2 Драйвери на устройства и Директен достъп до паметта (DMA)
Драйверите на устройствата и DMA са двата критични елемента, които позволяват на операционната система (ОС) да работи ефективно с разнородния хардуер, като същевременно пази Процесора (CPU) свободен за изпълнение на приложния софтуер.
1. Драйвери на Устройства (Device Drivers): Преводачите на ОС
Драйверът е специализиран софтуерен модул, който работи като преводач между Ядрото на операционната система и конкретното I/O устройство (напр. звукова карта, принтер, мрежова карта).
А. Ролята на Драйвера
- Превод на Команди:
Драйверът получава общи, стандартизирани команди от Ядрото (напр. „Прочети следващия блок от диска“) и ги преобразува в последователност от специфични команди, които хардуерът разбира (напр. записване на битове в Регистрите за Управление на устройството).
- Управление на Регистри:
Драйверът е единственият софтуер, който има право да достъпва и управлява директно I/O портовете и регистрите на хардуера.
- Обработка на Прекъсвания:
След като устройството завърши операция и генерира Прекъсване, драйверът е отговорен за финалната обработка – прехвърляне на данните и уведомяване на по-горните слоеве на Ядрото.
Б. Местоположение и Критичност
- Ядрен Режим (Kernel Mode):
Почти всички драйвери работят в Ядрен Режим. Това им дава необходимите привилегии за пряк достъп до I/O хардуера и паметта.
- Критичност:
Тъй като драйверът работи с пълни права, грешка в кода на драйвера (напр. достъп до забранена памет) може да доведе до срив на цялата операционна система.
2. Директен Достъп до Паметта (DMA - Direct Memory Access) 🚀
DMA е хардуерен механизъм, който позволява на високоскоростни I/O устройства (дискове, мрежови адаптери) да прехвърлят големи блокове данни директно към и от физическата памет (RAM), без да натоварват Процесора.
А. Необходимост от DMA
В по-старите I/O методи (Програмиран I/O), Процесорът трябваше да извършва всяко прехвърляне на данни (байт по байт) между I/O регистрите и RAM. При днешните скорости на дисковете и мрежите, това би консумирало 100% от времето на Процесора, правейки многозадачността невъзможна.
Б. Механизъм на DMA
DMA контролерът е специализиран чип (често интегриран в чипсета или контролера на самото устройство), който поема ролята на прехвърлящ агент.
Процесът работи по следния начин:
- Настройка: Ядрото (чрез драйвера) дава команда на DMA контролера, като му казва:
- Източник/Дестинация: От кой I/O порт да вземе/прати данните.
- Адрес в Паметта: Къде в RAM да започне прехвърлянето.
- Брой Байти: Колко байта да прехвърли.
- Освобождаване на Процесора: След настройката, Процесорът веднага се освобождава и продължава да изпълнява други процеси.
- Прехвърляне: DMA контролерът поема контрола на Системната Шина (System Bus) и прехвърля данните директно между устройството и RAM.
- Прекъсване: Когато DMA контролерът завърши целия трансфер (напр. 16 KB данни), той изпраща едно-единствено Прекъсване към Процесора, за да го уведоми.
В. Предимства на DMA
- Намаляване на I/O Разходите (Overhead):
Драматично намалява броя на Прекъсванията, като превръща хиляди прехвърляния на байтове в едно прекъсване.
- Висока Производителност:
Освобождава Процесора, което е критично за сървърни операционни системи и за мултимедийни приложения.
3. I/O Операции в Съвременна ОС: Комбинацията
Типичната I/O операция в съвременни операционни системи (Windows, Linux) комбинира ролята на драйверите и DMA:
- Приложението извиква Системно Повикване (write()).
- Ядрото предава заявката към Драйвера на устройството.
- Драйверът инициира DMA контролера, като го настройва за трансфер на данни от RAM към I/O устройството.
- Процесорът преминава към следващия процес.
- DMA контролерът прехвърля данните, след което изпраща Прекъсване.
- Ядрото обработва прекъсването, финализира I/O операцията чрез драйвера и уведомява приложението, че записът е приключил.
Този механизъм е основата на ефективната многозадачност, тъй като гарантира, че Процесорът не губи време в чакане на бавния периферен хардуер.
6.3 Планиране на диска (Disk Scheduling)
Планирането на диска (Disk Scheduling) е процесът, чрез който операционната система (ОС) определя реда, в който ще бъдат изпълнени множеството заявки за четене/запис, постъпили към твърдия диск (HDD).
Тъй като механичният твърд диск (HDD) е едно от най-бавните I/O устройства, целта на планирането е да се минимизира времето за достъп до данните, като се намали движението на четящата глава на диска. При SSD устройства, които нямат движещи се части, тази техника не е необходима.
1. Какво Цели Планирането?
Времето, необходимо за достъп до данни на HDD, се състои от три части:
- Време за Търсене (Seek Time):
Времето, необходимо на четящата глава да се премести до правилната писта (track). Това е най-голямата част от общото време и е основната цел за минимизиране при планирането.Времето, необходимо на четящата глава да се премести до правилната писта (track). Това е най-голямата част от общото време и е основната цел за минимизиране при планирането.
- Време за Забавяне (Rotational Latency):
Времето, необходимо на диска да се завърти, докато желаният сектор застане под главата.
- Време за Трансфер (Transfer Time):
Времето, необходимо за прехвърляне на данните.
Чрез планирането, ОС се опитва да групира заявките, които са близо една до друга, за да намали Времето за Търсене.
2. Основни Алгоритми за Планиране на Диска
Да приемем, че главата на диска е на писта 50 и има опашка от заявки за достъп до писти: 98, 183, 37, 122, 14, 124, 65, 67.
А. FCFS (First-Come, First-Served)
- Принцип: Изпълнява заявките в реда, в който са пристигнали в опашката.
- Пример: 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67.
- Предимство: Справедлив, лесен за реализация, няма гладуване (starvation).
- Недостатък: Неефективен. Не отчита местоположението на заявките, което води до хаотично движение на главата и максимално Време за Търсене.
Б. SSTF (Shortest Seek Time First)
- Принцип: Винаги избира следващата заявка, която изисква най-малко движение на главата от текущата ѝ позиция.
- Пример: 50 →65 → 67 → 37 → 14 → 98 → 122 → 124 → 183.
- (От 50, най-близо е 65/67).
- Предимство: Значително намалява общото Време за Търсене.
- Недостатък: Може да доведе до гладуване (starvation). Заявките за писти в краищата на диска може никога да не бъдат изпълнени, ако постоянно пристигат нови заявки за писти в средата.
В. SCAN (Elevator Algorithm)
- Принцип: Главата се движи в една посока (напр. отвътре навън) и изпълнява всички заявки, които срещне по пътя си. Когато достигне края на диска, тя обръща посоката и изпълнява всички заявки в обратна посока.
- Пример (Движение Навън): 50 → 65 → 67 → 98 → 122 → 124 → 183 (до края, например 200) → 37 → 14.
- Предимство: По-справедлив от SSTF, тъй като всички заявки в дадена посока ще бъдат изпълнени. Добро представяне.
Г. C-SCAN (Circular SCAN)
- Принцип: Главата се движи само в една посока (напр. отвътре навън). След като достигне края, тя скоква (без да изпълнява заявки) до другия край на диска и започва ново сканиране в същата посока.
- Пример (Движение Навън): 50 → 65 → 67 → 98 → 122 → 124 → 183 → Скок до 0 → (Започва изпълнение отново).
- Предимство: По-равномерно време за достъп в сравнение със SCAN, тъй като заявките в единия край не трябва да чакат главата да отиде до другия край и да се върне.
Д. LOOK / C-LOOK
- Принцип: Модификации на SCAN и C-SCAN. Главата се движи само до най-отдалечената заявка в текущата посока, а не до самия край на диска. След това обръща (LOOK) или скача (C-LOOK).
- Предимство: По-ефективен от SCAN/C-SCAN, тъй като не губи време за движение в празни зони, където няма заявки.
3. Избор на Алгоритъм
Всяка операционна система избира алгоритъм за планиране в зависимост от нуждите:
- Linux и Windows често използват модификации на SCAN/C-SCAN (като LOOK/C-LOOK), тъй като те предлагат добър баланс между ефективност (намаляване на времето за търсене) и справедливост (гарантиране, че нито една заявка няма да гладува).
- SSTF обикновено осигурява най-бърз отговор, но не се използва за общо планиране заради риска от гладуване.
Планирането на диска е ключова оптимизация на Ядрото за I/O операциите, която позволява на системата да работи бързо, дори при голямо натоварване на дисковия достъп.
Глава 7: Мрежови Възможности и Сигурност
7.1 Мрежови модели и протоколи
Операционната система (ОС) играе централна роля в управлението на мрежовата комуникация, като осигурява софтуерната инфраструктура, която позволява на приложенията да изпращат и получават данни през мрежа. Тази комуникация е структурирана около мрежови модели и протоколи.
1. Мрежови Модели: Структуриране на Комуникацията
Мрежовите модели са концептуални рамки, които разделят сложния процес на комуникация на по-малки, управляеми слоеве. Всеки слой изпълнява специфичен набор от функции и взаимодейства само със слоя над и под него.
А. Моделът OSI (Open Systems Interconnection)
Моделът OSI е теоретична седемслойна рамка, създадена от ISO (International Organization for Standardization). Въпреки че днес не се прилага стриктно в реалния свят, той служи като основен референтен модел за разбиране на мрежовите функции.
| Слой |
Име |
Функция |
| 7 |
Приложен (Application) |
Интерфейс с потребителските приложения (HTTP, FTP, SMTP). |
| 6 |
Представителен (Presentation) |
Форматиране на данните, криптиране и декриптиране. |
| 5 |
Сесиен (Session) |
Установяване, поддържане и прекратяване на комуникационни сесии. |
| 4 |
Транспортен (Transport) |
Осигуряване на надеждна доставка на данни между крайните точки (TCP, UDP). |
| 3 |
Мрежов (Network) |
Логическо адресиране и маршрутизиране на данни през мрежите (IP). |
| 2 |
Канален (Data Link) |
Физическо адресиране (MAC) и контрол на грешките в локална мрежа. |
| 1 |
Физически (Physical) |
Предаване на сурови битове по физическия носител (кабели, Wi-Fi). |
Б. Моделът TCP/IP (Transmission Control Protocol/Internet Protocol)
Моделът TCP/IP е практическият модел, използван за изграждането на Интернет. Той е по-компактен (четири или пет слоя) и е директно свързан с реалните протоколи.
| Слой в TCP/IP |
Слой в OSI |
Протоколи/Примери |
| Приложен |
5, 6, 7 |
HTTP, FTP, DNS, SMTP |
| Транспортен |
4 |
TCP (Надеждна, свързана), UDP (Бърза, без връзка) |
| Интернет |
3 |
IP (Логическо адресиране и маршрутизиране) |
| Достъп до Мрежата |
1, 2 |
Ethernet, Wi-Fi, MAC адреси |
Роля на ОС: Ядрото на ОС е отговорно за реализацията на Транспортния и Интернет слоя. То съдържа софтуерни стекове (TCP/IP стек), които обработват пакетите, управляват маршрутизацията и осигуряват надеждност.
2. Основни Мрежови Протоколи
Протоколът е набор от правила, които определят формата и реда на обмена на съобщения между две комуникиращи страни.
А. Протоколи на Интернет Слоя (IP)
- IP (Internet Protocol):
Отговаря за маршрутизацията на данни. Всеки компютър в мрежата има уникален IP адрес (напр. IPv4: 192.168.1.1 или IPv6: 2001:db8::1). IP обвива (encapsulates) данните в Пакети (Datagrams) и ги изпраща по най-добрия наличен път, без да гарантира доставка.
- Адресиране: Определя логическия адрес на източника и дестинацията.
Б. Протоколи на Транспортния Слой (TCP/UDP)
Тези протоколи определят как данните се пренасят между процесите (а не между компютрите). Идентифицират се чрез Портове.
- TCP (Transmission Control Protocol):
- Свързан (Connection-Oriented): Първо установява виртуална връзка (TCP Handshake).
- Надежден: Гарантира, че всички пакети пристигат по ред и без грешки, като използва потвърждения (ACK) и повторно изпращане. Използва се за уеб трафик (HTTP), имейл (SMTP) и трансфер на файлове (FTP).
- Роля на ОС: ОС управлява сокетите и буферите на TCP връзките.
- UDP (User Datagram Protocol):
- Без Връзка (Connectionless): Изпраща пакетите без предварително установяване на връзка.
- Ненадежден: Не гарантира доставка, ред или липса на дубликати.
- Предимство: Изключително бърз и с нисък „overhead“. Използва се за приложения, които толерират загуба на данни, като стрийминг на видео/аудио, игри и DNS заявки.
В. Приложни Протоколи (HTTP, DNS)
- DNS (Domain Name System): Протокол, който превежда имена на домейни (напр. google.com) в IP адреси. Това е критично, тъй като Процесорът работи само с IP адреси.
- HTTP (Hypertext Transfer Protocol): Основата на World Wide Web, използва се за прехвърляне на уеб страници.
3. Мрежови Интерфейс в Операционната Система
Операционната система предоставя на приложенията интерфейс за програмиране (API), наречен Сокети (Sockets).
- Сокети:
Това е край на комуникационна връзка. Приложният процес използва сокет, за да изпраща данни, без да се налага да знае детайлите за TCP, IP или Ethernet. Ядрото управлява сокетите и всички операции по пакетиране, маршрутизиране и де-пакетиране.
- Роля на ОС:
ОС управлява I/O операциите на мрежовата карта, осигурява буфериране на мрежовия трафик и мултиплексира (multiplexes) данните от множество процеси към една физическа мрежова връзка.
Чрез тези модели и протоколи, ОС превръща една сложна физическа мрежа в леснодостъпен логически ресурс за всеки процес.
7.2 Автентикация, оторизация и механизми за сигурност
Операционната система (ОС) е основният пазител на ресурсите. Автентикацията и Оторизацията са двата ключови процеса, чрез които Ядрото гарантира, че само легитимни потребители и процеси имат достъп до системата и нейните ресурси.
1. Автентикация (Authentication): Доказване на Идентичността
Автентикацията е процесът на доказване на идентичността. Това е първата стъпка, която позволява на ОС да знае кой точно се опитва да влезе в системата.
Основни Методи за Автентикация:
Автентикацията се базира на три основни фактора:
- Нещо, което Знаете (Knowledge Factor):
- Пример Потребителско име и Парола. Това е най-честият, но и най-слабият метод.
- Как Работи: ОС:
никога не съхранява паролата в чист вид, а само нейното хеширано представяне (криптирана, еднопосочна трансформация). При въвеждане на паролата, ОС хешира въведената стойност и я сравнява със съхранения хеш.
- Нещо, което Имате (Possession Factor):
- Пример:
Токени, Смарт карти, генерирани еднократни кодове (TOTP), или USB ключове за сигурност.
- Нещо, което Сте (Inherence Factor):
- Пример:
Биометрични данни – пръстови отпечатъци, сканиране на ретина, лицево разпознаване.
Многофакторна Автентикация (MFA)
MFA изисква потребителят да предостави два или повече от горните фактори. Това драстично увеличава сигурността и е стандарт за съвременните операционни системи и онлайн услуги.
2. Оторизация (Authorization): Правата за Достъп
След като потребителят е успешно автентикиран, ОС преминава към Оторизация – процесът на определяне какво точно има право да прави този потребител (или процес) в системата.
- Идентичност:
Потребителят е асоцииран с уникален Потребителски Идентификатор (UID) и Групов Идентификатор (GID).
- Правила за Достъп:
ОС използва тези идентификатори, за да провери правата, дефинирани в Списъците за Контрол на Достъпа (ACL) или Правата за Достъп (Permissions) на даден ресурс (напр. файл, принтер, мрежов порт).
- Пример:
Автентикираният потребител има право да чете (R) файл, но не и да го записва (W).
Механизми за Оторизация:
- Дискреционен Контрол на Достъпа (DAC - Discretionary Access Control):
- Това е най-често срещаният модел (Windows NTFS, Linux ext4).
- Собственикът на ресурса (файл, директория) сам решава кой друг да има достъп до него.
- Задължителен Контрол на Достъпа (MAC - Mandatory Access Control):
- Използва се във високосигурни системи и сървърни ОС (напр. SELinux).
- ОС (или администратор) определя ниво на сигурност/маркировка за всеки ресурс и всяка програма. Никое приложение или потребител не може да промени тези правила.
3. Механизми за Сигурност и Защита
Операционната система прилага множество механизми в Ядрото, за да поддържа сигурността, след като автентикацията и оторизацията са приключили:
А. Изолация на Паметта
Както видяхме в Глава 4 (Виртуална Памет), ОС гарантира, че всеки процес има собствено, изолирано адресно пространство. Това предотвратява срив на цялата система или кражба на данни, ако един процес допусне грешка или бъде атакуван.
Б. Изпълнение с Привилегии (Modes of Operation)
ОС работи в два основни режима, за да защити Ядрото:
- Ядрен Режим (Kernel Mode): Пълни привилегии, използва се само от Ядрото и драйверите.
- Потребителски Режим (User Mode): Ограничени привилегии, използва се от всички приложни програми.
- Системните Повиквания са единственият начин за преминаване от Потребителски в Ядрен Режим, като Ядрото контролира стриктно кои операции са разрешени.
В. Защитна Стена (Firewall)
Софтуерната защитна стена е вградена функция на ОС, която работи на мрежовия слой (виж подглава 7.1).
- Роля:
Контролира входящия и изходящия мрежов трафик въз основа на зададени правила (протокол, IP адрес, порт). Тя е критична за защита от мрежови атаки, като блокира неоторизирани връзки.
Г. Криптиране на Диска (Encryption)
ОС предоставя механизми (като BitLocker в Windows или LUKS в Linux) за криптиране на целия твърд диск.
- Полза:
Гарантира конфиденциалност. Ако компютърът бъде физически откраднат, данните са нечетими без правилния ключ за декриптиране.
Чрез комбинацията от тези механизми, Операционната система осигурява многослойна защита – от индивидуалния потребител (автентикация), през ресурсите (оторизация), до мрежовата и физическата сигурност на данните.
7.3 Защита и уязвимости на Операционната система
Защитата на Операционната система (ОС) е процес на прилагане на механизми, които гарантират конфиденциалност, цялост и наличност на системните ресурси и данни. Разбирането на уязвимостите е първата стъпка към изграждането на сигурна ОС.
1. Основни Цели на Сигурността (Триада CIA)
Ядрото на ОС има за цел да поддържа т.нар. Триада CIA (Confidentiality, Integrity, Availability):
- Конфиденциалност (Confidentiality):
Гарантира, че само оторизирани потребители могат да четат данните. (Напр. Права за достъп, Криптиране на файлове).
- Цялост (Integrity):
Гарантира, че данните могат да бъдат променяни само по оторизиран начин и само от оторизирани потребители. (Напр. Хеширане на пароли, Дискреционен контрол на достъпа).
- Наличност (Availability):
Гарантира, че системните ресурси и данни са достъпни за оторизираните потребители, когато те имат нужда от тях. (Напр. Защита от атаки за отказ на услуга – DoS).
2. Уязвимости на Операционната Система
Уязвимостта е слабост в дизайна, имплементацията или конфигурацията на ОС, която може да бъде използвана от атакуващ за нарушаване на сигурността.
А. Софтуерни Уязвимости (Software Flaws)
Това са грешки в кода, които могат да бъдат експлоатирани:
- Препълване на Буфера (Buffer Overflow):
Програма не проверява дали входните данни се побират в определена област на паметта (буфер). Ако се подаде твърде много данни, те могат да презапишат съседна памет, позволявайки на атакуващия да инжектира и изпълни злонамерен код в системата. Това е една от най-честите и опасни уязвимости.
- Грешки в Правата (Privilege Escalation):
Програма, работеща в Потребителски Режим, открива начин да получи права на Ядрен Режим (администраторски права) поради грешка в Ядрото или в драйверите.
Б. Грешки в Конфигурацията
Това са проблеми, които не са свързани с кода, а с настройките:
- Слаби Пароли: Лесно отгатваеми или твърде кратки пароли.
- Деактивиран Аудит: Не е активирано проследяване на опитите за достъп, което скрива инцидентите.
- Отворени Портове: Мрежови портове, които не са нужни, но са оставени отворени, което дава входна точка на атакуващия.
3. Механизми за Защита в ОС
За да се противодейства на уязвимостите, Ядрото прилага множество защитни механизми:
А. Контрол на Достъпа (Access Control)
Използват се механизми за Автентикация и Оторизация (виж 7.2) за стриктно управление на достъпа до ресурсите.
- DAC (Дискреционен Контрол): Собственикът контролира достъпа.
- MAC (Задължителен Контрол): ОС определя нивото на сигурност, което приложенията и потребителите не могат да променят.
Б. Защита на Паметта
Това предотвратява прескачането на процеси в чужда памет.
- Виртуална Памет: Изолира адресното пространство на всеки процес.
- DEP (Data Execution Prevention):
Хардуерен механизъм, който маркира определени области в паметта като само за данни и забранява изпълнението на код оттам. Това е ключова защита срещу атаки, базирани на Препълване на Буфера.
В. Рандомизация на Адресното Пространство (ASLR)
- Принцип:
При всяко стартиране на системата, Ядрото зарежда системни библиотеки и ключови структури на случайни, непредсказуеми адреси в паметта.
- Полза:
Атакуващият не може да знае къде се намира кодът, който иска да експлоатира, което прави атаките с Препълване на Буфера много по-трудни за осъществяване.
Г. Криптографски Защити
Операционната система предоставя вградени криптографски услуги:
- Криптиране на Диска:
(Напр. BitLocker) – Защитава конфиденциалността на данните при физическа кражба.
- Подписване на Код (Code Signing):
Ядрото проверява дали даден драйвер или модул е подписан с валиден цифров сертификат, преди да го зареди, което предотвратява стартирането на злонамерен софтуер с права на Ядрото.
Д. Системни Обновления (Patching)
Това е най-важният административен контрол. Производителите на ОС непрекъснато издават кръпки (patches) за открити уязвимости. Редовното прилагане на тези обновления е задължително за поддържане на сигурна система.
Сигурността на ОС е постоянен цикъл. Ядрото осигурява механизмите (ACL, DEP, ASLR), но администраторите и потребителите са отговорни за конфигурацията и редовното обновяване, за да сведат до минимум прозореца за експлоатиране на уязвимостите.
Глава 8: Практическа Експлоатация и Поддръжка
8.1 Подробен процес на зареждане (Boot Process)
Процесът на зареждане (Boot Process) е сложна последователност от стъпки, която прехвърля контрола от хардуера към Операционната Система (ОС). Целта е да се подготви системата и да се зареди Ядрото в паметта, за да може компютърът да стане функционален.
1. BIOS/UEFI: Старт на Хардуера
Процесът започва веднага щом компютърът се включи, като контролът се предава на микропрограмата, вградена в дънната платка.
- POST (Power-On Self-Test):
Първо се изпълнява POST. Това е кратък тест, който проверява основните хардуерни компоненти – Процесор (CPU), Памет (RAM), Видеокарта. Ако има сериозен проблем, POST уведомява потребителя чрез звукови сигнали или кодове на екрана.
- Инициализация:
След POST, BIOS (Basic Input/Output System) или неговият модерен наследник UEFI (Unified Extensible Firmware Interface) инициализира останалия хардуер, като задава основните настройки и комуникационните протоколи.
- Търсене на Устройство:
BIOS/UEFI търси зареждащо (bootable) устройство (напр. твърд диск, SSD, USB) въз основа на реда, зададен в настройките.
2. Зареждащ Мениджър (Bootloader)
След като бъде намерено зареждащо устройство, BIOS/UEFI прехвърля контрола към малка програма, наречена Зареждащ Мениджър (Bootloader).
- MBR (Master Boot Record) или GPT:
При старите системи (BIOS) се чете MBR, който съдържа първия етап на буутлоудъра. При модерните системи (UEFI) се чете GPT (GUID Partition Table) и се търси EFI System Partition (ESP).
- Роля на Bootloader-а (напр. GRUB, Windows Boot Manager):
- Зарежда се в паметта.
- Предоставя меню (ако има повече от една ОС).
- Основната му задача е да намери Ядрото на ОС (напр. vmlinuz в Linux или ntoskrnl.exe в Windows) във файловата система на диска.
3. Зареждане на Ядрото (Kernel)
След като Bootloader-ът намери Ядрото, той го зарежда във физическата памет (RAM) и му предава контрола.
- Самодекомпресия:
Ядрото често е компресирано (за да заема по-малко място на диска). Първата задача е да се декомпресира в RAM.
- Хардуерна Инициализация:
Ядрото започва да инициализира всички основни хардуерни подсистеми, които не са били активирани от BIOS/UEFI.
- Драйвери:
Зареждат се основните драйвери (за дискове, файлова система, мрежа).
- I/O и Памет:
Активират се механизмите за Виртуална Памет и Управление на Вход/Изход (I/O).
4. Стартиране на Системата (Init/Systemd)
След като Ядрото е напълно заредено и функционално, то стартира първия процес в системата, който има PID 1 (Process ID 1).
- Init System:
При по-старите Unix/Linux системи това е бил процесът init. В съвременните операционни системи (Windows, Linux – systemd, macOS – launchd) се използва по-сложен Init System.
- Роля на Init System-а:
- Прочита конфигурационните файлове на системата.
- Стартира всички необходими системни услуги (Services/Daemons) (напр. мрежова услуга, принтер, сървър за логове, графичен интерфейс).
- Монтира Файловата Система (напр. NTFS, ext4).
- Подготвя средата за потребителите.
5. Потребителски Интерфейс и Вход
В последния етап се зарежда средата, която потребителят вижда:
- Входен Мениджър (Display Manager):
Зарежда се графичният интерфейс (ако има такъв) и се появява екранът за вход (Login Screen).
- Автентикация: След като потребителят въведе своите данни, ОС извършва Автентикация.
- Старт на Шела/Средата:
Успешната автентикация стартира потребителската сесия (напр. Shell в команден ред или Работен Плот в графичен режим).
След тази стъпка, компютърът е напълно функционален и Операционната Система поема ролята на мениджър на ресурсите.
8.2 Управление на системни актуализации, кръпки (Patches) и виртуални среди
Управлението на актуализациите и кръпките е критично за поддържане на сигурността и стабилността на Операционната система (ОС). Виртуалните среди пък предоставят гъвкавост за разработване, тестване и изолиране на приложения.
1. Системни Актуализации и Кръпки (Patch Management)
Актуализациите (Updates) и Кръпките (Patches) са промени в софтуера, които се прилагат от производителя на ОС (напр. Microsoft, Apple, общността на Linux).
А. Цел на Актуализациите
- Сигурност:
Това е основната цел. Кръпките отстраняват уязвимости (пробиви в сигурността), които могат да бъдат експлоатирани от злонамерен софтуер или атакуващи.
- Отстраняване на Грешки (Bug Fixes):
Поправят грешки в кода, които водят до сривове или неправилно поведение на системата.
- Функционалност:
Добавят нови функции или подобряват съществуващата производителност (напр. по-бърза работа на мрежата, поддръжка на нов хардуер).
Б. Процес на Управление на Актуализациите
Управлението на кръпки (Patch Management) е процес в ИТ администрацията:
- Откриване:
Администраторът или Ядрото открива, че има налична нова кръпка.
- Тестване (Особено във фирмена среда):
Преди да се приложи към всички критични системи, кръпката се тества в контролирана среда (например на тестова виртуална машина), за да се гарантира, че няма да предизвика нежелани странични ефекти (напр. несъвместимост с важен бизнес софтуер).
- Разпространение:
Актуализацията се изтегля и инсталира. В съвременни ОС този процес е автоматизиран (Windows Update, apt/yum в Linux).
- Рестарт:
Често инсталацията на кръпки, които засягат Ядрото или системните библиотеки, изисква рестартиране на системата, за да може новият код да бъде зареден в паметта.
В. Значението на Своевременните Актуализации
Закъснението в прилагането на кръпките създава „Прозорец на Уязвимост“. Когато дадена уязвимост е публично обявена (за да бъде кръпена), атакуващите също научават за нея и се опитват да я експлоатират, преди потребителите да са инсталирали кръпката.
2. Виртуални Средина (Virtual Environments)
Виртуализацията е технология, която позволява на една физическа машина (хост) да стартира множество изолирани виртуални операционни системи (гости) едновременно. Това е ключов компонент на Облачните изчисления и съвременната ИТ инфраструктура.
А. Хипервайзор (Hypervisor)
Хипервайзорът е софтуерът, който създава и управлява виртуалните машини. Той служи като абстрактен слой между физическия хардуер и гост-ОС.
- Тип 1 (Bare-Metal):
Инсталира се директно върху хардуера (без ОС). Използва се в центрове за данни (VMware ESXi, Hyper-V). Той е по-бърз и по-сигурен.
- Тип 2 (Hosted):
Работи като приложение върху съществуваща ОС (напр. VirtualBox, VMware Workstation). Използва се най-вече за разработка и тестване.
Б. Предимства на Виртуализацията
- Изолация и Сигурност:
Ако една виртуална машина (ВМ) бъде компрометирана, тя е изолирана от хост машината и от другите ВМ.
- Ефективност на Хардуера:
Позволява максимално използване на ресурсите на скъпия физически хардуер.
- Тестване и Разработка:
Разработчиците могат лесно да стартират и тестват софтуер в различни ОС (напр. Windows, различни версии на Linux) върху една машина.
- Висока Наличност (High Availability):
ВМ могат лесно да бъдат мигрирани (преместени) от един физически сървър на друг, ако първият откаже, което гарантира непрекъсната работа.
В. Контейнеризацията (Containers)
Контейнерите (напр. Docker, Kubernetes) са по-лека форма на виртуализация.
- Принцип:
За разлика от ВМ, които имат собствено Ядро и пълна ОС, контейнерите споделят Ядрото на хост операционната система.
- Предимство:
Стартират почти незабавно и имат много по-нисък „overhead“ (разход на ресурси). Използват се за пакетиране и разгръщане на микроуслуги и приложения.
Управлението на актуализациите и виртуалните среди са основни умения за всеки системен администратор, които гарантират както здравето на отделната ОС, така и ефективността на цялата ИТ инфраструктура.