Реализация управления памятью в UNIX

До версии 3BSD большая часть систем UNIX основывались на свопинге (подкач­ке), работавшем последующим образом. Когда загружалось больше процессов, чем могло поместиться в памяти, некие из их выгружались на диск. Выгружае­мый процесс всегда выгружался на диск полностью (исключение представляли толь­ко вместе применяемые текстовые сегменты). Таким макаром, процесс мог быть или Реализация управления памятью в UNIX в памяти, или на диске.

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

1. Системному вызову fork требовалась память для дочернего процесса.

2. Системный Реализация управления памятью в UNIX вызов brk собирался расширить сектор данных.

3. Разросшемуся стеку требовалась дополнительная память.

Не считая того, когда наступало время запустить процесс, уже довольно длительно находящийся на диске, нередко бывало нужно удалить из памяти другой про­цесс, чтоб высвободить место для запускаемого процесса. Выбирая про­цесс, который нужно было удалить из Реализация управления памятью в UNIX памяти, свопер поначалу рассматривал блокированные (к примеру, ожи­данием ввода с терминала) процессы. Лучше удалить из памяти процесс, который не может работать, чем работоспособный процесс. Если такие процессы находи­лись, из их выбирался процесс с наивысшим значением суммы приоритета и вре­мени пребывания в памяти. Таким макаром, подвергались Реализация управления памятью в UNIX выгрузки процессы, потребившие огромное количество процессорного времени либо находящиеся в памяти уже довольно длительное время. Если блокированных процессов не было, тогда на базе тех же критериев выбирался готовый процесс.

Каждые несколько секунд свопер изучил перечень выгруженных процессов, проверяя, не готов ли какой-нибудь из этих процессов к работе. Если Реализация управления памятью в UNIX процессы в со­стоянии готовности обнаруживались, из их выбирался процесс, подольше всех нахо­дящийся на диске. Потом свопер инспектировал, будет ли это легкий свопинг либо тяже­лый. Легким свопингом числился тот, для которого не требовалось дополнительное высвобождение памяти. При всем этом необходимо было всего только загрузить выгружен­ный на Реализация управления памятью в UNIX диск процесс. Томным свопингом именовался свопинг, при котором для загрузки в память выгруженного на диск процесса из нее требовалось удалить один либо несколько других процессов. Потом весь этот метод повторялся до того времени, пока не производилось одно из последующих 2-ух критерий: на диске не оставалось процессов, готовых к работе, либо Реализация управления памятью в UNIX в памяти не оставалось места для новых процессов. Чтоб не терять боль­шую часть производительности системы на свопинг, ни один процесс не выгру­жался на диск, если он пробыл в памяти наименее 2 с. Свободное место в памяти и на устройстве перекачки учитывалось при помо­щи связного перечня свободных Реализация управления памятью в UNIX пространств. Когда требовалось свободное про­странство в памяти либо на диске, из перечня выбиралось 1-ое подходящее сво­бодное место. После чего в перечень ворачивался остаток от свободного места.

Начиная с версии 3BSD к системе была добавлена страничная подкачка, чтоб предоставить возможность работать с программками огромных размеров. Фактически во всех Реализация управления памятью в UNIX версиях системы UNIX сейчас есть страничная подкачка по просьбе, показавшаяся в первый раз в версии 3BSD. Ниже описывается реализация этого механизма в версии 4BSD. Такая реализация почти во всем соответствует и версии System V, которая базирована на 4BSD.

Мысль, лежащая в базе страничной подкачки в системе 4BSD, заключается в том Реализация управления памятью в UNIX, что процессу для работы не надо полностью находиться в памяти. Все, что в действи­тельности требуется, – это структура юзера и таблицы страничек. Если они загружены, то процесс считается находящимся в памяти и может быть запущен планировщиком. Странички с секторами текста, данных и стека загружаются в па­мять динамически, по Реализация управления памятью в UNIX мере воззвания к ним. Если пользовательской структуры и таблицы страничек нет в памяти, то процесс не может быть запущен, пока свопер не загрузит их.

