Локальные таблицы дескрипторов Linux

Большинство приложений пользовательского режима Linux не обращается к локальной таблице дескрипторов, и поэтому ядро определяет таблицу LDT по умолчанию, чтобы процессы могли ее использовать совместно. Эта таблица хранится в массиве defauit idt. Она содержит пять записей, но только две из них фактически используются ядром: шлюз вызова для исполняемых файлов iBCS, и шлюз вызова для исполняемых файлов Solaris/х86. Шлюзы вызовов — это механизм, предоставляемый микропроцессорами 80×86 для изменения уровня привилегий процессора при вызове предварительно определенной функции. Впрочем, в некоторых случаях процессу требуется собственная локальная таблица дескрипторов. Оказывается, что это полезно для приложений (таких как Wine), которые выполняют программы для Microsoft Windows, ориентированные на сегментацию. Системный вызов modify idt о позволяет процессу установить собственную таблицу LDT.
Под любую «личную» таблицу LDT, созданную системным вызовом modify idt о, требуется отдельный сегмент. Когда процессор начинает выполнять процесс, имеющий собственную локальную таблицу дескрипторов, запись об этой таблице в копии глобальной таблицы дескрипторов, принадлежащей этому процессу, изменяется соответствующим образом.
Если заблокирован Windows и на рабочем столе появится баннер, требующий отправки СМС – не делайте этого. Это вирус. Как с ним справится помогут рекомендации на web-ресурсе http://www.remont-komputerov-notebook.ru/.
Приложения пользовательского режима также могут выделять новые сегменты с помощью системного вызова modify_idt (), но ядро никогда не пользуется этими сегментами и не обязано отслеживать соответствующие дескрипторы сегментов, потому что они включены в локальную таблицу дескрипторов процесса.
Управление страницами на аппаратном уровне
Блок управления страницами преобразует линейные адреса в физические. Одной из главных задач этого устройства является сопоставление типа запроса к памяти с правами доступа, связанными с линейным адресом. В случае недопустимого обращения к памяти, блок управления страницами генерирует исключение «ошибка обращения к странице».
Из соображений эффективности линейные адреса группируются в интервалы фиксированной длины, называемые страницами. Смежные линейные адреса в пределах одной страницы отображаются в смежные физические адреса. Таким образом, ядро может задать физический адрес страницы и права доступа к ней вместо того, чтобы задавать физические адреса и права доступа ко всем линейным адресам, входящим в эту страницу. Следуя общепринятой практике, мы будем термином «страница» обозначать как множество линейных адресов, так и данные, содержащиеся по этим адресам.
Блок управления страницами считает, что вся оперативная память разбита на страничные кадры фиксированной длины (иногда называемые физическими страницами). Каждый страничный кадр содержит одну страницу, т. е. его длина равна длине страницы. Страничный кадр является составной частью оперативной памяти и, следовательно, областью для хранения данных. Необходимо проводить четкое различие между страницей и страничным кадром. Страница —это всего лишь блок данных, который может храниться в любом страничном кадре или на диске.
Структуры данных, отображающие линейные адреса в физические, называются таблицами страниц. Они хранятся в основной памяти и должным образом проинициализированы ядром до включения блока управления страницами.
Начиная с модели 80386, все процессоры 80×86 поддерживают разбивку на страницы. Она включается путем установки флага pg в управляющем регистре его. Если pg = о, линейные адреса интерпретируются как физические.