.RU

1. Понятие ос. Задачи ос. 2



1. Понятие ОС. Задачи ОС. 2

2. Основные этапы развития операционных ОС. 3

3.Методы декомпозиции ОС (монолитная, модульная, микроядерная). Плюсы и минусы. Понятие программного интерфейса программирования (API) 5

4.Прерывания. Обработчики прерываний. Векторы прерываний. Контекст прерывания. 7

5.Понятие системного вызова. Режим пользователя и режим ядра. Переход в режим ядра. 8

6.Понятие процесса. Дескриптор процесса. Таблица дескрипторов процесса. Состояние процесса. Переход между состояниями. 9

7.Контекст процесса. Диспетчеризация и переключение контекстов. Роль прерываний и таймера. 12

8. Понятие потока. Отличия потока от процесса. 13

9. Процессы в Linux. Системные вызовы для управления процессами. 14

10. Процессы в Linux. Состояния процессов. Процессы зомби. 15

11.Синхронное и асинхронное выполнение. Синхронизация. Проблема “гонки”. 16

12.Взаимоисключение. Монопольный доступ. Атомарные операции. Критические секции. Примитивы взаимоисключения. 17

13.Взаимоблокировка и бесконечное откладывание. 18

14.Варианты реализация примитивов взаимоисключения, программные и аппаратные. Алгоритм Деккера. 19

15.Спин-лок и активное ожидание. Понятие семафора и мьютекса. 20

17. Мониторы и условные переменные. Синхронизация с помощью обмена сообщениями. 21

18. Планирование. Цели и задачи планирования. Баланс между скоростью выполнения и временем реакции. Динамическое и статическое планирование. 22

19. Алгоритмы планирования. FIFO. Циклическое. Крадчайшее – первое. 23

20. Алгоритмы планирования. Многоуровневое планирование. 24

21.Алгоритмы планирования. Планирования в Linux. 25

22.Понятие виртуальной памяти. Физический и виртуальный адрес. Трансляция адресов и блок управления памятью. 27

23. Разбиение памяти: страничное, сегментное, странично-сегментное. 29

28. Понятие файла и файловой системы. Логическая организация файлов: линейная и иерархическая. Директория. Метаданные. 31

29. Физическое размещение файлов. Непрерывное размещение. Размещение в виде связанных списков. Табличное размещение. 32

30. Индексированное размещение файлов. Индексные блоки (узлы). Косвенные блоки. Структура ФС. 33

31. Логическая структура жесткого диска. МБР. Разделы диска. 35

32. Виртуальная файловая система (VFS) в Linux. Объекты Superblock, inode, dentry, file. 36
^

1. Понятие ОС. Задачи ОС.
Операционная система, ОС (англ. operating system) — базовый комплекс компьютерных программ, обеспечивающий интерфейс с пользователем, управление аппаратными средствами компьютера, работу с файлами, ввод и вывод данных, а также выполнение прикладных программ и утилит.

ОС позволяет абстрагироваться от деталей реализации аппаратного обеспечения, предоставляя разработчикам программного обеспечения минимально необходимый набор функций. С точки зрения обывателей, обычных пользователей компьютерной техники, ОС включает в себя и программы пользовательского интерфейса.


Задачи (функции) ОС:


Основные функции (простейшие ОС):



Дополнительные функции:

^ 2. Основные этапы развития операционных ОС.
Предшественником ОС следует считать служебные программы (загрузчики и мониторы), а также библиотеки часто используемых подпрограмм, начавшие разрабатываться с появлением универсальных компьютеров 1-го поколения (конец 1940-х годов). Служебные программы минимизировали физические манипуляции оператора с оборудованием, а библиотеки позволяли избежать многократного программирования одних и тех же действий (осуществления операций ввода-вывода, вычисления математических функций и т.п.).

В 1950-60-х годах сформировались и были реализованы основные идеи, определяющие функциональность ОС: пакетный режим, разделение времени и многозадачность, разделение полномочий, реальный масштаб времени, файловые структуры и файловые системы.




^ Пакетный режим


Необходимость оптимального использования дорогостоящих вычислительных ресурсов привела к появлению концепции «пакетного режима» исполнения программ. Пакетный режим предполагает наличие очереди программ на исполнение, причём ОС может обеспечивать загрузку программы с внешних носителей данных в оперативную память, не дожидаясь завершения исполнения предыдущей программы, что позволяет избежать простоя процессора.


^ Разделение времени и многозадачность


Уже пакетный режим в своём развитом варианте требует разделения процессорного времени между выполнением нескольких программ.

Необходимость в разделении времени (многозадачности, мультипрограммировании) проявилась ещё сильнее при распространении в качестве устройств ввода-вывода телетайпов (а позднее, терминалов с электронно-лучевыми дисплеями) (1960-е годы). Поскольку скорость клавиатурного ввода (и даже чтения с экрана) данных оператором много ниже, чем скорость обработки этих данных компьютером, использование компьютера в «монопольном» режиме (с одним оператором) могло привести к простою дорогостоящих вычислительных ресурсов.

Разделение времени позволило создать «многопользовательские» системы, в которых один (как правило) центральный процессор и блок оперативной памяти соединялся с многочисленными терминалами. При этом часть задач (таких, как ввод или редактирование данных оператором) могла исполняться в режиме диалога, а другие задачи (такие, как массивные вычисления) — в пакетном режиме.


^ Разделение полномочий


Распространение многопользовательских систем потребовало решения задачи разделения полномочий, позволяющей избежать возможности модификации исполняемой программы или данных одной программы в памяти компьютера другой (содержащей ошибку или злонамеренно подготовленной) программы, а также модификации самой ОС прикладной программой.

Реализация разделения полномочий в ОС была поддержана разработчиками процессоров, предложивших архитектуры с двумя режимами работы процессора — «реальным» (в котором исполняемой программе доступно всё адресное пространство компьютера) и «защищённым» (в котором доступность адресного пространства ограничена диапазоном, выделенном при запуске программы на исполнение).


^ Реальный масштаб времени


Применение универсальных компьютеров для управления производственными процессами потребовало реализации «реального масштаба времени» («реального времени») — синхронизации исполнения программ с внешними физическими процессами.

Включение функции реального масштаба времени в ОС позволило создавать системы, одновременно обслуживающие производственные процессы и решающие другие задачи (в пакетном режиме и (или) в режиме разделения времени).


^ Файловые системы и структуры


