Главная страница
Навигация по странице:

  • OS 4301

  • Лабораторная работа № 1 Тема: «Исследование диспетчеризации процессов и потоков» Цель работы

  • Краткие теоретические сведения.

  • Функции Win32 для создания и управления процессами и потоками

  • Для управления приоритетом потока используются функции

  • Средства Delphi для создания и управле ния потоками

  • Пример создания потоков средствами Delphi

  • Средства синхронизации процессов и потоков

  • Лабораторная работа № 2 Тема: «Средства обмена данными между приложениями» Цель работы

  • Краткие теоретические сведения

  • ОС. 6B06102_Операционные системы_МУ_лаб. Исследование диспетчеризации процессов и потоков


    Скачать 0.5 Mb.
    НазваниеИсследование диспетчеризации процессов и потоков
    Дата09.10.2021
    Размер0.5 Mb.
    Формат файлаpdf
    Имя файла6B06102_Операционные системы_МУ_лаб.pdf
    ТипЛабораторная работа
    #244340
    страница1 из 5
      1   2   3   4   5

    Карагандинский технический университет
    Кафедра информационно-вычислительных систем
    Савченко Н.К., Абилдаева Г.Б.
    МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по дисциплине
    OS 4301 Операционные системы
    Модуль SSA 09 Системное и сетевое администрирование для студентов образовательной программы
    6B06102 – «Информационные системы»
    2021

    Лабораторная работа № 1
    Тема: «Исследование диспетчеризации процессов и потоков»
    Цель работы: знакомство со средствами создания и управления процессами и потоками средствами ОС Windows 9x и исследование влияния приоритета потока на время его выполнения при различной загрузке ЦП.
    Краткие теоретические сведения.
    Для операционной системы процесс представляет собой единицу работы, заявку на потребление системных ресурсов. На протяжении существования процесса его выполнение может быть многократно прервано и продолжено. Для того, чтобы возобновить выполнение процесса, необходимо восстановить состояние его операционной среды. Состояние операционной среды отображается состоянием регистров и программного счетчика, режимом работы процессора, указателями на открытые файлы, информацией о незавершенных операциях ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называется контекстом
    процесса.
    Кроме этого, операционной системе для реализации планирования процессов требуется дополнительная информация: идентификатор процесса, состояние процесса, данные о степени привилегированности процесса, место нахождения кодового сегмента и другая информация. Информацию такого рода, используемую ОС для планирования процессов, называют дескриптором процесса.
    Дескриптор процесса по сравнению с контекстом содержит более оперативную информацию. Контекст процесса содержит менее актуальную информацию и используется операционной системой только после того, как принято решение о возобновлении прерванного процесса.
    Очереди процессов представляют собой дескрипторы отдельных процессов, объединенные в списки. Таким образом, каждый дескриптор, кроме всего прочего, содержит по крайней мере один указатель на другой дескриптор, соседствующий с ним в очереди. Такая организация очередей позволяет легко их переупорядочивать, включать и исключать процессы, переводить процессы из одного состояния в другое.
    Программный код только тогда начнет выполняться, когда для него операционной системой будет создан процесс. Создать процесс - это значит:
    1. создать информационные структуры, описывающие данный процесс, то есть его дескриптор и контекст;
    2. включить дескриптор нового процесса в очередь готовых процессов;
    3. загрузить кодовый сегмент процесса в оперативную память или в область свопинга.
    Говоря о процессах, можно отметить, что операционная система поддерживает их обособленность: у каждого процесса имеется свое виртуальное адресное пространство, каждому процессу назначаются свои ресурсы - файлы, окна, семафоры и т.д. Такая обособленность нужна для того, чтобы защитить один процесс от другого, поскольку они, совместно используя все ресурсы машины, конкурируют с друг другом.
    Задача, решаемая в рамках одного процесса, может обладать внутренним параллелизмом, который в принципе позволяет ускорить ее решение. Например, в ходе выполнения задачи происходит обращение к внешнему устройству, и на время этой операции можно не блокировать полностью выполнение процесса, а продолжить вычисления по другой "ветви" процесса.
    Для этих целей современные ОС используют механизм выполняется строго последовательно и имеет свой собственный программный счетчик и стек. многонитевой
    обработки (multithreading). При этом вводится новое понятие "нить" или "поток".

    Потоки иногда называют облегченными процессами. Каждый поток Потоки, как и процессы, могут переходить из состояния в состояние. Потоки могут находится в одном из следующих состояний: ВЫПОЛНЕНИЕ, ОЖИДАНИЕ и ГОТОВНОСТЬ. Пока один поток заблокирован, другой поток того же процесса может выполняться.
    Однако различные потоки в рамках одного процесса не настолько независимы, как отдельные процессы. Все такие потоки имеют одно и то же адресное пространство. Это означает, что они разделяют одни и те же глобальные переменные. Поскольку каждый поток может иметь доступ к каждому виртуальному адресу, один поток может использовать стек другого потока. Кроме разделения адресного пространства, все потоки разделяют также набор открытых файлов, таймеров, сигналов и т.п.
    Итак, потоки имеют собственные: программный счетчик, стек, регистр, потоки- потомки, состояние.
    Потоки разделяют: адресное пространство, глобальные переменные, открытые файлы, таймеры, семафоры, статистическую информацию.
    Функции Win32 для создания и управления процессами и потоками
    В момент создания процесс получает в собственное владение единственный программный поток, который исполняется и может создавать другие потоки.
    Для запуска нового приложения необходимо создать новый процесс. Для этого можно использовать функции Win32:

    WinExec ( 'путь\имя_приложения параметры_командной_строки', 1) - запуск в развернутом окне

    CreateProcess() – создание процесса
    Вторая функция требует существенно большего количества параметров
    (большинство из которых имеют значения по умолчанию 0, либо nil), но имеет большие возможности по управлению.
    Для завершения процесса используются функции ExitProcess() и TerminateProcess().
    Для управления выполнением процесса используются функции:

    GetCurrentProcess() - получение описателя текущего процесса

    SetPriorityClass() - изменение класса приоритета процесса
    Для создания потока служит функция CreateThread(), для завершения потока - функции
    ExitThread() и TerminateThread().
    Для управления приоритетом потока используются функции

    GetCurrentThread() – получение описателя текущего потока

    SetThreadPriority() - установка относительного приоритета потока в пределах процесса
    Более подробную информацию о параметрах функций необходимо искать в файлах
    Win32.hlp и Windows.pas.
    Средства Delphi для создания и управле ния потоками
    1. Объект класса Tthread - это конструкция Delphi, соответствующая потоку ОС.
    Конструктор constructor Create (CreateSuspended : Boolean); в качестве аргумента получает параметр CreateSuspended. Если этот параметр имеет значение False, поток начинает исполнение и конструктор завершается.
    2. Свойства Handle и ThreadID дают программисту непосредственный доступ к потоку средствами Win32 API.
    3. Cвойство Priority позволяет запросить и установить приоритет потоков. Допустимыми значениями приоритета являются tpIdle (самый низкий), tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical.
    4. Метод procedure Execute; virtual; abstract; - главный метод объекта. В его теле должен содержаться код, который представляет собой поток.

    Пример создания потоков средствами Delphi
    Разрабатываемое в данном примере 1 приложение будет содержать три потока - главный и два дополнительных, приоритеты которых могут изменяться.
    Дополнительные потоки будут выполнять некоторые простые вычисления, а главный - отображать количество выполненных вычислений в секунду.
    1. Создайте новое приложение - на форму положите два компонента Edit, два компонента
    TrackBar (страница Win32) и один компонент Timer.
    2. Сохраните модуль как ThrdUnit, а проект как ThrdProj.
    3. Откройте меню File и выберите пункт New. Выполните двойной щелчок на объекте типа поток (Thread Object).
    4. В открывшемся диалоговом окне для именования объекта введите TsimpleThread и нажмите Enter. Delphi создаст шаблон для нового потока.
    5. В приведенный ниже фрагмент шаблона type
    TsimpleThread = class(TThread) private
    { Private declarations } protected procedure Execute; override; end; добавьте описание переменной для подсчета количества выполненных вычислений
    (перед end): Count : Integer;
    6. Определите метод Execute следующим образом (вычисление суммы 10 случайных чисел) procedure TsimpleThread.Execute;
    { Place thread code here } var I, total : Integer; begin while true do begin
    Total:=0; for I:=1 to 10 do Inc(Total,Random(MaxInt div 10));
    Inc (Count); end; end;
    7. Сохраните модуль с потоком как Thrd.pas
    8. Отредактируйте главный файл модуля ThrdUnit.pas - добавьте модуль Thrd к списку используемых модулей ( uses …, Thrd)
    9. В секции public формы Tform1 добавьте строку
    Thread1, Thread2 : TsimpleThread;
    10. Создайте обработчики событий приложения по приведенному ниже тексту. procedure TForm1.Timer1Timer(Sender: TObject); begin
    Edit1.Text := IntToStr( Thread1.Count );
    Edit2.Text := IntToStr( Thread2.Count );
    Thread1.Count := 0;
    Thread2.Count := 0; end;
    procedure TForm1.FormCreate(Sender: TObject); begin
    Thread1 := TSimpleThread.Create( False );
    Thread1.Priority := tpLowest;
    Thread2 := TSimpleThread.Create( False );
    Thread2.Priority := tpLowest; end; procedure TForm1.TrackBar1Change(Sender: TObject); var I : Integer;
    Priority : TThreadPriority; begin
    Priority := tpLowest;
    For I := 0 To ( Sender as tTrackBar ).Position - 1 Do inc( Priority );
    If Sender = TrackBar1 Then Thread1.Priority := Priority
    Else Thread2.Priority := Priority; end;
    11. Чтобы связать метод, созданный на шаге 10, со вторым регулятором, выберите
    TrackBar2 в окне ObjectInspector и определите для события OnChange метод
    TrackBar1Change.
    12. Свойству Max обоих компонентов TrackBar установите значение 4 (или 3). Это необходимо сделать для того, чтобы устанавливаемое значение приоритета потока не было слишком большим. В противном случае приложение выйдет из-под контроля.
    13. Запустите созданное приложение, предварительно сохранив его на диске.
    Средства синхронизации процессов и потоков
    Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процессу, или несколько процессов могут обрабатывать данные из общего файла. Во всех этих случаях возникает проблема синхронизации процессов, которая может решаться приостановкой и активизацией процессов, организацией очередей, блокированием и освобождением ресурсов.
    Важным понятием синхронизации процессов является понятие "критическая секция" программы. Критическая секция - это часть программы, в которой осуществляется доступ к разделяемым данным. Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо обеспечить, чтобы в каждый момент в критической секции, связанной с этим ресурсом, находился максимум один процесс. Этот прием называют взаимным исключением.
    Простейший способ обеспечить взаимное исключение - позволить процессу, находящемуся в критической секции, запрещать все прерывания. Однако этот способ непригоден, так как опасно доверять управление системой пользовательскому процессу; он может надолго занять процессор, а при крахе процесса в критической области крах потерпит вся система, потому что прерывания никогда не будут разрешены.
    Другим способом является использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (то есть ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят.
    При некотором стечении обстоятельств два процесса могут взаимно заблокировать друг друга, то есть возникнет тупиковая ситуация. Тупики могут быть предотвращены на стадии написания программ, то есть программы должны быть написаны таким образом, чтобы тупик не мог возникнуть ни при каком соотношении взаимных скоростей процессов. Существуют формальные, программно-реализованные методы распознавания
    тупиков, основанные на ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам. Анализ этих таблиц позволяет обнаружить взаимные блокировки.
    Если же тупиковая ситуация возникла, то не обязательно снимать с выполнения все заблокированные процессы. Можно снять только часть из них, при этом освобождаются ресурсы, ожидаемые остальными процессами, можно вернуть некоторые процессы в область свопинга, можно совершить "откат" некоторых процессов до так называемой контрольной точки, в которой запоминается вся информация, необходимая для восстановления выполнения программы с данного места. Контрольные точки расставляются в программе в местах, после которых возможно возникновение тупика.
    В рассмотренном ниже приложении два потока увеличивают значение глобальной переменной Global от начального значения 100 на 1 при каждом выполнении цикла. Число повторений цикла каждого потока равно 12, результаты увеличения переменной Global выводятся на экран в виде двух списков ListBox.
    При правильной работе приложения конечным значением переменной должно быть число 100+12+12=124. Однако без специальных мер такого значения получить в общем случае не удается, так как потоки " мешают ‖ друг другу.
    Критические секции обеспечивают поочередный доступ потоков к критическим участкам программы. Для этого в начале критического участка вызывается функция
    EnterCriticalSection (имя секции) , а в конце – функция LeaveCriticalSection ( имя секции).
    Пример 2.
    unit Critsec; interface uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls; type
    TForm1 = class(TForm)
    Button1: TButton; ListBox1: TListBox; ListBox2: TListBox;
    CheckBox1: TCheckBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); end; var
    Form1 : TForm1; crits : boolean; sect1 : TRTLCriticalSection; global: word;
    // 2 // hmut : thandle; implementation
    {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin initializeCriticalSection(sect1);
    // 2 // hmut := createmutex(nil,true,nil); end; procedure TForm1.FormDestroy(Sender: TObject); begin
    DeleteCriticalSection(sect1);
    //2// closehandle(hmut); end; function Thr1 (p:pointer):longint; stdcall;
    var i,j : integer; begin form1.listbox1.items.clear; for j:=1 to 12 do begin if crits then
    EnterCriticalSection (sect1);
    //2// waitforsingleobject(hmut,infinite); sleep(10); i:=global; i:=i+1; form1.listbox1.items.add(intToStr(i)); global:=i; if crits then
    LeaveCriticalSection(sect1);
    //2// releasemutex(hmut); end; end; function Thr2 (p:pointer):longint; stdcall; var i,j : integer; begin form1.listbox2.items.clear; for j:=1 to 12 do begin if crits then
    EnterCriticalSection (sect1);
    //2// waitforsingleobject(hmut,infinite); sleep(7); i:=globa l; i:=i+1; form1.listbox2.items.add(intToStr(i)); global:=i; if crits then
    LeaveCriticalSection(sect1);
    //2// releasemutex(hmut); end; end; procedure TForm1.Button1Click(Sender: TObject); var thrid : dword; thrh1,thrh2: thandle; begin global:= 100; if CheckBox1.Checked then crits:= true else crits:= false ; thrh1:=CreateThread(nil,0,@Thr1,nil,0,thrid); thrh2:=CreateThread(nil,0,@Thr2,nil,0,thrid); end; end.
    Лабораторная работа рассчитана на 6 часов работы и включает в себя изучение кратких теоретических сведений, выполнение задания к лабораторной работе, оформление отчета и сдачу работы.

    Задание.
    1. Построить приложение для запуска приложения, путь и имя которого можно задавать в диалоговом окне. Для запуска приложения используйте функцию WinExec().
    2. То же самое сделать при помощи функции CreateProcess.
    3. Построить приложение, рассмотренное в примере 1, проверить его работу.
    4. Создать приложение в соответствии с приведенным в примере 2 текстом, в котором создаются 2 потока одного процесса, выполняющиеся с критическими секциями.
    Приложение использует 1 Button, 2 ListBox , 1 CheckBox. При установке (включении) критических секций конечным результатом работы приложения должно быть значение глобальной переменной, равное 124.
    5. Добавить в один из потоков приложения разработанных в п.4 операторы, завершающие выполнение одного из потоков после прохождения 5 циклов.
    Выполнить приложения, отследить поведение второго потока приложения.
    Содержание отчета:
    1. Название, цель и задание к работе
    2. Листинги приложений
    3. Ответы на поставленные вопросы в письменной форме.
    4. Полученные результаты
    Контрольные вопросы
    1. Что такое «процесс»
    2. Понятие дескриптора и контекст процесса
    3. Понятие «нить» процесса
    4. Средства Win32 для создания и управления процессами и потоками
    5. Средства синхронизации процессов и потоков
    Список литературы
    1. Операционные системы, среды и оболочки. Использование стандартных средств
    (скриптовых языков) операционной системы Windows для автоматизации задач пользователей : методические указания к лабораторным работам для дневного и заочного обучения факультета бизнеса 2 курса направления 080800 - Прикладная информатика /
    Новосиб. гос. техн. ун-т ; [сост. А. А. Забуга]. - Новосибирск, 2010.
    2. Э. Таненбаум, Современные операционные систем : научное издание: пер. с англ. / Э. Таненбаум. - 3-е изд. - Прогр. 10560726 ( файла : байтов). - М. ; СПб. ; Нижний
    Новгород : Питер, 2015. - 1020/1 с. : ил.
    3. Сетевые операционные системы: Учебник для вузов, 2-е изд. Н. А. Олифер, В. Г.
    Олифер, 2014 год, 672 стр.
    4. Таненбаум Э. С. Современные операционные системы / Э. Таненбаум. - СПб.,
    2015. - 1120 с.
    Лабораторная работа № 2
    Тема: «Средства обмена данными между приложениями»
    Цель работы: практическое знакомство со средствами передачи данных между процессами, (Interprocess Communications-IPC) и использованию разделяемых ресурсов в объектно-ориентированной многозадачной сетевой операционной системе Windows 9х.
    Краткие теоретические сведения
    Windows 9х – многозадачная 32-разрядная операционная система. Windows 9х служит платформой для 32-разрядных приложений, т.е. задействует в работу весь набор команд 32-разрядных микропроцессоров серий 386/486/Pentium и в то же время
    поддерживает все существующие 16-разрядные команды в целях совместимости с прежними версиями Windows.
      1   2   3   4   5


    написать администратору сайта