Куча говна / Говнокод #28022 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
знает кто как шестнадцатеричные числа в np++ подсвечивать?
а то у меня даже вот такое
                                 v
memset [@T1] 3A98h 0h
не подсвечивает.
пробовал в дополнительные символы чисел добавлять, не хочет.

Запостил: kcalbCube kcalbCube, (Updated )

Комментарии (33) RSS

        • Поддержка выделения виртуальной памяти на уровне процессора.
          Правда не придумал семантики ещё, и как это будет взаимодействовать с ОС.
          Ответить
          • Аппаратный buddy allocator за 1 такт вполне реально запилить, имхо.
            Ответить
          • А для ОС по идее хватит инструкций freeall <pid> и setpid <pid>.
            Ответить
          • При переключении процесса ОС выполняет привилегированную инструкцию setpid чтобы сказать процу какой процесс сейчас активен.

            Процесс юзает инструкции malloc и free. При этом проц помечает занятые блоки pid'ом процесса. Тут можно даже аппаратно проверить, что процесс лезет только к своим блокам.

            Когда ось хочет убить процесс она вызывает инструкцию freall.

            Сама ОС выделяет память для себя под pid 0.
            Ответить
            • Можно ещё добавить специальные range регистры, которые будут юзаться вместо указателей. И инструкции, которые позволяют сужать рейнж (но не увеличивать). Тогда и проблема с переполнением буфера решится раз и навсегда.
              Ответить
              • Можно сделать аппаратный RC...

                Каждый диапазонный регистр помимо адреса и размера может содержать адрес счётчика. Если адреса нету или счётчик равен 1 -- мы владеем куском памяти эксклюзивно.

                Инструкцией split <rd1>, <rd2>, <rs>, <offset> можно разбить диапазон на джва. Если rd1 или rd2 не пусты или offset слишком большой -- исключение.

                Инструкцией join <rd>, <rs1>, <rs2> можно склеить диапазон обратно (при этом нельзя клеить диапазоны, управляемые разными счётчиками, будет исключение).

                Инструкцией share <rd>, <rs>, <rc> мы можем получить в rd расшаренную копию rs, управляемую счётчиком в диапазоне rc. При этом мы теряем владение над диапазоном rc, оно уходит процу.

                Инструкцией drop <r> мы можем уменьшить счётчик на 1 и очистить регистр (проебать последнюю копию нельзя, будет исключение).

                Инструкцией own <rc>, <rs> мы можем перевести диапазон rs обратно в эксклюзивный режим (счётчик должен быть 1). Заодно мы получим rc обратно.

                Инструкцией my <rs> можно проверить владеем ли мы диапазоном (выставит флажок).

                При старте проца в одном из регистров лежит эксклюзивный диапазон на всю оперативку, а остальные пусты.
                Ответить
                • Блин, тут косяк -- если расшарить диапазон, а потом его разбить, то можно будет освободить один из кусков (т.к. счётчик не 0) и навсегда проебать его.

                  Видимо для own надо потребовать чтобы вернули диапазон именно к такому виду, в каком он был на момент share.

                  Блин, надо эту хуйню формально доказывать, всяко какие-то косяки есть.
                  Ответить
                  • Охуенно!

                    Ещё аппаратную поддержку связных списков и динамической типизации. Получится лисп-машинка)))
                    Ответить
                    • > динамической типизации

                      А её по-любому делать, иначе насрут в диапазон как в байты и порушат все инварианты.
                      Ответить
                    • Кстати на циклоняшке 9-битная память, в принципе можно и тегов с типами навешать.

                      З.Ы. Внешняя DRAM вот к сожалению без лишних битов.
                      Ответить
                • если бы у меня вмка была с защищенным режимом то имплементировал бы
                  Ответить
                  • Женщины в России самые красивые - доказано всеми мужчинами-иностранцами
                    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8