Постепенная замена носителей с последовательным доступом (перфолент, перфокарт и магнитных лент) накопителями произвольного доступа (на магнитных диск).
  1. ^ Методы декомпозиции ОС (монолитная, модульная, микроядерная). Плюсы и минусы. Понятие программного интерфейса программирования (API)

Ядро — центральная часть операционной системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память и внешнее аппаратное обеспечение. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов.


^ Типы архитектур ядер операционных систем


Монолитное ядро


Монолитное ядро предоставляет богатый набор абстракций оборудования. Все части монолитного ядра работают в одном адресном пространстве.

Некоторые старые монолитные ядра, в особенности систем класса Unix, требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружать модули, выполняющие части функции ядра.

Достоинства: Скорость работы, упрощённая разработка модулей, богатство предоставляемых возможностей и функций, поддержка большого количества разнообразного оборудования.

Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

Примеры: Традиционные ядра UNIX(такие как BSD), Linux; ядро MS-DOS.


Модульное ядро


Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.

В отличие от «классических» монолитных ядер, считающихся ныне устаревшими, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).

Достоинства: Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются.

Недостатки: В свою очередь, не любая программа может быть сделана модулем ядра: на модули ядра накладываются определённые ограничения в части используемых функций (например, они не могут пользоваться функциями стандартной библиотеки С/С++ и должны использовать специальные аналоги, являющиеся функциями API ядра).

Примеры: Семейство ОС GNU/Linux.


Микроядро


Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Большая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами.

Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы.

Недостатки: Передача данных между процессами требует накладных расходов.

Примеры: Symbian OS; Mach, используемый в GNU/Hurd и Mac OS X; Windows CE; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.


^ Интерфейс прикладного программирования (англ. Application Programming Interface, API [эй-пи-ай]; по-русски чаще произносят [апи́]) — набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между пользовательским приложением и операционной системой.

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована.

Если программу (модуль, библиотеку) рассматривать как чёрный ящик, то API — это множество «ручек», которые доступны пользователю данного ящика, которые он может вертеть и дёргать.

Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.

По такому принципу построены протоколы передачи данных по Internet. Стандартный протокол Internet (сетевая модель OSI) содержит 7 уровней (от физического уровня передачи пакетов бит до уровня протоколов приложений, подобных протоколам HTTP и IMAP). Каждый уровень пользуется функциональностью предыдущего уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему уровню.
  1. ^ Прерывания. Обработчики прерываний. Векторы прерываний. Контекст прерывания.

Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который выполняет работу по обработке события и возвращает управление в прерванный код.

В зависимости от источника возникновения сигнала прерывания делятся на:



^ Обработчик прерываний (или процедура обслуживания прерываний) — специальная процедура, вызываемая по прерыванию для выполнения его обработки. Обработчики прерываний могут выполнять множество функций, которые зависят от причины, которая вызвала прерывание.

На современных ПК обработчики основных аппаратных и программных прерываний находятся в памяти BIOS. Современная операционная система, во время своей загрузки, заменяет эти обработчики своими. При загрузке драйверов устройств, операционная система распределяет управление обработкой прерывания между ними. В операционных системах семейства Windows программные прерывания используются для вызовов многих API функций. В ассемблере х86 прерывание вызывается командой int.


^ Таблица векторов прерываний (англ. Interrupt Descriptor Table (IDT)) используется в x86 архитектуре и служит для связи обработчика прерывания с вектором (номером прерывания).

В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний. В защищённом режиме адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR.

В IDT используются следующие типы прерываний: аппаратные прерывания, программные прерывания и прерывания, зарезервированные процессором, называемые исключениями (для RM первые пять, для PM первые 32) на случай возникновения некоторых событий (деление на ноль, ошибка трассировки, переполнение)

В реальном режиме элементом IDT является 32-битный FAR адрес обработчика прерывания.

В защищённом режиме элементом IDT является шлюз прерывания длиной 8 байт, содержащий сегментный (логический) адрес обработчика прерывания, права доступа и др.


Контекст прерывания -
  1. ^ Понятие системного вызова. Режим пользователя и режим ядра. Переход в режим ядра.

Системный вызов (англ. system call) в программировании и вычислительной технике — обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции.

Современные операционные системы (ОС) предусматривают разделение времени между выполняющимися вычислительными процессами (многозадачность) и разделение полномочий, препятствующее исполняемым программам обращаться к данным других программ и оборудованию. Ядро ОС исполняется в привилегированном режиме работы процессора. Для выполнения межпроцессной операции или операции, требующей доступа к оборудованию, программа обращается к ядру, которое, в зависимости от полномочий вызывающего процесса, исполняет либо отказывает в исполнении такого вызова.

С точки зрения программиста системный вызов обычно выглядит как вызов подпрограммы или функции из системной библиотеки. Однако системный вызов как частный случай вызова такой функции или подпрограммы следует отличать от более общего обращения к системной библиотеке, поскольку последнее может и не требовать выполнения привилегированных операций.


Современные ОС имеют модульную структуру и состоят из двух основных уровней — компоненты, работающие в режиме пользователя и компоненты режима ядра. Программы и подсистемы, работающие в режиме пользователя имеют ограничения на доступ к системным ресурсам. Режим ядра имеет неограниченный доступ к системной памяти и внешним устройствам.

^ Пользовательский режим состоит из подсистем, передающих запросы ввода\вывода соответствующему драйверу режима ядра посредством менеджера ввода\вывода. Есть две подсистемы на уровне пользователя: подсистема окружения (запускает приложения, написанные для разных операционных систем) и интегрированная подсистема (управляет особыми системными функциями от имени подсистемы окружения). Режим ядра имеет полный доступ к аппаратной части и системным ресурсам компьютера. И также предотвращает доступ к критическим зонам системы со стороны пользовательских служб и приложений.




Переход в режим ядра -
  1. ^ Понятие процесса. Дескриптор процесса. Таблица дескрипторов процесса. Состояние процесса. Переход между состояниями.

Процесс — выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие.

Компьютерная программа сама по себе это только пассивная совокупность инструкций, в то время как процесс — это непосредственное выполнение этих инструкций.

Часто процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и т.д.


Все открытые файлы ссылаются к ядру через так называемые файловые дескрипторы. ^ Файловый дескриптор — это неотрицательное целое число. Когда мы открываем существующий файл и создаем новый файл, ядро возвращает процессу файловый дескриптор.

