Skip to content
This repository has been archived by the owner on Oct 26, 2024. It is now read-only.

Latest commit

 

History

History

02-operating-systems-structure

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Тема 2: Структура на операционните системи

Съдържание

  1. Цели на операционните системи
  2. Структура на операционните системи
  3. Отговорности на ядрото
  4. Управление на процесите (Process Management)
  5. Управление на паметта (Memory Managment)
  6. Управление на входно-изходните устройства (I/O Management)
  7. Управление на външно-запаметяващите устройства (Storage Management)
  8. Имплементация на защитна сигурност (Security)

1. Цели на операционните системи

  • Многозадачност
    • Модерните операционни системи трябва да позволяват паралелното изпълнение на програми.
    • Обработката на инструкции от централния процесор, обаче, е последователна.
    • Илюзията за многозадачност (паралелно изпълнение) се постига чрез използване на таймери, които генерират прекъсвания на определено време (интервал).
    • Прекъсвания сменят процеса (задачата), която се изпълнява от процесора. Това се нарича времеделние.
    • Процесите изпълняващи се на един процесор се сменят на много кратко време, в зависимост от приоритета им, като времеделението се извършва чрез таймери, които генерират прекъсвания на определено време (интервал).
    • В днешно време, процесорите често имат по няколко ядра, които могат да изпълняват задачи едновременно (може да ги разглеждаме като няколко процесора в една компютърна система).
    • Върху всяко ядро се реализира времеделение.
  • Многопотребителност
    • Компютрите много често се използват от няколко потребители.
    • Многопотребителността е способността на операционната система да поддържа различни (множество) потребители.

2. Структура на операционните системи

Операционната система може да се раздели на две части:

  • Ядро (Kernel)

    • Най-ниското ниво на една операционна система
    • Отговаря за управлението на различните части на една компютърна система - т.е. директно управлява хардуера
    • Това е единственият компонент, който може да работи в привилегиран режим (privileged mode) на процесора (виж Тема 1., т.8).
    • Ядрото съдържа всички драйвери за устройствата (софтуер за оправляване на устройствата), които се намират в компютърната система.
    • Ядрото предоставя и функции, наречени системни повиквания (на англ. system calls или на кратко sys-calls), които могат да се извикват от потребителските програми или от други части на операционната система. Някои типове системни функции са следните:
      • Функции за управление на процесите – fork(), waitpid(), execvpe(), exit(), т.н.
      • Функции за работа с файлове – open(), close(), read(), write(), lseek(), т.н.
      • Работа с файловата система – stat(), mkdir(), rmdir(), link(), unlink(), mount(), umount(), chmod().
      • и други.
  • Обвивка (Shell)

    • Командния интерпретатор е набор от приложни програми, които комуникират с ядрото чрез системни извиквания.
    • Предоставя среда и интерфейс за улеснена работа с операционната, както на хора, така и на други приложни програми.
    • Това е видимият потребителски интерфейс на операционната система.
    • Обикновено се зарежда върху нея и предлага на потребителите команди, които им осигуряват достъпа до операционната система - примерно както GNU+Linux са неразделни части на една цяла система - GNU - shell, Linux - kernel.

3. Отговорности на ядрото

Понеже ядрото седи между обвивката и хардуера на компютърната система, то следи и отговаря за следните аспекти на компютърната система:

  • Управление на процесите (Process Management)
  • Управление на паметта (Memory Management)
  • Управление на входно-изходните устройства (I/O Management)
  • Управление на външно-запаметяващите устройства (Storage Management)
  • Имплементация на защитна сигурност (Security)

4. Управление на процесите (Process Management)

  • Процесът е програма по време на нейното изпълнение.
  • Процесът изпълнява инструкциите на програмата една по една.
  • След последната инструкция, процесът се терминира.
  • От една програма може да има множество процеси, които може да се изпълняват едновременно или един след друг. Но във всеки един момент всеки един процес може да изпълнява точно една програма.
  • Всеки процес има едно от следните състояния:
    • Нов (New)
    • Готов (Ready)
    • Изпълняващ се (Running)
    • Блокиран (Waiting)

Състояния на процес
Фиг. 4.1. Състояния на процес

  • От Нов става на Готов (Ready), което означава готов е за изпълнение, т.е. след като ОС напълно го е инициализирала. Сега процесът чака да в опашката на готовите процеси, за да може да се изпълни.

  • От готов може да отиде на Изпълняващ се (Running) , т.е. изпълнява се в момента, когато операционната система прецени да му даде процесорно време.

  • От готов един процес може да отиде в Блокиран (Blocked) режим, понеже не се нуждае от процесорно време - примерно чака вход от потребителя, да приключи IO операция, т.н.

  • Процесът може да отиде от Изпълняващ се (Running) в Готов (Ready), когато операционната система реши да даде процесорно време на друг процес. Затова е необходимо да се осъществи context switching между процесите - за да може да се продължи работата на процеса, когато ОС отново прецени да му задели процесорно време.

  • Когато изпълнението на един процес се прекрати той става ТЕРМИНИРАН.

  • Операционната система предоставя механизми за синхронизация и комуникация между процесите.

    • Комуникация – да се прехвърлят данни между процесите.
    • Синхронизация между процесите.
  • Всеки процес има идентификационен номер - pid, който е положително число.

  • От процес (нека го наречем P1), нов процес се създава чрез системното извикване fork(). Новият процес (P2) е идентично копие на настоящия. P1 се нарича родител на P2. Това значи, че процесите имат дървовидна структура.

  • Програмата, която изпълнява процес, може да се смени чрез system call от фамилията exec - т.е. с execl, execvp, тн..

  • Със стартирането на операционната система се стартира и инициализиращ (init) процес, от когото се fork-ват всички останали процеси и техните деца.

  • Процес може да се терминира чрез kill командата последвана с pid на процеса.

  • Ако се терминира процес, стандартното поведение е да не се терминират децата му. Вместо това, при терминирането на родителски процес, на децата се назначава нов родител - init процеса.

