Лекция_ОС. Комплекс управляющих и обрабатывающих программ
Скачать 1.08 Mb.
|
Операционная система- комплекс управляющих и обрабатывающих программ, которые, с одной стороны, являются интерфейсом между устройствами вычислительной системы и прикладными программами (виртуальная машина и абстрагирование от «железа»), а с другой стороны- предназначены для управления устройствами и вычислительными процессами, так чтобы вычислительные ресурсы оптимально распределились между процессами (функция планировщика задач). Виртуальная машина- программная система, эмулирующая реальное аппаратное обеспечение некоторой платформы и исполняющая программы на другой платформе, т.е. это абстрагирование от аппаратного обеспечения с помощью программного интерфейса. Мультипрограммирование (многозадачность)- организация работы, при которой в памяти находятся несколько задач и система в определённые моменты времени переключает выполнение с одной задачи на другую по некоторому алгоритму. Место операционной системы в любой вычислительной системе
Состав операционной системы Загрузчик- программа, загружающая модули ОС в память Интерпретатор- трансляция команд пользователя и прикладных программ в машинный язык Ядро (Kernel, супервизор)- основная программа, управляет файловой системой, планированием процессов, распределением ресурсов… Драйверы- программы, обеспечивающие корректную работу устройств Интерфейсы- механизмы, обеспечивающие взаимодействие между разнородными объектами Составляющие операционной системы Модули – программные части со строго определёнными функциями и правилами их взаимодействия- интерфейсами (исполняемые- exe, com и объектные модули obj стандартных форматов, библиотеки разных типов –dll (Dynamic Link Library), конфигурационные файлы (ini- файлы), загрузчик операционной системы, драйверы…) 2 класса модулей: 1. Модули, выполняющие вспомогательные функции (архивация, дефрагментация диска, работа с реестром, системные обрабатывающие программы- редакторы, компиляторы, библиотеки процедур различного назначения – функции ввода/вывода, математические функции)- загружаются в оперативную память только на время выполнения своих функций- транзитные (транзитивные) программы. 2. Ядро- модули, выполняющие основные функции ОС и находящиеся в памяти постоянно (резидентные программы) Состав ядра: - функции, реализующие внутрисистемные задачи организации вычислительного процесса – обработка прерываний (любое вмешательство в работу процессора), переключение работы процессора с выполнения одной задачи на другую. Эти функции недоступны для приложений if (x!=0) y=1/x; - функции поддержки приложений- прикладная программная среда. Приложения обращаются к ядру с запросами на выполнение тех или иных действий (открытие и чтение файла, получение системного времени, вывод графической информации на экран)- системные вызовы (System Calls). Системные вызовы образуют интерфейс прикладного программирования – Application Programming Interface- API f=open(‘C:\\temp\\users\\tt.txt’,’w’) f.write(‘mama mila ramu’) f.close() Pascal: Assign(f,’c:\temp\tt.txt’); Rewrite(f); - открытие файла в режиме записи Writeln(f,’mama mila ramu’); API- набор функций и процедур в ЯП, поддерживаемых конкретной ОС, которые имеют набор формальных параметров, но выполняют системные действия- открытие файла, создание процесса, диалогового окна, выделение памяти (в Windows- ОС называется Win32/64, в Linux/Unix ОС- POSIX) Функции, выполняемые ядром, являются наиболее часто используемыми функциями, поэтому скорость их выполнения определяет производительность системы в целом. Прикладные программы обращаются к ОС, когда для выполнения тех или иных действий им требуется особый статус (открытие файла, получение процессорного времени, дискового пространства, памяти..), которым обладает ОС Можно воспользоваться имеющимся набором сервисных функций – интерфейс прикладного программирования (API). Для разработчиков прикладных программ все особенности конкретной ОС представлены особенностями API. ОС с различной внутренней структурой, но с одним и тем же API кажутся одной и той же ОС. Возможность переносить приложения между ОС с различной архитектурой (кроссплатформенность!) Приложения выполняют обращения к функциям API с помощью системных вызовов (System calls) - создают, удаляют и используют различные объекты (в основном процессы, потоки и файлы). Способы реализации системных вызовов зависят от внутренней структуры ОС связана с особенностями аппаратной платформы При использовании языка программирования высокого уровня функции, реализующие системные вызовы, вызываются тем же способом, что и функции пользователя с заданием аргументов в особом порядке Sleep(n); Типовое строение операционной системы
Основные модули и подсистемы, входящие в ядро: 1. Диспетчер процессов (Task Manager)- создает и завершает процессы и потоки Системный сервис winlogon.exe- обрабатывает событие нажатия Ctrl-Alt-Delete 2. Справочный монитор защиты (Security Reference Monitor)- обеспечивает защиту на локальной машине 3. Диспетчер виртуальной памяти (Virtual Memory Manager- VMM)- реализует виртуальную память, при которой каждому процессу предоставляется собственное адресное пространство (один процесс «не мешает» работать остальным задачам) 4. Подсистема ввода- вывода- отвечает за передачу данных от программы к аппаратуре и наоборот- пересылает данные соответствующим драйверам для дальнейшей обработки, поддержка сетевых протоколов 5. Диспетчер электропитания (Advanced Configuration and Power Interface Manager- ACPI- Manager)- управление электропитанием устройств, координация запросов устройств, связанных с изменением режима электропитания 6. Диспетчер Plug-and-Play- обеспечивает распознавание устройств после загрузки и управляет их драйверами 7. Диспетчер окон и интерфейс графических устройств – (GDI- Graphic Device Interface)- управляет отображением окон, обеспечивает прием сигналов от клавиатуры и мыши, распределяя информацию приложениям 8. Защищённые подсистемы – процессы пользовательского режима, создаются ОС во время загрузки и обрабатывают сообщения от прикладных программ и других подсистем (служба рабочей станции, служба сервера, подсистема безопасности) Общая схема архитектуры ядра
Архитектуры ядра 1. Монолитное ядро- в основном применяется в UNIX-подобных ОС. Все модули ядра скомпилированы в единый «exe-файл» и представляют собой отдельные подпрограммы (обычные функции и процедуры), работающие внутри основного процесса. Ядро с монолитной архитектурой целиком загружается в оперативную память. Взаимодействие между отдельными модулями осуществляется достаточно быстро При добавлении дополнительного функционала в ядро (добавление нового модуля) приходится перекомпилировать все ядро Надежность работы всей вычислительной системы определяется надежностью работы модулей ядра. По отношению к пользовательским приложениям модули ОС должны иметь определенные привилегии Аппаратура любой вычислительной системы должна поддерживать два режима работы: пользовательский (Usermode), в котором работают приложения пользователя (в том числе, и системные сервисы и службы, запущенные от имени пользователя), и привилегированный режим (режим ядра, Kernel mode) Модули ОС, выполняющие вспомогательные функции, оформляются в виде приложений и выполняются в пользовательском режиме вместе с обычными приложениями пользователя В пользовательском режиме приложениям запрещены некоторые действия (переключение процессора с одной задачи на другую, управление механизмом защиты памяти). Условия выполнения ряда инструкций находятся под контролем ОС. Привилегии ОС при доступе к памяти выражаются в том, что код ядра имеет доступ к областям памяти всех приложений, но сам полностью защищен от вмешательства в свою работу приложений, работающих в пользовательском режиме. Каждое приложение, работающее в пользовательском режиме, работает в своей отдельной «области» (виртуальное адресное пространство) и защищено от вмешательства каких-либо других приложений. Взаимодействие между программами пользователя (прикладные программы) и ядром ОС осуществляется с помощью системных вызовов. При системном вызове пользовательский процесс переходит в режим ядра, в этом режиме ядра работает код ядра ОС, который выполняется в адресном пространстве вызвавшей его задачи Системный вызов реализуется с помощью программного прерывания 2. Микроядерная архитектура- в привилегированном режиме работает только модуль микроядра, который защищен от остальных модулей ОС и приложений (базовые механизмы монолитного ядра), а менеджеры ресурсов выносятся в пользовательский режим как модули, предоставляющие свои ресурсы пользовательским приложениям (серверы ОС) – файловая система, менеджер безопасности, подсистемы управления виртуальной памятью и процессами… Приложения, выделенные из состава ядра, предназначаются исключительно для обслуживания запросов других приложений (в том числе, специализированных утилит, работающих с ОС)- создание процесса, выделение памяти, проверка прав доступа к ресурсу..- серверы 3. Современные ОС имеют гибридную архитектуру ядра- компоненты ядра взаимодействуют друг с другом путем передачи сообщений (как в микроядерной ОС), но все они работают в одном адресном пространстве и используют общие структуры данных (как ОС с монолитным ядром) Прерывания (Interrupt) Прерывание- принудительная передача управления от выполняющейся программы к ОС, а через нее к соответствующей программе обработки прерываний, которая происходит при определённом событии Прерывание- механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые состояния, возникающие при работе процессора Классификация прерываний: Аппаратные прерывания –события, которые исходят от внешних источников (устройств ввода/вывода..), которые уведомляют процессор о том, что они нуждаются в обслуживании. Вызываются электрическими сигналами, поступающими на входы процессора и могут произойти в любой момент времени: сигнал от таймера, нажатие клавиши, движение мыши, сигналы от дискового накопителя, сетевой карты Программные прерывания- события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода (деление на 0, обращение к недопустимым адресам, переполнение типа данных..) Var p,i:integer; p:=1; for i:=2 to 80 do p:=p*i;// произойдет переполнение типа integer и сгенерируется программное прерывание При обработке программного прерывания происходит переключение работы процессора в привилегированный режим Внешние программные прерывания- возникают по сигналу внешнего устройства (завершилась печать символа на принтере, завершение печати документа пользователя на сетевом принтере..) Assignfile(f,’C:\temp\t1.txt’); Reset(f); While not eof (f) do Readln(f,s);… CloseFlie(f); Механизм обработки прерываний состоит из этапов: Установление факта прерывания (прием и идентификация сигнала на прерывание) Запоминание состояния прерванного процесса (состояние процесса определяется значениями счетчика команд, содержимым регистров процессора, спецификацией режима: пользовательский или привилегированный…) Управление аппаратно передается программе обработки прерывания Вектор прерываний- целое число от 0 до 255, указывающее на одну из 256 программ обработки прерываний, адреса которых находятся в таблице обработчиков прерываний. В счетчик команд заносятся начальные адреса подпрограммы обработки конкретного прерывания Сохранение данных прерванной программы, которую не удалось спасти с помощью действий аппаратуры Обработка прерывания Восстановление информации, относящейся к прерванному процессу Возврат в прерванную программу Таблица обработчиков прерываний содержит перечень всех допустимых для данной ОС прерываний и адреса в памяти соответствующих обработчиков Главные функции механизма прерывания: 1. Распознавание или классификация прерывания 2.Передача управления обработчику прерывания. Процесс перехода от прерванной программы к обработчику должен происходить как можно быстрее 3. Корректное возвращение к прерванной программе. Для этого перед передачей управления обработчику содержимое регистров процессора запоминается либо в памяти с прямым доступом, либо в системном стеке Детальная классификация прерываний: 1. Программные- прерывания по системным командам. Инициируются активным процессом, который выполняет запрос на предоставление ОС вычислительной услуги (запрос ресурса) 2. Прерывания ввода-вывода. Инициируются устройством ввода/вывода и сигнализируют процессору о том, что произошло изменение состояния канала ввода/вывода (завершение работы, генерация ошибки, переход устройства в состояние готовности) 3. Внешние прерывания (нажатие клавиш или прием сигнала от другого процессора) 4. Прерывание при перезагрузке вычислительной системы 5. Логические прерывания по контролю программы. Вызываются ошибками, выявленными в ходе работы программы (деление на 0, неверный код операции, попытка проникнуть в защищенные области памяти и т.д.) 6. Прерывания по контролю вычислительной системы из-за аппаратных ошибок. Упорядочены по приоритетам Загрузка операционной системы При физическом форматировании жесткий диск разбивается на дорожки (концентрические окружности), дорожки разбиваются на секторы. Размер сектора 512 байт. Каждая «пластина» имеет две поверхности, к каждой поверхности можно подвести головки для считывания/записи данных на диск. Набор дорожек, находящихся на разных поверхностях ВСЕХ пластин и расположенных на одинаковом расстоянии от оси вращения называется цилиндром (Cylinder) Сектор- минимальная единица хранения данных(бит), каждый сектор определяется дорожкой, на которой он расположен, и поверхностью, на которой расположена дорожка. В модели хранения данных, принятой в ОС, местоположение каждого сектора определяется номером дорожки (номером цилиндра), номером поверхности (номер головки). Существует трехмерная адресация любого сектора –CHS(Cylinder-Head- Sector) При логическом форматировании диск разбивается на логические разделы (том) Раздел (partition)- часть долговременной памяти жесткого диска, выделенная для удобства работы Информация о размещении разделов на жестком диске хранится в таблице разделов (partitiontable), которая является частью главной загрузочной записи (Master Boot Record- MBR). MBR располагается в 1-м физическом секторе (с номером 0) жесткого диска. Первые 446 байт MBR занимает программа главного загрузчика, 64 байта- таблица разделов Раздел может быть либо первичным (основным), или расширенным (дополнительным) В 1-м секторе каждого первичного раздела находится загрузчик ОС, установленной на этот раздел. Под таблицу разделов выделено 64 байта, каждая запись- 16 байт. На жестком диске может быть не более 4-х основных разделов Структура записи элемента таблицы разделов (16 байт): -Флаг активности раздела; -номер головки начала раздела; -номер сектора и цилиндра загрузочного сектора раздела; -номер головки, сектора и цилиндра последнего сектора раздела;.. Дополнительный раздел- внутри него можно создавать любое число логических дисков («контейнер» для логических дисков), не содержит собственной файловой системы Всего на жестком диске может быть 3 первичных раздела и один дополнительный Сведения о разделе, хранящиеся в записи размером 16 байт, содержат: флаг активности раздела, номер головки начала раздела, номер сектора и цилиндра загрузочного сектора раздела, кодовый идентификатор ОС… В первичном разделе может быть размещена ОС, приложения и пользовательские данные Многие ОС (Windows-подобные) могут загружаться только с первичного раздела. Если используется несколько ОС, то нужно создавать несколько первичных разделов В расширенном разделе создаются логические диски, на которые могут устанавливаться ОС, не требующие загрузки с первичного раздела (Linux..) Логический раздел(том)- часть пространства жесткого диска, воспринимаемая ОС как отдельный жесткий диск Этапы загрузки ОС 1. Начальный этап загрузки – начинается при работе BIOS- базовая система ввода- вывода. В настройках BIOS указываются загрузочные устройства в порядке их приоритета BIOS перебирает указанные устройства до тех пор, пока не найдет на одном из них MBR 2. Работа с MBR. Осуществляется поиск активного системного раздела и передача управления его загрузочному сектору- в нем хранится загрузчик конкретной ОС 3. передача управления исполняемому коду, записанному в загрузочном секторе активного раздела (PBS- Partition Boot Sector). В коде PBS указано имя файла загрузчика той ОС, которой передается управление 4. Начало загрузки операционной системы. Если речь идет о загрузке ОС семейства Windows, то запускается загрузчик, имя которого указано в PBS. Он считывает информацию из текстового файла boot.ini, в котором записаны сведения об установленных ОС. Затем происходит загрузка ядра ОС и передача ему управления После окончания загрузки ОС управление передается командному процессору. Если используется интерфейс командной строки, то появляется приглашение системы, в противном случае загружается графический интерфейс (он поддерживается системным сервисом explorer.exe) В процессе загрузки ядра загрузчик остается главным в управлении вычислительной системой. Кроме ядра, загружается еще слой уровня абстрагирования от оборудования, для того, чтобы ядро ОС работало независимо от «железа» (HardWare). Модуль ядра в процессе загрузки проходит 2 фазы- так называемые фазы 0 и 1. Фаза 0 инициализирует только ту часть микроядра и подсистемы, которые требуются для работы основных служб и продолжения загрузки Фаза 1 начинается, когда уровень абстрагирования от оборудования(HAL) подготавливает систему для обработки прерываний устройств. Если в вычислительной системе установлено более одного процессора, то инициализируются все процессоры, а затем происходит запуск всех исполнительных подсистем После окончательной загрузки ядра ОС сама система переходит в сеанс «работы пользователя», т.е. пользователю предоставляется либо графический интерфейс (как в Windows-подобных ОС), либо интерфейс командной строки для авторизации и получения соответствующих прав доступа (как в ОС семейства Linux) Файловые системы Базовые понятия: Файловая система позволяет пользователям и программам обходиться набором достаточно простых средств для выполнения действий над некоторым абстрактным объектом- файлом С точки зрения ОС, файл- это именованная последовательность байт, хранящаяся тем или иным образом в кластерах жесткого диска (механизм хранения данных на флеш-накопителях несколько иной). Номера кластеров, в которых хранится тот или иной файл, должны «фиксироваться» ОС и при необходимости выполнить низкоуровневые операции чтения/записи файловая система должна достаточно быстро получить доступ к этим кластерам (по сути, фрагментам жесткого диска) Файловая система распределяет дисковую память, поддерживает именование файлов, отображает имена файлов и соответствующие им номера кластеров (это соответствие должно фиксироваться в некоторой защищенной от всякого внешнего вмешательства области, недоступной никаким пользовательским приложениям- таблице размещения файлов, в ранних версиях файловых систем она так и называлась- FAT(File Allocation Table)- таблица, MFT-Master File Table) в соответствующие адреса во внешней памяти, поддерживает защиту и восстановление данных Главное: файловая система играет роль некоторого промежуточного слоя, который абстрагирует пользователя от физической организации долговременного хранения данных (нумерации кластеров, механизма передачи данных с любого запоминающего устройства..) и создающего более простую логическую модель этого хранилища (например, поддержку иерархической структуры каталогов). Т.е. файловая система предоставляет пользователю (и приложениям) набор интерфейсов (в том числе и интерфейсов командной строки) для манипулирования данными (хранение, копирование, удаление, переименование, поддержка протоколов передачи данных по сети и т.д.) Файлы могут быть разных типов (например, текстовые, бинарные, exe-файлы), иметь различные уровни доступа, получать различные атрибуты, но механизм работы со всеми файлами должен быть единым. Таким механизмом и является файловая система Определение. Файловая система- это часть ОС (невидимая пользователю, но он через системные утилиты может управлять некоторыми ее аспектами), включающая в себя: - совокупность всех файлов на всех носителях данных, независимо от их физического устройства; - набор структур данных, используемых для управления файлами (то, как файл идентифицирует операционная система и с помощью чего отличает один файл от другого)- каталоги, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске и т.д. Т.е. эти структуры данных представляют некоторую модель, с помощью которой ОС работает с «железом»- КЛАСТЕРАМИ жесткого диска и т.д. Эта модель поддерживается с помощью некоторых программных (и специальным образом оформленных) модулей - комплекс системных программных модулей, реализующих различные операции над файлами – создание, уничтожение, чтение/запись и т.д. Эти модули в различных файловых системах имеют различную реализацию, но функционал один и тот же Любая ОС определяет набор базовых функций, обеспечивающих обмен данными с файлом: Открытие файла. Обеспечивает установление взаимосвязи между программой (текстовым редактором, прикладной программой..) и хранящимся на внешнем носителе файлом. В Lazarus это делалось примерно так: AssignFile(f,’C:\mycat\user11\t1.txt’); Reset (f);- вот здесь устанавливается некий «статус» файла- открыт только в режиме чтения, и этот статус должен быть «понят» и «принят к сведению» ОС При открытии файла ОС формирует некоторый набор данных, который ей необходим для работы с содержимым файла. Этот набор называется файловым дескриптором и имеет тип Handle. Этот дескриптор можно сформировать и программно на ЯВУ с помощью тех же системных вызовов (например, CreateFile, OpenFile и т.д.) Закрытие файла (например, CloseFile(f))- на эту ситуацию ОС тоже должна отреагировать, например, изменить статус доступа к файлу со стороны процесса (одного или нескольких) Создание нового файла- и здесь ОС должна «увидеть» новый абстрактный объект-файл, присвоить ему уникальный идентификатор (тот самый дескриптор) и при необходимости передавать этот дескриптор другим процессам(которые что-то с этим файлом «делают»- на низком уровне) Низкоуровневые операции чтения/записи- работа контроллеров с секторами жесткого диска, флеш-носителями…(обмен данными между файлами) Управление файловым указателем (с каждым открытым файлом связывается понятие файлового указателя- в каждый момент времени показывается следующий относительный адрес внутри файла, с которым можно произвести обмен данными Архитектура файловой системы
В настоящее время – файловая система NTFS (New Technology File System)- сведения о файлах (логическое имя, владелец, права доступа, «цепочки» номеров кластеров, в которых хранится файл на носителе..) хранятся в MFT (Master File Table) – таблице Процессы и потоки Процесс (задача, task)- абстракция, описывающая любую выполняющуюся программу- могут быть пользовательские и системные С точки зрения ОС процесс- внутренняя единица работы, потребляющая процессорное время и другие ресурсы вычислительной системы- ЗАЯВКА на потребление системных ресурсов Ресурсы: - Программные (адресное пространство, драйверы, системные сервисы и службы..) -Аппаратные (процессоры, основная память, дисковая память, порты ввода/вывода..) Поток (нить, Thread)- наименьшая единица обработки, исполнение которой может быть назначено операционной системе. Чаще всего, поток- часть процесса, именно поток получает процессорное время Процесс- «контейнер» для хранения потоков, выполняющихся внутри него Многозадачность (multitasking)- способ организации вычислительного процесса, при котором на одном процессоре попеременно выполняются несколько процессов (потоков). Эти процессы совместно используют не только процессорное время, но и другие ресурсы вычислительной системы. ОС должна поддерживать очередь заявок процессов на ресурсы. Многопоточность (multithreading)- свойство ОС, дающее возможность процессу, порожденному в ОС, состоять из нескольких потоков, выполняющихся параллельно Потоки, находящиеся внутри процесса, используют большинство ресурсов процесса, НО каждый поток имеет «своё» процессорное время Основные ресурсы, которыми владеют процессы (и потоки): - образ исполняемого машинного кода (.com, .exe, байт- код Java- машины…) -память (место для хранения исполняемого кода, стек вызовов- хранит информацию для возврата в программу из обработчика прерывания). Стек вызова отслеживает место, куда каждая из вызванных процедур должна вернуть управление после своего завершения -виртуальное адресное пространство- совокупность адресов памяти, которыми может манипулировать программный модуль процесса. Каждый процесс работает в своем виртуальном адресном пространстве, чтобы не допустить вмешательства в свою работу других процессов и не допустить прямого доступа к своим командам и данным -дескрипторы ресурсов ОС (неотрицательное целое число- идентификатор процесса, состояние процесса, степень привилегированности процесса). Для получения дескриптора файла его необходимо открыть функцией CreateFile, а для получения дескриптора процесса (THandle) процесс необходимо создать системной функцией CreateProcess -контекст процесса (состояние его операционной среды, которое необходимо знать, для того, чтобы процессор мог корректно продолжить выполнение процесса). Режим работы процессора , состояние регистров процессора, указатели на открытые файлы, информация о незавершенных операциях ввода-вывода, код ошибок выполняемых процессом системных вызовов.. Очередь процессов- дескрипторы процессов, объединенные в списки- каждый дескриптор содержит указатели на другие дескрипторы процессов, находящиеся «рядом в очереди». Алгоритм создания процесса: Создать дескриптор и контекст процесса Включить дескриптор процесса в очередь готовых процессов Загрузить исполняемый код процесса в оперативную память Алгоритмы планирования процессов Невытесняющая многозадачность (non- preemptive multitasking)- способ планирования процессов, при котором активный процесс выполняется до тех пор, пока он сам не отдаст управление планировщику ОС для того, чтобы он выбрал из очереди другой готовый к выполнению процесс Вытесняющая многозадачность (preemptive multitasking)-способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого принимается планировщиком ОС, а не самой активной задачей. |