Оперативная память – важный ресурс любой вычислительной системы, без которого невозможно выполнение программ. Это разделяемый ресурс и выбранный механизм распределения оперативной памяти очень влияет на эффективность использования ресурсов системы, производительность и другие параметры.
Уже достаточно давно пользователи столкнулись с проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением было разбиение программы на части, называемые оверлеями. 0-ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную память должен был осуществлять программист.
Развитие методов организации вычислительного процесса в этом направлении привело к появлению метода, известного под названием виртуальная память. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которыми он в действительности не обладает. Так, например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программы так, как будто в его распоряжении имеется однородная оперативная память большого объема, но в действительности все данные, используемые программой, хранятся на одном или нескольких разнородных запоминающих устройствах, обычно на дисках, и при необходимости частями отображаются в реальную память.
Таким образом, виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память решает следующие задачи:
- размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;
- перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память;
- преобразует виртуальные адреса в физические.
Все эти действия выполняются автоматически, без участия программиста, то есть механизм виртуальной памяти является прозрачным по отношению к пользователю.
Наиболее распространенными реализациями виртуальной памяти является страничное, сегментное и странично-сегментное распределение памяти, а также свопинг.
На рисунке 1.1 показана схема страничного распределения памяти. Виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера, называемые виртуальными страницами. В общем случае размер виртуального адресного пространства не является кратным размеру страницы, поэтому последняя страница каждого процесса дополняется фиктивной областью.
Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками).
Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.
При загрузке процесса часть его виртуальных страниц помещается в оперативную память, а остальные - на диск. Смежные виртуальные страницы не обязательно располагаются в смежных физических страницах. При загрузке операционная система создает для каждого процесса информационную структуру - таблицу страниц, в которой устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загруженных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск. Кроме того, в таблице страниц содержится управляющая информация, такая как признак модификации страницы, признак невыгружаемости (выгрузка некоторых страниц может быть запрещена), признак обращения к странице (используется для подсчета числа обращений за определенный период времени) и другие данные, формируемые и используемые механизмом виртуальной памяти.
Рисунок 1.1 – Страничное распределение памяти
При активизации очередного процесса в специальный регистр процессора загружается адрес таблицы страниц данного процесса.
При каждом обращении к памяти происходит чтение из таблицы страниц информации о виртуальной странице, к которой произошло обращение. Если данная виртуальная страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический. Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит так называемое страничное прерывание. Выполняющийся процесс переводится в состояние ожидания, и активизируется другой процесс из очереди готовых. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свободных страниц нет, то решается вопрос, какую страницу следует выгрузить из оперативной памяти.
В данной ситуации может быть использовано много разных критериев выбора, наиболее популярные из них следующие:
- дольше всего не использовавшаяся страница,
- первая попавшаяся страница,
- страница, к которой в последнее время было меньше всего обращений.
В некоторых системах используется понятие рабочего множества страниц. Рабочее множество определяется для каждого процесса и представляет собой перечень наиболее часто используемых страниц, которые должны постоянно находиться в оперативной памяти и поэтому не подлежат выгрузке.
После того, как выбрана страница, которая должна покинуть оперативную память, анализируется ее признак модификации (из таблицы страниц). Если выталкиваемая страница с момента загрузки была модифицирована, то ее новая версия должна быть переписана на диск. Если нет, то она может быть просто уничтожена, то есть соответствующая физическая страница объявляется свободной.
Рассмотрим механизм преобразования виртуального адреса в физический при страничной организации памяти, изображенный на рис. 1.2.
Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени к, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.
Рисунок 1.2 – Механизм преобразования виртуального адреса в физический при страничной организации памяти
При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:
1. на основании начального адреса таблицы страниц (содержимое регистра адреса таблицы страниц), номера виртуальной страницы (старшие разряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной записи в таблице,
2. из этой записи извлекается номер физической страницы,
3. к номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса).
Использование в пункте 3 того факта, что размер страницы равен степени 2, позволяет применить операцию конкатенации (присоединения) вместо более длительной операции сложения, что уменьшает время получения физического адреса, а значит повышает производительность компьютера.
На производительность системы со страничной организацией памяти влияют временные затраты, связанные с обработкой страничных прерываний и преобразованием виртуального адреса в физический. При часто возникающих страничных прерываниях система может тратить большую часть времени впустую, на свопинг страниц. Чтобы уменьшить частоту страничных прерываний, следовало бы увеличивать размер страницы. Кроме того, увеличение размера страницы уменьшает размер таблицы страниц, а значит уменьшает затраты памяти. С другой стороны, если страница велика, значит велика и фиктивная область в последней виртуальной странице каждой программы. В среднем на каждой программе теряется половина объема страницы, что в сумме при большой странице может составить существенную величину. Время преобразования виртуального адреса в физический в значительной степени определяется временем доступа к таблице страниц. В связи с этим таблицу страниц стремятся размещать в "быстрых" запоминающих устройствах. Это может быть, например, набор специальных регистров или память, использующая для уменьшения времени доступа ассоциативный поиск и кэширование данных.
Страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользователю виртуальной памяти, но почти исключает фрагментацию за счет того, что программа может загружаться в несмежные области, а также того, что при загрузке виртуальных страниц никогда не образуется остатков.
1.4.5 Средства взаимодействия процессов
Обобщающее средство синхронизации процессов предложил Дейкстра, который ввел два новых примитива. В абстрактной форме эти примитивы, обозначаемые P и V, оперируют над целыми неотрицательными переменными, называемыми семафорами.
Метод использует блокировку ожидающего процесса - перевод его из списка процессов, планируемых на выполнение (готовых), в список ожидающих (заблокированных). Этим экономится процессорное время, в противном случае попусту растрачиваемое в занятом ожидании, а затраты сводятся к переключению процессов.
Такая возможность обеспечивается:
- введением специальных целочисленных общих переменных, которые называются семафорами;
- добавлением к набору элементарных действий, из которых строятся процессы, операций над семафорами: V-операции и P-операции.
V-операция есть операция с одним операндом, который должен быть семафором. Выполнение операции состоит в увеличении значения аргумента на 1, это действие должно быть атомарным.
P-операция есть операция с одним операндом, который должен быть семафором. Выполнение операции состоит в уменьшении значения аргумента на 1, если только это действие не приведет к отрицательному значению операнда. Выполнение P-операции, то есть, принятие решение о том, что момент является подходящим для уменьшения аргумента, и последующее его уменьшение должно быть атомарным.
Атомарность P-операции и является потенциальной задержкой: если процесс пытается выполнить P-операцию над семафором, значение которого в данный момент нулевое, данная P-операция не может завершиться пока другой процесс не выполнит V-операцию над этим семафором. Несколько процессов могут начать одновременно P-операцию над одним и тем же семафором. Тогда при установке семафора в 1 только одна из P-операций завершится, какая именно - мы обсудим позже.
Защита разделяемых ресурсов теперь выглядит следующим образом. Каждый ресурс защищается своим семафором, значение которого может быть 1 - свободен или 0 - занят. Процесс, выполняющий доступ к ресурсу, инициирует P-операцию. Если ресурс занят - процесс задерживается в своей P-операции до освобождения ресурса. Когда ресурс освобождается, P-операция процесса завершается, и процесс занимает ресурс. При освобождении ресурса процесс выполняет V-операцию.
ОС может предоставлять семафоры в распоряжение пользователя, как средство для самостоятельного решения задач, требующих взаимного исключения и/или синхронизации.
При работе с именованным семафором один из процессов должен создать системный семафор, другие процессы получают доступ к созданному системному семафору. Среди входных параметров этих вызовов имеется внешнее имя семафора, вызовы возвращают манипулятор для семафора, используемый для его идентификации при последующей работе с ним. Семафор уничтожается, когда он закрыт во всех процессах, его использовавших.
Помимо основных для семафоров P- и V-операций, конкретные семафорные API ОС могут включать в себя расширенные и сервисные функции, такие как безусловная установка семафора, установка семафора и ожидание его очистки, ожидание очистки семафора. При выполнении системных вызовов - аналогов P-операции, как правило, имеется возможность задать опцию ожидания - блокировать процесс, если выполнение P-операции невозможно, или завершить системный вызов с признаком ошибки.
Во многих современных ОС наряду с семафорами "в чистом виде" API представляет те же семафоры и в виде "прикладных" объектов - объектов взаимного исключения и событий. Хотя содержание этих объектов одно и то же - семафор, ОС в отношении этих объектов представляет для прикладных процессов специфическую семантику API, соответствующую задачам взаимного исключения и синхронизации.
Все современные ОС предоставляют прикладному процессу возможность работать с "массивами семафоров", то есть, задавать список семафоров и выполнять операцию над всем списком, например, ожидать очистки любого семафора в заданном списке. Наиболее развито это средство в ОС Unix, где имеется возможность выполнять за один системный вызов semop сразу нескольких различных операций над несколькими семафорами, причем весь список операций выполняется, как одна транзакция.
1.4.6 Управление процессами
Квантование времени - используется для обеспечения эффективной интерактивной работы с компьютером нескольких пользователей. Устанавливается интервал времени - квант, в течение которого процесс может исполняться на процессоре. По истечение кванта, следующий процесс назначается на процессор. Готовые к исполнению процессы по очереди циклически получают свои кванты. Таким образом, создается эффект одновременного параллельного исполнения процессов.
1.4.7 Организация файловой системы
Файлы в UNIX играют ключевую роль, что не всегда справедливо для других операционных систем. Трудно отрицать значение файлов для пользователей, поскольку все их данные хранятся в виде файлов. Однако помимо этого, файлы в UNIX определяют привилегии пользователей, поскольку права пользователя в большинстве случаев контролируются с помощью прав доступа к файлам. Файлы обеспечивают доступ к периферийным устройствам компьютера, включая диски, накопители на магнитной ленте, CD-ROM, принтеры, терминалы, сетевые адаптеры и даже память.
Для приложений UNIX доступ в дисковому файлу "неотличим" от доступа, скажем, к принтеру. Наконец, все программы, которые выполняются в системе, включая прикладные задачи пользователей, системные процессы и даже ядро UNIX, являются исполняемыми файлами.
Как и во многих современных операционных системах, в UNIX файлы организованы в виде древовидной структуры (дерева), называемой файловой системой (file system). Каждый файл имеет имя, определяющее его расположение в дереве файловой системы. Корнем этого дерева является корневой каталог (root directory), имеющий имя Имена всех остальных файлов содержат путь — список каталогов (ветвей), которые необходимо пройти, чтобы достичь файла. В UNIX все доступное пользователям файловое пространство объединено в единое дерево каталогов, корнем которого является каталог Таким образом, полное имя любого файла начинается с и не содержит идентификатора устройства (дискового накопителя, CD!ROM или удаленного компьютера в сети), на котором он фактически хранится.
Однако это не означает, что в системе присутствует только одна файловая система. В большинстве случаев единое дерево, такое каким его видит пользователь системы, составлено из нескольких отдельных файловых систем, которые могут иметь различную внутреннюю структуру, а файлы, принадлежащие этим файловым системам, могут быть расположены на различных устройствах. Имя файла является атрибутом файловой системы, а не набора некоторых данных на диске, который не имеет имени как такового.
Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах — inode), содержащие все характеристики файла и позволяющие операционной системе выполнять операции, заказанные прикладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл. В частности, метаданные содержат указатели на дисковые блоки хранения данных файла. Имя файла в файловой системе является указателем на его метаданные, в то время как метаданные не содержат указателя на имя файла.
В UNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:
- Обычный файл (regular file);
- каталог (directory);
- специальный файл устройства (special device file);
- FIFO или именованный канал (named pipe);
- связь (link);
- сокет.
Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, исполняемые программы и т. п.
С помощью каталогов формируется логическое дерево файловой системы. Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на чтение каталога, может прочесть его содержимое, но только ядро имеет право на запись в каталог.
По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер mode), а второе определяет имя файла.
Специальный файл устройства обеспечивает доступ к физическому устройству. В UNIX различают символьные (character) и блочные (block) файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.
Символьные файлы устройств используются для небуферизированного обмена данными с устройством, в противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины — блоков. Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.
FIFO или именованный канал — это файл, используемый для связи между процессами. FIFO впервые появились в System V UNIX, но большинство современных систем поддерживают этот механизм.
Связь. Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. В то же время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жесткой связью (hard link).
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls(l), файлы first и second будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя — это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой каталог — все равно эти имена будут связаны жесткой связью с данными файла. Легко проверить, что удаление одного из файлов (first или second) не приведет к удалению самого файла, т. е. его метаданных и данных (если это не специальный файл устройства).
Сокеты предназначены для взаимодействия между процессами. Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах, ветви BSD UNIX на базе реализована система межпроцессного взаимодействия, с помощью которой работают многие системные сервисы, например, система печати.
Использование общепринятых имен основных файлов и структуры каталогов существенно облегчает работу в операционной системе, ее администрирование и переносимость. Эта структура, представленная на рис. 1.3, используется в работе системы, например при ее инициализации и конфигурировании, при работе почтовой системы и системы печати. Нарушение этой структуры может привести к неработоспособности системы или отдельных ее компонентов.
Рисунок 1.3 – Типичная файловая система UNIX
Корневой каталог является основой любой файловой системы UNIX. Все остальные файлы и каталоги располагаются в рамках структуры, порожденной корневым каталогом, независимо от их физического местонахождения. В каталоге находятся наиболее часто употребляемые команды и утилиты системы, как правило, общего пользования.
2 ВЫБОР АРХИТЕКТУРЫ ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМЫ
2.1.Общая схема архитектуры вычислительной системы
Система, состоящая из одной или нескольких ЭВМ и набора программ, обеспечивающих выполнение возложенных на систему функций, называется вычислительной системой (ВС). Состав ВС можно представить в виде совокупности аппаратной и программной частей (рис.1).
Рисунок 2.1 – Состав ВС
В состав оборудования может входить одна или несколько ЭВМ, которые выполняют функцию ввода, хранения, преобразования и вывода информации. Система нескольких ЭВМ, объединенных между собой каналами связи, разнесенных в пространстве и выполняющих функцию приема/передачи информации, называется вычислительной сетью.
Вычислительную сеть можно представить в виде двух взаимосвязанных подсетей: сети передачи данных и сети ЭВМ. СПД - совокупность технических средств для передачи данных между ЭВМ, которые состоят из линий связи и узлов связи. Узел связи - совокупность средств коммутации и передачи данных в одном пункте. Узел связи принимает данные, поступающие по каналам связи, и передает данные в каналы ведущие к абонентам. Узел связи реализуется на основе коммутационной ЭВМ и аппаратуры передачи данных. Коммутационная ЭВМ управляет приемом и передачей данных и, в частности, выбирает целесообразный путь передачи данных (в другой терминологии - маршрутизатор или коммутатор). СПД можно считать ядром вычислительной сети, обеспечивающим физическое объединение ЭВМ и других устройств.
Сеть ЭВМ - совокупность ЭВМ, объединенных сетью передачи данных. Сеть ЭВМ включает в себя главный и терминальные ЭВМ. Главная ЭВМ выполняет задания пользователя сети и содержит основные программные ресурсы. Терминальные ЭВМ - пользовательские персональные ЭВМ, а также интеллектуальные терминалы, включающие монитор со встроенным процессором, обеспечивающим локальную обработку. Под терминальными ЭВМ понимаются устройства ввода графической информации, речи, изображения и устройства вывода аналогичной информации.
Общая схема архитектуры ВС представлена на рисунке 2.2. Основным модулем является центральный процессор. С которым взаимодействуют устройства ввода-вывода, внешние запоминающие устройства, а также оперативная память.
Прикладные программы
Системы программирования
Управление логическими устройствами
Управление физическими устройствами
Аппаратные средства
Рисунок 2.2 – Общая схема архитектуры ВС
Схема архитектуры вычислительной системы отдельного компьютера представлена на рисунке 2.3.
Рисунок 2.3 – Схема архитектуры вычислительной системы
Процессор дешифрирует команды и управляет всеми действиями в системе, а также выполняет все арифметические и логические операции.
Память – устройство для хранения информации. Память делится на внутреннюю (расположенную на системной плате) и внешнюю (размещенную на разнообразных внешних носителях информации).
Внутренняя память в свою очередь подразделяется на:
- ПЗУ (постоянное запоминающее устройство), которое содержит информацию, сохраняемую даже при отключенном питании, которая служит для тестирования памяти и оборудования компьютера, начальной загрузки ПК при включении;
- ОЗУ (оперативное запоминающее устройство), служит для оперативного хранения программ и данных, сохраняемых только на период работы ПК. Она энергозависима, при отключении питания информация теряется. МП имеет возможность прямого доступа в ОП, минуя систему ввода/вывода.
Контроллеры служат для обеспечения прямой связи с ОП, минуя МП, они используются для устройств быстрого обмена данными с ОП – дисплей, клавиатура и др., обеспечения работы в групповом или сетевом режиме.
В персональном компьютере все устройства взаимодействуют через системную шину. Шина – это общий канал связи, используемый в ПК. Применяется она для организации взаимодействия между двумя или более компонентами системы.
2.2. Архитектура процессора
2.2.1 Архитектура процессора
Гипотетический микропроцессор оперирует с 8-ми разрядными байтами. Следовательно, разрядность шины данных также равна 8 бит. Длина адреса составляет 12 бит, следовательно, шина адреса 12-ти разрядная. Регистр данных и адреса (DAR) имеет разрядность 12 бит. Разрядность программного счетчика (PC) равна разрядности адреса (12 бит).
Разрядность регистра команд (IR) равна максимальной длине команды минус максимальная длина операнда. Максимальная длина операнда равна 16 бит. Следовательно, разрядность регистра команд – 8 бит. Регистр условия состоит из трех флагов: флаг нуля (Z) – устанавливается, если результат последней операции равен нулю; флаг знака (S) – устанавливается, если результат последней операции отрицательный; флаг переполнения (О) – устанавливается, если в результате последней операции был зафиксирован факт переполнения (выхода за пределы диапазона допустимых значений).
Структурно-логическая схема гипотетического микропроцессора представлена на рисунке 2.4.
Гипотетический процессор использует следующие виды адресации для доступа к данным в памяти:
- прямая – в команде указывается адрес, по которому находится операнд. Используется при записи данных в память и из памяти и для операций перехода
- прямая регистровая – в команде указывается аккумулятор, в котором находится операнд. Используется для загрузки, при арифметических и логических операциях и операциях сравнения;
- косвенная регистровая – адрес исполнительный находится в РОНе адресуемой команде, является более быстрой, чем косвенная адресация и позволяет сократить длину команды;
- непосредственная - операнд занимает одно из полей команды и, следовательно, выбирается из оперативной памяти одновременно с ней. Используется в арифметических командах и при загрузке конкретного значения в регистр;
- с автоувеличением и автоуменьшением – разновидность косвенной регистровой адресации. После или перед выполнением содержимое регистра автоматически увеличивается или уменьшается на единицу. Применяется при создании циклов.
2.3 Система команд
В соответствии с требованием функциональной полноты система команд включает следующие операции:
- загрузку регистров и запись в память;
- сложение и вычитание целых чисел;
- поразрядные логические операции;
- условные и бузусловные переходы;
- изменение содержимого разрядов регистра кода условия (флажков);
- ввод и вывод;
- останов, вызов подпрограмм и возврат из них.
Система команд обеспечивает с помощью вышеприведенных команд организацию циклов, переход к подпрограмме и возврат. Модификация данных обеспечивается наличием команд загрузки, записи в память, арифметических и логических команд, изменяющих содержимое аккумуляторов и регистров общего назначения. Система команд микропроцессора представлена в таблице 2.1.