5. Управление на паметта (Memory Managment)

  • RAM паметта представлява огромен масив от байтове, който е енергозависим.
  • Операционната система се грижи всички процеси да имат заделена памет, в която да се съдържат инструкциите им и данните им. Съответно, когато са в оперативната памет, те могат да се предадат и на процесора.
  • Резултатите на операциите, извършени от процесора също се записват в RAM паметта.
  • Ядрото има следните 3 функции, когато работи с оперативната памет:
    • да заделя и освобождава оперативната памет, когато е нужно
    • да следи кои части от паметта собственост на кои процеси са
    • да решава кои данни и процеси трябва да са в RAM паметта

6. Управление на входно-изходните устройства (I/O Management)

  • Драйверите определят как операционната система да запише/прочете и разбере байтовете от I/O устройствата. Затова всяко устройство има драйвер – програма, която знае как да работи с даден модел устройство.

  • Ядрото предоставя единен интерфейс (конвенция, набор от правила, начин на работа), който е част от самото ядро, за работа с типове устройства. Устройства не знаят за съществуването на този интерфейс.

  • Драйверите са посредника между устройствата и интерфейса. Работа с I/O устройства се изпълнява с инструкции, които не могат да бъдат изпълнени в непривилегирован режим. Само ОС може да работи с хардуерната система директно.

  • Ядро <-> интерфейс <-> драйвер буфер + устройство

  • Операционната система управа буфера на това устройство. Не взима тази информация моментално и затова ядрото управлява тези буфери. Входно-изходната система също така кешира тази информация – в кеш, рам, регистър, тъй като буферите на входно-изходните устройства са много бавни.

  • Spooling е концепция, методология, идея, при която се разделя работата на входно-изходното устройство на малки части заради хардуерни лимитации. Проблемът с I/O устройствата е, че буферът е с изключително малък и ограничен размер. За това се запълва постоянно буфера, като работата се разделя на малки части. Това съществува, поради хардуерните лимитации на малките и бавни входно-изходни устройства.

  • Пример за това биват принтерът и голям файл, който искаме да принтеме. Принтерът може да има буфер от 10MB, докато ние искаме да принтиме 100MB. Тогава ядрото се грижи да раздели заданието ни на 10 части и да ги принтира по една част на всяка итерация.

7. Управление на външно-запаметяващите устройства (Storage Management)

  • Устройства за съхранение на данни са вид IO устройства.

  • Използват, тъй като искаме данните да оцелеят при спиране на системата, както тези, които не се побират за RAM паметта.

  • Хардуерните устройства се различават по скорост, обем и начин на работа. Целта на ядрото е да скрие тези различия. Затова операционната система създава се концепцията за файл, за да ни е по-лесно.

  • Файл

    • При управлението на външно-запаметяващите устройства от ядрото, файлът е създаден като абстракция, илюзия, лъжа, създадена за да се улесни работата с данни.

    • Файлът представлява поредица от байтове на storage устройството, която бива интерпретирана по определен начин в зависимост от файловата система.

  • Файлова система

    • Файловата система също е абстракция за организирането на байтовете. Структуриране на байтове, директории, файлове, права за достъп до тези директории, организация и т.н. Целта на директориите е организираност.

    • Файловата система позволява на потребителите да създават, изтриват, четат, пишат, преименуват, местят файлове и директории. Но това зависи дали имаме права за това. Правата са разделени на 3 групи:

      • Потребителски права
      • Групови права
      • Други права
    • Файловата система ни дава възможност да създаваме, изтриваме, преименуваме, променяме, копираме файлове и директории, но там само където имаме права.

  • Ядрото реализира две абстракции - файл и файлова система, които позволяват да се управляват външни запаметяващи устройства. Операционната система може да създава, трие, мести, променя съдържание, да променя правата за достъп.

8. Имплементация на защитна сигурност (Security)

Oперационната система предоставя защита, която представлява механизъм, който контролира достъпа на потребителите и процесите. Като се разделя на 2 части:

  • Хардуерна защита

    • Съществуването на привилегирован и непривилегирования режим на процесора, който има само изключително малък набор от инструкции
    • Операционната система се намира в RAM паметта – тя е защитена на хардуерно и софтуерно ниво. На хардуерно ниво е посочено на това кои байтове мое да се достъпват от неприлегирования и от привилегирования режим. - Има регистри, които определят тези адреси – BASE, LIMIT
    • Таймерите на процесора също са защита – генерира се прекъсване, за да се прекрати работното време на процес върху процесора
    • Работата с ви устройства не може да се изпълняват в неприлегирования използва на ядрото - ядрото служи като посредник между потребителските процеси и хардура
  • Софтуерна защита -Само ядрото работи в привилегирован режим

    • Правилата за достъп на файловата система за всеки потребител
    • Всеки процес се асоциира с определено парче памет
    • Ядрото е разделено на няколко слоя с различни привилегии

Многослойно разделяне на ядро
Фиг. 8.1. Многослойно разделяне на ядро