- •Минобрнауки россии
- •1. Структура и механизмы ос
- •2. Организация многопрограммной работы: процессы и потоки
- •2.5. Вопросы и литература
- •3. Управление данными в ос
- •3.5. Вопросы и литература
- •4. Файловая система
- •4.5. Вопросы и литература
- •5. Основы проектирование данных. Отношения
- •5.5. Вопросы и литература
- •6. Синхронизация процессов и доступа к ресурсам. Транзакции в ос и субд
- •6.5. Вопросы и литература
- •7. Информационно-логическое моделирование в разработке баз данных
- •7.5. Вопросы и литература
- •8. Работа с данными. Язык баз данных
- •8.1. Цель практического занятия
- •8.2. План занятия
- •8.3 . Используемые технологии
- •8.4. Примеры для анализа
- •8.4.1. Пример параметрического запроса с групповой обработкой
- •8.4.2 Пример запроса на поиск максимального/минимального значения
- •8.4.3 Пример запроса с предварительно определяемым условием выбора
- •8.5. Вопросы и литература
- •9. Язык баз данных
- •9.5. Вопросы и литература
- •10. Защита и безопасность при доступе данным в многопользовательской среде
- •10.5. Вопросы и литература
1. Структура и механизмы ос
1.1. Цель практического занятия
Данное занятие проводится интерактивнона основе самостоятельно проработанных и представленных материалов по построению ОС.
Целью практического занятия является более подробное ознакомление с многоуровневым построением ОС. Более конкретно внимание уделяется ядру ОС.
1.2. План занятия
Занятие организовано в форме изложений студентами подготовленных материалов, по которым организуется обсуждение следующих вопросов:
Ядро и вспомогательные модули ОС;
Многоуровневое построение ядра;
Системные вызовы;
Механизмы планирования;
Диспетчеризация процессов;
Организация очередей процессов.
1.3 . Используемые технологии
Для лучшего усвоения материала желательно проведение занятия с использованием компьютера.
1.4. Примеры для анализа
В качестве отправной точки анализа и обсуждения используется пример архитектуры UNIX:

