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