Os1

Функции и структура на ОС


страницата се нуждае от дописване/преглеждане


Забележка : не се чете! означава, че записките са нечетливи

// схема shell обвивка около ядрото

process = task - програма в хода на нейното изпълненеи
file - унифицирани I/O операции (не зависят от I/O устройства, съхраняващи данните)
directory (каталог) - удобна организация на файловете
системни примитиви - входове с ядрото, програмен интерфейс към Ос
system call води до прекъсване и вход в ядрото
PID - process identifier
fork - прост system call (UNIX)
clone (LINUX)

system functions - понеже изглеждат като функции относно по-високо ядро
system call - понеже "вика ядрото"
системни примитиви - понеже са наи-ниски нива на абстракция

- ядрото управлява ресурсите на машината - разпределя във времето и между състезаващи се потребители (процеси)

За нас са интересни многопотребителските системи.
= разпределяне във времето - последователно във времето, един след друг, за монополни ресурси (Централен процесор, принтер); принтер - без преразпределение;
ЦП - обикновено с преразпределение (preempt); preempt - ядрото може насилствено да отнеме процесорното време на процеса
= разпределяне във не се чете! пространството - ресурсът е разделен на части и всеки процес получава част от него

Структури на ОС

- монолитна - всички компоненти се съдържат в 1 обектен модул (файл). Ядрото работи като част от всеки един процес (от време на време);
UNIX, LINUX (в последно време не се чете! се бяга - някои не се чете! са отделно)

- слоеста - програмните модули са организирани в йерархия от слоеве и оформят огромен граф, всеки слой се изгражда върху по-ниския
1968 г. - Дейкстра ръководи изграждането на The System - няколко слоя; Слоевете са само при проектиране, след това се компилират и обединяват в един файл (като не се чете! )

- микроядро - слоестата структура се запазва и при работа на ОС; Голяма част от ядрото работи като процеси (MINIX, Mach)

UNIX структура

//схема

tty - "терминал"(абстрактно устройство); монитор + клавиатура

2. Командни езици. Принцип на действие на командния интерпретатор

Shell - диалог не се чете!
Примери:
JCL (Job Control Language) - OS IBM / 360
Bourne Shell (sh) - Unix version 7
C shell (csh) - BSD
Korn Shell (ksh) - Unix System V
Bourne again shell (bash) - Linux
COMMAND.COM - Ms-DOS

JCL - работи в "пакетен режим"(някога пакет перфокарти) - не може да въведе данни, гледа резултати; за сравнение - "диалогов режим", но се поддържа и т.нар. "фонов режим" ,
аналог на пакетен не се чете!
sh - диалогов режим
csh - в BSD-клонинг на Unix (или версия ???); csh, ksh поддържани в sh (катоне се чете! )
bash - разширение на sh, подобен на ksh

- изисквания към командните езици
= дружественост, да е ясен
= изразителност
= има свойства на език за програмиране
= програми - shell script, shell file, команден файл, командна процедура.
= Не се компилира, интерпретира се
= лесно разширение - да могат да се добавят нови команди ; shell обработва вътре и вън
отделно; има връзка между двете класификации;

- Видове команди
= според реализацията
= вътрешни - вградени в shell
= външни - програмата е вън от shell
= програмата в изпълним код
= командна процедура
= според действието
= обикновени команди (copy, del)
= управляващи команди (операнди)

- Действие на командния интерпретатор

инициализация на обкръжението на процес shell

while (не е край на сесия)
{
извежда покана (prompt);
чете команда;
изпълнява командата;
}

Първи shell процес за всеки потребител е login shell- процес.

= init - изпълнава автоматично @start процедура (профил, подобен на autoexec.bat), настройва средата на потребителя (обкръжението) - променливи, директории …
= сесия - (засега поли) диалогът user-sys от login do logout (всеки процес през това време)
= покана (prompt) указва готовност за приемане на нов ред;
bash - стандартно; user- bash.$, admin - bash#;
prompt може да се променя и е част от обкръжението;
първичен prompt - "$", "#"
вторичен prompt
">"- обикновено не се променя
вторичен prompt- означава,че примерно от първичния prompt не е завършил конструкция
(не го разбира) и иска още

- 1ви вариант
{
извежда покана; чете команда;
if (вътрешна команда)
вътрешна_команда();
else
{
по име на команда намира файл;
if (файл въдържа командна процедура)
превключва входа на текущия процес - shell от файла;
else
{
създава процес за изпълнимия код във файла;
if (не е фонов режим) wait();
}
}
}

пример: в MS-DOS format-външна
търси "format".com, .bat, .exe ; в Linux: CP-външен, търси файл "CP"

- местата за търсене на файл - част от обкръжението
- фонов/асинхронен режим (background mode) - аналог на пакетен режим; командата е "фон" на процеса, той не я изчаква, а продължава по цикъла
- wait() - system call, изчаква да свърши процесът

- 2ри вариант
diff : if (файл - командна процедура)
създава процес-subshell, който чете входа от файла;
else
създава процес за exec;
if (! фонов)
wait()

тук всяка команда може да се изпълнява във фонов режим за разлика от вариант 1

II схема - по-иконмичен

- I вариант: коммандната процедура може да сменя обкръжението на процеса shell
II вариант: не може
- I вариант: не може командна процедура да се изпълнява фоново(асинхронно)
II вариант: може
- I вариант: по-икономичен:
II вариант: не може
- II вариант: позволява рекурсивни командни процедури

Начин на извикване на командна процедура варианта; II вариант default

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License