Обновить
53
0
Аксененко Роман@sickfar

Разработчик.

Отправить сообщение
Миллион целых — потому что у меня в цикле действительно миллион, и это размер листа, никакого отношения к байтам. А по поводу мебибайта/мегабайта вы правы, смешиваю. Привычку писать в сокращении выработал, а в тексте пока нет.
Спасибо за перевод! Филипп как обычно великолепен. Теперь иерархические таблицы выглядят не так страшно, надо бы забрать в проект.
Вам сюда. Я использую двоичные приставки, идеологически.

Да, все через GRUB. Начальная загрузка пока для меня выглядит сложной, так как я ещё не разобрался на приличном уровне с носителями и файловыми системами, чтобы корректно прочитать и загрузить образ. Думаю, что когда доберусь до реализации работы с HDD, можно будет и в сторону своего загрузчика посмотреть

Похоже, я пропустил. Писал код когда еще не были стабильны. Надо освежить голову и пересмотреть код. Спасибо.
В текущем состоянии моего кода материала на 4-5 статей должно хватить, так что будут еще :) Пока перерыв от разработки и переваривание информации.
Интересно, а транслятор сможет это оптимизировать

Думаю, что не сможет — я же не встраиваю ассемблер в rs-файлы и не пишу интринсики. Более того, у меня опасные ассемблерные методы обернуты в безопасные методы Rust, поэтому там на два вызова больше. А линкер скорее всего такой оптимизацией не занимается. Хотя как знать.

Или в локальной LDT.
Если мы собираемся использовать не плоские глобальные сегменты, а выдавать каждой задаче свои, то места в GDT всем не хватит. Разместив дескрипторы в LDT (скажем, код-данные-стек-служебное что-то), мы займем в GDT только одну ячейку и 4 — в LDT данной задачи.

Где-то я встречал утверждение, что современные компиляторы не могут в сегментную модель, только в плоскую. Я не берусь утверждать, что оно верное, но около 100% программ собираются под плоскую модель. Так что да, можно. Но я не увидел смысла. И даже можно было бы запускать плоские программы в сегментированной памяти — как вы описываете, выделяя по одному сегменту каждой задаче, но опять же — зачем, если никто так не делает, и пишут, что это устаревшая система.
Благодарю, поправил. Я использую структуру для символа, их как раз у меня 80*25, поэтому отложилось так :)
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ColorCode(u8);

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(C)]
struct ScreenChar {
    ascii_character: u8,
    color_code: ColorCode,
}
Вот этот кусок понять не смог.
Линкер собирает программу с опорой на BaseAddress, который в общем случае, может быть любым. Нам ведь никто не запрещает разместить ядро по адресу, скажем, 1000h (нулевая страница — guard), а все прикладные программы компоновать с адресом загрузки 80000000h.

Проблема будет лишь в том случае, если вы хотите запустить программу, написанную и собранную под другую ОС без перекомпоновки (что возможно только если ваш API полностью бинарно совместим, а это вряд ли).

Совершенно верно. Однако, это специфические случаи, требующие скармливания дополнительных инструкций линкеру. В самом общем случае под большинство ОС программы предпочитают начинаться с начала адресного пространства. В том же Windows дела обстоят так: 0x00000000 — 0x0000FFFF: нулевые указатели, 0x00010000 — 0x7FFEFFFF: память программы, 0x80000000 — 0xFFFFFFFF: память ядра.

А как же потери при небольших размещениях? Не велика гранулярность для 32 бит?

Велика, конечно. Надо брать 4 КиБ. Когда-нибудь у меня дойдут руки и до 4 КиБ. На этом этапе я захотел сделать жизнь чуть проще, оставив один уровень таблиц, благо PSE это позволяет.

Вообще "правильный" ассемблер в данном случае не очень хорош, так как под другие платформы в основном используется синтаксис at&t, и портировать будет сложнее — придется изменять не только код под платформу, но и систему сборки. Но мне приятнее писать в Интел синтаксисе, так что пусть будет.

Конечно же! Как я мог забыть… Я постоянно поглядывал в репозиторий. Сейчас добавлю в статью, спасибо вам.
Это прекрасно!
Но все же, ни одна подобная статья не освещает вопрос энергоэффективности. Как часто приходится заряжать девайс? Где находятся элементы питания и сколько они весят?
Потому как даже самый совершенный протез в мире будет практически бесполезен в повседневной жизни, если тебе нужно будет сидеть возле розетки с кабелем хотя бы 50% времени.
В 2012 болгарский шахматист Борислав Иванов явно пользовался тем, что игры транслируются он-лайн. Легко гуглится инфа на эту тему. Судя по всему, не обошлось без ПК да микрогарнитуры.
Да и вообще таких случаев немало.
Чувствуется, кого-то сегодня уволят…

Информация

В рейтинге
6 343-й
Откуда
Praha, Hlavni Mesto Praha, Чехия
Дата рождения
Зарегистрирован
Активность