Страничная подкачка реализуется отчасти ядром и отчасти новым про­цессом, именуемым страничным бесом. Как и все бесы, страничный бес временами запускается и глядит, есть ли для Реализация управления памятью в UNIX него работа. Если он обнаруживает, что количество страничек в перечне свободных стра­ниц очень не достаточно, страничный бес инициирует деяния по освобождению дополнительных страничек.

Память в 4BSD делится на три части. 1-ые две части, ядро операционной системы и карта памяти, фиксированы в фи­зической памяти (другими словами никогда не выгружаются Реализация управления памятью в UNIX). Остальная память машины делится на страничные блоки, любой из которых может содержать или страничку текста, данных либо стека, или находиться в перечне свободных страничек.

Карта памяти содержит информацию о содержимом страничных блоков. Для каждого страничного блока в карте памяти есть запись фиксированной длины. При килобайтных страничных блоках и Реализация управления памятью в UNIX 16-байтовых записях карты памяти на нее расходуется наименее 2 % от общего объема памяти. 1-ые два поля записи карты памяти употребляются только тогда, когда соответственный страничный блок находится в перечне свободных страничек. В данном случае они сшивают свобод­ные странички в двусвязный перечень. Последующие три записи употребляются, когда страничный Реализация управления памятью в UNIX блок содержит информацию. У каждой странички в памяти есть фик­сированное место хранения на диске, в которое она помещается, когда выгружает­ся из памяти. Еще три поля содержат ссылку на запись в таблице процессов, тип лежащего в страничке сектора и смещение в секторе процесса. Последнее поле содержит некие флаги Реализация управления памятью в UNIX, нужные для метода страничной подкачки. При запуске процесс может вызвать страничное прерывание, если одной либо нескольких его страничек не окажется в памяти. При страничном прерывании опе­рационная система берет 1-ый страничный блок из перечня свободных страничек, удаляет его из перечня и считывает в него требуемую страничку. Если перечень сво­бодных Реализация управления памятью в UNIX страничек пуст, выполнение процесса приостанавливается до того времени, пока страничный бес не высвободит страничный блок.

Метод замещения страничек производится страничным бесом. Раз в 250 мс он ассоциирует количество свободных страничных блоков с систем­ным параметром lotsfree (равным, обычно, 1/4 объема памяти). Если число свободных страничных блоков меньше, чем значение этого Реализация управления памятью в UNIX параметра, страничный бес начинает переносить странички из памяти на диск, пока количество свобод­ных страничных блоков не станет равно lotsfree. Если же количество свободных страничных блоков больше либо равно lotsfree, тогда страничный бес ничего не решает. Если в машине много памяти и не много активных процессов, страничный бес фактически всегда бездействует Реализация управления памятью в UNIX.

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

Вначале в версии UNIX 4BSD употреблялся основной метод часов, но потом он был заменен более действенным методом часов с 2-мя стрелками. В этом методе страничный бес Реализация управления памятью в UNIX под­держивает два указателя на карту памяти. При работе он поначалу очищает бит использования фронтальной стрелкой, а потом инспектирует этот бит задней стрелкой. После этого перемещает обе стрелки. Если две стрелки находятся близко друг от друга, то только у очень интенсивно применяемых страничек возникает шанс, что к ним будет воззвание Реализация управления памятью в UNIX меж проходами 2-ух стрелок. Если же стрелки разнесены на 359 градусов (другими словами задняя стрелка находится немного впереди фронтальной), то на самом деле опять выходит начальный метод часов. При каждом запуске страничного беса стрелки проходят не полный оборот, а столько, сколько нужно, что­бы количество страничек в перечне свободных страничек было Реализация управления памятью в UNIX более lotsfree.