Ядро и вспомогательные службы в UNIX
1.5. Вопросы и литература
1. Какие стратегии планирования применяются в системах с разделением времени?
2. Что такое «кольцевая очередь»?
3. Различаются ли понятия «время ожидания» и «время отклика»?
4. Когда процесс переводится в очередь готовых к исполнению процессов?
5. Какие виды планировщиков процессов существуют?
6. Какие требования предъявляют к алгоритмам планирования?
7. В чем заключается идея организации экзоядра?
8. Чем привилегированный режим ОС отличается от пользовательского?
9. Что означает системный вызов?
10. Зачем нужен API?
Литература
|
Учебник / Учебное пособие |
Раздел |
Страницы |
|
Таненбаум Э. Современные операционные системы. 3-е изд. - СПб.: Питер, 2010. - 1120 е.: ил. |
2.4.1-2.4.4,2.4.6 1.6.1, 1.6.4, 1.7.1-1.7.6 |
80-86, 90-100 181-200, 201-203 187-191, 216-234 |
2. Организация многопрограммной работы: процессы и потоки
2.1. Цель практического занятия
Целью практического занятия является более подробное ознакомление с основным понятием ОС – процессом и анализ функций ОС по управлению процессами.
2.2. План занятия
В рамках занятия рассматриваются нижеследующие вопросы:
функции ОС по управлению процессами (process) на примере Win32 API;
другие структурные единицы (thread, fiber, job), которым может выделяться время процессора;
функции ОС по управлению потоками (thread) на примере Win32 API.
2.3 . Используемые технологии
Для лучшего усвоения материала желательно проведение занятия с использованием компьютера.
2.4. Содержательная часть занятия
Процессы создаются:
При инициализации системы;
При выполнении работающим процессом системного вызова, предназначенного для создания процесса;
По запросу пользователя на создание нового процесса.
При запуске операционной системы создаются, как правило, несколько процессов. Некоторые из них представляют собой процессы, взаимодействующие с пользователями и выполняющие требуемую ему работу. Такие процессы обычно соответствуют решению прикладных задач и с этой точки зрения для системы являются высокоприоритетными. Есть другие процессы, предназначенные для решения некоторых полезных задач.,. Например, может быть создан процес для приема входящих сообщений электронной почты. Такой процесс основную часть времени проводит в спящем режиме, активизируясь только по мере появления писем, и в рамках системы является фоновым процессом. Фоновые процессы, предназначенные для обработки какой-либо активной деятельности, связанной, например, с электронной почтой, веб-страницами, новостями, выводом информации на печать и т. д., называются демонами.
После создания процесс может становиться активным, т.е. выполнять свою работу. Процесс – объект динамический, в конце концов, он завершается. Это может происходить по причине:
обычного выхода (добровольно);
выхода при возникновении ошибки (добровольно);
возникновения фатальной ошибки (принудительно);
уничтожения другим процессом (принудительно).
Поведением процесса на протяжение его цикла жизни от момента его создания до завершения можно управлять и можно получать доступ к атрибутам процесса с целью задания значения атрибута или его получения.
Доступ к функциональности ОС возможен с помощью интерфейса прикладного программирования, или API. Такой интерфейс определяет набор функций, которые можно использовать в прикладном программировании, устанавливается разработчиком ОС и зависит от архитектуры процессора (ов). Например, для семейства ОС Windows корпорации Microsoft существуют Win32 API и Win64 API.
Для более полного представления «управления процессами» и возможностей программиста по действию объектом «процесс» ниже приведены некоторые функции Win32 API, предназначенныедля управления процессами.
|
Функция |
Описание |
|
CreateProcess |
Создает новый процесс и его первичный поток |
|
CreateProcessAsUser |
Создает новый процесс и его первичный поток. Новый процесс работает в контексте безопасности указанного пользователя |
|
CreateProcessWithLogonW |
Создает новый процесс и его первичный поток. Новый процесс затем исполняет указанный исполнимый файл в контексте безопасности указанного мандата (пользователь, домен и пароль). |
|
ExitProcess |
Завершает процесс и все его потоки |
|
GetCurrentProcess |
Извлекает псевдо дескриптор для текущего процесса |
|
GetCurrentProcessId |
Извлекает идентификатор процесса для вызывающего процесса |
|
GetCurrentProcessorNumber |
Возвращает номер процессора, на котором исполнялся текущий поток |
|
GetExitCodeProcess |
Извлекает состояние завершения указанного процесса |
|
GetGuiResources |
Извлекает счетчик дескрипторов объектов для ресурсов GUI (графического интерфейса пользователя), находящихся в распоряжении текущего процесса |
|
GetLogicalProcessorInformation |
Извлекает информацию о логических процессорах и связанных аппаратных средствах |
|
GetPriorityClass |
Извлекает класс приоритета для указанного процесса |
|
GetProcessAffinityMask |
Извлекает маску схожести процесса для указанного процесса и системную маску схожести для системы |
|
GetProcessHandleCount |
Извлекает число открытых дескрипторов, которые принадлежат указанному процессу |
|
GetProcessId |
Извлекает ИД_процесса для указанного процесса |
|
GetProcessIdOfThread |
Извлекает ИД_процесса для процесса, связанного с указанным потоком |
|
GetProcessIoCounters |
Извлекает учетную информацию для всех операций ввода / вывода, выполненных указанным процессом |
|
GetProcessShutdownParameters |
Извлекает параметры завершения работы для текущего вызывающего процесса |
|
GetProcessTimes |
Извлекает информацию временной диаграммы (тактирования) для указанного процесса. |
|
GetProcessVersion |
Извлекает номера старшей и младшей версии системы, на которой ожидается работа указанного процесса |
|
GetProcessWorkingSetSize |
Извлекает минимальные и максимальные размеры рабочего набора указанного процесса |
|
GetStartupInfo |
Извлекает содержимое STARTUPINFO |
|
OpenProcess |
Открывает существующий объект процесса |
|
SetEnvironmentVariable |
Устанавливает для текущего процесса значение переменной окружения ( содержащей информацию о среде исполнения программы, например путь к рабочему каталогу на диске, опции приложения и т.д.) |
|
SetPriorityClass |
Устанавливает класс приоритета для указанного процесса |
|
SetProcessAffinityMask |
Устанавливает маску схожести процессора для потоков указанного процесса |
|
SetProcessShutdownParameters |
Устанавливает параметры завершения работы для текущего вызывающего процесса |
|
TerminateProcess |
Завершить указанный процесс и все его потоки |
Для сравнения функций, которые предназначены для процессов и потоков, представляет интерес рассмотрение некоторых функций управления потоками.
|
Функция |
Описание |
|
CreateRemoteThread |
Создает поток, который работает в виртуальном адресном пространстве другого процесса |
|
CreateThread |
Создает поток для исполнения внутри виртуального адресного пространства вызывающего процесса |
|
ExitThread |
Завершает поток |
|
GetCurrentThread |
Извлекает псевдо дескриптор для текущего потока |
|
GetCurrentThreadId |
Извлекает идентификатор потока вызывающего процесса |
|
GetExitCodeThread |
Извлекает состояние завершения указанного потока |
|
GetThreadId |
Извлекает идентификатор потока для указанного потока |
|
GetThreadPriority |
Извлекает значение приоритета значение для указанного потока |
|
OpenThread |
Открывает существующий объект «поток» |
|
ResumeThread |
Уменьшает счетчик приостановок для потока |
|
SetThreadIdealProcessor |
Задает предпочтительный процессор для потока |
|
SetThreadPriority |
Устанавливает значение приоритета для указанного потока |
|
Sleep |
Приостанавливает выполнение текущего потока на указанный промежуток времени |
|
SleepEx |
Приостанавливает текущий поток до тех пор, пока не выполнится указанное условие |
|
SuspendThread |
Приостанавливает указанный поток |
|
SwitchToThread |
Побуждает вызывающий процесс уступить исполнение другому потоку, который готов к работе на текущем процессоре |
|
TerminateThread |
Завершить поток |
|
ThreadProc |
Зависящая от конкретного приложения функция, использующаяся как начальный адрес для потока |
Объект job(задание) позволяет, чтобы группой процессов можно было управлять как одной единицей. Объекты job - именуемые, защищаемые, допускающие совместное использование. Они управляют атрибутами процессов, связанных с ними. Операции, выполненные над объектом job, воздействуютна все процессы, связанные с объектом job. Процессы связываются с объектом job с помощью функции AssignProcessToJobObject. ФункцияTerminateJobObject завершаетвсе процессы, связанные с объектом job.
Fiber («нить») -единица исполнения, которую «вручную» можетпланироватьприложение. Нить работает в контексте потоков, которые могут осуществлять их планирование. Каждый поток может осуществлять планированиемножества нитей. Планирование нити осуществляетсяпереключениемна другую нить. За синхронизацию отвечаетприложение.
#include <windows.h>
#include <stdio.h>
void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); //инициализация структуры STARTUPINFO
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); // инициализация PROCESS_INFORMATION
// Создать дочерний процесс с параметрами:
if( !CreateProcess( NULL, // без имени модуля (use command line).
TEXT("MyChildProcess"), // командная строка
NULL, // handle процесса не наследуется not inheritable.
NULL, // handle потока не наследуется
FALSE, // установка наследования handle в FALSE
0, // нет флагов создания
NULL, // использовать блок окружения родителя
NULL, // использовать директорий родителя
&si, // указатель на структуру STARTUPINFO
&pi ) // указатель на структуру PROCESS_INFORMATION)
{
printf( "Ошибка при создании файла (%d).\n", GetLastError() );
return; //возврат из main
}
// Ожидать выхода из дочернего процесса
WaitForSingleObject( pi.hProcess, INFINITE );
// Закрыть дескрипторы процесса и потока
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