По умолчанию Unix-шеллы связывают файловый дескриптор 0 со стандартным вводом процесса (терминал), файловый дескриптор 1 — со стандартным выводом (терминал), и файловый дескриптор 2 — со стандартной ошибкой (то есть то куда выводятся сообщения об ошибках). Это соглашение соблюдается многими Unix-шеллами и многими приложениями — и ни в коем случае не является составной частью ядра.

Стандарт POSIX.1 заменил «магические числа» 0,1,2 символическими константами STDIN_FILENO, STDOUT_FILENO и STDERR_FILENO соответственно.

Файловые дескрипторы могут принимать значения от 0 до OPEN_MAX. Старые версии UNIX имели верхний предел до 19, позволяя одному процессу открывать до 20 файлов. Сейчас это значение увеличено до нескольких тысяч.


^ Таблица дескрипторов (или таблица описаний) содержит описания блоков памяти (сегментов): их расположение (в линейном адресном пространстве или на диске), права доступа, атрибуты использования, разрядность и т. п.

Для платформы x86 может достигать размера 8191+8192 записи (0 не используется). При адресации старшие 13 бит сегментных регистров трактуются как смещение в данной таблице. То есть вместо непосредственного указания диапазона адресов памяти сегментным регистром, диапазон адресов извлекается из таблицы по указанному сегментным регистром смещению.

На начало таблицы дескрипторов указывает регистр GDTR, LDTR.


^ Жизнь процесса можно теоретически разбить на несколько состояний, описывающих процесс. Полный набор состояний процесса содержится в следующем перечне:


  1. Процесс выполняется в режиме задачи.

  2. Процесс выполняется в режиме ядра.

  3. Процесс не выполняется, но готов к запуску под управлением ядра.

  4. Процесс приостановлен и находится в оперативной памяти.

  5. Процесс готов к запуску, но программа подкачки (нулевой процесс) должна еще загрузить процесс в оперативную память, прежде чем он будет запущен под управлением ядра.

  6. Процесс приостановлен и программа подкачки выгрузила его во внешнюю память, чтобы в оперативной памяти освободить место для других процессов.

  7. Процесс возвращен из привилегированного режима (режима ядра) в непривилегированный (режим задачи), ядро резервирует его и переключает контекст на другой процесс.

  8. Процесс вновь создан и находится в переходном состоянии; процесс существует, но не готов к выполнению, хотя и не приостановлен. Это состояние является начальным состоянием всех процессов, кроме нулевого.

  9. Процесс вызывает системную функцию exit и прекращает существование. Однако, после него осталась запись, содержащая код выхода, и некоторая хронометрическая статистика, собираемая родительским процессом. Это состояние является последним состоянием процесса.



Для описания состояний процессов используется несколько моделей. Самая простая модель - это модель трех состояний. Модель состоит из:


  1. состояния выполнения

  2. состояния ожидания

  3. состояния готовности
  1. ^ Контекст процесса. Диспетчеризация и переключение контекстов. Роль прерываний и таймера.
8. Понятие потока. Отличия потока от процесса.
Поток – последовательности (потоки выполнения) команд. С возможностью совместного доступа к данным.



^ 9. Процессы в Linux. Системные вызовы для управления процессами.
Процесс — выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие. Процесс - это:


  1. программа на стадии выполнения

  2. "объект", которому выделено процессорное время

  3. асинхронная работа


Для описания состояний процессов используется несколько моделей. Самая простая модель - это модель трех состояний. Модель состоит из:


  1. состояния выполнения

  2. состояния ожидания

  3. состояния готовности


Выполнение - это активное состояние, во время которого процесс обладает всеми необходимыми ему ресурсами. В этом состоянии процесс непосредственно выполняется процессором.

Ожидание - это пассивное состояние, во время которого процесс заблокирован, он не может быть выполнен, потому что ожидает какое-то событие, например, ввода данных или освобождения нужного ему устройства.

Готовность - это тоже пассивное состояние, процесс тоже заблокирован, но в отличие от состояния ожидания, он заблокирован не по внутренним причинам (ведь ожидание ввода данных - это внутренняя, "личная" проблема процесса - он может ведь и не ожидать ввода данных и свободно выполняться - никто ему не мешает), а по внешним, независящим от процесса, причинам.


Из состояния готовности процесс может перейти только в состояние выполнения. В состоянии выполнения может находится только один процесс на один процессор. Если у вас n-процессорная машина, у вас одновременно в состоянии выполнения могут быть n процессов.


^ Системный вызов (англ. system call) в программировании и вычислительной технике — обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции.


Ядро системы предоставляет возможности (набор системных вызовов) для порождения новых процессов, отслеживания окончания порожденных процессов и т.д.


Системные вызовы для управления процессами в GNU/Linux и UNIX: fork(), exec(), exit(), kill(), _clone() и д.р. Системные вызовы находятся в файле: ./linux/arch/i386/kernel/process.c)
^ 10. Процессы в Linux. Состояния процессов. Процессы зомби.
Процесс — выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие. Процесс - это:


  1. программа на стадии выполнения

  2. "объект", которому выделено процессорное время

  3. асинхронная работа


Для описания состояний процессов используется несколько моделей. Самая простая модель - это модель трех состояний. Модель состоит из:


  1. состояния выполнения

  2. состояния ожидания

  3. состояния готовности


В ОС Linux процесс может находиться в следующих состояниях:


  1. процесс выполняется или готов к выполнению (состояние готовности)

  2. процесс в "беспробудном сне" - ожидает дискового ввода/вывода

  3. процесс остановлен (stopped) или трассируется отладчиком

  4. процесс в состоянии ожидания (sleeping)

  5. процесс-зобми


Процесс-зомби, зомби (англ. zombie process, англ. defunct process) — дочерний процесс в Unix-системе, завершивший своё выполнение, но еще присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.


Процесс при завершении освобождает все свои ресурсы (за исключением PID — идентификатора процесса) и становится «зомби» — пустой записью в таблице процессов, хранящей код завершения для родительского процесса.

Система уведомляет родительский процесс о завершении дочернего с помощью сигнала SIGCHLD. Предполагается, что после получения SIGCHLD он считает код возврата с помощью системного вызова wait(), после чего запись зомби будет удалена из списка процессов.

Если родительский процесс игнорирует SIGCHLD (а он игнорируется по умолчанию), то зомби остаются до его завершения.


