Архитектура современных операционных систем
83 Между областями могут существовать свободные участки, любое обращение процесса по адресу свободного участка приводит к прерыванию процесса. Размер страницы – 4 Kб (Intel), 8 Kб (RISC). Любая область памяти описывается в ядре с помощью специальной структуры VM_area_struct. Все эти структуры для одного процесса связаны в список, отсортированный по виртуальным адресам, поэтому легко найти нуж- ную страницу. Когда список становится большим (>32 элементов), он преобразуется в дерево для увеличения скорости поиска. Каждая структура VM_area_struct содержит следующие свойства области: 1) режим доступа; 2) признак фиксации области в памяти (то есть, разрешено ли выгружать область из памяти); 3) направление роста адресов; 4) личная или разделяемая области памяти; 5) место области в файле выгрузки при ее выгрузке из памяти. После системного вызова fork Linux создает копию родительского про- цесса, но ссылки на таблицы страниц у дочернего и родительского процесса остаются одни и те же. При этом области дочернего процесса помечаются как доступные для чтения/записи, а страница – только для чтения. Когда любой дочерний процесс попытается осуществить запись в такую страницу, произойдет прерывание и ядро определит, что область доступна для чтения/записи, а страница – для чтения. В этом случае ядро создает новую ко- пию такой страницы и дает на нее доступ чтения/записи. Таким образом, в Linux реализуется режим доступа – копирование при записи. В Linux используется трехуровневая страничная организация памяти. Виртуальный адрес состоит из 4-х частей (рис. 3.1.):
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy