Что не осилю никак. А зачем разрядность физического адреса больше разрядности виртуального? Получается какая-то сегментная адресация имени 8086/8088
Что не осилю никак. А зачем разрядность физического адреса больше разрядности виртуального? Получается какая-то сегментная адресация имени 8086/8088
MMU знает только то, что есть у него в регистрах. Чтобы обращение к странице вызвало прерывание до обращения MMU к физической памяти - содержимое PDR должно быть несовместимо с происходящим ( вроде попытки записи в запрещённую для записи страницу ). Поэтому без некого признака "отсутствующей страницы" в PDR никак не обойтись. Благо - такой признак есть в виде значения NonResident в ACF PDR.
Чего там осиливать - в PDP-11 было так же
Там было на уровне процесса, а в PDP-11 на уровне операционки - процесс это как бы не видит (ценой 64 кб)
Та же идея в PDP-2032 - процессу доступно (до) 4 Гб, операционка видит (до) 4Тб
- - - Добавлено - - -
А MMU фиолетово - почему страницы нет в памяти (не-отображали или в-файле-подкачки-поэтому-не-отобразили) - нет и всё. Это интересно операционке - когда будет разбираться - программер сфолтнул или надо бы подгрузить. Так то если не использовать многовекторность - получится бит, который MMU вообще никак не будет трогать
Так и планировалось.
Кстати, одним из главных реальных преимуществ 64-разрядной архитектуры Intel считается появление дополнительных 8 регистров общего назначения, позволивших отказаться от старых соглашений передачи параметров при вызове подпрограмм и ввести новое, где все параметры как бы передаются через стек, но первыми словами стека считаются специально выделенные регистры общего назначения. Это позволяет вообще отказаться от кода пролога и эпилога у некоторых небольших подпрограмм стандартной библиотеки и существенно упростить доступ к параметрам вызова у большинства подпрограмм.
Когда операционка высвапливает страницу - страница из памяти не пропадает, но получает в PDR признак "не в памяти", хотя в физической памяти она по своему адресу есть. Если процесс обратится по этому адресу - операционка получит прерывание и если страница ещё не обнулена "системным обнулителем" - операционка просто заменит признак в PDR и процесс получит доступ к странице без её чтения операционкой из свопа.
вне темы, прошу прощенья читать как и отвечать не обязательно (!!!)
Просто вспомнил первое впечатление когда после бейсика столкнулся (увидел) впервые листинг
программы на МАКРО-11 и у программиста который на тот момент пытался мне что то там базовое втолковать узнал про всю эту "регистровую математику, стэк, смещения и проч." - я подумал, почему
и кто решил, кто придумал что бы так сложно всё было??? теперь я примерно знаю не конкретных
людей конечно, но образ мышления тех для кого это "родной терновый куст"
Я вот честно всё понял тут ! Гениально ! системщики ) вот почему они не тратят времяКогда операционка высвапливает страницу - страница из памяти не пропадает, но получает в PDR признак "не в памяти", хотя в физической памяти она по своему адресу есть. Если процесс обратится по этому адресу - операционка получит прерывание и если страница ещё не обнулена "системным обнулителем" - операционка просто заменит признак в PDR и процесс получит доступ к странице без её чтения операционкой из свопа.
на заглавные буковки и скучно им с простыми смертными )))
[свернуть]
И каким боком при этом MMU?
Вопрос - а на хрена был поставлен признак - страница не в памяти? Может потому что её уже выгрузили или ещё не загрузили? Потому как ставить это признак для чего то ещё - зачем??
- - - Добавлено - - -
Потому что есть в любое время предел возможностей железа - это раз и потому что - наши отца так делали - значит и нам так делать - это два (хотя уже никто нихрена не помнить - какого хрена они так делали (а потому что раньше по другому не получилось бы - но не сейчас). Делать без понимания - почему - это наше всё.
Если MMU не может дать прерывание - страница загружена не будет. Но чтобы MMU дал прерывание - он должен "что-то заподозрить" ( вроде записи в страницу, запрещённую для записи ), но без признака "страница не в памяти" - MMU никак не может узнать, что страница не в памяти, потому что на самом деле страница всегда в памяти, но не всегда принадлежит тому процессу, который к ней обращается. В том и суть свопа, что одна и та же страница принадлежит куче процессов, но только у одного процесса-владельца для этой страницы сброшен в MMU флаг "страница не в памяти".
Операционка никак не может узнать, какими страницами процесс реально пользуется, а какими нет - все обращения идут напрямую от процесса через MMU в страницу. Поэтому для обнаружения страниц, к которым давно нет обращения - коварная операционка время от времени помечает все страницы, как "не в памяти" и если пометка продержалась до следующего захода - счётчик "забытости" страницы инкрементируется, чтобы когда память закончится - первой отправилась в своп самая забытая страница.
- - - Добавлено - - -
Чтобы не устраивать такие извращения - можно выделить самый младший бит PDR ( помеченный, как Not Used ) в качестве флага Not Used, который никогда не устанавливается MMU (но может быть установлен программно) и сбрасывается MMU при любом обращении к странице.
Последний раз редактировалось Patron; 04.09.2017 в 02:41.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)