При завершении процесса должна удаляться его структура из списка процессов. Иногда процесс уже завершился, но его имя еще не удалено из списка процессов. В этом случае процесс становится зомби - его уже нет, но мы его видим в таблице команды top. Такое может произойти, если процесс-потомок (дочерний процесс) завершился раньше, чем этого ожидал процесс-родитель.
  1. ^ Синхронное и асинхронное выполнение. Синхронизация. Проблема “гонки”.

Синхронизация (от греч. synchronos — одновременный) в информатике обозначает одно из двух: синхронизацию процессов, либо синхронизацию данных.

Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно.

Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать. Для её организации используются средства межпроцессного взаимодействия. Среди наиболее часто используемых средств — сигналы и сообщения, семафоры и мьютексы, каналы (англ. pipe), совместно используемая память.

^ Состоя́ние го́нки (англ. race condition) — ошибка программирования многозадачной системы, при которой работа системы зависит от того, в каком порядке выполняются части кода. Название ошибка получила от похожей ошибки проектирования электронных схем.


^ Способы решения состояния гонки


Локальная копия

Самый простой способ решения — копирование переменной x в локальную переменную. Естественно, этот способ работает только тогда, когда переменная одна и копирование производится за одну машинную команду.


Синхронизация

Более сложный, но и более универсальный метод решения — синхронизация потоков.


^ Комбинированный способ

Вышеупомянутые способы можно скомбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимет ограничение на одну машинную команду, с другой — позволит избавиться от слишком больших синхроблоков.

^ Очевидных способов выявления и исправления состояний гонки не существует. Лучший способ избавиться от гонок — правильное проектирование многозадачной системы.
  1. ^ Взаимоисключение. Монопольный доступ. Атомарные операции. Критические секции. Примитивы взаимоисключения.

Взаимноеисключение (мьютекс) — одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков.

Мьютексы — это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний — отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным.

Одной из особенностей мьютексов, отличающей их от других средств синхронизации, например от критических секций, является то, что данными объектами управляет операционная система. Следсвием этого являются дополнительные затраты процессорного времени, требуемые на переключение между режимом пользователя и ядра.


Атомарность (в программировании) — свойство непрерывности операции. Атомарная операция выполняется полностью (или происходит отказ в выполнении), без прерываний. Атомарность имеет особое значение в многопроцессорных компьютерах (и многозадачных операционных системах), т.к. доступ к неразделяемым ресурсам должен быть обязательно атомарным.

Атомарная операция открыта влиянию только одного потока.

Атомарность бывает аппаратная (когда непрерывность обеспечивается аппаратурой) и программной, когда используются специальные средства межпрограммного взаимодействия (мьютекс, семафор). По своей сути программные средства обеспечения атомарности представляют собой два этапа - блокировка ресурса и выполнение самой операции. Блокировка представляет собой атомарную операцию, которая либо успешна, либо возвращает сообщение о занятости.


^ Критическая секция (критическая область) – часть программы в которой происходит обращение к совместно используемым данным.


К примитивам взаимоисключения относятся:
  1. ^ Взаимоблокировка и бесконечное откладывание.

Взаи́мная блокиро́вка (англ. deadlock) — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами.

Livelock - это слово означает такую ситуацию: система не «застревает» (как в обычной взаимной блокировке), а занимается бесполезной работой, её состояние постоянно меняется — но, тем не менее, она «зациклилась», не производит никакой полезной работы.

Жизненный пример такой ситуации: двое встречаются лицом к лицу. Каждый из них пытается посторониться, и они не расходятся, а несколько секунд ходят влево-вправо.

Поиск взаимных блокировок осуществляется путем построения и анализа графа ожидания. В графе ожидания узлами отмечаются процессы и объекты. Блокировки отмечаются рёбрами, направленными от узла, соответствующего захваченному объекту, к узлу, соответствующему захватившему его процессу. Ожидания отмечаются рёбрами, направленными от узла, соответствующего ожидающему процессу, к узлу, соответствующему ожидаемому объекту.

Цикл в графе ожидания соответствует взаимной блокировке. Существует специальный алгоритм поиска циклов в графе .

Существуют алгоритмы удаления взаимной блокировки. В то же время, выполнение алгоритмов поиска удаления взаимных блокировок может привести к livelock — взаимная блокировка образуется, сбрасывается, снова образуется, снова сбрасывается и так далее.
  1. ^ Варианты реализация примитивов взаимоисключения, программные и аппаратные. Алгоритм Деккера.

Взаимноеисключение (мьютекс) — одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков.

^ К примитивам взаимоисключения относятся:
  1. ^ Спин-лок и активное ожидание. Понятие семафора и мьютекса.

Взаимноеисключение (мьютекс) — одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков.

Мьютексы — это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний — отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным.

Одной из особенностей мьютексов, отличающей их от других средств синхронизации, например от критических секций, является то, что данными объектами управляет операционная система. Следсвием этого являются дополнительные затраты процессорного времени, требуемые на переключение между режимом пользователя и ядра.


Семафо́р — объект, позволяющий войти в заданный участок кода не более чем n потокам. Определение введено Э. Дейкстрой.


^ Применение семафоров


Вот некоторые из проблем, которые могут решать семафоры:



^ Проблемы семафоров


Во-первых, можно написать программу с «утечкой семафора», вызвав enter() и забыв вызвать leave(). Реже встречаются ошибки, когда дважды вызывается leave().

Во-вторых, семафоры чреваты взаимной блокировкой потоков.

В-третьих, остаётся проблема синхронизации процедур самого семафора. Например, возможна следующая ситуация: два процесса ждут освобождения семафора. После того, как семафор освободился, первый процесс «узнаёт» об этом, но не успевает уменьшить счётчик, как управление передаётся второму процессу. Второй процесс тоже узнаёт об освобождении семафора, уменьшает счётчик и входит в защищённый участок кода. Тут управление передаётся первому процессу, тот ещё раз уменьшает счётчик и тоже входит в защищённый участок кода. В итоге имеем превышение разрешённого числа процессов.

Данная проблема не имеет алгоритмического решения. Она разрешается либо размещением процедуры ожидания в критической секции, в которой не разрешается переключение с процесса на процесс, либо программистскими приёмами наподобие осуществления проверки флага и его увеличения с помощью одной машинной команды.
^ 17. Мониторы и условные переменные. Синхронизация с помощью обмена сообщениями.
Монитор — это подход к синхронизации двух или более компьютерных задач, использующих общий ресурс, обычно аппаратуру или набор переменных. При многозадачности, основанной на мониторах, компилятор или интерпретатор прозрачно для программиста вставляет код блокировки-разблокировки в соответствующим образом оформленные процедуры, избавляя программиста от явного обращения к примитивам синхронизации.


