- •Челябинск
- •2002 Предисловие
- •От издательства
- •Часть 1 Операционные системы и среды
- •Глава 1 Основные понятия Понятие операционной среды
- •Понятия вычислительного процесса и ресурса
- •Диаграмма состояний процесса
- •Реализация понятия последовательного процесса в ос
- •Процессы и треды
- •Прерывания
- •Основные виды ресурсов
- •Классификация операционных систем
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 2 Управление задачами и памятью в операционных системах
- •Планирование и диспетчеризация процессов и задач Стратегии планирования
- •Дисциплины диспетчеризации
- •Вытесняющие и не вытесняющие алгоритмы диспетчеризации
- •Качество диспетчеризации и гарантии обслуживания
- •Диспетчеризация задач с использованием динамических приоритетов
- •Память и отображения, виртуальное адресное пространство
- •Простое непрерывное распределение и распределение с перекрытием (оверлейные структуры)
- •Распределение статическими и динамическими разделами
- •Разделы с фиксированными границами
- •Разделы с подвижными границами
- •Сегментная, страничная и сегментно-страничная организация памяти
- •Сегментный способ организации виртуальной памяти
- •Страничный способ организации виртуальной памяти
- •Сегментно-страничный способ организации виртуальной памяти
- •Распределение оперативной памяти в современных ос для пк
- •Распределение оперативной памяти вMs-dos
- •Распределение оперативной памяти вMicrosoftWindows95/98
- •Распределение оперативной памяти вMicrosoftWindowsNt
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 3 Особенности архитектуры микропроцессоровi80x86
- •Реальный и защищённый режимы работы процессора
- •Новые системные регистры микропроцессоров i80x86
- •Адресация в 32-разрядных микропроцессорахi80х86 при работе в защищённом режиме Поддержка сегментного способа организации виртуальной памяти
- •Поддержка страничного способа организации виртуальной памяти
- •Режим виртуальных машин для исполнения приложений реального режима
- •Защита адресного пространства задач
- •Уровни привилегий для защиты адресного пространства задач
- •Механизм шлюзов для передачи управления на сегменты кода с другими уровнями привилегий
- •Система прерываний 32-разрядных микропроцессоровi80x86
- •Работа системы прерываний в реальном режиме работы процессора
- •Работа системы прерываний в защищённом режиме работы процессора
- •Обработка прерываний в контексте текущей задачи
- •Обработка прерываний с переключением на новую задачу
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 4 Управление вводом/выводом и файловые системы
- •Основные понятия и концепции организации ввода/вывода в ос
- •Режимы управления вводом/выводом
- •Закрепление устройств, общие устройства ввода/вывода
- •Основные системные таблицы ввода/вывода
- •Синхронный и асинхронный ввод/вывод
- •Кэширование операций ввода/вывода при работе с накопителями на магнитных дисках
- •Функции файловой системы ос и иерархия данных
- •Структура магнитного диска (разбиение дисков на разделы)
- •Файловая системаFat
- •Структура загрузочной записиDos
- •Файловые системыVfaTиFat32
- •Файловая система hpfs
- •Файловая система ntfs (New Technology File System)
- •Основные возможности файловой системы ntfs
- •Структура тома с файловой системой ntfs
- •Возможности файловой системыNtfSпо ограничению доступа к файлам и каталогам
- •Основные отличияFaTи ntfs
- •Контрольные вопросы и задачи Вопросы для проверки
- •Задания
- •Глава 5 Архитектура операционных систем и интерфейсы прикладного
- •Принцип функциональной избирательности
- •Принцип генерируемости ос
- •Принцип функциональной избыточности
- •Принцип виртуализации
- •Принцип независимости программ от внешних устройств
- •Принцип совместимости
- •Принцип открытой и наращиваемой ос
- •Принцип мобильности (переносимости)
- •Принцип обеспечения безопасности вычислений
- •Микроядерные операционные системы
- •Монолитные операционные системы
- •Требования, предъявляемые к ос реального времени
- •Мультипрограммность и многозадачность
- •Приоритеты задач (потоков)
- •Наследование приоритетов
- •Синхронизация процессов и задач
- •Предсказуемость
- •Принципы построения интерфейсов операционных систем
- •Интерфейс прикладного программирования
- •Реализация функцийApIна уровне ос
- •Реализация функцийApIна уровне системы программирования
- •Реализация функцийApIс помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Пример программирования в различныхApiос
- •Текст программы дляWindows(WinApi)
- •Текст программы дляLinux(posixapi)
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 6 Проектирование параллельных взаимодействующих вычислительных процессов
- •Независимые и взаимодействующие вычислительные процессы
- •Средства синхронизации и связи при проектировании взаимодействующих вычислительных процессов
- •Использование блокировки памяти при синхронизации параллельных процессов
- •Возможные проблемы при организации взаимного исключения посредством использования только блокировки памяти
- •Алгоритм Деккера
- •Синхронизация процессов посредством операции «проверка и установка»
- •Семафорные примитивы Дейкстры
- •Мьютексы
- •Использование семафоров при проектировании взаимодействующих вычислительных процессов
- •Задача «поставщик – потребитель»
- •Пример простейшей синхронизации взаимодействующих процессов
- •Решение задачи «читатели – писатели»
- •Мониторы Хоара
- •Почтовые ящики
- •Конвейеры и очереди сообщений Конвейеры (программные каналы)
- •Очереди сообщений
- •Примеры создания параллельных взаимодействующих вычислительных процессов
- •Пример создания многозадачного приложения с помощью системы программированияBorlandDelphi
- •Пример создания комплекса параллельных взаимодействующих программ, выступающих как самостоятельные вычислительные процессы
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 7 Проблема тупиков и методы борьбы с ними
- •Понятие тупиковой ситуации при выполнении параллельных вычислительных процессов
- •Примеры тупиковых ситуаций и причины их возникновения
- •Пример тупика на ресурсах типаCr
- •Пример тупика на ресурсах типаCRиSr
- •Пример тупика на ресурсах типаSr
- •1: P(s2); 5: p(s1);
- •Формальные модели для изучения проблемы тупиковых ситуаций
- •Сети Петри
- •Вычислительные схемы
- •Модель пространства состояний системы
- •Методы борьбы с тупиками
- •Предотвращение тупиков
- •Обход тупиков
- •Обнаружение тупика
- •Обнаружение тупика посредством редукции графа повторно используемых ресурсов
- •Методы обнаружения тупика по наличию замкнутой цепочки запросов
- •Алгоритм обнаружения тупика по наличию замкнутой цепочки запросов
- •Контрольные вопросы и задачи Вопросы для проверки
- •Глава 8 Современные операционные системы
- •Семейство операционных системUnix Общая характеристика семейства операционных систем unix, особенности архитектуры семейства осunix
- •Основные понятия системыUnix
- •Виртуальная машина
- •Пользователь
- •Интерфейс пользователя
- •Привилегированный пользователь
- •Команды и командный интерпретатор
- •Процессы
- •Функционирование системыUnix
- •Выполнение процессов
- •Подсистема ввода/вывода
- •Перенаправление ввода/вывода
- •Файловая система
- •Структура файловой системы
- •Защита файлов
- •Межпроцессные коммуникации вUnix
- •Сигналы
- •Семафоры
- •Программные каналы
- •Очереди сообщений
- •Разделяемая память
- •Вызовы удаленных процедур (rpc)
- •Операционная системаLinux
- •Семейство операционных систем os/2WarpкомпанииIbm
- •Особенности архитектуры и основные возможности os/2Warp
- •Особенности интерфейса os/2Warp
- •Серверная операционная система os/2Warp4.5
- •Сетевая ос реального времениQnx
- •Архитектура системыQnx
- •Основные механизмы qnx для организации распредёленных вычислений
- •Контрольные вопросы и задачи Вопросы для проверки
- •Приложение а Тексты программы параллельных взаимодействующих задач
- •Приложение б Тексты программ комплекса параллельных взаимодействующих приложений
- •Текст программы а
- •Текст программы в
- •Текст программы d
- •Текст программы g
- •Список литературы
- •Часть 1 6
- •Глава 5 Архитектура операционных систем и интерфейсы прикладного 240
- •Глава 6 Проектирование параллельных взаимодействующих вычислительных 279
- •Глава 7 Проблема тупиков и методы 348
- •Глава 8 Современные операционные 391
Контрольные вопросы и задачи Вопросы для проверки
1 Изложите основные архитектурные особенности ОС UNIX.
2 Перечислите и поясните основные понятия системы UNIX.
3 Что делает системный вызов fork( )?Каким образом осуществляется в UNIX запуск новой задачи?
4 Изложите основные моменты, связанные с защитой файлов в UNIX.
5 Расскажите об особенностях семафоров в UNIX.Зачем в семафорных операциях действия осуществляются сразу над множеством семафоров?
6 Что представляет собой вызов удаленной процедуры (RPC)?
7 Какие механизмы использует OS/2, чтобы уменьшить потребности в оперативной памяти и увеличить производительность системы?
8 Почему про QNXчасто говорят «сетевая» ОС?
9 Что такое сетевой протокол FLEET?
10 Какие функции реализует ядро QNX?
11 В чём вы видите принципиальные отличия между ядром Windows NT 4.0,которое считают построенным по микроядерным принципам, от ядра QNX?
12 Расскажите об основных механизмах, которые имеются в QNX для организации распределённых вычислений.
Приложение а Тексты программы параллельных взаимодействующих задач
Здесь приведены тексты программы, реализующей параллельное функционирование задач, взаимодействующих между собой в соответствии с рис. 6.6.
program MultiThreads;
uses Forms,
ThrForm in 'ThrForm.pas' {Form1} ,
Threads in 'Threads.pas' ;
($R *.RES}
begin
Application.Initialize;
Application.CreateForm (Tform1,Form1);
Application.Run;
end.
unit ThrForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Gauges, StdCtrls, Threads;
type
Tform1 = class (TForm)
StrButton1: TButton;
GaugeA: Tgauge;
GaugeB: Tgauge;
GaugeC: Tgauge;
GaugeD: Tgauge;
GaugeE: Tgauge;
GaugeF: Tgauge;
GaugeG: Tgauge
Memo1: Tmemo;
Label1: Tlabel;
Label2: Tlabel;
Label3: Tlabel;
Label4: Tlabel;
Label5: Tlabel;
Label6: Tlabel;
Label7: Tlabel;
ScrollBar1: TScrollBar;
Label8: Tlabel;
Label9: Tlabel;
procedure StrButtonIClick(Sender: TObject); { Запуск задач }
procedure FormCreate(Sender: TObject);
procedure ScrollBarlChange(Sender: TObject};
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForml;
inplementation
{$R *.DFM}
procedure TForml.StrButtonlCLick(Sender: TObject);
{ Запуск задач }
begin
StrButtonl.Enabled =false;
Memol.Clear;
GaugeA.Progress:=0;
GaugeB.Progress:=0;
GaugeC.Progress:=0;
GaugeD.Progress:=0;
GaugeE.Progress:=0;
GaugeF. Progress:=0;
GaugeG.Progress:=0;
AllStarts(GaugeA,GaugeB,GaugeC,GaugeD,GaugeE,GaugeF,GaugeG);
End;
procedure Tform1.FormCreate(Sender: TObject);
begin
StartBtn:=StrButton1;
Delay:=ScrollBar1.Position;
MessageList:=Memo1;
end;
procedure Tform1.ScrollBarlChange(Sender: TObject);
begin
Delay:=ScrollBarl.Position;
end;
end.
unit Threads;
{ Описание тредов }
interface
uses
Classes,Gauges,StdCtrls,Syncobjs;
type
TParams = record { Параметры для инициализации треда}
OwnName:char;
ParentName:char;
Length:integer;
end;
ThreadProgress = class(TThread) { Основной объект-родитель }
private
FGauge:TGauge; { Строка состояния }
FLength:integer; { Длина задачи }
FProgress:Longint; { Текущее состояние задачи }
Finished:boolean; { Признак завершения задачи ]
FName:char; { Имя задачи }
FParentName:char; { Имя запустившей задачи }
FText: string; { Строка для вывода сообщений }
protected
procedure Execute; override; { Выполнение задачи }
procedure DoVisualProgress; { Прорисовка строки состояния}
procedure WriteToMemo; { Вывод сообщения }
procedure Finish; virtual; abstract: { Конечная часть задачи }
public
constructor create(Gauge:TGauge; Params:TParams);
end;
TThreadA = class(ThreadProgress)
protected
procedure Finish; override ;
end;
TThreadB = class(ThreadProgress)
protected
procedure Finish; override;
end;
TThreadC = class(ThreadProgress)
protected
procedure Finish; override:
end;
TThreadD = class(ThreadProgress)
protected
procedure Finish; override;
end;
TThreadE = class(ThreadProgress)
protected
procedure Finish; override;
end;
TThreadF = class(ThreadProgress)
protected
procedure Finish; override;
end;
TThreadG = class(ThreadProgress )
protected
procedure Finish; override;
end;
procedure AllStarts(GaugeA,GaugeB,GaugeC,GaugeD,GaugeE,GaugeF,GaugeG:TGauge);
var StartBtn:TButton;
MessageList:TMemo;
Delay:integer;
Params:Tparams;
ThrA:TThreadA;
ThrB:TthreadB;
ThrC:TThreadC;
ThrD:TThreadD;
ThrE:TthreadE;
ThrF:TThreadF;
ThrG:TThreadG;
CriticalSection: TCriticalSection; { Данный объект позволяет организовать монопольный
доступ к общим ресурсам }
implementation
procedure AllStarts(GaugeA,GaugeB,GaugeC,GaugeD,GaugeE,GaugeF,GaugeG:TGauge);
{ Начало выполнения задач }
begin
Params.OwnName:= ‘A’;
Params.ParentName: =' U ';
Params.Length:=2;
ThrA:=TThreadA.Create(GaugeA,Params);
Params.OwnName:='B';
Params.ParentName :='U';
Params.Length:=4;
ThrB:=TThreadB.Create(GaugeB,Params);
Params.OwnName:='C';
Params.ParentName:=’A';
Params.Length:=2;
ThrC:=TthreadC.Create(GaugeC,Params);
Params.OwnName:='D';
Params.ParentName:='A';
Params.Length:=2;
ThrD:=TThreadD.Create(GaugeD,Params);
Params.OwnName:=’E’;
Params.ParentName:=’A';
Params.Length:=4;
ThrE:=TThreadE.Create(GaugeE,Params) ;
Params.OwnName:=’F’;
Params.ParentName:= ' – ';
Params. Length:=2;
ThrF:=TThreadF.Create(GaugeF,Params);
Params.OwnName:='G';
Params.ParentName:=' – ';
Params.Length:=1;
ThrG :=TThreadG.Create(GaugeG,Params) ;
CriticalSectton:=TCriticalSection.Create;
ThrA.Resume;
ThrB.Resume;
end;
{ ThreadProgress }
procedure ThreadProgress.Execute;
var i:integer;
begin
FText :='3апущена задача '+Fname+' (задачей ’ +FParentName+')';
Synchronize(WriteToMemo);
for i:=1 to FLength do
begin
FProgress:=FProgress+1;
Synchronize{doVisualProgress):
End;
Finish;
Destroy;
end;
constructor ThreadProgress.create(Gauge:Tgauge;Params:TParams);
begin
inherited create(true);
FGauge:=Gauge;
FLength:=delay*Params.Length;
FGauge.MaxValue:=Flength;
FGauge.MinValue:=0;
FGauge.Progress:=0;
FProgress:=0;
FName:=Params.OwnName;
FParentName:=Params.ParentName;
Finished:=false;
end;
procedure ThreadProgress.DoVisualProgress;
begin
FGauge.Progress:=Fprogress;
end;
procedure ThreadProgress.WriteToMemo:
begin
MessageList.Lines.Add(FText);
end;
{ TThreadA }
procedure TThreadA.Finish;
begin
ThrC.Resume;
ThrD.Resume;
ThrE.Resume;
FText:= 'Задача А завершила работу и запустила задачи C,D,E';
Synchronize(WriteToMemo);
Finished:=true;
end;
{ TThreadB }
procedure TThreadB.Finish;
begin
FText:='Задача В завершила свою работу';
Synchronize(WriteToMemo);
Finished:=true;
CriticalSection.Enter; { Начало защищенного блока команд }
try
if (ThrC.Fimshed=false)and(ThrD.Finished=false) then
begin
ThrF.FParentName:='B';
repeat
Synchronize(DoVlsual progress);
until (ThrC.Finished)and(ThrD.Finished);
ThrF.Resume;
FText:='Задача В запустила задачу F';
Synchronize{WriteToMemo);
end;
finally
CriticalSection.Leave; { Конец защищенного блока команд)
end;
end;
{ TthreadC }
procedure TThreadC.Finish;
begin
Ftext:='Задача С завершила свою работу';
Synchronize(WriteToMenro);
Finished:=true;
СritiсаlSection.Enter;
try
if (ThrB.Finished=fa1se)and(ThrD.Finished=false) then
begin
ThrF.FparentName:='C’;
repeat
Synchronize(DoVisualprogress};
until (ThrB.Finished)and(ThrD.Finished);
ThrF.Resume;
FText:='Задача С запустила задачу F';
Synchronize(WriteToMemo) ;
end;
finally
CriticalSection.Leave;
end;
end;
{ TthreadD }
procedure TThreadD.Finish;
begin
FText:=' Задача D завершила свою работу';
Synchronize(WriteToMemo);
Finlshed:=true;
CriticalSection.Enter;
try
if(ThrC.Finished=false)and(ThrB.Finished=false) then
begin
ThrF.FParentName:=' D ‘;
repeat
Synchronize(DoVisualprogress);
unitil(ThrC.Finished)and(ThrB.Finished);
ThrF.Resume;
FТехt:=’Задача D запустила задачу F';
Synchronize(WriteToMemo);
end;
finally
CriticalSection.Leave;
end;
end;
{ TThreadE }
procedure TThreadE.Finish;
begin
Finished:=true;
CnticalSection.Enter;
try
if ThrF.Finished then
begin
ThrG.FParentName:='E';
ThrG.Resume;
FText:='Задача Е завершила работу и запустила задачу G'
Synchronize(WriteToMemo);
end
else
begin
FText:='Задача Е завершила свою работу';
Synchronize(WriteToMemo);
end;
finally
CriticalSection.Leave;
end;
end;
{ TThreadF }
procedure TThreadF.Finish;
begin
Finished:=true;
CriticalSection.Enter;
try
if ThrE.Finished then
begin
ThrG.FParentName:='F’;
ThrG.Resume;
FText:='Задача F завершила работу и запустила задачу G';
Synchronize(WriteToMemo);
end
else
begin
FText:='Задача F завершила свою работу';
Synchronize(WriteToMemo);
end;
finally
CriticaiSection.Leave;
end;
end;
{ TThreadG }
procedure TThreadG.Finish;
begin
Finished:=true;
Ftext:='Задача G завершила работу';
Synchronize(WriteToMemo);
StartBtn.Enabled:=true;
CriticalSection.Free;
end;
end.