Здравствуйте, Hоmunculus, Вы писали:
H>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Hоmunculus, Вы писали:
H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
M>Нет конечно.
Здравствуйте, Hоmunculus, Вы писали:
H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться?
M>>Нет конечно.
H>Это ответ на первый или на второй вопрос?
Здравствуйте, ononim, Вы писали:
H>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться? O>А что такое хардварный поток?
Который физически распараллелен, а не перещелкиванием контекста
H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться? O>>А что такое хардварный поток? H>Который физически распараллелен, а не перещелкиванием контекста
Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
H>>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться? O>>>А что такое хардварный поток? H>>Который физически распараллелен, а не перещелкиванием контекста O>Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит.
Здравствуйте, Hоmunculus, Вы писали:
M>>После первого вопроса второй я даже не читал
H>Я так себе представляю, что разрабы стандратной библиотеки для конкретной архитектуры уже знают хардварные тонкости и все это предусмотрели.
Нет конечно. Микроконтроллеров тысячи разных, каждый со своими приколами. Даже если это ARM на Cortex-M, не уверен, что это реально. Ведь по сути в библиотеке должен быть планировщик-шедулер, который бы их переключал, все примитивы типа семафоров/мьютексов, и тд и тп. Это считай уже ядро ОС. Собственно, FreeRTOS в общем-то только это и делает, в ней не особо чего есть больше. Кто тебе это всё будет реализовывать в виде стандартной библиотеки?
Более того. Я подозреваю, что тот же GCC, которым я собираю прошивки, он о микроконтроллере вообще ничего не знает. В результате его работы на выходе получается вполне стандартный ELF, который уже потом всякими тулзами преобразуется в HEX для зашивки
O>>>>А что такое хардварный поток? H>>>Который физически распараллелен, а не перещелкиванием контекста O>>Во всех современных осях потоки сделаны перещелкиванием контекста. Физических ядер на все потоки не хватит. H>Ну по ядрам кто это распределяет? Ось? А без нее?
Планировщик задач, который в случае оси является ее частью, но по сути при программирование под голое железо вся ось по сути может собой представлять планировщик и все
Ты пишешь код под что? Под FreeRTOS или таки под какую то жирную операционку? Если первое то там скорее всего std::thread просто не реализован. Можешь реализовать, под конкретный планировщик. Если чтото пожирнее, да хотябы vxWorks, то std::thread может уже и будет работать.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Hоmunculus, Вы писали:
M>>А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать?
H>Ну так вопрос в том и был — умеет ли std::thread это или нет
Ну, если бы ты задумался над вопросом: "а как бы это могло бы быть?", то вопроса бы и не было бы
M>>А если нет "хардварных" потоков? А если их два, а тебе надо 10 создать? H>Ну так вопрос в том и был — умеет ли std::thread это или нет
Этот вопрос переводится как умеет ли С++ рантайм который ты пользуешься когда компиляешь код под какую то железку запускать тред на отдельном процессоре. Я думаю можно заранее сказать что нет, но ты можешь написать такой рантайм.
Но обычно дело обстоит так: есть железо, есть ось (хотябы минималистичная, типа FreeRTOS) под это железо и есть С++ рантайм. Потоки обычно реализуются в оси, а поддержка этого АПИ в рантайме С++ — это дело десятое.
А когда потоки реализуются, то в 99.9% случаев они реализуются через переключение контекста по таймеру или хотябы кооперативно. Многопроцессорность идет к этому всему как бонус. Я хз есть ли спецось в которой потоки работали бы строго каждый на своем процессоре и никак иначе. Может и ест в узких нишах. Но врядли можно ожидать что твой С++ рантайм будет работать именно так в твоем случае. Не факт что std::thread вообще будет работать у тебя.
Кстати расскажи подробнее под что ты пишешь, может будет больше инфы из этого
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Hоmunculus, Вы писали:
H>Здравствуйте, ononim, Вы писали:
H>>>О есть какая-то гарантия что без оси создастся хардварный поток? Или это самому надо руками к хардваре стучаться? O>>А что такое хардварный поток?
H>Который физически распараллелен, а не перещелкиванием контекста
Здравствуйте, Hоmunculus, Вы писали:
H>О есть какая-то гарантия что без оси создастся хардварный поток?
Даже и с осёй нет.
H>Или это самому надо руками к хардваре стучаться?
Ну у тебя или есть какой-то рантайм, который обеспечивает тебе минимальные удобства (аллокацию памяти там, илициализацию регистров, как C++ надо, потоки те же) или ты с железом один на один.
Есть "операционные системы", которые представляют собой такую большую библиотеку. Т.е., удобства есть, но полноценной оси, с процессами там и защитой памяти от них, нет.
Здравствуйте, Hоmunculus, Вы писали:
H>Я так себе представляю, что разрабы стандратной библиотеки для конкретной архитектуры уже знают хардварные тонкости и все это предусмотрели.
Вопрос в том, как найти стандартную библиотеку, рассчитанную на запуск на голом железе, а не в среде определённой оси.
И, как вариант, можно использовать полноценную ось. Они бывают не только венда и линух, но и промышленные операционные системы. Например, QNX, RTEMS...