Если операционная система обнаруживает, что частота подкачки страничек очень высока, а количество свободных страничек всегда ниже lotsfree, свопер начинает удалять из памяти один либо несколько процессов, чтоб приостановить состязание за свободные страничные блоки. Свопинг в системе 4BSD осуществляется по последующему методу. Поначалу свопер инспектирует, есть Реализация управления памятью в UNIX ли процесс, который бездействовал в течение 20 и поболее секунд. Если такие процессы есть, из их выбирается бездей­ствовавший в течение наибольшего срока и выгружается на диск. Если таких процессов нет, изучаются четыре наибольших процесса, из которых выбирает­ся тот, который находился в памяти подольше всех, и выгружается на Реализация управления памятью в UNIX диск. При не­обходимости этот метод повторяется до того времени, пока не будет высвобождено достаточное количество памяти.

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

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

Страничная подкачка в версии System V почти во всем идентична с используемой в системе 4BSD, но все же меж этими версиями операционной системы есть достойные внимания различия. Во-1-х, в System V заместо метода часов с Реализация управления памятью в UNIX 2-мя стрелками использует­ся уникальный метод часов с одной стрелкой. Более того, заместо того чтоб помещать страничку в перечень свободных страничек на втором проходе, страничка по­мещается туда исключительно в случае, если она не использовалась в течение нескольких поочередных проходов. Хотя при таком решении странички не освобождаются Реализация управления памятью в UNIX так стремительно, как это делается методом в 4BSD, оно существенно увели­чивает возможность того, что освобожденная страничка не будет нужно здесь же опять. Во-2-х, заместо единственной переменной lotsfree в System V употребляются две переменные: min и max. Когда количество свободных страничек опускается ниже min, страничный бес начинает освобождать Реализация управления памятью в UNIX странички. Бес продолжает рабо­тать до того времени, пока число свободных страничек не сравняется со значением max. Таковой подход дает возможность избежать неустойчивости, вероятной в системе 4DSD, к примеру, в ситуации, когда количество свободных страничек на единицу мень­ше, чем lotsfree. При всем этом страничный бес высвобождает одну страничку, чтоб привести Реализация управления памятью в UNIX количество свободных страничек в соответствие со значением lotsfree. Потом происходит очередное страничное прерывание, и количество свободных страничек снова становится на единицу меньше lotsfree, в итоге страничный бес сно­ва начинает работать. Если установить значение max значительно огромным, чем min, страничный бес, завершив освобождение страничек, делает достаточный Реализация управления памятью в UNIX за­пас для собственного бездействмя в течение относительно длительного времени.

7.4. Ввод-вывод в системе UNIX

Главные понятия

Подход, используемый в операционной системе UNIX для доступа программ к устройствам ввода-вывода (таким как диски, принтеры, сетевые устройства и т.п.), заключается в интегрировании всех устройств в файловую систему в виде так именуемых Реализация управления памятью в UNIX особых файлов. Каждому устройству ввода-вывода назначается имя пути, обычно в ката­логе /dev. К примеру, диск может иметь путь /dev/hd1, у принтера может быть путь /dev/lр, а у сети – /dev/net. Доступ к этим особым файлам осуществляется так же, как и к обыденным файлам. Для этого Реализация управления памятью в UNIX не требуется никаких особых команд либо системных вызо­вов, а употребляются обыденные системные вызовы read и write. Программки мо­гут открывать, читать особые файлы, также писать в их этим же методом, что и в обыденные файлы. Таким макаром, для выполнения ввода-вывода не требуется специального механизма.

Особые файлы разделяются на Реализация управления памятью в UNIX две категории: блочные и символьные. Блочный особый файл – это особый файл, состоящий из последова­тельности нумерованных блоков. Основное свойство блочного специального фай­ла состоит в том, что к каждому его блоку можно адресоваться и получить доступ раздельно. Другими словами, программка может открыть блочный специаль­ный файл и прочесть Реализация управления памятью в UNIX, скажем, 124-й блок, не читая поначалу блоки с 0 по 123. Блоч­ные особые файлы обычно употребляются для дисков. Символьные особые файлы, обычно, употребляются для устройств ввода либо вывода символьного потока. Символьные особые файлы исполь­зуются такими устройствами, как клавиатуры, принтеры, сети, мыши, плоттеры и т. д.

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

