Anonymous
это как?
Aiwan \ (•◡•) / _bot
заклинание такое есть
Vladimir
Anonymous
хм. Вот в GCC можно делать ассемблерные вставки на gas
Vladimir
Давно причëм
Anonymous
вот
Anonymous
а intel синтаксис там не поддерживается
Vladimir
хм. Вот в GCC можно делать ассемблерные вставки на gas
Ну там да, приходится использовать att синтаксис
Aiwan \ (•◡•) / _bot
так реч про gas вроде
Vladimir
А .s файлы для gas пиши интелевым сколько угодно
Vladimir
Вначале только поставь .intel_syntax noprefix
Aiwan \ (•◡•) / _bot
Вначале только поставь .intel_syntax noprefix
а вот это и есть то самое заклинание
s54820
а intel синтаксис там не поддерживается
Я не знаю, что у вас там за GCC и что за заклинания, но с ключом -masm=intel всегда всё без проблем компилировалось. В том числе и ассемблерные вставки тоже.
Aiwan \ (•◡•) / _bot
а вот еще одно
Aiwan \ (•◡•) / _bot
а gcc стандарт с11 поддерживает? если да то с какой версии и в каком объеме?
s54820
а gcc стандарт с11 поддерживает? если да то с какой версии и в каком объеме?
Более или менее. Тредов вроде до сих пор нет родных (есть чужие реализации) и чего-то ещё. Насчёт версий есть https://gcc.gnu.org/wiki/C11Status но оно давно не обновлялось.
Vladimir
Треды вроде не фича языка
Vladimir
Особенно такого как C
s54820
Треды вроде не фича языка
Очень даже фича. В С11 официально признали их существование, поправили формулировки про доступ к объектам, добавили _Thread_local storage class в язык и опциональный threads.h в стандартную библиотеку.
MrSmith
Есть еще зеленые треды или по русски-уебански нити
MrSmith
Это уже абстракция над трейдами
Vladimir
Ну если tls имеется в виду. Хотя я не вижу особого смысла в нем. Треды и глобальные переменные несовместимы
MrSmith
К примеру гоурутины или реактивщина
MrSmith
Не значит что все не умеют
MrSmith
Асинхронность асики обертка над колбеками многопоточная асинхроннщина на какой нибудь зеленой модели щас очень популярна
Vladimir
C он хорош своей простотой.
Vladimir
Нужны расширения - "ты знаешь где взять PL/1". (c) Д. Ритчи вроде
Anonymous
С учётом этих " " :: " "
Vladimir
strtok() или даже банальный errno?
Тащить api из однопоточного мира в многопоточный - это называется костыли. Не лучше ли разработать новый реентерабельный без ущерба простоте языка?
s54820
Тащить api из однопоточного мира в многопоточный - это называется костыли. Не лучше ли разработать новый реентерабельный без ущерба простоте языка?
Лучше. Но мы имеем то, что имеем. А ещё мы имеем тонны легаси кода, поэтому всё останется так, как есть.
Anonymous
ребят, а как вообще происходит параллельное выполнение кода на ассме? Ну т.е. я вно говорю, мол, камень, этот кусок кода выполняй на этом ядре, а этот на другом. Или как?
Artem
слышал про конвейер?
s54820
ребят, а как вообще происходит параллельное выполнение кода на ассме? Ну т.е. я вно говорю, мол, камень, этот кусок кода выполняй на этом ядре, а этот на другом. Или как?
Ты просто выполняешь код. Если у тебя есть ОС, у тебя есть планировщик, он знает, какие потоки существуют в системе, выбирает подходящий поток, переключает контекст (регистры проставляет на сохраненные регистры потока, в том числе и program counter в каком-то виде), и код начинает выполняться. Если ОС нет, и самописного планировщика нет (какая-то прошивка на голом железе, например), то зависящим от платформы способом можно указать, с какого адреса начинать выполнение тому или иному ядру. Или ядра начинают выполнять один и тот же код, но знают, кто у них главный (первый), и этот главный им говорит, куда пойти и что выполнять.
Anonymous
хм, т.е. я могу контрллировать ядра вручную, это гуд. Да, я говорю про голое железо, про i386 и далее
s54820
хм, т.е. я могу контрллировать ядра вручную, это гуд. Да, я говорю про голое железо, про i386 и далее
В x86 есть IPI, можно «общаться» с соседями. Если интересуешься таким, возьми третий том Intel SDM сразу и там читай.
Anonymous
не просто интересуюсь... Мне надо уметь это юзать)
Anonymous
а еще мне пока сложно понять, как менеджер процессов в ядре ОС контроллирует работу НАТИВНЫХ программ, переключается ними. А если в программе вечный цикл? Или менеджер процессов как бы "виртуализирует", хавая по команде из кадой программе и выполняя, в зависимости от приоретета
s54820
не просто интересуюсь... Мне надо уметь это юзать)
Если вопрос стоит именно так, погляди «Современные операционные системы» Таненбаума для начала.
Anonymous
понял, записал, гуглю
Anonymous
просто менеджер процессов не имеет права неработать долгое время или вообще падать
Anonymous
если что, я правда очень благодарен советам и подсказкам.
s54820
а еще мне пока сложно понять, как менеджер процессов в ядре ОС контроллирует работу НАТИВНЫХ программ, переключается ними. А если в программе вечный цикл? Или менеджер процессов как бы "виртуализирует", хавая по команде из кадой программе и выполняя, в зависимости от приоретета
Есть вытесняющая многозадачность, есть кооперативная. В кооперативной один поток сам должен передать управление другому потоку (или сказать ОС, что с него можно переключиться). При таком подходе вечные циклы проблема. А вытесняющая многозадачность подразумевает наличие таймера, и ОС по прерыванию от таймера, если нужно, сохранит состояние потока и просто переключится на какой-то другой, не спрашивая, что по этому поводу думает сам поток.
Vladimir
Возьми ядро FreeBSD и изучай )
Vladimir
Линукс не рекомендую
s54820
Возьми ядро FreeBSD и изучай )
Как вариант. Но Таненбаума всё равно почитать стоит.
Vladimir
Там сам чëрт ногу сломит
Anonymous
Т.е. я могу заранее процу сказать, на какую команду прыгнуть и через какое время, прежде чем передать управление от менеджера задач к процессу?
s54820
Т.е. я могу заранее процу сказать, на какую команду прыгнуть и через какое время, прежде чем передать управление от менеджера задач к процессу?
Ты можешь посмотреть, сколько времени работает поток и решить, что этому уже хватит. А таймер тебя все равно постоянно дергает, т.е., ты волей не волей прерываешься, чтобы его обработать.
Vladimir
Ключевая сущность - прерывание от таймера
Vladimir
По нему и планируются потоки
Anonymous
Я не могу посмотреть, потому что поток занял камень. Вопрос пытаюсь рассмотреть в рамках одного ядра в камне
Anonymous
Я запускал десятку на старом одноядерном компе, ради интереса
Vladimir
Ну и IPI, если ядер много
Anonymous
А виртуализация, то, что я предложил выше?
Anonymous
Плохая мысль?
s54820
Плохая мысль?
Медленно.
Anonymous
А виртуализация, то, что я предложил выше?
Можно сразу и защитить, отсекая всякие прерывания и прочую хрень небезопасную для ядра
Anonymous
Anonymous
Да
s54820
Ядра ОС
Обычно у тебя все равно есть уровни привилегий и MMU в каком-то виде, поэтому с ядром из пользовательского кода и так ничего не сделать. А вот всякие QEMU используют нечто похожее, транслируя исполняемый код на лету. Только обрабатывают не по одной инструкции, а останавливаются на границах блоков кода, обрабатывают следующий и т. д.
Anonymous
ну я в рамках этой учебный работы расчтываю на максимальную переносимость и минималистичность. Не буду пока вообще пологаться MMU
Anonymous
хочу, чтобы апаратно-зависимой частью было небольшое колличество драйверов, для работы с сетевой картой, видео картой, портами и накопителями
Anonymous
я больше в соло то и не вытяну)
Anonymous
и те были модульными, независимыми, дабы можно было перекомпилить, отрубив часть функционала
Anonymous
почему?
Vladimir
почему?
Потому, что длинный режим включается тем же флагом, что и MMU - CR0.PG
Anonymous
т.е. 64 камень стартует в реальном режиме, так? Потом, загрузчик грузит ядро, ядро переводит камень в защищенный режим или длинный режим и тут уже нужно MMU
Vladimir
т.е. 64 камень стартует в реальном режиме, так? Потом, загрузчик грузит ядро, ядро переводит камень в защищенный режим или длинный режим и тут уже нужно MMU
Mожешь из реального сразу в длинный скакать, только установи EFER.LMA=1. Потом выставляй сразу PE и PG и окажешься в длинном режиме. Следом можешь сделать jmp far в 64 битный
Vladimir
Разумеется, нужно подготовить таблицы страниц и загрузить CR3. И да, PAE вобяз.
Anonymous
вот эта тема в виртуальной адресацией - ваще пока не ложится в мозг. Я понимаю, зачем она нужна, но научиться с этим взаимодействовать на низком уровне вручную - чет пока сложно, но я доберусь, обязательно
Anonymous
просто я не понимаю, почему нельзя было бы оставить возможность... Кхм, вот 8 байтовый указатель - вот вся физическая память, добро пожаловать. А если нужна защита - юзаешь MMU