rapture
06.09.2011 17:01 unknown
Вот, скажем, есть xen. У него есть гипервизор и гостевые системы. Теоретически, наверное, можно запустить в гостевой системе xen еще один гипервизор xen, в гостевой системе которого запустить еще один гипервизор.
А теперь, следя за ассемблерными руками и процессорными конвеерами, представьте, что гостем вот этого вот третьего xen'a на самом деле является этот первый xen, в котором все крутится.
calcru: Runtime went backward :)
забыл тег "бред"
почему?
потому что это всё строится иерархически, и цикл сделать нельзя. Кроме того, я вообще не уверен что гипервизор запустится внутри, это ж паравиртуализация.
Блеать, процессы и потоки внутри ОС — принципиально почти та же самая хуетень, не находишь? 10 способов разделить адресное пространство памяти между 11 едоками. И вообще, мы тут про теоретическую часть говорим, никто тебя код не заставляет писать.
Почему нельзя сделать цикл-то? Или ты еще не видел программу, которая переписывает сама себя? :)
Нельзя потому что отношение "запущено внутри" не может изменяться во время работы. И даже если у тебя будет запущено таким макаром три гипервизора, то при запросе какого-то ресурса этот запрос будет летать по кругу, что приведёт к самому банальному зависанию машины.
Может, потому что все это — лишь абстракция для (условно) прямого потокового выполнения кода в конвееере. Условно говоря, вот этот циклический бублик — на конвеере все равно как раскатан асфальтоукладчиком, он все равно не бублик. Это сейчас программные системы построены так, что ты начнешь гонять по кругу. А что если все три этих гипервизора (ну или два) выделят запрашиваемый ресурс, а? Не переадресуют запрос, а тупо выделят. А изнутри кольца это будет выглядить как будто подподчистема А попросила выелить подсистему Б котора япопросила систему А, которая попросила надсистему... бац, ресурсы выделены. Какая-то ленивость наоборот получается.
они не могут все 3 выделить ресурс, потому что всеми ресурсами управляет гипервизор работающий непосредственно на железе, остальные только запрашивают его у вышестоящих.
Вот ты на это смотришь изнутри, с позиции гипервизора, а я — с позиции процессора. Каждый же гипервизор будет думать, что он выделяет ресурсы у реального железа, поскольку на нем запущен. Так же думает и ОС, запущенная в виртуалке. Что ресурс выделяет она. А на самом деле...
а на самом деле получится КРОВЬКИШКИГОВНОКОНФЛИКТРАСПИДОРАСИЛО
Да нихуя. Раньше я думал, что если объявить [1...] получится out of memory, но не тут-то было.
Я вот когда что-то по ассемблеру читаю или код гляжу, меня всегда через пару часов накрывает такое дао. Когда ты, блеать, в голове видишь эти сиране потоки и выделения, видишь что эти перемолотые mov mov mov mov и это на самом деле for (i;i<5;i++).
Ну и так далее. Наверное, надо уже траву принимать и записывать.
ну ок, придумай способ распределения ресурсов который не требовал бы единой контроллирующей сущности.
Зачем? Она есть — контроллер прерываний процессора :) Смысл в неиерархичной передаче потока выполнения там, где он должен быть иерархичным... То есть, например, цепочка А → Б → В → выделение. Затем мы в цепочке замыкаем А на В и все будет бегать по кругу, и выделение никогда не произойдет. получится что-то такое:
выделение
|
Б
А В
А я предлагаю сделать из этого что-то типа молекулы бензола, где C — это твои А, Б, В, Г, Д, Е, Ё, а H — то выделенния ресурсов.