Другим примером ввода-вывода является работа с сетью, в первый раз показавшаяся в Berkeley UNIX. Главным понятием в схеме Berkeley UNIX является сокет. Сокеты образуют пользовательский интерфейс с сетью. Сокеты могут динамически создаваться и разрушаться. При разработке сокета вызывающему Реализация управления памятью в UNIX процессу ворачивается дескриптор файла, требующийся для уста­новки соединения, чтения и записи данных, также разрыва соединения.

Каждый сокет поддерживает определенный тип работы в сети, указываемый при разработке сокета. Более всераспространенными типами сокетов являются: 1) надежный байтовый поток (ориентиро-ванный на соединение), 2) надежный поток пакетов (ориенти-рованный на соединение), 3) ненадежная передача пакетов.

1-ый тип Реализация управления памятью в UNIX сокетов позволяет двум процессам на разных машинах устано­вить меж собой эквивалент «трубы» (канала меж процессами на одной машине). Байты подаются в канал с 1-го конца и в том же порядке выходят с другого. Такая система гарантирует, что все посланные байты прибудут на другой конец канала и прибудут Реализация управления памятью в UNIX конкретно в том порядке, в каком были высланы.

2-ой тип сокетов отличается от первого тем, что он сохраняет границы меж­ду пакетами. Если отправитель 5 раз раздельно обращается к системному вызо­ву write, всякий раз отправляя по 512 б, а получатель запрашивает 2560 б по сокету типа 1, он получит все 2560 б сходу Реализация управления памятью в UNIX. При использовании сокета типа 2 ему будут выданы только 1-ые 512 б. Чтоб получить другие байты, получателю придется выполнить системный вызов read еще четыре раза.

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

При разработке сокета один из характеристик показывает протокол, применяемый для него. Для надежных байтовых потоков, обычно, употребляется протокол TCP (Transmission Control Protocol – протокол управления передачей). Для ненадежной передачи пакетов обычно применяется протокол UDP (User Data Protocol – пользовательский протокол данных). Все эти протоколы составляют базу Веба. Для Реализация управления памятью в UNIX надежного потока пакетов специального протокола нет.

До того как сокет может быть применен для работы в сети, с ним должен быть связан адресок. Этот адресок может принадлежать к одному из нескольких про­странств адресов. Более всераспространенным местом является простран­ство адресов Веба, использующее 32-разрядные числа для идентификации конечных адресатов Реализация управления памятью в UNIX в протоколе IPv4 и 128-разрядные числа в протоколе IPv6.

Как сокеты сделаны на машине-источнике и машине-приемни­ке, меж ними может быть установлено соединение (для направленной на соединение связи). Одна сторона обращается к системному вызову listen, указы­вая в качестве параметра локальный сокет. При всем этом системный вызов делает Реализация управления памятью в UNIX буфер и блокируется до того времени, пока не прибудут данные. Другая сторона обра­щается к системному вызову connect, задавая в параметрах дескриптор файла для локального сокета и адресок удаленного сокета. Если удаленная машина прини­мает вызов, тогда система устанавливает соединение меж 2-мя сокетами.

Функции установленного соединения подобны функциям канала. Процесс может Реализация управления памятью в UNIX читать из канала и писать в него, используя дескриптор файла для локаль­ного сокета. Когда соединение дальше не требуется, оно может быть закрыто обыденным методом, с помощью системного вызова close.


realiya-i-vneyazikovaya-dejstvitelnost.html
realizacii-innovacionnoj-strategii-v-respublike-kazahstan.html
realizacii-obrazovatelnoj-oblasti-poznanie-poyasnitelnaya-zapiska-1-svedeniya-o-kvalifikacionnih-harakteristikah.html