Pazke, 29.01.2004 11:51:47:Недостаток многопоточности в том что для корректной работы программы недостаточно построить иерархию блокировок, но надо еще проанализировать взаимодействие с планировщиком задач и вводом/выводом. А это весьма нетривиальная задача, и практические последствия этой нетривиальности мы здесь и обсуждаем Собственно мой пост имел целью показать что на многопоточности свет клином не сошелся и в зависимости от задачи можно обойтись и без нее.
Balancer, 29.01.2004 22:27:25:Для КА реально малое время отклика нужна для мало каких процессов. На это время всё остальное и задвинуть можно. А так - да, отложенная обработка прерываний.
Но у нас тут изъян в самом начале есть. Мы строим однопроцессорную систему, а это ущербный подход.
Особенно для таких систем. Даже ПК давно движется к распределению задач (многие ли из нас на MFM-винтах и VGA-видеокартах сидят?). Для нормального КА каждый исполнительный орган должен быть снабжён своим микроконтроллером, отвечающим за работу с ним и отчитывающимся и управляемым центральным (возможно - несколькими) процессором. Эдакая аппаратная многопроцессность (не многопоточность)
А уж тут и время реакции совсем маловажно, и с отложенными прерываниями никаких проблем, и загруженность управляющего процессора невысока, и отлаживать систему намного проще (аппаратная декомпозиция на независимые задачи).
Centuriones, 30.01.2004 22:58:43:DOS - это тоже OS.
Mishka, 31.01.2004 00:24:41 :А там обработка прерываний тоже есть и независимо от программ.
Mishka, 31.01.2004 00:19:50:Многие железяки не могут принять повторных прерываний, пока предыдущее не обработано/сброшено. Или просто теряют предыдущие данные. Тот RS232C запросто потеряет данные.
Mishka, 31.01.2004 00:24:41:Кроме того, не встечали вы там видного воителя Генерала Файлуру? Типа вопрос от ОС - Abort, Retry, Ignore? - а ваша прога висит и не знает, что ОС уже вовсе не читает файл, а просит интерактивного совета.
Balancer, 31.01.2004 01:06:46 :Ну и зачем нам RS-232 на КА? По-моему, это тот случай, когда не задачу под железки подгонять надо, а железки под задачу
А где ты тут противоречия видишь?
С коих пор однопроцессорная система - это однопоточная?
Впрочем, в любом случае лучше ставить отдельный процессор на отдельную задачу.
Вот вторые две концепции в описанном тобой виде кажутся мне чем-то неестественным и надуманным
А куда, вдруг, списали асинхронное взаимодествие?
Не те же. Если у тебя законченные самостоятельные, но взаимодействующие модули, то число состояний на их интерфейсах на порядки порядков меньше, чем для однопроцессорной системы, обрабатывающей всё и для таких систем гораздо лучше формализуются граничные условия, ограничения и т.п. Что приводит к сильному упрощению тестирования.
Balancer, 31.01.2004 01:10:19:А что, что-то подобное на КА, случается, ставят?
Rada, 31.01.2004 04:29:45:2 Роман: делать многозадачность аппаратно с помощью контроллеров, или используя РТ операционку - суть дела не меняет.
.cpp, 02.02.2004 12:04:13:Balancer>Меняет. При сбое центарльного процессора в одной задаче (завис) откажет вся система, при сбое контроллера - откажет только один компонент системы.
Жаловался мне один знакомый - владелец маленького автосервиса. Сейчас производители автомобилей стремятся делать машины так, что бы по максимуму затруднить их обслуживание и ремонт в неспециализированных сервисах, повышая уровень компьютеризации автомобилей. При этом микроконтроллеры понатыканы повсюду - даже подъемом/опусканием стекол управляет отдельный компьютер в каждой двери, получая команды от центрального компьютера. Так вот один клиент этого автосервиса купил в Германии фольксваген (забыл какой), и на границе у него все стекла как опустились, так больше никак не поднимались. Пришлось мужику до самой Риги ехать "с ветерком". А дело было зимой, мороз -20С. А всех проблем - сброс флажков в регистре конфигурации дверей.
Centuriones, 02.02.2004 13:15:04:Это очень четко подтверждает слова Balancer'а. Двигатель ведь завелся, значит система управлением вспрыском топлива не пострадала. А буде все на одном, так и движок не завелся бы, да и еще что-нибудь могло случится (не обязательно, но вероятно).
В одном из округов проводили голосования, и из-за ошибки в программе СУБД было потеряно около 250 тыс. голосов - просто так - вжик, и нету. Но самое убийственное в истории то, что они не стали проводить повторное голосование, потому что, слушайте сюда - эти 250 тыс. голосов уже не повлияли бы на исход выборов, был очевиден сильный разрыв между кандидатами.
Balancer, 31.01.2004 12:55:58:Меняет. При сбое центарльного процессора в одной задаче (завис) откажет вся система, при сбое контроллера - откажет только один компонент системы. Если он не важен для жизни аппарата или дублирован - можно будет продолжить работу дальше Я уже молчу про поышение надёжности. Хотя "контактов" и больше (что по идее снижает андёжность системы в целом), но система становится работоспособной при локальных повреждениях.
Ну так и взаимодействие протоколов интерфейсов модулей у нас же тоже программное.
Потому что при асинхронном взаимодействии проблемы синхронизации могут возникнуть только при обмене данными и это гораздо проще предусмотреть. При синхронном - они могут вылезти в любой момент.
Но, как я понял, это были пайпы на одном процессоре
Что же до обращения к общим переменным, которые упоминал Mishka - не должно их быть. Должно быть только интерфейсное взаимодействие.
Ну так и как он тогда мог зависнуть из-за переполнения какой-то мелочи типа модуля флешпамяти?
Rada, 31.01.2004 04:45:47:Ещё история, правда не из области космоса и военки, но тоже забавно (прочитал или в TIME или в Newsweek), причём технической детали происшествия я не знаю, а из-за иронии произошедшего. В одном из округов проводили голосования, и из-за ошибки в программе СУБД было потеряно около 250 тыс. голосов - просто так - вжик, и нету. Но самое убийственное в истории то, что они не стали проводить повторное голосование, потому что, слушайте сюда - эти 250 тыс. голосов уже не повлияли бы на исход выборов, был очевиден сильный разрыв между кандидатами. Вот так-то - а говорят - каждый голос важен. Короче, вот этим горе-программистам и ноги поотрывать не мешало бы. Вообще, удивляет раздолбайсво в проведении выборов - взламывай что хочешь, никаких дупликаций на бумаге тебе, ничего.
Rada, 31.01.2004 04:45:47:никаких дупликаций на бумаге тебе, ничего.
Centuriones, 02.02.2004 13:15:04:Это очень четко подтверждает слова Balancer'а. Двигатель ведь завелся, значит система управлением вспрыском топлива не пострадала. А буде все на одном, так и движок не завелся бы, да и еще что-нибудь могло случится (не обязательно, но вероятно).
.cpp, 02.02.2004 12:04:13:Balancer>Меняет. При сбое центрального процессора в одной задаче (завис) откажет вся система, при сбое контроллера - откажет только один компонент системы.
Жаловался мне один знакомый - владелец маленького автосервиса. Сейчас производители автомобилей стремятся делать машины так, что бы по максимуму затруднить их обслуживание и ремонт в неспециализированных сервисах, повышая уровень компьютеризации автомобилей. При этом микроконтроллеры понатыканы повсюду - даже подъемом/опусканием стекол управляет отдельный компьютер в каждой двери, получая команды от центрального компьютера. Так вот один клиент этого автосервиса купил в Германии фольксваген (забыл какой), и на границе у него все стекла как опустились, так больше никак не поднимались. Пришлось мужику до самой Риги ехать "с ветерком". А дело было зимой, мороз -20С. А всех проблем - сброс флажков в регистре конфигурации дверей.
hcube, 02.02.2004 19:31:21:Так если он хочет знать результат - нехай ждет сколько-то времени ответное сообщение а потом выпадает по таймауту.
И конечно вычислительный и канальный уровни по выполнению развязать - прием-передача сообщений отдельно, основной цикл вычислений - отдельно. То есть в основном цикле - флажки - если флажок установился - обработать пришедшее сообщение. если нет - пропускаем. А устанавливать - обработчиком прерывания по приему. Например.
Потом, связность системы по определению должна быть минимально необходимой - то есть в данном примере управление АКП, контроль CO2 и зажигание - это один управляющий модуль - контроль двигателя называется
Centuriones, 03.02.2004 02:54:07:Как раз hcube про СО2 так хорошо сказал. Опередил. Если я правильно понял, то как раз решающее значение имеет связность. Хотя мне рассказывали, что в некоторых машинах с места не стронешься, пока дверь не закроешь, но это уже техника безопасности.
Вообще конфликты, захваты ресурсов, когда они должны быть свободными - очень неприятная вещь. Не знаю как в Windows NT Х.ХХ, не работал, а в 9Х частенько подобные фокусы выводят из себя. Когда после работы с документом начинаешь по необходимости перемещать файл, а тебе в ответ - "Пшел вон, файл занят!" - так и хочется запустить чем-то тяжелым в монитор, так как надо перегружаться. Понятно, Windows - не система управления космическим аппаратом, но это явное несовершенство.
Кстати (немножко не в тему), читая эту тему начинаешь лучше понимать роль пилотируемой космонавтики и пилота в истребителе.