Table Of ContentCopyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ
БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ
УНИВЕРИТЕТ»
Д.В. Груздев
ОПЕРАЦИОННЫЕ СИСТЕМЫ (2-3 курс)
Учебное пособие
Воронеж
Издательский дом ВГУ
2017
1
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Утверждено научно-методическим советом математического факультета
26 февраля 2015, протокол № 0500-02
Учебное пособие подготовлено на кафедре функционального анализа и
операторных уравнений математического факультета.
2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
«Операционные системы: практика».
Системное программное обеспечение означает программы и комплексы программ, являющиеся
общими для всех, кто совместно использует технические средства компьютера, и применяемые как для
автоматизации разработки (создания) новых программ, так и для организации выполнения программ
существующих. С этих позиций системное программное обеспечение может быть разделено на
следующие пять групп:
1. Операционные системы,
2. Системы управления файлами.
3. Интерфейсные оболочки для взаимодействия пользователя с ОС и программные среды.
4. Системы программирования.
5. Утилиты.
1. Под операционной системой (ОС) обычно понимают комплекс управляющих и
обрабатывающих программ, который, с одной стороны, выступает как интерфейс между аппаратурой
компьютера и пользователем с его задачами, а с другой — предназначен для наиболее эффективного
использования ресурсов вычислительной системы и организации надежных вычислений. Любой из
компонентов прикладного программного обеспечения обязательно работает под управлением ОС. На
рис. 1 изображена обобщенная структура программного обеспечения вычислительной системы.
Видно, что ни один из компонентов программного обеспечения, за исключением самой ОС, не
имеет непосредственного доступа к аппаратуре компьютера. Даже пользователи
взаимодействуют со своими программами через интерфейс ОС. Любые их команды, прежде чем
попасть в прикладную программу, сначала проходят через ОС.
Основными функциями, которые выполняет ОС, являются следующие:
- прием от пользователя (или от оператора системы) заданий или команд, сформулированных на
соответствующем языке — в виде директив (команд) оператора или в виде указаний (своеобразных
команд) с помощью соответствующего манипулятора (например, с помощью мыши), — и их обработка;
- прием и исполнение программных запросов на запуск, приостановку, остановку других программ;
- загрузка в оперативную память подлежащих исполнению программ;
- инициация программы (передача ей управления, в результате чего процессор исполняет программу);
3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
- идентификация всех программ и данных;
- обеспечение работы систем управлений файлами (СУФ) и/или систем управления базами данных
(СУБД), что позволяет резко увеличить эффективность всего программного обеспечения;
- обеспечение режима мультипрограммирования, то есть выполнение двух или более программ на
одном процессоре, создающее видимость их одновременного исполнения;
- обеспечение функций по организации и управлению всеми операциями ввода/вывода;
- удовлетворение жестким ограничениям на время ответа в режиме реального времени (характерно для
соответствующих ОС);
- распределение памяти, а в большинстве современных систем и организация виртуальной памяти;
- планирование и диспетчеризация задач в соответствии с заданными стратегией и дисциплинами
обслуживания;
- организация механизмов обмена сообщениями и данными между выполняющимися программами;
- защита одной программы от влияния другой; обеспечение сохранности данных;
- предоставление услуг на случай частичного сбоя системы;
- обеспечение работы систем программирования, с помощью которых пользователи готовят свои
программы.
2. Назначение системы управления файлами — организация более удобного доступа к данным,
организованным как файлы. Именно благодаря системе управления файлами вместо низкоуровневого
доступа к данным с указанием конкретных физических адресов нужной нам записи используется
логический доступ с указанием имени файла и записи в нем. Как правило, все современные ОС имеют
соответствующие системы управления файлами.
Надо, однако, понимать, что любая система управления файлами не существует сама по себе —
она разработана для работы в конкретной ОС и с конкретной файловой системой. Можно сказать, что
всем известная файловая система FAT (file allocation table)1 имеет множество реализаций как система
управления файлами, например FAT-16 для самой MS-DOS, super-FAT для OS/2, FAT для Windows NTи
т. д.
Другими словами, для работы с файлами, организованными в соответствии с некоторой
файловой системой, для каждой ОС должна быть разработана соответствующая система управления
файлами; и эта система управления файлами будет работать только в той ОС, для которой она и
создана.
Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные
оболочки. Их основное назначение — либо расширить возможности по управлению ОС, либо изменить
встроенные в систему возможности. В качестве классических примеров интерфейсных оболочек и
соответствующих операционных сред выполнения программ можно назвать различные варианты
графического интерфейса X Window в системах семейства UNIX (например, К Desktop Environment в
Linux), PM Shell или Object Desktop в OS/2 с графическим интерфейсом Presentation Manager; наконец,
можно указать разнообразные варианты интерфейсов для семейства ОС Windows компании Microsoft,
которые заменяют Explorer и могут напоминать либо UNIX с его графическим интерфейсом, либо OS/2,
либо MAC OS.
Ряд операционных систем могут организовывать выполнение программ, созданных для других
ОС. Например, в OS/2 можно выполнять как программы, созданные для самой OS/2, так и программы,
предназначенные для выполнения в среде MS-DOS и Windows 3.x. Соответствующая операционная
среда организуется в операционной системе в рамках отдельной виртуальной машины. Аналогично, в
системе Linux можно создать условия для выполнения некоторых программ, написанных для Windows
95/98. Определенными возможностями исполнения программ, созданных для иной операционной
среды, обладает и Windows NT. Эта система позволяет выполнять некоторые программы, созданные для
MS-DOS, OS/2 1.x, Windows 3.x.
3. Система программирования на рис. 1 представлена прежде всего такими компонентами, как
транслятор с соответствующего языка, библиотеки подпрограмм, редакторы, компоновщики и
отладчики. Не бывает самостоятельных (оторванных от ОС) систем программирования. Любая система
программирования может работать только в соответствующей ОС, под которую она создана, однако
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
при этом она может позволять разрабатывать программное обеспечение и под другие ОС.
В том случае, когда создаваемые программы должны работать совсем на другой аппаратной базе,
говорят о кросс-системах. Так, для ПК на базе микропроцессоров семейства i80x86 имеется большое
количество кросс-систем, позволяющих создавать программное обеспечение для различных
микропроцессоров и микроконтроллеров.
4. Наконец, под утилитами понимают специальные системные программы, с помощью
которых можно как обслуживать саму операционную систему, так и подготавливать для работы
носители данных, выполнять перекодирование данных, осуществлять оптимизацию размещения данных
на носителе и производить некоторые другие работы, связанные с обслуживанием вычислительной
системы. К утилитам следует отнести и программу разбиения накопителя на магнитных дисках на
разделы, и программу форматирования, и программу переноса основных системных файлов самой ОС.
Многопоточность
В Delphi программа может создать дополнительные потоки с помощью объектов класса
TThread .
Для создания дополнительного потока в программах Delphi предназначен специальный
модуль потока ( команда File►New►Other►Thread Object). При выборе этого модуля Delphi
запрашивает имя класса, который будет дочерним для родительского класса TThread.
Необходимость наследования связана с тем, что класс TThread содержит абстрактный метод
Execute, который, собственно, и должен исполняться в рамках нового потока и который,
следовательно, обязан перекрываться в потомках. После указания имени дочернего класса Delphi
раскрывает дополнительный модуль с обширным комментарием и заготовкой для дочернего
класса. Например:
unit Unit2;
interface
uses Classes;
type
MyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
{ MyThread }
procedure MyThread.Execute;
begin
{ Поместите код потока в этом месте }
end;
end.
Программирование потока ничем не отличается от создания обычной программы за одним
важным исключением: поток не должен использовать методы и свойства визуальных
компонентов, которые приводят к изменению внешнего вида программы. Точнее, он может это
делать только при обращении к специальному методу Synchronize, с помощью которого
осуществляется синхронизация исполнения главного потока программы с дополнительным
потоком. Параметром обращения к этому методу должно быть имя потоковой процедуры без
параметров. Например, пусть метод UpdateCaption выглядит так:
procedure MyThread.UpdateCaption;
begin
Form1.Caption := 'Новый текст метки';
5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
end;
При написании процедуры Execute этот метод можно вызвать следующим образом:
Synchronize(UpdateCaption);
Задача. Для иллюстрации приёмов работы с потоками создадим программу, которая будет
непрерывно обновлять содержимое поля Memo1 и при этом осуществлять математические
вычисления. Окно работающей программы:
Основной поток программы активизируется при щелчке на кнопке Квадрат: вначале
содержимое расположенного над ней поля Edit1 возводится в квадрат до тех пор, пока
отображаемое в нём значение не станет больше 1000000. В этот момент надпись на кнопке
меняется на Корень, а щелчок на ней вычисляет корень квадратный из величины в поле
Edit1.
Дополнительный поток запускается в обработчике события OnActivate главной формы:
procedure TForm1.FormActivate(Sender: TObject);
begin
T1:=MyThread.Create(false)
end;
В этом методе объект T1 инициализируется вызовом конструктора MyThread.Create с параметром,
который показывает, должен ли вновь созданный поток ″спать″ (значение true) или он обязан
немедленно начать работу (значение false). Программа может в любой момент приостановить
работу потока, присвоив его свойству Suspended значение true, и продолжить его выполнение,
присвоив этому свойству значение false.
В дополнительном потоке будем непрерывно формировать по 50 строк в поле Memo1
(каждая строка состоит из 20 одинаковых чисел от 0 до 99). Для предотвращения переполнения
внутреннего буфера поля Memo оно периодически очищается методом Clear. Чтобы цифры не
мелькали слишком быстро, используется процедура sleep(t), задерживающая выполнение
программы на t миллисекунд.
Текст основного модуля:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if tag=0 then
begin
edit1.Text:=floattostr(sqr(strtofloat(edit1.Text)));
if strtofloat(edit1.Text)>1000000 then
begin tag:=1; button1.Caption:='Корень' end
end
else
begin
edit1.Text:=floattostr(sqrt(strtofloat(edit1.Text)));
if strtofloat(edit1.Text)<2 then
begin tag:=0; button1.Caption:='Квадрат' end
end
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
T1:=MyThread.Create(false)
end;
end.
Модуль потока:
unit Unit2;
interface
uses Classes;
type
MyThread = class(TThread)
private
{ Private declarations }
protected
s:string;
procedure UpdateMemo;
procedure Execute; override;
end;
var T1 : MyThread;
implementation
uses unit1, SysUtils;
procedure MyThread.Execute;
var k, j : integer;
begin
repeat
for k:=0 to 99 do
begin
7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
s:='';
for j:=1 to 20 do
s:=s + inttostr(k); sleep(300);
synchronize(UpdateMemo);
end;
until false;
end;
procedure MyThread.UpdateMemo;
begin
with form1.memo1.Lines do
if count>50 then clear else add(s)
end;
end.
Задача1. Создать приложение, основной поток которого осуществляет вычисление площади
треугольника по трём данным сторонам, а дополнительный поток непрерывно заполняет поле
Memo1 значениями синуса угла (данного в радианах) с шагом 0.1 радиан. (В первой колонке
значения угла в радианах, во второй – синус этого угла).
Задача2. Создать приложение, основной поток которого осуществляет поиск корней квадратного
уравнения ax2 + bx + c =0, а дополнительный поток
непрерывно меняет цвет метки label1 с зелёного на красный и обратно.
8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Файловая система.
/bin
Основные программы, необходимые для работы в системе: командные оболочки, файловые утилиты и
т.п.
/sbin
Команды для системного администрирования, а также программы, выполняемые в ходе загрузки
/boot
Файлы, необходимые для загрузки системы (образ ядра)
/home
Домашние каталоги пользователей, кроме root
/dev
Файлы устройств
/etc
Файлы настроек: стартовые сценарии, конфигурационные файлы графической системы и различных
приложений
/lib
Системные библиотеки, необходимые для основных программ, и модули ядра
/lost+found
Восстановленные после аварийного размонтирования части файловой системы
/media
Сюда обычно монтируются съемные носители: компакт-диски, flash-накопители
/mnt
Временные точки монтирования жестких дисков. Использовать этот каталог необязательно:
подмонтировать файловую систему можно к любому другому каталогу
/opt
Дополнительные пакеты программ. Если программа, установленная сюда, больше не нужна, то
достаточно удалить ее каталог без обычной процедуры деинсталляции
/proc
Виртуальная файловая система, дающая доступ к информации ядра (например, выведите на экран файл
/proc/cpuinfo). Другие файлы в этом каталоге в каждый момент времени содержат информацию о
выполняющихся в этот момент программах
/root
Домашний каталог суперпользователя. Домашние каталоги всех остальных могут находиться на
отдельном разделе, но /root должен быть в корневой файловой системе, чтобы администратор всегда
мог войти в систему для ремонтных работ
9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
/tmp
Временные файлы
/var
Часто меняющиеся данные: системные журналы и протоколы приложений, замки, почтовые ящики,
очереди печати и т.п.
/usr Практически все остальное: программы, исходные коды, документация. Сюда по умолчанию
устанавливаются новые программы
В ОС UNIX поддерживается три способа указания имен файлов:
Краткое имя. Имя, не содержащее специальных метасимволов косая черта (/), является кратким
именем файла. По краткому имени можно сослаться на файлы текущего каталога. Например,
команда ls -l .profile требует получить полную информацию о файле .profile в текущем каталоге.
Относительное имя. Имя, не начинающееся с символа косой черты (/), но включающее такие
символы. Оно ссылается на файл относительно текущего каталога. При этом для ссылки на файл
или каталог в каком-то другом каталоге используется метасимвол косой черты (/). Например,
команда ls -l ../.profile требует получить полную информацию о файле .profile в родительском
каталоге текущего каталога, а команда vi doc/text.txt требует открыть в редакторе vi файл text.txt
в подкаталоге doc текущего каталога.
Полное имя. Имя, начинающееся с символа косой черты (/). Оно ссылается на файл относительно
корневого каталога. Это имя еще называют абсолютным, так как оно, в отличие от предыдущих
способов задания имени, ссылается на один и тот же файл независимо от текущего каталога.
Например, команда ls -l /home/user01/.profile требует получить полную информацию о файле
.profile в каталоге /home/user01 независимо от того, в каком каталоге выполняется.
Получение информации о текущем каталоге
Команда pwd выдает полное имя текущего (рабочего) каталога. Команда pwd не имеет параметров. Вот
пример ее использования:
$ pwd
/home/user01
$
Изменение текущего каталога
Для изменения текущего каталога используется команда cd:
cd [каталог]
Если каталог не указан, используется значение переменной среды $HOME (обычно это начальный
каталог пользователя). Чтобы сделать новый каталог текущим (войти в каталог), нужно иметь для него
право на выполнение. Команда cd является встроенной командой интерпретатора и использует для
изменения текущего каталога соответствующий системный вызов.
Рассмотрим пример совместного использования команд cd и pwd для переходов по каталогам файловой
системы:
$ pwd
/home/user01
$ cd ..
$ pwd
/home
$ cd user01/tmp
$ pwd
/home/user/tmp
$ cd
$ pwd
/home/user01
Получение информации о файлах
Для просмотра информации о типах (и других атрибутах) файлов в ОС UNIX используется команда ls
со следующим синтаксисом:
ls [-abCcdeFfgiLlmnopqRrstux1] [файл ...]
10