Page 1 of 3
Рефакторинг ядра
Posted: Mon Feb 07, 2022 5:04 pm
by turbocat
Предлагаю в этой теме обсуждать вопросы, связанные с рефакторингом ядра.
Начну пожалуй с вопроса удаления mem_start из структур APPDATA и TASKDATA. Если я правильно понял, это какой то рудимент. Значение mem_start всегда равно 0, по этому я считаю что его можно удалить.
Патч:
Re: Рефакторинг ядра
Posted: Mon Feb 07, 2022 5:56 pm
by dunkaist
LGTM
Re: Рефакторинг ядра
Posted: Wed Feb 09, 2022 8:31 pm
by Doczom
Устаревшая структура TASKDATA полностью заменена структурой APPDATA в ревизии
#9709.
Re: Рефакторинг ядра
Posted: Wed Feb 09, 2022 9:03 pm
by sober_dev
Doczom
А какой PROFIT был от данного изменения? Размеры, скорость, надежность?
Re: Рефакторинг ядра
Posted: Wed Feb 09, 2022 9:17 pm
by dunkaist
Re: Рефакторинг ядра
Posted: Wed Feb 09, 2022 9:29 pm
by turbocat
Отличная работа! Патч с удалением APPDATA.mem_start я так понимаю тоже был применён.
Re: Рефакторинг ядра
Posted: Wed Feb 09, 2022 9:32 pm
by Doczom
Удалено поле APPDATA.mem_start введу его бесполезности в ревизии
#9710.
Re: Рефакторинг ядра
Posted: Fri Feb 18, 2022 9:13 pm
by Doczom
sober_dev
Удаление этой структуры было необходимо для обеспечения целостности данных потоков и уменьшения расходов(хоть и минимальных) при переключение потока выполнения в планировщике. Кроме этого избавление от этой структуры упростило некоторые другие части ядра(например основной цикл ос). Если есть возражения по поводу удаления этой структуры то говорите.
Re: Рефакторинг ядра
Posted: Sat Feb 19, 2022 12:13 am
by sober_dev
Doczom
Возражений нет.
Re: Рефакторинг ядра
Posted: Thu Feb 24, 2022 12:26 am
by turbocat
Предлагаю добавить в const.inc следующие константы.
Code: Select all
sizeof.byte = 1
sizeof.word = 2
sizeof.dword = 4
sizeof.qword = 8
И использовать их в качестве замены например в таких местах:
Code: Select all
- jmp dword [sys_posix_call + ebx*4]
+ jmp dword [sys_posix_call + ebx * sizeof.dword]
Re: Рефакторинг ядра
Posted: Thu Feb 24, 2022 3:17 am
by sober_dev
Re: Рефакторинг ядра
Posted: Thu Feb 24, 2022 10:50 am
by Vaicheslav97
в данном случае константы нужны чтобы код стал более читаемым чтобы указать зачем нужно умножение и при этом не писать комментарий такой же длины что и сама стока.
Уже давно стоит на повестке дня читаемость ядра поскольку некоторые места слабо документированы и по смещениям не всегда всё поймёш ведь там магические цыфры откуда и по чему непонятно.
И я считаю что это необходимо и по сути на результат компилирования не влияет.
Re: Рефакторинг ядра
Posted: Thu Feb 24, 2022 8:06 pm
by z525
Vaicheslav97 wrote:в данном случае константы нужны чтобы код стал более читаемым чтобы указать зачем нужно умножение и при этом не писать комментарий такой же длины что и сама стока.
Уже давно стоит на повестке дня читаемость ядра поскольку некоторые места слабо документированы и по смещениям не всегда всё поймёш ведь там магические цыфры откуда и по чему непонятно.
И я считаю что это необходимо и по сути на результат компилирования не влияет.
А что там в целом происходит об этом как и прежде будут знать только посвященные?
Re: Рефакторинг ядра
Posted: Thu Feb 24, 2022 8:16 pm
by Vaicheslav97
Нам бы сперва просто почистить и документировать его а добавление такой константы как способ писать дальше код который более понятен.
Re: Рефакторинг ядра
Posted: Sat Feb 26, 2022 11:31 am
by art_zh
turbocat wrote:Предлагаю добавить в const.inc следующие константы.
Code: Select all
sizeof.byte = 1
sizeof.word = 2
sizeof.dword = 4
sizeof.qword = 8
И использовать их в качестве замены например в таких местах:
Code: Select all
- jmp dword [sys_posix_call + ebx*4]
+ jmp dword [sys_posix_call + ebx * sizeof.dword]
аргументы индексации памяти [reg*4 + offset]
являются базовыми конструктами ассемблера х86.
шкала индексации *4, *8 и т.д. намертво прошита в железо и в кодировку инструкций.
если лично тебе стандартый синтаксис ассемблера кажется неудобочитаемым
- тогда лучше не лезь в асм-программирование,
работай на перле или в плюсах