hirthwork 22.01.2013 03:49 mcabber

Что происходит когда я обращаюсь к массиву в Java? JVM проверяет, что я не вышел за пределы массива, а затем ОС проверяет, что я не вышел за пределы отведённой мне памяти, что уже излишне. выходит, что программы на Java на системах типа JNode будут работать быстрее, ибо там проверка будет происходить лишь однажды. в общем, надо срочно прочитать Таненбаума и написать свой Jnode с драйверами и гарбаж коллектором

1. kb 22.01.2013 04:33

Вот если бы еще была гарантия, что Java не выйдет за пределы памяти — цены бы не было.

2. hirthworkkb /1 22.01.2013 04:55 mcabber

ну так, если JVM является осью, то она никогда не выйдет. вся память уже принадлежит ей

3. hirthworkkb /1 22.01.2013 04:55 mcabber

алсо, ты когда-нибудь слышал, чтобы JVM прибивалась осью за то что вышла за пределы памяти? вот и я не слышал

4. kbhirthwork /3 22.01.2013 05:01 04a3831c

ну уязвимости в ней находят периодически (хотя какие именно я вообще без понятия). то есть, разве что действительно если бы кроме JVM в ОС ничего не было — тогда да, проверка была бы лишней.

5. Cthulhu 22.01.2013 06:02 Miranda

ос не проверяет этого, тащемта

6. hirthworkCthulhu /5 22.01.2013 06:08 mcabber

ой, да ладно. а как это ОС догадывается моё приложение с SIGSEGV прихлопнуть? наверное потому что видит, что я не на свою страницу памяти залез

7. kbCthulhu /5 22.01.2013 06:08 04a3831c

ээ, что-что?

8. Cthulhuhirthwork /6 22.01.2013 06:12 Miranda

Наверное потому что процессор выкинул #pf при обращении по виртуальному адресу, который не смаплен ни на одну физическую страницу в твоем адресном пространстве? Ну или #gp при обращении к странице, если твоего уровня привилегий недостаточно для этого. Все эти проверки занимают не больше времени, чем, собственно, вычисление физического адреса из виртуального.

9. kbCthulhu /8 22.01.2013 06:15 04a3831c

что-то я не очень понимаю, разве маппингом и поиском соответствия в маппинге виртуальной памяти на физическую не ОС занимается? при чем здесь процессор?

10. Cthulhukb /9 22.01.2013 06:17 Miranda

os строит таблицы. Процессор вычисляет адреса по ним.

Или ты думаешь что есть какое-то волшебное прерывание, которое вызывается пи *любом* обращении к памяти, и позволяет ос что-то там считать?

11. kbCthulhu /10 22.01.2013 06:33 04a3831c

я думал, что процессор вычисляет адреса и отдаёт вычисленные адреса обратно ОС, а ОС уже обращается к памяти по вычисленному адресу.

или обращение к памяти как раз через процессор и делается?

12. Cthulhukb /11 22.01.2013 06:43 Miranda

И как же ос должна обращаться к памяти в таком случае, минуя процессор?

13. kbCthulhu /12 22.01.2013 06:44 04a3831c

ну, даже если не минуя, я был уверен, что ос вычисляет физический адрес, а затем по нему обращается, и получает ошибку лишь в случае отсутствия такого физического адреса. а вот работу по проверке принадлежности виртуального адреса его диапазону и прочего перевода по таблицам из виртуального в физический адрес делает ОС (используя процессор в качестве калькулятора и не более).

14. Cthulhukb /13 22.01.2013 06:46 Miranda

1) Представь на секунду быстродействие этого бреда и ужаснись.
2) Кто в таком случае вычислял бы адреса, к которым обращается ос из обработчика, который должен вычислять адреса?
3. :(

15. sanovach 22.01.2013 13:23

Вообще у микрософта есть такая экспериментальная ось, на этих самых принципах, только там дот нет. От нее в свое время было много шума.

Do you really want to delete ?