- •Список вопросов для подготовки к экзамену по сппо (2013-2014 уч. Год)
- •Понятие программного обеспечения (по). Классификация программного обеспечения по выполняемым функциям, структура системного по. Основные свойства системного программного обеспечения.
- •1)Управление процессами (программ во время выполнения);
- •Классификация ос (по структуре и архитектурным принципам построения, по режимам работы). Примеры.
- •Программные методы реализации взаимного исключения: примеры на псевдокоде, анализ и сравнение вариантов. Примеры.
- •Понятие семафора, семафорные примитивы, бинарные и считающие семафоры. Примеры объектов диспетчеризации в ms Windows, которые могут использоваться как «семафоры».
- •Применение бинарных семафоров для реализации взаимного исключения и синхронизации процессов. Примеры.
- •Общие семафоры, решение задачи «писателей и читателей» при работе с циклическим буфером. Сравнить варианты решения.
- •Проблема тупика и задачи, связанные с решением проблемы тупика: формулировки задач и подходы к решению. Примеры.
- •Задача предотвращения тупика, подходы к решению, анализ Примеры.
- •Модель системы с повторно используемыми ресурсами (граф повторно используемых ресурсов). Примеры.
- •Модель системы с потребляемыми ресурсами (граф потребляемых ресурсов). Примеры.
- •Система с повторно используемыми и потребляемыми ресурсами (граф обобщённых ресурсов). Примеры.
- •Решение задачи распознавания тупика для систем с повторно используемыми ресурсами: основная теорема о тупике. Алгоритм редукции. Примеры редукции.
- •Распознавание тупиков в системах с повторно используемыми ресурсами с ограничениями на выполнение операций. Примеры.
- •Распознавание тупиков в системах с потребляемыми ресурсами и в системах с обобщёнными ресурсами: алгоритм редукции. Примеры.
- •Распознавание тупиков в системах с потребляемыми ресурсами и в системах с обобщёнными ресурсами: системы с ограничениями на выполнение операций. Примеры.
- •Вывод системы из тупика. Общий подход к решению задачи и частный случай.
- •Обходы тупиков. Алгоритм банкира. Примеры.
- •Иерархия запоминающих устройств вс, характеристики устройств и связь, механизмы создания иерархии. Примеры.
- •Способы распределения памяти: статическое и динамическое распределение, связные и несвязные распределения. Сравнение.
- •Сегментная организация памяти. Страничная организация памяти. Сегментно-страничная организация памяти. Аппаратная поддержка в процессорах Intel.
- •Общие принципы организации виртуальной памяти. Управление виртуальной памятью: стратегии загрузки, стратегии размещения, стратегии замещения. Пример реализации в Intel.
- •Средства защиты памяти: изоляция адресных пространств. Поддержка в Intel.
- •Средства защиты памяти: защита по уровням привилегий, привилегированные команды и команды, чувствительные к уровням привилегий). Поддержка в Intel.
- •Статическая и динамическая компоновка программ: определение, сравнение и примеры.
- •Упрощённая структура объектного модуля и принцип работы связывающего загрузчика, редактора связей (одно- и двухпроходовые). Упрощённая структура исполнимого файла.
- •Понятие прерывания, классификация прерываний. Примеры (Intel).
- •Общая схема обработки прерываний, программно-аппаратная реализация, аппаратная поддержка механизма прерываний в Intel.
- •Структурная схема обработки исключений в Windows (seh): обработка завершения и локальная раскрутка.
- •Структурная схема обработки исключений в Windows (seh): обработка исключений и глобальная раскрутка.
- •Определение файла, атрибуты файлов и именование файлов, понятие каталога (справочника, директории, папки). Примеры.
- •Понятие и функции файловой системы как подсистемы ос.
- •Логическая и физическая организация файлов. Буферизация ввода/вывода. Примеры.
- •Логическая организация файлов: файлы с последовательной организацией и индексированные файлы. Поиск на внешних устройствах, b-деревья: определение и построение, выполнение операций. Примеры.
- •Управление внешней памятью: карты памяти и списки. Примеры (fat, ntfs).
- •Управление вводом/выводом, понятие драйвера внешнего устройства, драйверы виртуальных устройств.
- •Понятие драйвера файловой системы. Иерархическая организация файловых систем. Примеры.
- •Понятие защищённой вс. Классификация угроз и вторжений. Структура системы защиты.
- •Контроль прав доступа и матрица прав доступа как математическая модель защиты объектов. Примеры: одноранговое разделение ресурсов и защита на уровне пользователей.
- •Криптографическая защита. Понятие ключа. Симметричное и асимметричное шифрование. Понятие криптографического протокола. Понятие цифровой подписи.
- •Примеры задач по обработке исключений
- •Задания по разработке командных файлов и изучение команд пакетной обработки
- •Задачи на использование программных методов решения проблемы взаимного исключения
- •Задачи на работу с семафорами
- •Решение:
- •Решение:
- •Задачи на понимание алгоритмов решения задач, связанных с тупиками
- •Задачи на анализ состояний системы для выявления тупиков
- •Задачи по теме «Хранение и поиск информации на взу»
- •Файлы для подготовки
Упрощённая структура объектного модуля и принцип работы связывающего загрузчика, редактора связей (одно- и двухпроходовые). Упрощённая структура исполнимого файла.
Упрощенная структура объектного модуля. Состоит из записей разных форматов, которые содержат поля. Sign – запись. В зависимости от Sign определяются поля внутри самой записи (как записи с вар частью). Записи: 1) T (title) – запись-заголовок, содержащая поля: name (имя объектного модуля), size (объем памяти, который требуется для размещения всего объектного модуля). 2) B (body) – содержит тело объектного модуля. Поля: code (собственно код, содержащийся в этой записи, получен в результате трансляции), size (сколько места занимает этот конкретный код этой записи). Записей B может быть несколько. 3)D (definition) – запись-определение, описывает программные модули, доступные извне. Поля: name (имя, по которому будем разыскивать внешний объект (процедура, функция, глобальная переменная или константа)), addr (адрес объекта внутри этого модуля, в котором он описан). 4) R (reference) - внешняя ссылка – на объект, описанный вне этого программного модуля Поля: name (имя, соответствующее этой внешней ссылке), addr (смещение поля, которое должно содержать ссылку); 5) M – запись-модификатор – описывает поле, подлежащее настройке, настройка проходит внутри одного модуля, без использования внешних объектов. Описывает те ссылки, которые «частично» были разрешены во время трансляции, то есть это ссылки внутри модуля, которые были настроены относительно начала этого модуля. Эти ссылки должны настраиваться дополнительно в зависимости от адреса, по которому будет загружаться модуль, так как транслятор этого не знает. Поля: addr (адрес поля (относительно модуля), которое надо модифицировать). В реальных объектных модулях М может содержать дополнительную информацию (например, ссылки на другие модули из-за которых нужна настройка). 6). E (end) – конец программного модуля. Поля: addr (адрес точки входа в программу, это поле не обязательное, может быть пустым, это точка входа для процедуры main – только для того модуля, где она находится).
Принцип работы связывающего загрузчика.
P S – файлы, содержащие программные модули, подготовленные компилятором.
ESD (External Symbols Dictionary) – словарь внешних символов (внешний символ - любой объект доступный извне).
1) В модулях должна содержаться информация о неразрешенных ссылках. 2) Должны быть описания тех объектов (констант, переменных, процедур, функций), которые в данном модуле доступны извне. 3) Должна быть информация, сколько памяти потребуется выделить для модуля. В ESD хранятся имена, адрес (берется из модуля и настраивается для дальнейшего использования) – нужен для ссылок. Можно организовать в виде дерева. В итоге в оперативной памяти получаем готовую к выполнению программу. Алгоритм для двухпроходового связывающего загрузчика. 1-ый проход: прочитать все модули и составить ESD; 2-ой проход: считываем код из модулей, загружаем в память (при загрузке используется ESD для разрешения ссылок). Программа на псевдо-псевдо коде.
Алгоритм загрузчика в два прохода. 1-ый проход: GetStartAddr (Start); CA<-Start; While (не закончились объектные модули) do begin (*1) Open(s); {открываем программный модуль} While (не конец S) do begin (*2) read(S, CR); {CR – текущая запись} if (CR.sign=T) then CL<-CR.size {сохраняем размер. CL будем использовать для увеличения Start. Start нужен для второго прохода, поэтому введем CA – адрес загрузки текущего модуля} else if (CR.sign=D) then begin (*3) WA<-CR.addr + CA; {настроили адрес загрузки} Insert (ESD, CR.name, WA); end (*3) end (*2) CA<-CA + CL; end (*1); CL<-CR.size; Закончился первый проход. 2-ой проход: CA<-Start; ExecAddr<-Start; CC<-Start; While (не конец списка модулей) do begin (*1) Open(S); {размер объектного модуля может не соответствовать суммарному размеру всех записей, содержащих код} While (не конец S) do begin (*2) read(S,CR); case(CR.sign) do T:CL<-CR.size; C: begin (*3) StMem(CC,CR.code); {сохраняем код в память по адресу СС} CC<-CC+CR.size; end (*3) R: begin (*4) {вызываем функцию, которая будет возвращать адрес, найденный для внешней ссылки. Если ссылка не определена – возвращает nil} if (Find(ESD,CR.name)=nil) then begin (*5) write(“неразрешимая внешняя ссылка”+CR.name); ErrorCode<-1; end(*5) else begin (*6) {нашли ссылку, выполняем настройку} StMem (CR.addr+CA, Find (ESD, CR.name)); end (*6) end (*4) M: StMem (CR.addr+CA {сюда записываем}, GetMem (CR.addr) + CA {отсюда берем}); E: if (not Empty (CR.addr) {не пустое поле записи}) then {определена точка входа} if ExecAddr! =Start then Write(“повторное определение”) else ExecAddr<-CR.addr + CA; end(*2); CA<-CA + CL; end (*1);
Предполагаемый вариант однопроходного загрузчика. CA<-Start; ExecAddr<-Start; CC<-Start; While (не конец списка модулей) do begin (*1) Open(S);{размер объектного модуля может не соответствовать суммарному размеру всех записей, содержащих код} While (не конец S) do begin (*2) read(S,CR); case(CR.sign) do T:CL<-CR.size; C: begin (*3) StMem(CC,CR.code); {сохраняем код в память по адресу СС} CC<-CC+CR.size; end (*3) R: begin (*4) {вызываем функцию, которая будет возвращать адрес, найденный для внешней ссылки. Если ссылка не определена – возвращает nil} if (Find(ESD,CR.name)=nil) then {не нашли в текущем ESD, однако он может быть не полным, добавим вспомогательный список, содержащий возможно неописанные имена, потом дополнительно проверим данный вспомогательный список, по окончании перебора всех модулей} addToTempList (CR.name); else begin (*6) {нашли ссылку, выполняем настройку} StMem (CR.addr+CA, Find (ESD, CR.name)); end (*6) end (*4) M: StMem(CR.addr+CA {сюда записываем}, GetMem(CR.addr) + CA {отсюда берем} ); E: if (not Empty (CR.addr) {не пустое поле записи}) then {определена точка входа} if ExecAddr!=Start then Write(“повторное определение”) else ExecAddr<-CR.addr + CA; D: begin (*7) WA<-CR.addr + CA; {настроили адрес загрузки} Insert(ESD,CR.name,WA); end (*7) end (*case); end(*2); CA<-CA + CL; end (*1); {перебрали все модули, теперь рассмотрим вспомогательный список, содержащий ранее не найденные имена} while (не конец вспомогательного списка) if (Find(ESD, getNodeFromTempList() {возвращает голову списка. Это будет имя})=nil) then begin (*5) write(“неразрешимая внешняя ссылка” + getNodeFromTempList()); ErrorCode<-1; end(*5);
