1. Куча / Говнокод #28022

    −1

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

    Запостил: kcalbCube, 16 Февраля 2022

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

    • Language → assembly
      и течёшь
      Ответить
    • > memset

      Аппаратный strncpy тоже будет?
      Ответить
      • Хочу аппаратный malloc
        Ответить
        • Чтобы память не покупать?
          Ответить
          • И mmap аппаратный

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

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

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

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

                  Тегированную память или какой-нибудь HMAC придётся юзать?

                  signed_range<int> m
                  Ответить
              • Блин, а что делать с use after free... Аппаратный gc?
                Ответить
                • Можно сделать аппаратный 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 вот к сожалению без лишних битов.
                        Ответить
                  • если бы у меня вмка была с защищенным режимом то имплементировал бы
                    Ответить
                    • Женщины в России самые красивые - доказано всеми мужчинами-иностранцами
                      Ответить

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