Snusmumriken
Только человек должен быть довольно доверенным ))
Hello, World! 🎄
Тут вроде исправил все, с учетом вложенности все работает
Для теста взял фрактал который кто-то уже написал на bf
Hello, World! 🎄
Работает очень медленно (без оптимизации)
0xSU
@Snusmumriken надеюсь, пишу в уместное время) Была группа pro.lua, не могу найти, мб там бот какой меня кикнул, ты вроде там админ help
0xSU
🤷‍♂
Aqendo
банан
0xSU
анбанан пж
Hello, World! 🎄
Работает очень медленно (без оптимизации)
Сейчас я думаю написать компилятор под bf, сложность в том, что в bf нету условного перехода и придется через [] делать блоки if-else
Snusmumriken
🤷‍♂
Не нашёл тебя в списке удалённых юзеров, хмм
0xSU
Странная фигня
0xSU
С Пк тож не заходит, хотя группа по ссылке кликается Мб проблема на моей стороне, ток почему...
Hello, World! 🎄
Не нашёл тебя в списке удалённых юзеров, хмм
Так скопируй его username и добавь в группу
Snusmumriken
Уже, запрещено
Hello, World! 🎄
Я попробовал добавить, пишет что этого пользователя может добавить только администратор 🤷‍♂️
0xSU
Если есть 2 аккаунт, то можно с него войти
Ну да, хотел с этого, как никак основа)
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Hello, World! 🎄
Hello, World! 🎄
А ок, вроде прерывания работают, пока что пустой обработчик для всех прерываний, но для клавиатуры уже все работает (есть обработчик).
Hello, World! 🎄
33 (0x21) это клавиатура. 0 это для теста заполнил пустым обработчиком, если без него в kernel.c, написать к примеру: asm volatile("int $0x00"); То ядро перезагружается, скорее всего не может обработать прерывание т.к оно было не заполнено в таблице прерываний.
Hello, World! 🎄
Самое трудное наверно будет это реализация динамического выделения памяти
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
@fhello_world do you ever use PascaL ?
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Only at school
same my old school use turbo pascal
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
language is a bit pretty but not efficient, but why do all schools have this lesson for generations even if it's only 2 days.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
it's the first language i know 🤣 before actionscript
Hello, World! 🎄
my first language is C
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
my first language is C
awesome C is for everything
UtoECat
Самое трудное наверно будет это реализация динамического выделения памяти
malloc/free? есть же уже готовые реализации, надо только под себя допилить их немного
Hello, World! 🎄
А исходники выкладываешь куда-нибудь?
Нет, не выкладываю. По сути я ещё практически нечему не научился в osdev, возможно через какое-то время я начну лучше разбираться и тогда на github создам репозиторий
Hello, World! 🎄
Щас я просто практически всё беру из уроков по osdev (но некоторые части уже могу сам без проблем написать, так сказать небольшой прогресс)
Hello, World! 🎄
malloc/free? есть же уже готовые реализации, надо только под себя допилить их немного
В таком случае можно и готовое ядро все взять, собственно linux дистрибутив я уже собирал.
UtoECat
В таком случае можно и готовое ядро все взять, собственно linux дистрибутив я уже собирал.
для ядра аллокатор является узким горлышком. По крайней мере советую ознакомиться с готовыми реализациями чтобы просто понимать как можно оптимизировать стандартный алгоритм аллокации, почему возникает фрагментация памяти и как с ней бороться.
UtoECat
Snusmumriken
А что-то дефрагментировать начинают только когда уже и память и своп закончились
Snusmumriken
Есть такой интересный подход: неиспользуемая память как бы не нужна. Типа, что толку от твоих 64гб оперативки, если не использовать их на 100%?
Snusmumriken
В результате, правда, когда надо запустить что-то свежее или память таки начинает заканчиваться, ос судорожно начинает чистить под это место
UtoECat
А что-то дефрагментировать начинают только когда уже и память и своп закончились
фрагментация влияет на промахи кеша в том числе. Не спорю - можно оставить всё на самотёк, а можно сделать и получше :)
Snusmumriken
Да я просто смотрю например на организацию памяти ведра, например, и она настолько же упоротая, для телефона, несколько смешная.
Snusmumriken
Мало того, для планшета или например ноутбука - точно так же смешно.
Snusmumriken
Заметно буквально следующее: Ведру даже в режиме энергосбережения насрать на время автономности, количество и нагрузку фоновых процессов и так далее. Он не может в менеджере сделать простои для них, обязательно выводить все всплывающие окошки СРАЗУ а не условно раз в несколько секунд для экономии. Ведро не будет нормально "усыплять" процессы или суспендить, если они сами этого не делают. Плюс обожает гонять свои службы, в тысячный раз индексируя одно и то же наплевав на заряд батареи и то, что телефон не подключен к зарядке.
Hello, World! 🎄
кстати, виртуализацию памяти в системе планируешь делать?
Да, т.к система многопоточная должна быть
Snusmumriken
Как виртуализация влияет на многопоточность?
Snusmumriken
Ответ: никак
Snusmumriken
Знаешь зачем виртуализация памяти в принципе нужна?
Snusmumriken
Это чисто секьюрити чек. Дополнительных проверки что ты, выходя за границы выделенного блока памяти, не запишешь в память других приложений. Мол, в этом приложении делай что хочешь, хоть кашу с маслом, а в другие приложения не лезь.
Hello, World! 🎄
Как виртуализация влияет на многопоточность?
Так нужно приложениям предоставлять абстракцию адресов, чтобы они не думали где они располагаются
Snusmumriken
Ты получаешь от ОС поинтеры определённого размера — трахайся с ними как хочешь.
Snusmumriken
Единственная разница — без виртуальной памяти, читая рандомные участки ты можешь прочитать память других приложений, или записать в память других приложений. С виртуальной памятью — нет. Но процесс замедляется на проверки доступа и трансляцию указателей туда-сюда-обратно. Это ВСЯ разница.
UtoECat
Ты получаешь от ОС поинтеры определённого размера — трахайся с ними как хочешь.
виртуализация памяти это ещё и возможность... барабанная дробь... борьбы с фрагментацией памяти xD. Так как все блоки одинакового размера - переставлять и миксовать их можно как угодно (но желательно чтобы у одного потока его блоки находились поближе)
Snusmumriken
А то что у тебя условно начальный поинтер в приложении начинается с 0 или с 12345667 — для тебя, как для писателя приложения, не играет вообще ничего. Это просто цифра.
Snusmumriken
Просто если приложение А что-то избыточно запишет в свой первый блок, оно запишет в приложение Б, и то похерится.
Snusmumriken
Странички — тоже тема на самом деле, потому что их просто переставлять и чистить, плюс на индексацию уходит меньше памяти чем каждому выдавать "ровно запрошенный" диапазон, но те же косяки что и у харда.
Snusmumriken
Дело в том, что приложение залезлит в память другого приложения и всё там сломает
Дело в том, что приложение залезлит в память другого приложения и всё там сломает
Snusmumriken
Чел, я это написал буквально четыре раза.
UtoECat
На самом деле ОС может выделять блоки памяти для приложений вперемешку. N байт приложения А, M байт приложения Б, F байт приложения А.
и в этом и проблема - выделение блоками гораздо удобнее для системы - приложение запрашивает у системы больше блоков - она добавляет их ему к последнему блоку (так в лине работает вроде), и 1. никто ни с кем не конфликтует 2. можно писать свой аллокатор в приложении и паковать данные максимально плотно в нём же, а ОС самой решать как распоряжаться блоками.
Snusmumriken
Не, приложение запрашивает у системы больше блоков — и они присобачиваются куда угодно в физической памяти (ну, со смещением страниц). Виртуальная же память как бы непрерывна.
Hello, World! 🎄
Чел, я это написал буквально четыре раза.
У меня интернет не стабильный в дороге
Hello, World! 🎄
Сообщения не сразу доходят
Snusmumriken
На случай мелких изменений требований, есть фишечка. Приложение А такое: дай гиг памяти. ОС такая: "держи четыре гига, расходуй как хошь". На случай крупных требований это уже правда так не работает, но большая часть требований на повышение — довольно мелкая. Плюс когда запас израсходован, новый блок надо пихать куда-то ещё.
Snusmumriken
если нет никакого алгоритма расположения блоков поближе для минимизации промахов, то да.
А что ты имеешь ввиду под промахами? Какие тут могут быть промахи? Это же не кеш.
Snusmumriken
Трансляция из виртуальной в реальную память будет проводиться в любом случае, без промахов, потому что просто есть табличка трансляции, промахиваться некуда. Просто добавляешь к виртуальному указателю смещение для данной странички, и всё.
Snusmumriken
Гипотетически, можно "промахиваться", если дополнительно оптимизировать эти смещения, на стыках страничек.
UtoECat
Дело в том, что приложение залезлит в память другого приложения и всё там сломает
ещё кстати виртуальная память позволит осуществлять mmapинг... файлов например, группировку одинаковых readonly страниц, выгрузку неиспользуемых страниц в подкачку и т.д и т.п. А самими страничками можно жонглировать как угодно и подстраиваться под плюсы и ограничения оперативки на которой система работает.
UtoECat
Трансляция из виртуальной в реальную память будет проводиться в любом случае, без промахов, потому что просто есть табличка трансляции, промахиваться некуда. Просто добавляешь к виртуальному указателю смещение для данной странички, и всё.
честно признаюсь - я думал что процессор туповат в этом плане и грузит из памяти в кэш данные только рядышком находящиеся xD. Так или иначе, группировать и сортировать блоки памяти одного приложения, если такая возможность есть, лучше, чем не сортировать и не группировать.
Snusmumriken
Не, кеш это кеш, кеш действительно подгружает "ближние" данные из физической оперативки. Просто.. Чем больше странички тем меньше промахов. На стыках — да, будут промахи, как это и происходит ирл. И в этом нет ничего особенно страшного — промах означает подгрузку из свежей области. Ну например. Допустим, у тебя аудиофайл который ты.. Нормализуешь по громкости? Каким-нибудь линейным однопроходным алгоритмом. Он расположен на трёх виртуальных страничках, расположенных вразнобой. И при его последовательной обработке будет три промаха кеша. И всё. Тысячи промахов? Миллионы? Нет ))
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
good night
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
0xSU
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