ОС. 6B06102_Операционные системы_МУ_лаб. Исследование диспетчеризации процессов и потоков
Скачать 0.5 Mb.
|
Многозадачность - способность операционной системы выполнять более одной программы (задачи) одновременно. Противоположный подход - однозадачность, когда один процесс должен быть завершен прежде, чем сможет начаться другой. MS-DOS - пример однозадачной среды, a Windows 95, 98 и Windows NT,2000 - многозадачные среды. Конечно же, и в многозадачной системе программы не выполняются одновременно - процессор переключается между ними. Существуют два типа многозадачности: кооперативная (не вытесняющая) и вытесняющая. В кооперативной многозадачной среде (например, Windows 3. 1) контроль над процессором никогда не отбирается у задачи - приложение должно самостоятельно отказаться от контроля над процессором, чтобы другое приложение заработало. Вытесняющая многозадачность отличается от кооперативной тем, что операционная система может получить контроль над процессором без согласия выполняющегося приложения. Лишение приложения контроля над процессором называется вытеснением. Windows 95, 98 и Windows NT,2000 используют вытесняющую многозадачность. Разработчики программ, выполняющихся под управлением кооперативной операционной системы, должны учитывать необходимость частого возврата уп- равления процессором операционной системе. Программа, которая недостаточно часто отдает управление, блокирует кооперативную операционную систему. Windows 2000 применяет вытесняющую многозадачность при выполнении 16- разрядньгх приложений Windows и MS-DOS. Windows 2000 обеспечивает полную защиту памяти 16-разрядных приложений, так как каждое из них выполняется в рамках собственной виртуальной машины. Windows 95, 98 напротив, использует кооперативную многозадачность для всех 16-разрядных приложений - это необходимо для сохранения совместимости с 16-разрядными Windows-программами, которые сами контролируют свое выполнение. Приложение, разработанное для Windows, состоит из одного или более процессов. Процесс - это, попросту говоря, выполняемая программа. Ему принадлежат адресное пространство и выделенные ресурсы, а также один или более потоков, выполняющихся в его контексте. Поток - это основная единица, которой операционная система выделяет процессорное время, и минимальный "квант" кода, который может быть запланирован для выполнения. Кроме того, это часть процесса, выполняющаяся в каждый момент времени. Поток работает в адресном пространстве процесса и использует ресурсы, выделенные процессу. Любой процесс содержит хотя бы один поток. Каждый процесс 16-разрядного Windows-приложения или программы MS-DOS имеет только один поток, тогда как процессы 32-разрядных Windows-приложений могут включать их несколько. С помощью планирования операционная система определяет, какой поток использует процессор в данный момент времени. Windows реализует многозадачность, присваивая каждому потоку приоритет, что позволяет ему использовать ресурсы системы. Планирование основано на заранее заданной единице времени, называемой квантом. Фактическая продолжительность кванта времени зависит от конфигурации системы. Уровни приоритета находятся в диапазоне от 0 (наименьший приоритет) до 31 (наибольший приоритет). Поток с наибольшим приоритетом получает процессор в свое распоряжение. Приоритет каждого потока определяется: - по классу приоритета процесса, которому принадлежит поток; - по уровню приоритета потока внутри класса приоритета его процесса. Класс приоритета процесса и уровень приоритета потока определяют базовый приоритет потока. Уровни приоритетов Windows разделены на два класса: - реального времени (приоритеты от 16 до 31) — используется для выполнения основных функций операционной системы и обычно не применяется для приложений; - переменного приоритета (приоритет от 0 до 15) — определяет процессорный приоритет приложений; приоритет 0 возможен только для бесстраничного системного потока. Процессам могут быть присвоены следующие базовые уровни приоритетов: - низкий — запускает приложения с уровнем приоритета 4; - обычный — запускает приложения с уровнем приоритета 7: - высокий — запускает приложения с уровнем приоритета 13; - реального времени — запускает приложения с уровнем приоритета 24. Механизм сообщений Windows. ОС Windows для управления приложениями использует модель сообщений. Сообщение генерируется всякий раз, когда происходит какое-то событие, например, пользователь нажимает и отпускает клавишу на клавиатуре или передвигает мышь. Сообщение помещается в так называемую очередь сообщений. Активное приложение постоянно проверяет свою очередь и извлекает из нее поступившие сообщения. Обмен сообщениями в 16-разрядных версиях Windows. В Windows 3. 1 очередь сообщений операционной системы единая. Она обслуживает все 16-разрядные Windows- приложения, которые проверяют ее и извлекают адресованные им сообщения. Такое решение не лишено недостатков - например, если у какого-то приложения возникнут проблемы, оно может не позволить другим приложениям проверить очередь сообщений. В этом случае последние прекратят работу, пока не получат управление и не смогут проверить наличие адресованных им сообщений. Обмен сообщениями в Windows 95, 98, 2000. В Windows 95, 98, 2000 проблемы единой очереди сообщений разрешены: у каждого выполняющегося Win32-приложения - своя очередь. Каждый поток в Win32-приложении имеет собственную очередь сообщений и, значит, никак не влияет на поведение других работающих приложений. Если Win16- или Win32-пpилoжeниe потерпит крах, остальные Win32-приложения будут действовать на основе вытесняющей многозадачности и смогут принимать поступающие сообщения из своих очередей. Тем не менее, в целях совместимости все 16-разрядные Windows-приложения под управлением Windows 95, 98 используют общую очередь сообщений. Очевидно, если с одним из них что-то произойдет, остальным будет перекрыт доступ к очереди до тех пор, пока программа, вызвавшая проблему, не будет завершена. Использование буфера обмена Буфер обмена (clipboard) в основном используется для удобства пользователей и редко используется как метод IPC. В Delphi для вырезания, копирования и вставки данных используется класс Tclipboard, объявленный в модуле Clipbrd. Данный модуль необходимо добавить в оператор uses. Класс Tclipboard имеет следующие свойства: AsText. Это свойство, имеющее тип String, используется для копирования текста в буфер обмена и вставки его из буфера обмена. Поскольку AsText представляет собой строку Pascal, ее длина ограничена 255 символами. При работе с текстом большего объема следует использовать методы SetTextBuf и GetTextBuf. В буфере обмена могут находиться данные различных типов. Если буфер обмена содержит текст, выражение Clipboard.HasFormat (cf_Text) соответствует истине. Для растровой графики используйте тип сf_Bitmap. FormatCount. Свойство типа Integer равно количеству элементов в массиве Formats. Formats. Массив значений, имеющих тип Word и представляющих собой зарегистрированные форматы данных буфера обмена. Для копирования графики в буфер обмена следует использовать метод Assign. Например Clipboard.Assign (Image1.Pictire); // копирование в буфер обмена Image2.Picture.Assign (Clipboard); // копирование из буфера обмена Использование файлов, проецируемых в память Ниже приведен текст DLL, используемой для создания области в страничном файле, доступ к которой могут иметь несколько процессов. library ShareHeap; uses SysUtils, Classes, Windows; const MaxSize =1000; var hObjHand : Thandle; pGMem : pointer; procedure UnmapMemory; begin if Assigned (pGMem) then begin UnMapViewOfFile (pGMem); pGmem := nil; end; if hObjHand >0 then CloseHandle (hObjHand); hObjHand :=0; end; procedure MapMemory (dwAllocSize : dword); begin hObjHand :=CreateFileMapping(MaxDword, nil, PAGE_READWRITE,0, dwAllocsize,Pchar('Gmem')); if (hObjHand = 0) then Raise Exception.Create('Не создан file-mapping Obj'); pGMem := MapViewOffile(HobjHand,File_Map_Write,0,0,1); if not Assigned(pgmem) then begin UnMapMemory; Raise Exception.Create('Could not map file'); end; end; procedure DLLMain (dwAct : Dword); begin case dwAct of dll_Process_Attach : begin pgMem := nil; hObjHand :=0; MapMemory(MaxSize); end; dll_Process_Detach: UnmapMemory; end; end; // получение блока памяти из страничного файла function GetBlock : pointer; StdCall; begin result := pGmem; end; exports GetBlock; begin DLLProc := @DLLMain; DLLMain (dll_Process_Attach); end. Ниже приведен пример фрагмента текста приложения, использующего функцию GetBlock из библиотеки ShareHeap для передачи строки символов между приложениями. var pcBuf : Pchar; function GetBlock : pointer; stdcall; external 'SHAREHEAP.DLL'; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin pcbuf := GetBlock; end; procedure TForm1.Button1Click(Sender: TObject); begin edit1.GetTextBuf(pcBuf,Length(Edit1.Text)+1); // Memo1.SetTextBuf (pcbuf); // timer1.Enabled:=True; // edit2.SetTextBuf(pcBuf); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Memo1.SetTextBuf (pcbuf); // edit2.SetTextBuf(pcBuf); // timer1.Enabled:=false; end; Лабораторная работа рассчитана на 6 часов работы и включает в себя изучение кратких теоретических сведений, выполнение задания к лабораторной работе, оформление отчета и сдачу работы. Задание. 1. Написать приложение, выполняющее занесение в буфер обмена текста и графики и приложение, получающее из буфера обмена находящиеся в нем данные. 2. Создать два 16-разрядных приложения MS-DOS одновременно исполняющихся под управлением Windows и взаимодействующих между собой на уровне файлов 3. Создать 32-разрядное приложение Windows с двумя одновременно взаимодействующими между собой процессами на уровне сообщений Содержание отчета 1. Цель, название, постановка задач 2. Алгоритмы решения задач и их программная реализация 3. Полученные результаты. Контрольные вопросы 1. Понятие многозадачности 2. Вытесняющая многозадачность 3. Механизм обмена сообщениями в ОС Windows Список литературы 1. Операционные системы, среды и оболочки. Использование стандартных средств (скриптовых языков) операционной системы Windows для автоматизации задач пользователей : методические указания к лабораторным работам для дневного и заочного обучения факультета бизнеса 2 курса направления 080800 - Прикладная информатика / Новосиб. гос. техн. ун-т ; [сост. А. А. Забуга]. - Новосибирск, 2010. 2. Э. Таненбаум, Современные операционные систем : научное издание: пер. с англ. / Э. Таненбаум. - 3-е изд. - Прогр. 10560726 ( файла : байтов). - М. ; СПб. ; Нижний Новгород : Питер, 2015. - 1020/1 с. : ил. 3. Сетевые операционные системы: Учебник для вузов, 2-е изд. Н. А. Олифер, В. Г. Олифер, 2014 год, 672 стр. 4. Таненбаум Э. С. Современные операционные системы / Э. Таненбаум. - СПб., 2015. - 1120 с. Лабораторная работа № 3 Тема: «Управление памятью (виртуальная память и кучи)» Цель работы: знакомство с функциями Win32 и структурами данных, используемыми для управления памятью. Краткие теоретические сведения. Память компьютера предназначена для кратковременного и долговременного хранения информации - кодов команд и данных. Информация в памяти хранится в двоичных кодах, каждый бит - элементарная ячейка памяти - может принимать значение «0» или «1». Каждая ячейка памяти имеет свой адрес, однозначно ее идентифицирующий в определенной системе координат. Минимальной адресуемой единицей хранения информации в памяти обычно является байт. Со времени появления больших компьютеров сложилось деление памяти на внутреннюю и внешнюю. внутренняя память - электронная (полупроводниковая) память, устанавливаемая на системной плате или на платах расширения; внешняя память - память, реализованная в виде устройств с различными принципами хранения информации и обычно с подвижными носителями. В настоящее время сюда входят устройства магнитной (дисковой и ленточной) памяти, оптической и магнитооптической памяти. Устройства внешней памяти могут размещаться как в системном блоке компьютера, так и в отдельных корпусах, достигающих иногда и размеров небольшого шкафа. Для процессора непосредственно доступной является внутренняяпамять,доступ к которой осуществляется по адресу, заданному программой. Для внутренней памяти характерен одномерный (линейный) адрес, который представляет собой одно двоичное число определенной разрядности. Внутренняя память подразделяется на оперативную, информация в которой может изменяться процессором в любой момент времени, и постоянную, информацию которой процессор может только считывать. Обращение к ячейкам оперативной памяти может происходить в любом порядке, причем как по чтению, так и по записи, и оперативную память называют памятью с произвольным доступом - Random Access Memory (RAM) - в отличие от постоянной памяти (Read Only Memory, ROM). Внешняяпамять адресуется более сложным образом - каждая ее ячейка имеет свой адрес внутри некоторого блока, который, в свою очередь, имеет многомерный адрес. Во время физических операций обмена данными блок может быть считан или записан только целиком. В случае одиночного дискового накопителя адрес блока будет трехмерным: номер поверхности (головки), номер цилиндра и номер сектора. В современных накопителях этот трехмерный адрес часто заменяют линейным номером - логическим адресом блока, а его преобразованием в физический адрес занимается внутренний контроллер накопителя. Поскольку дисковых накопителей в компьютере может быть множество, в адресации дисковой памяти участвует и номер накопителя, а также номер канала интерфейса. С такой сложной системой адресации процессор справляется только с помощью программного драйвера, в задачу которого в общем случае входит копирование некоторого блока данных из оперативной памяти в дисковую и обратно. Дисковая память является внешней памятью с прямым доступом, что подразумевает возможность обращения к блокам (но не ячейкам) в произвольном порядке. Память на ленточных носителях имеет последовательный метод доступа. В ней информация хранится также в виде блоков фиксированной или переменной длины, и в пределах одного носителя эти блоки имеют последовательные адреса. Для доступа к какому-либо блоку устройство должно найти некоторый маркер начала ленты (тома), после чего последовательным холостым чтением блока за блоком дойти до требуемого места и только тогда производить сами операции обмена данными. С такими неудобст- вами мирятся только потому, что ленточные носители являются самым дешевым хранилищем для больших объемов информации, к которой не требуется оперативного доступа. Для подсистемы памяти важными параметрами являются следующие: объем хранимой информации. Максимальный объем хранят ленточные и дисковые устройства со сменными носителями, за ними идут дисковые накопители, и завершает этот ряд оперативная память; время доступа - усредненная задержка начала обмена полезной информацией относительно появления запроса на данные. Минимальное время доступа имеет оперативная память, за ней идет дисковая и после нее - ленточная; скорость обмена при передаче потока данных (после задержки на время доступа). Максимальную скорость обмена имеет оперативная память, за ней идет дисковая и после нее - ленточная; удельная стоимость хранения единицы данных - цена накопителя (с носителями), отнесенная к единице хранения (байту или мегабайту). Минимальную стоимость хранения имеют ленточные устройства со сменными носителями, их догоняют дисковые накопители, а самая дорогая - оперативная память. Кроме этих параметров имеется и ряд других характеристик - энергонезависимость (способность сохранения информации при отключении внешнего питания), устойчивость к внешним воздействиям, время хранения, конструктивные особенности (размер, вес) и т. п. У каждого типа памяти имеются различные реализации со своими достоинствами и недостатками. Внутренняя и внешняя память используются существенно различными способами. Внутренняя (оперативная и постоянная) память является хранилищем программного кода, который непосредственно может быть исполнен процессором. В ней же хранятся и данные, также непосредственно доступные процессору (а следовательно, и исполняемой программе). Внешняя память обычно используется для хранения файлов, содержимое которых может быть произвольным. Процессор (программа) имеет доступ к содержимому файлов только опосредованно через отображение их (полное или частичное) в некоторой области оперативной памяти. Исполнить программный код или обратиться к данным непосредственно на диске процессор не может в принципе. То же относится, естественно, и к ленточной памяти. В современных ПК принято выделять следующие логические разделы оперативной памяти: основная память (Conventional Memory); верхняя память (UMA – Upper Memory Area); область верхних адресов (HMA – High Memory Area); расширенная память (XМS – eXtended Memory Specification); дополнительная память (EMS – Expanded Memory Specification); расположена в области верхней памяти В первых компьютерах РС/ХТ рабочее пространство памяти составляло 1 Мбайт и было разделено на несколько областей, часть из которых предназначалась для специальных целей. Операционная система может обращаться ко всему пространству размером в 1Мбайт, но программы можно загружать только в диапазон адресов, называемый основной памятью, размер которой составляет 640Кбайт. Верхняя память – это 384Кбайт, зарезервированных у верхней границы первого мегабайта. Верхняя память разделена на несколько частей: первые 128 Кбайт, расположенные сразу после основной памяти, являются областью видеопамяти и предназначены для использования видеоадаптерами. следующие 128 Кбайт отведены для программ BIOS адаптеров. Большинство адаптеров используют для своих программ первые 32Кбайта из этой области, а оставшаяся часть доступна для других устройств. последние 128 Кбайт зарезервированы для системной программы BIOS. В этой же области хранится программа POST (автотест при включении) и первоначальный системный загрузчик. Хотя верхние 384 Кбайта первого мегабайта вначале были названы резервной памятью, в незанятые участки этой области можно загрузить драйверы (ANSY.SYS) или резидентные программы (MOUSE.COM), что позволяет освободить часть основной памяти для других нужд. Объем свободного пространства верхней памяти может быть различным для разных компьютеров: все зависит от того, какие платы адаптеров установлены, например, большинство сетевых адаптеров и адаптеров стандарта SCSI используют эту часть памяти. Под расширенной памятью обычно подразумевается вся память за пределами первого мегабайта, которая становится доступной только при работе процессора в защищенном режиме и в настоящее время достигает 64 Гбайта в современных ПК. Спецификация расширенной памяти (XMS) определяет способ получения программами доступа к расширенной памяти. Она предназначена для компьютеров, работающих в реальном режиме. До появления XMS не было способа координации программ, «верховным арбитром» стал драйвер HIMEM.SYS. Сначала он забирает всю расширенную память в свое распоряжние, а затем выделяет ее программам, соблюдающим протокол XMS. Протокол XMS запрещает программе доступ к той области памяти, которая используется другой программой. Организовать дополнительную память по спецификации XMS можно загрузив соответствующий драйвер в файле CONFIG.SYS. Область верхних адресов (HMA) – это участок памяти, который на 16 байт меньше 64Кбайт. Он расположен в самом начале первого мегабайта расширенной памяти. Эту область можно использовать для загрузки драйверов устройств и резидентных программ, что позволяет освободить часть основной памяти для программ реального режима. Одновременно в область HMA можно загрузить только один драйвер или одну резидентную программу, независимо от их размера. Для этого следует загрузить XMS- драйвер (например HIMEM.SYS) и добавить строку DOS=HIGH в файл CONFIG.SYS. Этот режим перемещает часть ядра ОС в HMA и освобождает для пользовательских программ 45 Kбайт основной памяти. Резидентные программы и драйверы можно загружать в верхнюю память с помощью комады LoadHigh - LH. В некоторых старых программах может использоваться еще одна разновидность памяти – дополнительная память EMS. В отличие от основной (в пределах первого мегабайта) и расширенной памяти, дополнительную память процессор непосредственно адресовать не может. К ней можно только обращаться через небольшое окно размером 64 Кбайта, расположенное в области верхней памяти. Дополнительная память – это один из коммутируемых сегментов специальной расширенной платы памяти, на которой помимо микросхем ОЗУ, установлены собственные схемы переключения и адресации |