Содержание
Лекция 3. Память. — Системное программирование
С Т.к. Вся Важно Загруженная В Рис. 3.1. Образ памяти программы типа COM. Рис. 3.2. Образ памяти программы типа EXE. Рис. 3.3. Плоская модель памяти. Фирме Однако Таким Конечно, В Таким В · · Рис. 3.4. Формат селектора. Он · Index — индекс в таблице дескрипторов(его · TI — если бит установлен, то это селектор в · RPL — уровень привилегий запроса. Индекс В Селекторы Рис. 3.5. Схема преобразования логического · ·
|
Модель памяти flat.
Схема
преобразования адресов процессора 386
позволяет работать с сегментами очень
большого размера – порция 4 Гбайт. Это
намного больше, чем нужно для
программирования в среде OS/2.
В
результате можно полностью отказаться
от использования сегментированной
модели памяти. Для этого достаточно
установить базовый адрес, получаемый
с помощью сегментных регистров процессора,
равным нулю. После этого одним только
уменьшением 32-разрядного смещения можно
адресовать любую область памяти.
Соответствующая
модель памяти называется моделью FLAT
или сплошной (несегментированной)
моделью памяти.
Таким
образом, составляя 32-разрядные программы
для OS\2
можно забыть про селекторы, сегментные
регистры, модификаторы near
и far.
Содержимым сегментных регистров
управляет ОС. Программисту это делать
запрещено. В состав программного
интерфейса OS\2
входят многочисленные функции, с помощью
которых приложение может получать блоки
памяти нужного размера и с нужными
характеристиками.
Файловая система
является фундаментом, на котором лежит
любая современная ОС, так как в файлах
хранятся программы и библиотеки ОС,
программы и данные пользователя.
ОС
OS\2
способна работать как с файловой системой
DOS,
так и со своей собственной системой
HPFS.
Кроме того в OS\2
есть средства монтирования других
файловых систем.
OS\2
можно установить в существующий раздел
диска, созданный в стандарте DOS,
либо в созданный заново раздел HPFS.
При этом OS\2
будет иметь доступ к обоим разделам.
ОС
DOS
использует файловую систему, основанную
на таблице размещения файлов FAT,
обладающую рядом недостатков, в частности
низкой производительностью в мультизадачных
ОС. Этот недостаток объясняется тем,
что в таблицах FAT,
каталог и файл находятся в трех различных
и, как правило, не смененных областях
диска, поэтому для чтения файла нужно
выполнить много перемещений головок.
Для
повышения производительности IBM
OS\2
была создана файловая система (High
Performance
File
System)
HPSF
– высокопроизводительная файловая
система. Эта файловая система оптимизирована
для мультизадачной среды и ускоряет
одновременную работу программ с файлами,
расположенными на дисках большого
объема. Специальный алгоритм размещения
файлов значительно уменьшает фрагментацию
файлов, что повышает производительность
системы. При размещении файла для него
подбирается подходящий непрерывный
свободный участок диска и оставляется
некоторый запас свободного пространства.
Когда файл расширяется, для него
выделяются в первую очередь секторы из
зарезервированного для этого файла
участка диска. Если же размер файла
увеличился значительно, для него может
быть выделен еще один или несколько
свободных участков.
При
использовании HPFS
можно использовать имена файлов размером
до 254 символов. Имя может содержать
строчные и прописные буквы, пробелы и
другие символы в произвольном количестве.
В
дополнение к обычным атрибутам файлов
как «только для чтения», «скрытый»,
«системный» и «архивированный» OS/2
хранит для каждого файла набор расширенных
атрибутов. Это тип файла, комментарий
и ключевые слова для поиска, пиктограммы
для визуального представления файлов
и т.д.
В
программном интерфейсе имеются функции
для операций с файлами, в том числе и
многозадачные. Есть средства для работы
с расширенными атрибутами файлов, для
создания, удаления и переименования
файлов и каталогов и другие необходимые
функции.
Библиотеки
динамической компоновки.
При
компоновке программы DOS
в загрузочный ЕХЕ – файл добавляется
программный код функций, взятых из
стандартных библиотек транслятора или
из дополнительных библиотек. Этот метод
компоновки называется статическим. При
его использовании файл программы DOS
содержит в себе все необходимое для
работы, за исключением кода функций DOS
и BIOS,
вызываемого с помощью приложений.
В
мультизадачной среде такой подход
приведет к неэкономному использованию
оперативной памяти, так как в нее будет
загружено несколько копий одних и тех
же модулей.
В
OS/2,
как и в других мультизадачных операционных
системах применяется динамическая
компоновка, исключающая дублирование
кода функций. Для этого группы используемых
вместе функций объединяются в файлы с
расширением имени .dll,
которые называются библиотеками
динамической компоновки, динамическими
библиотеками или просто DLL
— библиотеками.
В
процессе компоновки код внешних функций,
расположенных в DLL
– библиотеках, не включается в загрузочный
ЕХЕ – файл программы. Вместо этого там
располагается ссылка на внешние функции.
Когда запускается первая программа,
использующая функцию из DLL
– библиотеки, вся библиотека загружается
в оперативную память. Если потом
пользователь запустит вторую копию
этой программы, то будет использован
код функции, уже загруженный в память
в процессе работы первой программы.
Этим
достигается значительная экономия
памяти, поэтому динамические библиотеки
очень широко используются в практике
программирования. Ядро OS/2
в основном состоит из DLL
– библиотек, поэтому многие функции
ядра доступны программам через механизм
динамической компоновки.
Драйверы.
Программы
DOS
часто вынуждены работать непосредственно
с картами периферийных устройств, таких
как видеоконтроллер или последовательный
порт. Это связано с тем, что DOS
и BIOS
не имеют в своем составе достаточно
быстрых и удобных средств для работы с
этими устройствами.
Если
нужно обеспечить быстрый ввод изображения
на экран для создания динамичной игры
или разработать телекоммуникационную
программу, необходимо изучать аппаратное
обеспечение ПК, становясь системным
программистом.
На
этом пути есть несколько неприятных
моментов:
во-первых,
трудно найти подробное описание портов
видеоконтроллеров и другой аппаратуры,
так как оно поставляется фирмами-изготовителями
не всем желающим.
во-вторых,
разнообразие аппаратуры велико. Сейчас
выпускаются сотни несовместимых друг
с другом видеоконтроллеров, принтеров,
контроллеров дисков и т. д.
в-третьих,
аппаратура постоянно совершенствуется.
Новые периферийные устройства не всегда
совместимы со старыми. Поэтому старые
программы либо не работают на новых ПК,
либо работают не так как нужно.
В
составе OS/2
поставляется набор драйверов для всех
стандартных устройств ПК, что исключает
необходимость работы с аппаратурой на
уровне портов. В крайнем случае, можно
использовать драйверы производителя
аппаратуры. Нужно только убедиться, что
он предназначен для той версии ОС,
которая используется на ПК.
Так
же как в MS
DOS
в OS/2
драйверы подключаются в файле конфигурации
config. sys
Однако в отличие от DOS
файл конфигурации содержит две команды
подключения драйверов – BASEDEV
и DEVICE.
Первая подключает базовые драйверы,
без которых работа OS/2
невозможна, вторая – все остальные.
Операционные системы
— Понимание «плоской модели памяти» и «сегментированной модели памяти»
«Модель памяти» — это как низкоуровневая, так и (относительно) высокоуровневая концепция.
В былые времена между процессорами с сегментированной моделью памяти и процессорами с «выгружаемой» или «отображаемой» моделью памяти шла своего рода «война». Машины серии Burroughs B5000 и Plessey 250 использовали модель сегментированной памяти с «возможностями» (или «дескрипторами»). То есть физическое хранилище управлялось не как концептуальные страницы фиксированного размера, а скорее как сегменты переменной длины, где каждый сегмент соответствовал некоторому логическому объекту (например, процедуре или объекту). Для адресации между сегментами использовались «реестры возможностей», которые можно было загрузить только защищенным образом и которые содержали физический адрес сегмента, длину сегмента и права доступа (например, чтение/запись/выполнение), которые исполняющий программа была дана для ссылки на сегмент.
Эти системы успешно работали, когда «выгружаемые» системы все еще пытались оторваться от земли.
Оригинальный ПК был основан на процессоре 8086, который был разработан для поддержки сегментированной архитектуры для бедняков. Было, IIRC, четыре сегментных регистра, которые можно было выбрать для добавления к 16-битному общему значению регистра для получения 20-битного адреса. Теория заключалась в том, что эти регистры будут управляться программно, подобно тому, как системы Берроуза и Плесси управляли ими, но с немного большей аппаратной поддержкой. Но до того, как можно было создать хорошее программное обеспечение для использования этой функции, DOS была привязана к 8086, и поэтому эта функция никогда не использовалась эффективно.
А что лучше, ну это уже не важно, так как сегментированной модели не существует ни в какой «реальной» (не экспериментальной) среде. Но когда-то сегментированная модель работала лучше и позволяла ОС быть более надежной. Основным негативным фактором было то, что он накладывал ограничения на компиляторов и, в некоторой степени, на программистов, которые не соответствовали установкам многих программистов «Дикого Запада» тогда и сейчас.
«Страничная» модель
«Страничная» модель предполагает, что адресное пространство разделено на «страницы» определенного размера (хотя в некоторых случаях поддерживается несколько разных размеров страниц). Обычно размер страницы составляет от 256 байт до 64 КБ (всегда степень двойки). Также предполагается, что аппаратное обеспечение содержит некоторую поддержку преобразования адресов, так что «логические» адреса (адреса в «адресном пространстве» программы) могут быть сопоставлены с «физическими» адресами (адресами в ОЗУ).
Страничная модель может быть реализована по двум основным причинам:
- Чтобы позволить нескольким различным потокам/процессам иметь отдельные адресные пространства, каждый из которых начинается с «нуля» (или какого-либо другого стандартного адреса), и не требует от ОС предварительной — выделить все возможное адресное пространство для потока/процесса как один непрерывный фрагмент.
- Включить «виртуальную память», разрешив «выгрузку» отдельных страниц в логическом адресном пространстве на диск с последующей перезагрузкой, если/когда программа попытается сослаться на них.
Существуют также второстепенные функции аппаратного обеспечения преобразования страниц, которые можно использовать, например, установка разрешений на чтение/запись/выполнение, разрешение «совместного использования» некоторых страниц между процессами/потоками и т. д.
«Плоская» модель
Игнорируя Гарвардскую модель, которая, возможно, была самой первой моделью компьютерной памяти, плоская модель хранения фон Неймана была первой моделью, получившей широкое распространение. В основном это — «плоское» адресное пространство неразличимых слов (не байтов до самого конца игры), которое начиналось с нулевого адреса и продолжалось вверх до «верха» доступной памяти. Некоторая часть памяти «внизу» или «вверху» памяти будет зарезервирована для какого-то «загрузчика», а остальная часть будет доступна для одной исполняемой программы. Запускалась одна программа за раз, причем программа могла использовать всю зарезервированную область ОЗУ, кроме этой небольшой.
Постепенно все изменилось, так что небольшая зарезервированная область стала больше и содержала своего рода операционную систему, но по-прежнему только одну программу за раз. С течением времени были изобретены различные уловки, позволяющие, например, некоторым специализированным программам работать в «уголке» памяти, позволяя программам буферизации и т. д. сосуществовать с программами пользователя.
Но стремление к «мультипрограммированию» оказывало давление. Некоторые системы добавили грубое оборудование для отображения адресов, чтобы позволить нескольким программам иметь собственное адресное пространство. Другие системы требовали, чтобы программы были «самоперемещающимися», чтобы они могли работать в любом месте памяти, а не были «связаны» с определенным адресом.
Ранние версии Unix (среди прочих) выполняли задачу многозадачности, «переставляя» программы между собой: программа (загруженная по нулевому адресу) выполнялась до тех пор, пока не «заблокировалась» для выполнения ввода-вывода, затем она «заменялась местами» ( целиком, включая весь код и данные) на диск, а другая программа «заменяется» на нее.
6.1: Плоская модель памяти — Engineering LibreTexts
- Последнее обновление
- Сохранить как PDF
- Идентификатор страницы
- 27127
- Чарльз В. Канн III
- Геттисбергский колледж
При работе с памятью MIPS использует плоскую модель памяти. На самом деле память, существующая в аппаратном обеспечении компьютера, довольно сложна, и память нарезается и распределяется по многим различным областям памяти. Это результат того, как аппаратное обеспечение фактически хранит данные. Фактическая аппаратная реализация памяти использует виртуальную память для хранения программ, объем которых превышает фактический объем памяти на компьютере, и слои кэша, чтобы эта память отображалась быстрее.
Все эти детали реализации памяти скрыты операционной системой (ОС) и не видны программисту. Программисту MIPS память кажется плоской; в нем нет структуры. Память состоит из одного байта (8 бит), хранящегося после другого, и все байты равны. Программист MIPS видит память, в которой байты хранятся как один большой массив, а индекс массива представляет собой адрес байта. Память адресуется каждому байту, поэтому называется байт с адресацией 9. 0073 . Это показано на рис. 2.3, который здесь повторяется для удобства.
Рисунок 6-1: Конфигурация памяти MIPS
Байты в MIPS организованы в группы: 1) одиночный байт; 2) группа из 2 байтов, называемая полусловом; 3) группа из 4 байтов, называемая словом 17 ; и 4) группа из 8 байтов, называемая двойным словом. Эти группировки не случайны в памяти. Все группировки начинаются с адреса 0x00000000 и затем появляются через равные промежутки времени. Таким образом, полуслова памяти будут начинаться с адресов 0x00000002, 0x00000004, 0x00000008, 0x0000000a, 0x0000000c и продолжаться таким же образом. Слова памяти будут начинаться с адресов 0x00000000, 0x00000004, 0x00000008, 0x0000000c, 0x00000010, 0x00000014 и так далее. Двойные слова памяти будут начинаться с адресов 0x00000000, 0x00000008, 0x00000010, 0x00000018 и так далее. Место, где начинаются группы памяти, называется 9.0072 граница . Вы не можете обратиться к группе данных, кроме как на границе для этого типа. Поэтому, если вы хотите загрузить слово памяти, вы не можете указать адрес 0x15fc8232, так как он не находится на границе слова (однако это граница байта и граница полуслова). При обсуждении данных слово памяти имеет размер 4 байта (32 бита), но оно также расположено на границе слова. Если 32 бита не выровнены по границе слова, неправильно обращаться к нему как к слову 18 .
17 Все машины определяют собственный размер слова. Старый компьютер использовал 16-битное слово, а некоторые современные компьютеры используют 64-битное слово. Не позволяйте этому сбить вас с толку. В MIPS все слова имеют длину 32 бита.
18 Для экономии места некоторые языки, такие как C Ada и PLI, позволяют программистам использовать невыровненные структуры данных, где некоторые данные могут не попадать в правильные границы. Невыровненные структуры использовались, когда свободное место в компьютерах было ценным, но эти структуры медленно обрабатываются. Большинство современных языков не позволяют использовать невыровненные данные, но при работе с устаревшими системами программистам, возможно, придется с этим столкнуться.
Эта страница под названием 6.1: Модель плоской памяти распространяется под лицензией CC BY 4.0 и была создана, изменена и/или курирована Чарльзом В. Канном III.
- Наверх
- Была ли эта статья полезной?
- Тип изделия
- Раздел или страница
- Автор
- Чарльз В. Канн III
- Лицензия
- СС BY
- Версия лицензии
- 4,0
- Показать оглавление
- нет
- Теги