Вот, например, одна из непоняток - виртуальная память.

May 20, 2018 15:57

Как пишут в разных источниках, традиционный размер страницы виртуальной памяти - 4 килобайта (относительно недавно появились и внедряются технологии мегастраниц, но к делу это щас не относится). Т.е. адресация ВНУТРИ страницы - 12битовая, от 0 до 4095 байта. Ок ( Read more... )

Leave a comment

Comments 20

ext_122116 May 20 2018, 13:50:09 UTC
Во-первых - вообще говоря, 16-битный пид вовсе не означает, что в системе может быть 65535 процессов ( ... )

Reply

kincajou May 20 2018, 16:33:19 UTC
т.е. трансляция получается двухэтажной как минимум? и на обоих этапах нужен CAM, иначе перебор-поиск займт слишком много времени

Reply

ext_122116 May 20 2018, 17:08:35 UTC
Во время "нормальной" работы пользовательского процесса и при обработке прерывания "страница отсутсвует в TLB" - все "одноэтажное". 32-битный адрес делится на 2 части - старшие 20 бит и младшие 12 (это если упрощать - в MIPSовском TLB все чуточку сложнее), "ключу" вида (старшие 20 бит адреса; ASID) соответствует запись в TLB, из нее определяются старшие 20 бит адреса в физической памяти (да, тут как раз можно применить что-то типа content-adressable memory) и затем к ним прицепляются младщие 12 бит.

Вот переключение процессов в такой схеме может потребовать просмотра TLB и выкидывания оттуда записей для процессов, ASID которых совпадает с ASID "нового" процесса - это немного усложняет диспетчер памяти в ОС. В какой-нибудь микроядерной ОС, где время переключения процессов должно быть очень маленьким, возможно, стоит даже сделать так, чтобы некоторые процессы имели уникальный ASID, и переключение на них никогда не приводило бы к пересмотру всего TLB.

Reply

kincajou May 20 2018, 17:21:32 UTC
судя по тому, что я прочитал, ASID это не VPN (Virtual Page Number), это какая-то другая сущность. Она используется ВМЕСТЕ с VPN.

ASID получается каким-то однозначным образом связанным с номером процесса, иначе будет невозможно выяснить, какому из процессов принадлежат уже имеющиеся в TLB записи с запрашиваемым ASID, и придётся в случае их обнаружения очищать весь TLB... но тогда какой в нём смысл ;)

Reply


ex0_planet May 20 2018, 18:16:45 UTC
"блок трансляции, где разными методами (но чаще всего - при помощи кэша по принципу ассоциативной памяти" - это называется TLB, translation lookaside buffer ( ... )

Reply

kincajou May 20 2018, 18:29:57 UTC
это называется TLB, translation lookaside buffer
я в курсе. Я про то, что внутри таинственного квадратика под названием "TLB"

Reply

ex0_planet May 20 2018, 19:40:10 UTC
CAM это метод, принцип. А TLB - конкретный функциональный блок. Ты там дальше пишешь про второе, указывая на него как на первое. Неаккуратненько :)

Reply

kincajou May 20 2018, 21:21:04 UTC
я не так написал
я написал про блок трансляции, который устроен так-то сяк-то

Reply


pogorily May 21 2018, 13:13:31 UTC
Берем даташит от I386DX, там довольно внятно описано ( ... )

Reply

kincajou May 25 2018, 04:14:36 UTC
читаю RISC-V Privileged spec 1.7, в главе 4.5.1 описано нечто очень похожее. Я пока по диагонали пробежал, поэтому не уверен, что сходство не только внешнее

Reply


Leave a comment

Up