МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Лекции по предмету Операционные системы

    задание, процесс, нить. В некоторых случаях сущности, обозначаемые этими

    понятиями, принципиально отличаются друг от друга.

    Говоря о процессах, мы отмечали, что операционная система поддерживает их

    обособленность: у каждого процесса имеется свое виртуальное адресное

    пространство, каждому процессу назначаются свои ресурсы - файлы, окна,

    семафоры и т.д. Такая обособленность нужна для того, чтобы защитить один

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

    конкурируют с друг другом. В общем случае процессы принадлежат разным

    пользователям, разделяющим один компьютер, и ОС берет на себя роль арбитра

    в спорах процессов за ресурсы.

    При мультипрограммировании повышается пропускная способность системы, но

    отдельный процесс никогда не может быть выполнен быстрее, чем если бы он

    выполнялся в однопрограммном режиме (всякое разделение ресурсов замедляет

    работу одного из участников за счет дополнительных затрат времени на

    ожидание освобождения ресурса). Однако задача, решаемая в рамках одного

    процесса, может обладать внутренним параллелизмом, который в принципе

    позволяет ускорить ее решение. Например, в ходе выполнения задачи

    происходит обращение к внешнему устройству, и на время этой операции можно

    не блокировать полностью выполнение процесса, а продолжить вычисления по

    другой "ветви" процесса.

    Для этих целей современные ОС предлагают использовать сравнительно новый

    механизм многонитевой обработки (multithreading). При этом вводится новое

    понятие "нить" (thread), а понятие "процесс" в значительной степени меняет

    смысл.

    Мультипрограммирование теперь реализуется на уровне нитей, и задача,

    оформленная в виде нескольких нитей в рамках одного процесса, может быть

    выполнена быстрее за счет псевдопараллельного (или параллельного в

    мультипроцессорной системе) выполнения ее отдельных частей. Например, если

    электронная таблица была разработана с учетом возможностей многонитевой

    обработки, то пользователь может запросить пересчет своего рабочего листа и

    одновременно продолжать заполнять таблицу. Особенно эффективно можно

    использовать многонитевость для выполнения распределенных приложений,

    например, многонитевый сервер может параллельно выполнять запросы сразу

    нескольких клиентов.

    Нити, относящиеся к одному процессу, не настолько изолированы друг от

    друга, как процессы в традиционной многозадачной системе, между ними легко

    организовать тесное взаимодействие. Действительно, в отличие от процессов,

    которые принадлежат разным, вообще говоря, конкурирующим приложениям, все

    нити одного процесса всегда принадлежат одному приложению, поэтому

    программист, пишущий это приложение, может заранее продумать работу

    множества нитей процесса таким образом, чтобы они могли взаимодействовать,

    а не бороться за ресурсы.

    В традиционных ОС понятие "нить" тождественно понятию "процесс". В

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

    единое адресное пространство, но выполняющихся квазипараллельно, благодаря

    чему нити становятся подобными процессам (за исключением разделяемого

    адресного пространства).

    Нити иногда называют облегченными процессами или мини-процессами.

    Действительно, нити во многих отношениях подобны процессам. Каждая нить

    выполняется строго последовательно и имеет свой собственный программный

    счетчик и стек. Нити, как и процессы, могут, например, порождать нити-

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

    процессам (то есть процессам, состоящим из одной нити), нити могут

    находится в одном из следующих состояний: ВЫПОЛНЕНИЕ, ОЖИДАНИЕ и

    ГОТОВНОСТЬ. Пока одна нить заблокирована, другая нить того же процесса

    может выполняться. Нити разделяют процессор так, как это делают процессы, в

    соответствии с различными вариантами планирования.

    Однако различные нити в рамках одного процесса не настолько независимы, как

    отдельные процессы. Все такие нити имеют одно и то же адресное

    пространство. Это означает, что они разделяют одни и те же глобальные

    переменные. Поскольку каждая нить может иметь доступ к каждому виртуальному

    адресу, одна нить может использовать стек другой нити. Между нитями нет

    полной защиты, потому что, во-первых, это невозможно, а во-вторых, не

    нужно. Все нити одного процесса всегда решают общую задачу одного

    пользователя, и аппарат нитей используется здесь для более быстрого решения

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

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

    частей одной задачи. Кроме разделения адресного пространства, все нити

    разделяют также набор открытых файлов, таймеров, сигналов и т.п.

    Итак, нити имеют собственные:

    . программный счетчик,

    . стек,

    . регистры,

    . нити-потомки,

    . состояние.

    Нити разделяют:

    . адресное пространство,

    . глобальные переменные,

    . открытые файлы,

    . таймеры,

    . семафоры,

    . статистическую информацию.

    Многонитевая обработка повышает эффективность работы системы по сравнению с

    многозадачной обработкой. Например, в многозадачной среде Windows можно

    одновременно работать с электронной таблицей и текстовым редактором.

    Однако, если пользователь запрашивает пересчет своего рабочего листа,

    электронная таблица блокируется до тех пор, пока эта операция не

    завершится, что может потребовать значительного времени. В многонитевой

    среде в случае, если электронная таблица была разработана с учетом

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

    проблемы не возникает, и пользователь всегда имеет доступ к электронной

    таблице.

    Широкое применение находит многонитевая обработка в распределенных

    системах. Смотрите об этом в разделе "Процессы и нити в распределенных

    системах".

    Некоторые прикладные задачи легче программировать, используя параллелизм,

    например задачи типа "писатель-читатель", в которых одна нить выполняет

    запись в буфер, а другая считывает записи из него. Поскольку они разделяют

    общий буфер, не стоит их делать отдельными процессами. Другой пример

    использования нитей - это управление сигналами, такими как прерывание с

    клавиатуры (del или break). Вместо обработки сигнала прерывания, одна нить

    назначается для постоянного ожидания поступления сигналов. Таким образом,

    использование нитей может сократить необходимость в прерываниях

    пользовательского уровня. В этих примерах не столь важно параллельное

    выполнение, сколь важна ясность программы.

    Наконец, в мультипроцессорных системах для нитей из одного адресного

    пространства имеется возможность выполняться параллельно на разных

    процессорах. Это действительно один из главных путей реализации разделения

    ресурсов в таких системах. С другой стороны, правильно сконструированные

    программы, которые используют нити, должны работать одинаково хорошо как на

    однопроцессорной машине в режиме разделения времени между нитями, так и на

    настоящем мультипроцессоре.

    | |

    [pic]

    Управление памятью

    Память является важнейшим ресурсом, требующим тщательного управления со

    стороны мультипрограммной операционной системы. Распределению подлежит вся

    оперативная память, не занятая операционной системой. Обычно ОС

    располагается в самых младших адресах, однако может занимать и самые

    старшие адреса. Функциями ОС по управлению памятью являются: отслеживание

    свободной и занятой памяти, выделение памяти процессам и освобождение

    памяти при завершении процессов, вытеснение процессов из оперативной памяти

    на диск, когда размеры основной памяти не достаточны для размещения в ней

    всех процессов, и возвращение их в оперативную память, когда в ней

    освобождается место, а также настройка адресов программы на конкретную

    область физической памяти.

    Типы адресов

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

    (метки), виртуальные адреса и физические адреса (рисунок 2.7).

    Символьные имена присваивает пользователь при написании программы на

    алгоритмическом языке или ассемблере.

    Виртуальные адреса вырабатывает транслятор, переводящий программу на

    машинный язык. Так как во время трансляции в общем случае не известно, в

    какое место оперативной памяти будет загружена программа, то транслятор

    присваивает переменным и командам виртуальные (условные) адреса, обычно

    считая по умолчанию, что программа будет размещена, начиная с нулевого

    адреса. Совокупность виртуальных адресов процесса называется виртуальным

    адресным пространством. Каждый процесс имеет собственное виртуальное

    адресное пространство. Максимальный размер виртуального адресного

    пространства ограничивается разрядностью адреса, присущей данной

    архитектуре компьютера, и, как правило, не совпадает с объемом физической

    памяти, имеющимся в компьютере.

    [pic]

    Рис. 2.7. Типы адресов

    Физические адреса соответствуют номерам ячеек оперативной памяти, где в

    действительности расположены или будут расположены переменные и команды.

    Переход от виртуальных адресов к физическим может осуществляться двумя

    способами. В первом случае замену виртуальных адресов на физические делает

    специальная системная программа - перемещающий загрузчик. Перемещающий

    загрузчик на основании имеющихся у него исходных данных о начальном адресе

    физической памяти, в которую предстоит загружать программу, и информации,

    предоставленной транслятором об адресно-зависимых константах программы,

    выполняет загрузку программы, совмещая ее с заменой виртуальных адресов

    физическими.

    Второй способ заключается в том, что программа загружается в память в

    неизмененном виде в виртуальных адресах, при этом операционная система

    фиксирует смещение действительного расположения программного кода

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

    программы при каждом обращении к оперативной памяти выполняется

    преобразование виртуального адреса в физический. Второй способ является

    более гибким, он допускает перемещение программы во время ее выполнения, в

    то время как перемещающий загрузчик жестко привязывает программу к

    первоначально выделенному ей участку памяти. Вместе с тем использование

    перемещающего загрузчика уменьшает накладные расходы, так как

    преобразование каждого виртуального адреса происходит только один раз во

    время загрузки, а во втором случае - каждый раз при обращении по данному

    адресу.

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

    точно известно, в какой области оперативной памяти будет выполняться

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

    Методы распределения памяти без использования дискового пространства

    Все методы управления памятью могут быть разделены на два класса: методы,

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

    диском, и методы, которые не делают этого (рисунок 2.8). Начнем с

    последнего, более простого класса методов.

    [pic]

    Рис. 2.8. Классификация методов распределения памяти

    Распределение памяти фиксированными разделами

    Самым простым способом управления оперативной памятью является разделение

    ее на несколько разделов фиксированной величины. Это может быть выполнено

    вручную оператором во время старта системы или во время ее генерации.

    Очередная задача, поступившая на выполнение, помещается либо в общую

    очередь (рисунок 2.9,а), либо в очередь к некоторому разделу (рисунок

    2.9,б).

    [pic]

    Рис. 2.9. Распределение памяти фиксированными разделами:

    а - с общей очередью; б - с отдельными очередями

    Подсистема управления памятью в этом случае выполняет следующие задачи:

    . сравнивая размер программы, поступившей на выполнение, и свободных

    разделов, выбирает подходящий раздел,

    . осуществляет загрузку программы и настройку адресов.

    При очевидном преимуществе - простоте реализации - данный метод имеет

    существенный недостаток - жесткость. Так как в каждом разделе может

    выполняться только одна программа, то уровень мультипрограммирования

    заранее ограничен числом разделов не зависимо от того, какой размер имеют

    программы. Даже если программа имеет небольшой объем, она будет занимать

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

    стороны, даже если объем оперативной памяти машины позволяет выполнить

    некоторую программу, разбиение памяти на разделы не позволяет сделать

    этого.

    Распределение памяти разделами переменной величины

    В этом случае память машины не делится заранее на разделы. Сначала вся

    память свободна. Каждой вновь поступающей задаче выделяется необходимая ей

    память. Если достаточный объем памяти отсутствует, то задача не принимается

    на выполнение и стоит в очереди. После завершения задачи память

    освобождается, и на это место может быть загружена другая задача. Таким

    образом, в произвольный момент времени оперативная память представляет

    собой случайную последовательность занятых и свободных участков (разделов)

    произвольного размера. На рисунке 2.10 показано состояние памяти в

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

    Так в момент t0 в памяти находится только ОС, а к моменту t1 память

    разделена между 5 задачами, причем задача П4, завершаясь, покидает память.

    На освободившееся после задачи П4 место загружается задача П6, поступившая

    в момент t3.

    [pic]

    Рис. 2.10. Распределение памяти динамическими разделами

    Задачами операционной системы при реализации данного метода управления

    памятью является:

    . ведение таблиц свободных и занятых областей, в которых указываются

    начальные адреса и размеры участков памяти,

    . при поступлении новой задачи - анализ запроса, просмотр таблицы

    свободных областей и выбор раздела, размер которого достаточен для

    размещения поступившей задачи,

    . загрузка задачи в выделенный ей раздел и корректировка таблиц

    свободных и занятых областей,

    . после завершения задачи корректировка таблиц свободных и занятых

    областей.

    Программный код не перемещается во время выполнения, то есть может быть

    проведена единовременная настройка адресов посредством использования

    перемещающего загрузчика.

    Выбор раздела для вновь поступившей задачи может осуществляться по разным

    правилам, таким, например, как "первый попавшийся раздел достаточного

    размера", или "раздел, имеющий наименьший достаточный размер", или "раздел,

    имеющий наибольший достаточный размер". Все эти правила имеют свои

    преимущества и недостатки.

    По сравнению с методом распределения памяти фиксированными разделами данный

    метод обладает гораздо большей гибкостью, но ему присущ очень серьезный

    недостаток - фрагментация памяти. Фрагментация - это наличие большого числа

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

    Настолько маленького, что ни одна из вновь поступающих программ не может

    поместиться ни в одном из участков, хотя суммарный объем фрагментов может

    составить значительную величину, намного превышающую требуемый объем

    памяти.

    Перемещаемые разделы

    Одним из методов борьбы с фрагментацией является перемещение всех занятых

    участков в сторону старших либо в сторону младших адресов, так, чтобы вся

    свободная память образовывала единую свободную область (рисунок 2.11). В

    дополнение к функциям, которые выполняет ОС при распределении памяти

    переменными разделами, в данном случае она должна еще время от времени

    копировать содержимое разделов из одного места памяти в другое, корректируя

    таблицы свободных и занятых областей. Эта процедура называется "сжатием".

    Сжатие может выполняться либо при каждом завершении задачи, либо только

    тогда, когда для вновь поступившей задачи нет свободного раздела

    достаточного размера. В первом случае требуется меньше вычислительной

    работы при корректировке таблиц, а во втором - реже выполняется процедура

    сжатия. Так как программы перемещаются по оперативной памяти в ходе своего

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

    должно выполняться динамическим способом.

    [pic]

    Рис. 2.11. Распределение памяти перемещаемыми разделами

    Хотя процедура сжатия и приводит к более эффективному использованию памяти,

    она может потребовать значительного времени, что часто перевешивает

    преимущества данного метода.

    Методы распределения памяти с использованием дискового пространства

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

    Уже достаточно давно пользователи столкнулись с проблемой размещения в

    памяти программ, размер которых превышал имеющуюся в наличии свободную

    память. Решением было разбиение программы на части, называемые оверлеями. 0-

    ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение,

    он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались

    между памятью и диском средствами операционной системы. Однако разбиение

    программы на части и планирование их загрузки в оперативную память должен

    был осуществлять программист.

    Развитие методов организации вычислительного процесса в этом направлении

    привело к появлению метода, известного под названием виртуальная память.

    Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.