- •1. Библиотеки. Статическая библиотека. Создание.
- •2. Библиотеки. Статическая библиотека. Использование.
- •3. Библиотека. Динамическая библиотека. Создание.
- •4. Библиотека. Динамическая библиотека. Статическая загрузка.
- •5. Библиотека. Динамическая библиотека. Динамическая загрузка.
- •7. Библиотеки. Динамическая библиотека. Сравнение способов загрузки.
- •8.Использование файлов при создании программы.
- •9. Позиционирование при работе с файлами. Функция.
- •10. Отображение файла на памяти. Назвать назначения параметров в функции.
- •11. Управление памятью. Для чего используется.
- •12.Блокирование памяти. В каком случае используется. Функции для блокирования.
- •13.Управление памятью. Для чего используют функции:
- •14. Для чего создаются процессы. Функции.
- •15. Назначение функций:
- •16. Асинхронный ввод/вывод:
- •17. Для чего используются потоки. Функции
- •18. Приоритеты процессов и потоков. Функции:
- •19. Синхронизация потоков. Interlocked функции. Назначение функций:
- •20. Синхронизация потоков. Критические секции. Функции.
- •21. Использование Event для синхронизации. Функции:
- •22. Использование Semaphore для синхронизации. Функции:
- •23. Использование WaitableTimerдля синхронизации. Функции:
- •24) Управление процессом. Планирование и диспетчеризация.
- •25) Использование Mutex для синхронизации. Функции.
- •26) Сравнение сегментной и страничной адресации
- •27) Страничная организация памяти.
- •29) Локальная память компьютеров. Функции
- •30. Соглашения по вызову, объяснить следующие с, срр, fastcall, stdcall. Дайте рекомендации по использованию соглашения.
26) Сравнение сегментной и страничной адресации
Изначально виртуальная память появилась в виде сегментной организации памяти. Каждый адрес на аппаратном уровне за давался двумя компонентами: адрес начала сегмента и смещение внутри этого сегмента. При изменении адреса загрузки изменяется адрес сегментов. Начальные адреса сегментов хранились в специальных регистрах, содержимое которых устанавливалось при загрузке программы. При переключении процессов достаточно было загрузить в эти регистры новые значения, и каждый процесс оказывался в своем собственном адресном пространстве. Процессы обращались к памяти по одним и тем же адресам, но теперь эти адреса отсчитывались от базовых адресов (базовый адрес — адрес начала сегмента) сегментов, которые были разными у разных процессов. В результате эти обращения отображались на различные части физической памяти.
Основным недостатком сегментной адресации является то, что сегменты имеют разные размеры. При выгрузке/загрузке сег ментов память фрагментируется, т.е. свободные и занятые участ ки памяти чередуются. Возникают ситуации, когда общий размер свободной памяти позволяет загрузить очередной сегмент, но нет сплошного участка памяти требуемого размера — в этом случае сегмент не загружается. Кроме того, загрузка/выгрузка целиком всего сегмента требует много времени. Поэтому большинство со временных процессоров не поддерживает сегментацию (одно из исключений — процессоры архитектуры IA-32, которые «тянут» сегментацию еще со времен 8086).
Страничная адресация
Суть страничной адресации в том, что все адресное пространство, предоставляемое процессором (на 32-битных процессорах это, как правило, 4 гигабайта — 232), разбивается на отрезки равной длины (называемые страницами). Таблица страниц устанавливает соответствие между виртуальным и реальным адресами страницы. Номер строки таблицы определяет виртуальный адрес, а содержимое строки — соответствующий физический адрес. Достаточно поменять содержимое заданной строки, и виртуальному адресу будет соответствовать другой физический адрес. Именно страницы являются единицей выделения — освобождения памяти. Этот механизм также применяется для использования общих данных и программ разными процессами. Так, в случае использования DLL они хранятся в памяти в одном экземпляре, но в разных процессах им соответствуют разные логические адреса (разные таблицы страниц). Особенности использования страничной адресации в современных процессорах рассмотрены ниже.
Как и сегментация, страничная организация памяти связана с преобразованием виртуального адреса (в данном случае линейного) в физический. В страничном преобразовании базовым объектом памяти является блок фиксированного размера, называемый страницей (page). Размер страницы - 4 Кбайт.
Отличия:
Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.
Эта форма организации виртуальной памяти во многом похожа на сегментную. Основные различия заключаются в том, что все страницы, в отличие от сегментов, имеют одинаковые размеры, а разбиение виртуального адресного пространства процесса на страницы выполняется системой автоматически. Типичный размер страницы – несколько килобайт. Для процессоров Pentium, например, страница равна 4 Кб.
В отличие от случая сегментной организации, вместо сложения базового адреса со смещением в данном случае можно просто собрать вместе номер физической страницы и смещение.
Огромным достоинством страничной виртуальной памяти по сравнению с сегментной является отсутствие «ближних» и «дальних» указателей.
Наличие таких концепций в программировании уменьшает применимость арифметики указателей, и приводит к огромным проблемам с переносимостью кода с/на такие архитектуры.