Монитор состоит из:



Процедура монитора захватывает мьютекс перед началом работы и держит его или до выхода из процедуры, или до момента ожидания условия. Если каждая процедура гарантирует, что перед освобождением мьютекса инвариант истиннен, то никакая задача не может получить ресурс в состоянии, ведущем к гонке.


^ Условные переменные


Чтобы избегать состояния активного ожидания, процессы должны сигнализировать друг другу об ожидаемых событиях. Мониторы обеспечивают эту возможность с помощью условных переменных. Когда процедура монитора требует для дальнейшей работы выполнения определённого условия, она ждёт связанную с ним условную переменную. Во время ожидания она временно отпускает мьютекс и выбывает из списка исполняющихся процессов. Любой процесс, который в дальнейшем приводит к выполнению этого условия, использует условную переменную для оповещения ждущего её процесса. Оповещённый процесс захватывает мьютекс обратно и может продолжать.

Следующий монитор использует условные переменные для реализации канала между процессами, который может хранить одномоментно только одно целочисенное значение.


Синхронизация с помощью обмена сообщениями


Лаба с трубами.
^ 18. Планирование. Цели и задачи планирования. Баланс между скоростью выполнения и временем реакции. Динамическое и статическое планирование.
Планирование выполнения задач является одной из ключевых концепций в многозадачности и многопроцессорности как в операционных системах общего назначения, так и в операционных системах реального времени. Планирование заключается в назначении приоритетов процессам в очереди с приоритетами. Программный код, выполняющий эту задачу, называется планировщиком.

Самой важной целью планирования задач является наиболее полная загрузка процессора.

В средах вычислений реального времени, например, на мобильных устройствах, предназначенных для автоматического управления в промышленности (например, робототехника), планировщик задач должен обеспечить отработку процессов в течение заданных временны́х промежутков (время отклика); это критично для поддержания корректной работы системы реального времени.


^ Алгоритмы планирования


В настоящее время для решения задачи эффективного планирования в ОСРВ наиболее интенсивно развиваются два подхода.

Статические алгоритмы планирования (RMS — Rate Monotonic Scheduling). Используют приоритетное вытесняющее планирование. Приоритет присваивается каждой задаче до того, как она начала выполняться. Преимущество отдается задачам с самыми короткими периодами выполнения.

^ Динамические алгоритмы планирования (EDF — Earliest Deadline First Scheduling). Приоритет задачам присваивается динамически, причем предпочтение отдается задачам с наиболее ранним предельным временем начала (завершения) выполнения.

При больших загрузках системы EDF более эффективен, нежели RMS.

^ 19. Алгоритмы планирования. FIFO. Циклическое. Крадчайшее – первое.
Часть операционной системы отвечающей за планирование называется планировщиком, а алгоритм по которому работает данная часть ОС – алгоритмом планирования.


Алгоритмы планирования


В настоящее время для решения задачи эффективного планирования в ОСРВ наиболее интенсивно развиваются два подхода.

^ Статические алгоритмы планирования (RMS — Rate Monotonic Scheduling). Используют приоритетное вытесняющее планирование. Приоритет присваивается каждой задаче до того, как она начала выполняться. Преимущество отдается задачам с самыми короткими периодами выполнения.

^ Динамические алгоритмы планирования (EDF — Earliest Deadline First Scheduling). Приоритет задачам присваивается динамически, причем предпочтение отдается задачам с наиболее ранним предельным временем начала (завершения) выполнения.

При больших загрузках системы EDF более эффективен, нежели RMS.


Алгоритмы планирования



Циклическое (карусельное) планирование – каждому процессу предоставляется некоторый интервал времени процессора, так называемый квант времени. Если к концу кванта времени процесс всё ещё работает, он прерывается, а управление передаётся другому процессу.

^ Крадчайшее – первое: SJN (англ. shortest job next — следующий с кратчайшим заданием) — невытесняющий алгоритм, в котором наивысший приоритет имеет самый короткий процесс.

FIFO – алгоритм при котором первым выполняется тот процесс. Который первый запросил процессорное время, т.е. тот который стал готов к выполнению, остальные процессы ставятся в очередь.
^ 20. Алгоритмы планирования. Многоуровневое планирование.
Часть операционной системы отвечающей за планирование называется планировщиком, а алгоритм по которому работает данная часть ОС – алгоритмом планирования.


Алгоритмы планирования


В настоящее время для решения задачи эффективного планирования в ОСРВ наиболее интенсивно развиваются два подхода.

^ Статические алгоритмы планирования (RMS — Rate Monotonic Scheduling). Используют приоритетное вытесняющее планирование. Приоритет присваивается каждой задаче до того, как она начала выполняться. Преимущество отдается задачам с самыми короткими периодами выполнения.

^ Динамические алгоритмы планирования (EDF — Earliest Deadline First Scheduling). Приоритет задачам присваивается динамически, причем предпочтение отдается задачам с наиболее ранним предельным временем начала (завершения) выполнения.

При больших загрузках системы EDF более эффективен, нежели RMS.


Алгоритмы планирования



Многоуровневое планирование – если памяти недостаточно, то процесс может быть перенесён на диск. Это напрямую относится к планировщику, т.к. переключение процессов с диска гораздо дольше чем из ОП.

Двухуровневый планировщик реализует практический способ работы с процессами, которые могут находиться в файле подкачки. Прежде всего в основную память загружается некоторое подмножество готовых к работе процессов. После этого планировщик некоторое время выбирает процессы только из этого подмножества. Периодически запуская планировщик более высокого уровня, выгружающий из памяти процессы, которые находились там достаточно долго, и помещающий на их место процессы с диска. После этого вновь вступает в дело планировщик нижнего уровня, переключающий только процессы в основной памяти.
  1. ^ Алгоритмы планирования. Планирования в Linux.

Часть операционной системы отвечающей за планирование называется планировщиком, а алгоритм по которому работает данная часть ОС – алгоритмом планирования.

Алгоритмы планирования

В настоящее время для решения задачи эффективного планирования в ОСРВ наиболее интенсивно развиваются два подхода.

