Основы программирования в Win32API. Марапулец Ю.В. - 41 стр.

UptoLike

Составители: 

Результирующий 32-разрядный физический адрес получается в результате
комбинирования основы физического адреса страницы и 12-разрядного сме-
щения виртуального адреса:
ffff–ffff–ffff–ffff–ffff–oooo–oooo–oooo.
Это и есть результирующий физический адрес. Преимущества разделения
памяти на страницы огромны. Во-первых, приложения изолированы друг от
друга. Никакой процесс не может случайно или преднамеренно использовать
адресное пространство другого процесса, так как он не имеет возможности его
адресовать без указания соответствующего значения регистра CR3 этого про-
цесса, которое устанавливается только внутри ядра Windows.
Во-вторых, такой механизм разделения на страницы решает одну из основ-
ных проблем в многозадачной средеобъединение свободной памяти. При более
простых схемах адресации память может стать фрагментированной, в то время как
множество программ выполняются и завершаются. В случае, если память сильно
фрагментирована, программы не могут выполняться из-за недостатка непрерыв-
ной памяти, даже если общего количества свободной памяти вполне достаточно.
При использовании разделения на страницы нет необходимости объединять сво-
бодную физическую память, поскольку страницы необязательно должны быть
расположены последовательно. Все управление памятью производится посредст-
вом манипуляций с таблицами страниц. Потери связаны только собственно с са-
мими таблицами страниц и с их размером, равным 4 Кб.
В-третьих, в 32-битных дескрипторах страниц существует еще 12 бит,
кроме тех, которые используются для адреса страницы. Один из этих битов
показывает возможность доступа к конкретной странице (он называется битом
доступа – «accessed bit»); другой показывает, была ли произведена запись в эту
страницу (он называется битом мусора – «dirty bit»). Windows может исполь-
зовать эти биты для того, чтобы определить, можно ли сохранить эту страницу
в файле подкачки для освобождения памяти. Еще один битбит присутствия
(present bit) – показывает, была ли страница сброшена на диск и должна ли
быть подкачана обратно в память.
Другой битчтения/записи») показывает, разрешена ли запись в данную
страницу памяти. Этот бит обеспечивает защиту кода от «блуждающих» указате-
лей. Например, если включить следующий оператор в программу для Windows:
*(int*) WinMain = 0 ;
то на экран будет выведено следующее окно сообщения:
«This program has performed an illegal operation and will be shutdown».
Эта программа выполнила недопустимую операцию и будет завершена».)
Этот бит не препятствует компилированной и загруженной в память про-
грамме быть запущенной на выполнение.
Приведем несколько замечаний по поводу управления памятью
в Windows 9x:
41
    Результирующий 32-разрядный физический адрес получается в результате
комбинирования основы физического адреса страницы и 12-разрядного сме-
щения виртуального адреса:

    ffff–ffff–ffff–ffff–ffff–oooo–oooo–oooo.

     Это и есть результирующий физический адрес. Преимущества разделения
памяти на страницы огромны. Во-первых, приложения изолированы друг от
друга. Никакой процесс не может случайно или преднамеренно использовать
адресное пространство другого процесса, так как он не имеет возможности его
адресовать без указания соответствующего значения регистра CR3 этого про-
цесса, которое устанавливается только внутри ядра Windows.
     Во-вторых, такой механизм разделения на страницы решает одну из основ-
ных проблем в многозадачной среде – объединение свободной памяти. При более
простых схемах адресации память может стать фрагментированной, в то время как
множество программ выполняются и завершаются. В случае, если память сильно
фрагментирована, программы не могут выполняться из-за недостатка непрерыв-
ной памяти, даже если общего количества свободной памяти вполне достаточно.
При использовании разделения на страницы нет необходимости объединять сво-
бодную физическую память, поскольку страницы необязательно должны быть
расположены последовательно. Все управление памятью производится посредст-
вом манипуляций с таблицами страниц. Потери связаны только собственно с са-
мими таблицами страниц и с их размером, равным 4 Кб.
     В-третьих, в 32-битных дескрипторах страниц существует еще 12 бит,
кроме тех, которые используются для адреса страницы. Один из этих битов
показывает возможность доступа к конкретной странице (он называется битом
доступа – «accessed bit»); другой показывает, была ли произведена запись в эту
страницу (он называется битом мусора – «dirty bit»). Windows может исполь-
зовать эти биты для того, чтобы определить, можно ли сохранить эту страницу
в файле подкачки для освобождения памяти. Еще один бит – бит присутствия
(present bit) – показывает, была ли страница сброшена на диск и должна ли
быть подкачана обратно в память.
     Другой бит («чтения/записи») показывает, разрешена ли запись в данную
страницу памяти. Этот бит обеспечивает защиту кода от «блуждающих» указате-
лей. Например, если включить следующий оператор в программу для Windows:

                                 *(int*) WinMain = 0 ;
то на экран будет выведено следующее окно сообщения:
     «This program has performed an illegal operation and will be shutdown».
(«Эта программа выполнила недопустимую операцию и будет завершена».)
     Этот бит не препятствует компилированной и загруженной в память про-
грамме быть запущенной на выполнение.
     Приведем несколько замечаний по поводу управления памятью
в Windows 9x:

                                         41