ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
427620
Evgeny_CD, Архитектор (25.07.2013 22:43, просмотров: 35055)
Холивар по ОСям или отсутствию оных получился качественный -> Однако я там не нашел главное - краткого обобщения, что же мы все хотим от ОСей. http://caxapa.ru/427597.html
http://caxapa.ru/426979.html
Прежде всего, мы хотим разделения интерфейса и реализации. Есть каркас самого верхнего уровня: * OS * сервисы ОСи * задачи * куча * менеджер памяти * прерывания * глобальные данные Для всех глобальных данных прописали матрицу доступа - кто пишет, что читает, etc. Теперь выписываем каркас для каждой задачи: * класс задачи - вытесняемая или кооперативная * ее связь с глобальными объектами (проверка с тем, что было сделано на шаг раньше) * связь с объектами OSи - семафоры, mbox и проч. * набор основных функций * интерфейсы, при помощи которых функции задачи получают место под данные - локальные, статические и проч. * регистрация "точек передачи управления" - под всякие продвинутые кооперативки. Есть понятие вложенной задачи - чтобы пустить прототред внутри вытесняемой задачи. На этом этапе получаем кучу совершенно абстрактного кода, который НИКОГДА не будет выполняться в таком виде. Однако, эту кучу кода можно распарсить clang, например, и нарисовать ГРАФ ПРОЕКТА. Далее мы на некоторое время задумываемся, силясь понять, все ли мы заложили в проект, и печатаем этот граф на A2, например [бу струйник A2 можно купить за $200 - его качества для таких целей хватит] Все вышеописанное - вотчина C++ в самой абстрактно-мозговыносящей его инкарнации. Далее мы начинаем писать реализацию всей этой хрени. С++ заканчивается (почти), начинается "C с некоторым количеством понтов" и суть обычный кодинг. Кодим в несколько этапов. В начале - заглушки-пустышки, чтобы проект целиком успешно собрался потом потихоньку доходим до реального кода. Тесты где-то рядом живут. "Понты в С" состоят в отказе от обычных переменных. Только smart_ptr, и никаких локальных переменных --> Никаких boost, STL и прочих "тяжеловесов" C++ не используем. Что мы в итоге получим: * выбор между кооперативной и вытесняющей многозадачностью применительно для каждой задачи * максимальная экономия ОЗУ. * универсальный интерфейс в прикладной части независимо ни от чего не зависит, и обеспечивается максимальное время жизни прикладного кода * предельная эффективность. При разумной реализации описанного превысить достигнутую эффективность в рамках одного и того же камня будет почти невозможно. Т.е. если оно "не влезло" - то камень можно гарантированно выкидывать. Что важно: * наша супер-среда должна идти в комплекте с мощной скриптовой системой сборки. Ни в коем случае не на основе auto tools! cmake, Tcl, scons и много всего. Полностью портируемо на любую среду. По сложности системы сборки будет даже круче, чем в RTEMS, и eCOS, но на более современных тулзах * сама "куча кода" не идет в исходных кодах. Она обязательно синтезируется из некой БД, под свойства конкретного компилера, которым собирается реальный код. Что надо сделать: * всего лишь стать гуру по С++ и написать году С++ кода, чтобы вся эта красота заработала. Критика?