^ Статические алгоритмы планирования (RMS — Rate Monotonic Scheduling). Используют приоритетное вытесняющее планирование. Приоритет присваивается каждой задаче до того, как она начала выполняться. Преимущество отдается задачам с самыми короткими периодами выполнения.

^ Динамические алгоритмы планирования (EDF — Earliest Deadline First Scheduling). Приоритет задачам присваивается динамически, причем предпочтение отдается задачам с наиболее ранним предельным временем начала (завершения) выполнения.

При больших загрузках системы EDF более эффективен, нежели RMS.

Алгоритмы планирования


Планировщик версии 2.6 спроектирован и разработан Инго Молнаром. Инго участвует в разработке ядра Linux с 1995 г. Он задался целью создать новый планировщик исключительно на основе алгоритмов сложности O(1) для пробуждения процессов, переключения контекстов и обработки прерывания таймера. Одной из причин возникновения потребности в новом планировщике были виртуальные машины Java™ (JVM). Модель программирования этого языка активно использует потоки, что приводит к росту накладных расходов при использовании планировщика с алгоритмом О(n). Планировщик с алгоритмом O(1) не имеет данного недостатка, поскольку его производительность не ухудшается при высокой нагрузке. Это позволяет обеспечить эффективную работу виртуальных машин Java™.

Помимо устранения прочих недостатков, в планировщике версии 2.6 решены три основные проблемы, присущие его предшественнику (O(n) и проблемы масштабируемости на многопроцессорных системах).


Особенности планировщика задач Linux 2.6

  1. ^ Понятие виртуальной памяти. Физический и виртуальный адрес. Трансляция адресов и блок управления памятью.

Виртуа́льная па́мять — схема адресации памяти компьютера, при которой память представляется программному обеспечению непрерывной и однородной, в то время как в реальности для фактического хранения данных используются отдельные (разрывные) области различных видов памяти, включая кратковременную (оперативную) и долговременную (жёсткие диски, твёрдотельные накопители).

Применение механизма виртуальной памяти позволяет:

Большинство систем виртуальной памяти опираются на технику, называемую страничной организацией памяти. НА любом компьютере существует множество адресов в памяти, к которым может обратиться программа. Адреса могут формироваться с использованием индексации, базовых регистров, сегментных регистров и другими путями. Эти программно формируемые адреса (в отличии от физических адресов, т.е. те которые напрямую нумеруют ячейки памяти в ОП), называемые виртуальными адресами, образуют виртуальное адресное пространство. При применении виртуальной памяти виртуальные адреса не подаются на прямую шиной памяти. Вместо этого они направляются диспетчеру памяти (MMU – Memory Management Unit), который отображает виртуальные адреса на физические адреса.


Блоки управления сегментами и страничной трансляции образуют устройство управления памятью.

Блок управления сегментами преобразует логические адреса в линейные по запросу исполнительного блока. Для ускорения этого преобразования текущие дескрипторы сегментов помещаются во встроенную кэш-память. Во время трансляции адресов блок управления сегментами проверяет, нет ли нарушения сегментации. Эти проверки выполняются отдельно от проверок нарушений статической сегментации, осуществляемых механизмом проверки защиты. Блок сегментации обеспечивает четыре уровня (от 0 до 3) защиты с целью изоляции и защиты друг от друга прикладных программ и операционной системы. Этот компонент также позволяет легко создавать перемещаемые программы и данные и обеспечивает их совместное использование. Полученный линейный адрес направляется в блок страничной трансляции.

Если механизм страничного преобразования включен, то для получения физических адресов по линейным используется блок страничной трансляции. Если же этот механизм выключен, то это означает, что физический адрес совпадает с линейным, и трансляция не нужна. Для ускорения трансляции адресов в кэш-память дескрипторов страниц помещаются каталог недавно использованных страниц, а также информация о входах в таблицу страниц в буфере трансляции адресов. Затем блок страничной трансляции пересылает физические адреса в блок интерфейса с магистралью для выполнения цикла обращения к памяти или устройствам ввода-вывода.

Блок страничной трансляции позволяет прозрачно управлять пространством физических адресов независимо от управления сегментами. Каждый сегмент отображается в пространство линейных адресов, которое в свою очередь отображается в одну или несколько страниц объемом 4Кбайт.
^ 23. Разбиение памяти: страничное, сегментное, странично-сегментное.
Существует несколько вариантов разбиения памяти: страничное, сегментное, сегментно-страничное и свопинг.


^ Страничная организация виртуальной памяти


В большинстве современных операционных систем виртуальная память организуется с помощью страничной адресации. Оперативная память делится на страницы: области памяти фиксированной длины (например, 4096 байт), которые являются минимальной единицей выделяемой памяти (то есть даже запрос на 1 байт от приложения приведёт к выделению ему страницы памяти). Процесс обращается к памяти с помощью адреса виртуальной памяти, который содержит в себе номер страницы и смещение внутри страницы. Операционная система преобразует виртуальный адрес в физический, при необходимости подгружая страницу с жёсткого диска в оперативную память. При запросе на выделение памяти операционная система может «сбросить» на жёсткий диск страницы, к которым давно не было обращений.


^ Сегментная организация виртуальной памяти


Механизм организации виртуальной памяти, при котором виртуальное пространство делится на части произвольного размера — сегменты. Этот механизм позволяет, к примеру, разбить данные процесса на логические блоки. Для каждого сегмента, как и для страницы, могут быть назначены права доступа к нему пользователя и его процессов. При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту.

^ Сегментно-страничная организация виртуальной памяти

При сегментно-страничной организации виртуальной памяти происходит двухуровневая трансляция виртуального адреса в физический. В этом случае виртуальный адрес состоит из трех полей: номера сегмента виртуальной памяти, номера страницы внутри сегмента и смещения внутри страницы. Соответственно, используются две таблицы отображения - таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента. Сегментно-страничная организация виртуальной памяти позволяла совместно использовать одни и те же сегменты данных и программного кода в виртуальной памяти разных задач (для каждой виртуальной памяти существовала отдельная таблица сегментов, но для совместно используемых сегментов поддерживались общие таблицы страниц).
^ 28. Понятие файла и файловой системы. Логическая организация файлов: линейная и иерархическая. Директория. Метаданные.
Фа́йловая систе́ма (англ. file system) — регламент, определяющий способ организации, хранения и именования данных на носителях информации. Она определяет формат физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла, максимальный возможный размер файла, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Файл (англ. file — папка, скоросшиватель) — концепция в вычислительной технике: сущность, позволяющая получить доступ к какому-либо ресурсу вычислительной системы и обладающая рядом признаков:

