Oперационни системи- лекции


Категория на документа: Информатика



2. Командни езици. Принцип на работа на командните интерпретатори.

Задачата на командните интерпретатори е да приемат заявките на потребителите при работа с операционната система. Потребителят комуникира с командния интерпретатор посредством команден език.
Един от първите командни езици е JCL (job control language), който е реализиран в операционната система OS/360. Чрез JCL се осигурява пакетен режим на работа – потребителят описва заданието и то се изпълнява самостоятелно без неговата намеса.
Съвременните командни езици осигуряват диалогов режим на работа -потребителят може да се намесва в процеса на изпълнение на заданията. Възможно е да се работи в така наречения фонов или асинхронен режим (background), при който процесите се изпълняват независимо от диалога на командния интерпретатор с потребителя.
В UNIX/LINUX командният интерпретатор се нарича shell. Съществуват различни версии shell-ове за UNIX/LINUX – B shell, C shell, Korn shell, Bash shell. Bash shell се появява заедно с LINUX.
За ядрото на операционната система командният интерпретатор е обикновена програма. Файлът, който съдържа изпълнимият код на командния интерпретатор в LINUX се нарича bash. В операционната система MSDOS този файл се нарича command.com.

Общото между всички командни интерпретатори е, че осигуряват интерактивен режим на работа с потребителя. Командните езици могат да се разглеждат като езици за програмиране от високо ниво – на тях могат да се пишат програми, наречени командни процедури.
В UNIX/LINUX се наричат shell file или shell script. В MSDOS командните процедури са във файловете с разширение .bat. Съществено е, че командните процедури не се компилират, а се интерпретират в съответствие с интерактивния режим на работа с потребителя.
Съвременните командни езици осигуряват достъпен интерфейс и са лесни за усвояване от потребителите.

За да може да се работи с командния интерпретатор в една многопотребителска операционна система, за всеки потребител трябва да се стартира отделен процес, който да осъществява диалога. Това става чрез идентификация на потребителя в системата. Идентификацията се осъществява на две стъпки. На първа стъпка потребителят дава своето име – това е публичната стъпка. В UNIX средите за целта се появява подканващо съобщение Login: и потребителят въвежда името си, което се появява на екрана. Втората стъпка е потвърждение на самоличността на потребителя – тя вече е секретна. В UNIX се появява подканващо съобщение Password: . Потребителят въвежда своята парола, а на екрана не се появява нищо.
След благоприятното завършване на двете стъпки операционната система автоматично създава процес, който стартира командния интерпретатор. Този процес се нарича login shell процес и той управлява работата на потребителя – за всеки потребител има собствен login shell процес. В хода на своята работа един потребител може да създава и други процеси, които се наричат sub shell процеси.
Първото нещо което извършва login shell процесът е да инициализира средата в която ще се работи – това се осъществява от една или повече командни процедури, които се наричат profile процедури. В MSDOS подобна инициализация се осъществява от командната процедура във файла autoexec.bat.
По-нататък се извежда комбинация от символи, наречени prompt – по същество това е подканващо съобщение на login shell, което означава че той е готов да изпълнява нова команда. Например в bash shell тези символи са $ за обикновен потребител или # за администратор. В UNIX/LINUX има единствен потребител, който е администратор и неговото име е root. Съществуват начини за промяна на стандартния prompt от самия потребител.
След появяване на prompt потребителят въвежда инструкция на съответния команден език и shell изпълнява командата. След това отново се извежда prompt и т.н..
Този цикъл може да се приключи с помощта на специална команда
logout, която прекратява login shell процесът. В много shell-ове се използва и команда exit, която, за разлика от logout, освен за прекъсване на login shell процеса може да се използва за прекъсване и на sub shell процеси.
Цялата работа която системата изпълнява от стартирането на login shell процесът до неговото прекъсване (чрез logout или exit) наричаме сесия. Така в рамките на една сесия потребителят може да изпълнява различни команди.

Командите се делят на два вида – вътрешни и външни. Вътрешните команди се реализират от програмния код на командния интерпретатор, докато външните команди са извън този код. На всяка външна команда съответства файл. В зависимост от съдържанието на този файл външните команди се поделят на два вида:
- файлът съдържа изпълним код – например в MSDOS такива файлове имат разширение .exe или .com;
- файлът съдържа командна процедура, т.е. програма на команден език – в MSDOS това са .bat файловете.
В UNIX/LINUX няма специални разширения, подобно на MSDOS, чрез които да се различават описаните два вида файлове.

Друга класификация на командите е според това каква функция изпълняват – обикновени и управляващи. Пример за обикновени команди са копиране на файл, преименуване на файл, извеждане на точно време и дата и т.н. Управлящите команди още се наричат оператори. Те са специални конструкции на командния език чрез които могат да се създават по-сложни командни процедури – например условен оператор, оператори за цикъл, оператор за многовариантен избор и т.н.. Наличието на такива оператори е причина командните езици да се разглеждат и като езици за програмиране.
В различните операционни системи някои обикновени команди се реализират като вътрешни, други като външни. Управлящите команди, обаче, са винаги вътрешни.

Ще опишем основният цикъл, който извършва командният интерпретатор в случая на UNIX/LINUX shell.
Ще използваме псевдокод на C.

while (не_е_въведена_команда_за_край_на_сесия)

{ извеждане_на_prompt();

прочитане_на_команда();

if (командата_е_вътрешна)

команда(); //обръщение към някаква функция, която е част от

//програмния код на shell-a

else { //командата е външна

намиране_на_файла_с_командата();

//името на файла се образува от името на командата




Сподели линка с приятел:





Яндекс.Метрика
Oперационни системи- лекции 9 out of 10 based on 2 ratings. 2 user reviews.