зробити так щоб при вмиканні, після завантаження ядра стартувала моя програма
Також цікавить таке питання - чи можна вказати ОС на якому ядрі процесора виконвати ту чи іншу прогу. Якщо можна то як приблизно це реалізовується і, знову ж, де про це можна детальніше почитати?
AFAIK в загальному випадку - не можна. Може й воно на краще, бо це зламає роботу скедьюлера. Є, правда, згадки про один експеримент - pset, але останній патч там для ядра 2.2.12, а це давно було. Здається, kernel девелопери сприйняли цю ініціативу в штики. Погугліть linux sysmp, але не думаю, що ви знайдете ще щось.
Я початківець у лінуксі, і по роботі потрібно встановити на комп лінух (більш-менш голий, так як для вбудованих систем потрібно) і зробити так щоб при вмиканні, після завантаження ядра стартувала моя програма. Що потрібно скачати - дистриьутив чи ядро (бо мене сьогодні заплутали - я думав, що дистрибутив це типу федори чи редхета, тобто з графічною оболонкою і тіпа під "вінду" з усілякими побрякушками, типу іграшок).
Просто тут така ситуація: по каналу Ethernet поступає інформація ( одна "порція" ~ 1 Кб, напевне це в одному пакеті буде приходити), частота з якою поступає інфо - трохи менше секунди. До того як прийде наступний пакет, треба виконати певне перетворення цієї інфо (як на мене, то ця обробка не має забирати багато часу) і відіслати далі. Спрочатку була ідея, щоб замутити 2 процеси - один займається прийомом і первинною обробкою і підготовкою даних + отримання данних з інших пристроїв, а другий - власне обробкою.
Так як шеф - страшенний ретроград, то задля відстоювання паралелізму (який на мою думку, навіть без фізичного розподілення по ядрам процесора, пришвидшив би весь цей процес), я бовкнув, що "вродє має бути можливість розподілити по ядрам" (бо навіть є офтопіковий софт для кластерів який кажись це робить), тобто "прибрати" планувальник ОС і ручками вказати, що де робити (просто в нього манічка написати так ОС нічого не робила і перебрати функції ОС на себе, що на мою думку не раціонально і ГЕМОРНО).
І про стартування. Один мій знайомий казав, що можна десь в каталозі /etc прописати щось.
Дякую.Як я зрозумів на пряму вказати ядрам процессора, що робити неможна.
Просто тут така ситуація: по каналу Ethernet поступає інформація ( одна "порція" ~ 1 Кб, напевне це в одному пакеті буде приходити), частота з якою поступає інфо - трохи менше секунди. До того як прийде наступний пакет, треба виконати певне перетворення цієї інфо (як на мене, то ця обробка не має забирати багато часу) і відіслати далі. Спрочатку була ідея, щоб замутити 2 процеси - один займається прийомом і первинною обробкою і підготовкою даних + отримання данних з інших пристроїв, а другий - власне обробкою. Так як шеф - страшенний ретроград, то задля відстоювання паралелізму (який на мою думку, навіть без фізичного розподілення по ядрам процесора, пришвидшив би весь цей процес),
я бовкнув, що "вродє має бути можливість розподілити по ядрам" (бо навіть є офтопіковий софт для кластерів який кажись це робить), тобто "прибрати" планувальник ОС і ручками вказати, що де робити (просто в нього манічка написати так ОС нічого не робила і перебрати функції ОС на себе, що на мою думку не раціонально і ГЕМОРНО).
Отже, впаховуючі ваші відповіді, наступне питання. Чи не багато процесорного часу буде з'їдати лінуховий планувальник для виділення часу процесам?
І чи багато часу займає реакція ядра ОС на реагування на переривання від пристроїв (ну, наприклад, приходить пакет по сітці - спочатку ж ядро це "помічає"? - смикає ядро, а потім вже ядро віддає контроль процесу якому потрібен цей пакет)?
На коня ще одне питання. Під словом "дистрибутив", що саме мається на увазі? Певна версія ядра з обов"язковими службами і дровами, чи пакет ОС з усілякими додатковими причандалами, типу графічних оболонок KDE, GNOME і т.д.?
Можна питання? Що ви будете робити, якщо до приходу наступного пакету не встигнете обробити попередній? Або якщо пакет не прийде взагалі? Ви взагалі коли-небуть чули про race conditions?
Цитата: Homski від 2008-10-17 16:12:05Так як шеф - страшенний ретроград, то задля відстоювання паралелізму (який на мою думку, навіть без фізичного розподілення по ядрам процесора, пришвидшив би весь цей процес), я бовкнув, що "вродє має бути можливість розподілити по ядрам" (бо навіть є офтопіковий софт для кластерів який кажись це робить), тобто "прибрати" планувальник ОС і ручками вказати, що де робити (просто в нього манічка написати так ОС нічого не робила і перебрати функції ОС на себе, що на мою думку не раціонально і ГЕМОРНО). Скажіть вашому шефу, що він не ретроград, а некомпетентний кретин. Читати, наприклад, тут і про CFS тут до повного просвітлення. Лінки вибрав випадково, інформації в інеті на цю тему - навалом.Взагалі-то, я можу собі уявити задачі, для яких краще написати власний скедьюлер. Але в мене нема враження, що ваша проблема до них належить.
Пакет прийде обов"язково, бо приходять вони від радару, то тут питань нема (якще не приходять - це тіпа, не неаша проблема). Затримка в обробці пакетів - до 4 пакетів (це тіпа по ТЗ), якщо більше - це рівносильно тому, що воно не пахає. Військова техніка, розумієте... + Ще надходить інфо від клави, але умовно рідко.
Як мені пояснили раніше вони робили під ДОС з одноядерним процесором. І шефу дуже подобалось те що ОС фактично "витискається" і не приймає ніякої участі (функції ОС при цьому можуть викликатись). Фактично ОС потрібна була для того, щоб запустити прогу яку вони писали.
Ядро Лінукс, як я зрозумів не витискається, воно само впешу чергу перехоплює всі переривання і розподіляє процеси.
Я відстоюю ту позицію, що не треба мордувати себе, а користуватись тим що дає ОС - її планувальником і її обробкою переривань. Напевне, попрате мене якщо не так, планувальник в Лінуксі можна або "налаштувати" або просто взяти дистрибутив, який заточений під реал-тайм.
Як мені пояснили раніше вони робили під ДОС з одноядерним процесором. І шефу дуже подобалось те що ОС фактично "витискається" і не приймає ніякої участі (функції ОС при цьому можуть викликатись). Фактично ОС потрібна була для того, щоб запустити прогу яку вони писали. І він хоче теж саме з Лінуксом зробити. Ядро Лінукс, як я зрозумів не витискається, воно само впешу чергу перехоплює всі переривання і розподіляє процеси.
У мене мало досвіду в реал-тайм програмуванні, але на мою думку, для сучасних процесорів такі перехоплення не мають бути великою проблемою, особливо якщо процеси яким адресуються ці переривання виконуються на окремих ядрах, або просто паралельно. Я відстоюю ту позицію, що не треба мордувати себе, а користуватись тим що дає ОС - її планувальником і її обробкою переривань. Напевне, попрате мене якщо не так, планувальник в Лінуксі можна або "налаштувати" або просто взяти дистрибутив, який заточений під реал-тайм.