Практически всегда файлы на дисках объединяются в каталоги.

В простейшем случае все файлы на данном диске хранятся в одном каталоге. Такая одноуровневая схема (линейная) использовалась в CP/M и первых версиях MS-DOS. Иерархическая файловая система со вложенными друг в друга каталогами впервые появилась в UNIX.

Каталоги на разных дисках могут образовывать несколько отдельных деревьев, как в DOS/Windows, или же объединяться в одно дерево, общее для всех дисков, как в UNIX-подобных системах.

Директория (англ. directory - справочник, указатель), син. каталог, папка — сущность в файловой системе, упрощающая организацию файлов. Типичная файловая система содержит большое количество файлов, и директории помогают упорядочить её путём их группировки.

Метаданные, в общем случае:

Метаданные это информация о данных.
^ 29. Физическое размещение файлов. Непрерывное размещение. Размещение в виде связанных списков. Табличное размещение.
Наиболее важным моментом в реализации хранения файлов является учёт соответствия блоков диска файлам. Для определения того, какой блок какому файлу принадлежит, в различных операционных системах применяются различные методы.

^ Непрерывное размещение – выделение файлам определённых блоков на диске. Файлы представляют собой наборы последовательных соседних блоков диска.

Приемущества: простота реализации, превосходная производительность (файл может быть прочитан за одну операцию)

Недостатки: если размер файла слишком большой, то система не знает сколько места необходимо зарезервировать для него, большая фрагментация диска.

^ Размещение файлов в виде связанных списков – размещение файла состоит в виде однонаправленного списка блоков диска. Первое слово каждого блока является указателем на следующий блок. В остальной части блока хранятся данные.

Достоинства: В отличии от систем с непрерывными файлами, такой метод позволяет использовать каждый блок диска. Нет потерь дискового пространства на фрагментацию (кроме потерь в последних блоках файла). Кроме того, в каталоге нужно хранить только адрес первого блока. Всю остальную информацию можно найти там.

Недостатки: Произвольный доступ к файлу достаточно медленный.

^ Табличное размещение – Недостатки предыдущей схемы организации файлов могут быть устранены, если указатели на следующие блоки хранить не прямо в блоках, а в отдельной таблице, загружаемой в память. При такой организации все блоки доступны для данных. Кроме того, значительно упрощается произвольный доступ. Недостаток такого способа заключается в том, что таблица размещения файлов, даже для небольшого диска сильно разрастается и занимает много места в ОП.
^ 30. Индексированное размещение файлов. Индексные блоки (узлы). Косвенные блоки. Структура ФС.







^ 31. Логическая структура жесткого диска. МБР. Разделы диска.
Логический диск или том (англ. volume) — часть долговременной памяти компьютера, рассматриваемая как единое целое для удобства работы. Термин «логический диск» используется в противоположность «физическому диску», под которым рассматривается долговременная память одного конкретного дискового носителя.

Для операционной системы не имеет значения, где располагаются данные — на лазерном диске, в разделе жёсткого диска, или во флэш-памяти. Для унификации представляемых участков долговременной памяти вводится понятие логического диска.

В дисковых операционных системах (например, MS-DOS) и производных от них (например, MS Windows) логические диски обозначаются буквами латинского алфавита. Каждый том имеет собственную файловую систему.

^ Структура тома

Помимо хранимой информации, том содержит описание файловой системы — как правило, это таблица с перечислением всех файлов и их атрибутов (Таблица размещения файлов). По этой таблице определяется, в частности, в каком каталоге (папке) находится тот или иной файл. Благодаря этому при переносе файла из одной папки в другую в пределах одного тома, не осуществляется перенос данных из одной части физического диска на другую, а просто меняется запись в таблице размещения файлов. Если же файл переносится с одного логического диска на другой (даже если оба логических диска расположены на одном физическом диске), обязательно будет происходить физический перенос данных (копирование с дальнейшим удалением оригинала в случае успешного завершения).

По этой же причине форматирование и дефрагментация каждого логического диска не затрагивает другие.

^ Главная загрузочная запись (англ. master boot record, MBR) — это первый физический сектор на жёстком диске или другом устройстве хранения информации, разбиваемом на логические диски (разделы). MBR содержит таблицу разделов (partition table) и небольшой фрагмент исполняемого кода.

Цель MBR — ещё не загрузка ОС, а всего лишь выбор «с какого раздела жёсткого диска следует загружать ОС». На стадии MBR происходит выбор раздела диска и ничего более. Загрузка самой ОС происходит на более поздних этапах.

В процессе запуска компьютера при загрузке с жёсткого диска MBR загружается в память базовой системой ввода-вывода (BIOS) после окончания теста POST (в компьютерах архитектуры IBM PC обычно с адреса 0000:7c00), ему передаётся управление командой long jump.

Раздел (англ. partition) — часть долговременной памяти жёсткого диска, выделенная для удобства работы.

На других носителях информации выделение разделов или не предусмотрено, или (за редкими исключениями) не практикуется. Однако, существуют флеш-драйвы, память которых можно разбить на два раздела, причём один раздел можно защитить паролем, при этом система «увидит» составное устройство из двух флеш-карт (на самом деле любую флеш карту можно разбить на два и боле разделов, одноко драйвер в Windows отображает только первый из них; работа с ними возможна при подмене драйвера или при работе с другими ОС).
^ 32. Виртуальная файловая система (VFS) в Linux. Объекты Superblock, inode, dentry, file.


В информатике инодом (или индексным дескриптором) (произносится айнод или инод) называют структуру данных в традиционных файловых системах Unix, таких как UFS. Инод хранит основную информацию о постоянных файлах, каталогах или других объектах файловой системы.




Файл (англ. file — папка, скоросшиватель) — концепция в вычислительной технике: сущность, позволяющая получить доступ к какому-либо ресурсу вычислительной системы и обладающая рядом признаков:

Практически всегда файлы на дисках объединяются в каталоги.

В простейшем случае все файлы на данном диске хранятся в одном каталоге. Такая одноуровневая схема (линейная) использовалась в CP/M и первых версиях MS-DOS.




1-organizacionno-pravovoe-obespechenie-obrazovatelnoj-deyatelnosti-otchet-po-rezultatam-samoobsledovaniya-otdelenie.html
1-organizacionno-pravovoe-obespechenie-obrazovatelnoj-deyatelnosti.html
1-organizacionno-pravovoe-obespechenie-otchet-o-samoobsledovanii-sergiev-posad.html
1-organizacionnoe-pravovoe-obespechenie-obrazovatelnoj-deyatelnosti-stranica-8.html
1-organizaciya-i-sistema-osnovnie-vidi-sistem.html
1-organizaciya-nalogovih-proverok.html
  • portfolio.bystrickaya.ru/pasport-zdorovya-rabotnika-n-ob-utverzhdenii-perechnej-vrednih-i-ili-opasnih-proizvodstvennih-faktorov-i-rabot.html
  • textbook.bystrickaya.ru/jacques-bergier-zhak-bepzhe-stranica-10.html
  • kontrolnaya.bystrickaya.ru/psiho-fiziologicheskaya-zrelost2-globalnimi-i-regionalnimi-processami-socialnogo-i-ekonomicheskogo-razvitiya-prognozno-analiticheskij.html
  • ucheba.bystrickaya.ru/programma-po-discipline-kriminologiya-moskva-stranica-2.html
  • zanyatie.bystrickaya.ru/strugackie-a-i-b-tri-civilizacii-i-malenkij-chelovek-v-nih-po-povesti-a-i-b-strugackih-ulitka.html
  • literatura.bystrickaya.ru/seminar-proektirovanie-i-stroitelstvo-setej-sooruzhenij-i-obektov-svyazi.html
  • lesson.bystrickaya.ru/uchebno-metodicheskij-kompleks-po-discipline-050706-pedagogika-i-psihologiya-uchebno-metodicheskij-kompleks-sostavitel-st-prepodavatel-stranica-10.html
  • upbringing.bystrickaya.ru/konkurs-zhariyalajdi-ostanaj-oblisi-kmdgn-blm-basarmasi.html
  • college.bystrickaya.ru/14-obady-a-zvyky-na-morav-spojen-stancem-nastoyashaya-diplomnaya-rabota-posvyashena-folkloru-russkim-i-cheshskim.html
  • lesson.bystrickaya.ru/tehnicheskie-i-ekonomicheskie-aspekti-perehoda-na-spo.html
  • znanie.bystrickaya.ru/azastan-respublikasi-kmetni-2000-zhili-7-zheltosandai.html
  • uchebnik.bystrickaya.ru/vmoej-nebolshoj-biblioteke-sohranyayutsya-lish-te-knigi-k-kotorim-ya-postoyanno-vozvrashayus-stranica-5.html
  • portfolio.bystrickaya.ru/otchet-o-vipolnenii-nauchno-issledovatelskoj-raboti-po-teme-stranica-20.html
  • ekzamen.bystrickaya.ru/religiozno-civilizacionnie-vibori-vospitaniya-chast-2.html
  • klass.bystrickaya.ru/4-licenzirovanie-obrazovatelnih-uchrezhdenij-plan-raboti-upravleniya-obrazovaniya-administracii-pervomajskogo-rajona.html
  • kontrolnaya.bystrickaya.ru/rasporyazhenie-po-dekanatu-ochno-zaochnoj-i-zaochnoj-form-obucheniya-istoricheskogo-fakulteta-ot-07-02-2009-o-dopuske-k-pereekzamenovkam-po-itogam-zimnej-sessii-20082009.html
  • teacher.bystrickaya.ru/fao-mirovie-ceni-na-prodovolstvie-dostigli-rekorda-v-fevrale-rinok-molochnoj-produkcii-rf-poluchatel.html
  • universitet.bystrickaya.ru/struktura-centra-gsen-organizaciya-i-osnovnie-napravleniya-ego-raboti-obshestvennoe-zdorove-i-zdravoohranenie.html
  • report.bystrickaya.ru/kalendarno-tematicheskij-plan-kursa-ekonomika-ssha-dlya-studentov-iv-kursa-f-ta-meo.html
  • lesson.bystrickaya.ru/s-n-bakunin-2011-g-stranica-4.html
  • assessments.bystrickaya.ru/ekspertiza-v-tamozhennom-dele-respubliki-belarus.html
  • portfolio.bystrickaya.ru/ochishenie-organizma-umeem-li-mi-berech-zdorove.html
  • teacher.bystrickaya.ru/glava-vii-otvetstvennost-za-narushenie-sanitarnogo-zakonodatelstva-zakon-ot-30-03-99-52-fz-o-sanitarno-epidemiologicheskom.html
  • textbook.bystrickaya.ru/itogi-gak-trudoustrojstvo-i-vostrebovannost-vipusknikov-upravlenie-kachestvom-podgotovki-specialistov-5-stranica-4.html
  • assessments.bystrickaya.ru/direktor-filiala-aviacionnogo-predpriyatiya-i-obshie-polozheniya.html
  • reading.bystrickaya.ru/kratkoe-soderzhanie-lekcij-po-kursu-obektno-orientirovannij-analiz-i-proektirovanie.html
  • tetrad.bystrickaya.ru/urok-literatura-i-istoriya-po-rasskazu-e-n-nosova-zhivoe-plamya.html
  • holiday.bystrickaya.ru/novie-zhiznennie-prostranstva-dlya-detej-spb-izdatelstvo-peterburg-xxi-vek-1997.html
  • knowledge.bystrickaya.ru/oao-investicionnij-bank-issik-kul-spravochnik-opublikovan-pri-podderzhke-proekta-razvitiya-mestnogo-rinka.html
  • institute.bystrickaya.ru/forma-3-smk-dokumentaciya-po-zaprosu-cen.html
  • spur.bystrickaya.ru/konspekt-provedeniya-zanyatiya-s-detmi-starshego-doshkolnogo-vozrasta-po-teme.html
  • writing.bystrickaya.ru/avtor-sostavitel-d-k-samin-stranica-2.html
  • literatura.bystrickaya.ru/rossijskij-gosudarstvennij-universitet-imeni-immanuila-kanta.html
  • knigi.bystrickaya.ru/sozdanie-bazi-dobichi-uglevodorodov-v-arhangelske-voshlo-v-strategiyu-razvitiya-szfo-informacionnoe-agentstvo-severinform-07122011.html
  • essay.bystrickaya.ru/ekonomika-predpriyatiya-stranica-6.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.