Страниц: [1] 2 3
  Печать  
Автор Тема: Отработка аварийного отключения питания в QNX 6.4.1  (Прочитано 14732 раз)
Evgeniy52
Jr. Member
**
Offline Offline

Сообщений: 55


Просмотр профиля
« : Августа 04, 2011, 05:09:33 pm »

Добрый день!

Подскажите пожалуйста, имеются ли в QNX 6.4.1 собственные средства (API, утилиты) для отработки ситуации неожиданного отключения питания?
Чтобы сбросить кэши на диск, завершить процессы и т.д.
К примеру, аппаратура может выставить соответствующее прерывание, и у системы будут какие-то микросекунды для отработки безопасного завершения работы.
Записан
LH
Full Member
***
Offline Offline

Сообщений: 124


Просмотр профиля
« Ответ #1 : Августа 08, 2011, 04:27:42 am »

shutdown -fb
Записан
aluv
Sr. Member
****
Offline Offline

Сообщений: 301


Просмотр профиля
« Ответ #2 : Августа 08, 2011, 09:40:53 pm »

Вот бы ещё исходные тексты shutdown, чтобы включить их в системный монитор. А то ведь действительно, когда супервизор питания дернет прерывание останется всего несколько миллисекунд чтобы что-то сделать. И тратить это время на загрузку утилиты даже из proc файловой системы не хотелось бы.
Записан
oder
Гость
« Ответ #3 : Августа 08, 2011, 09:45:52 pm »

При чём тут shutdown? Она глушит компьютер, а не сообщает, что питание пропало.
Или сигнал уже есть?

Кеши сбросить - это
#include <unistd.h>
void sync( void );
Записан
aluv
Sr. Member
****
Offline Offline

Сообщений: 301


Просмотр профиля
« Ответ #4 : Августа 08, 2011, 11:32:35 pm »

Или сигнал уже есть?

Да, есть универсальные проц. платы на которых выход PFO (power-fail output) подключен к линии прерываний.
Записан
Evgeniy52
Jr. Member
**
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #5 : Августа 09, 2011, 01:56:56 pm »

Попробую уточнить вопрос.
Я имел в виду именно стандартные для QNX механизмы, т.е. api или утилиты. Или же нужно писать свой обработчик прерывания.

oder,
как я понимаю, Вы имеете в виду написание собственного обработчика прерывания? В частности с sync().
Записан
oder
Гость
« Ответ #6 : Августа 09, 2011, 02:00:37 pm »

А что, разве сложно? Прерывание + менеджер ресурсов на импульс, который sync() вызывать будет.
А ещё проще бывает запретить кеширование записи при запуске драйвера диска и никакого sync() уже не потребуется.
Записан
Evgeniy52
Jr. Member
**
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #7 : Августа 09, 2011, 02:05:00 pm »

Мы используем Compact Flash и devb-eide.
Использует ли драйвер кэширование из документации не очевидно, да и не совсем понятно как устроен контроллер в самой CF.
Кстати, отключение кэширования будет замедлять работу системы, как я понимаю.
Записан
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #8 : Августа 09, 2011, 02:22:26 pm »

http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=/com.qnx.doc.neutrino_lib_ref/s/shutdown_system.html
в 6.4.1 вроде тоже самое
Записан
Evgeniy52
Jr. Member
**
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #9 : Августа 09, 2011, 02:48:02 pm »


в 6.4.1 этой функции нет.
Да и чем это отличается от вызова утилиты shutdown?
Записан
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #10 : Августа 09, 2011, 02:58:43 pm »

Да и чем это отличается от вызова утилиты shutdown?
Вот бы ещё исходные тексты shutdown, чтобы включить их в системный монитор. А то ведь действительно, когда супервизор питания дернет прерывание останется всего несколько миллисекунд чтобы что-то сделать. И тратить это время на загрузку утилиты даже из proc файловой системы не хотелось бы.
хм... должны быть
Записан
LH
Full Member
***
Offline Offline

Сообщений: 124


Просмотр профиля
« Ответ #11 : Августа 09, 2011, 04:50:24 pm »

возможно это код shutdown для QNX4
Записан
qnxloder
Sr. Member
****
Offline Offline

Сообщений: 292


Просмотр профиля
« Ответ #12 : Августа 09, 2011, 05:01:15 pm »

возможно это код shutdown для QNX4
Судя по коду - это исходник функции shutdown_system от 6.5.0
хотя судя по дате все таки от 6.2.1 и не функции, а утилиты shutdown.
« Последнее редактирование: Августа 09, 2011, 05:04:59 pm от qnxloder » Записан
oder
Гость
« Ответ #13 : Августа 09, 2011, 08:57:52 pm »

Мы используем Compact Flash и devb-eide.
Использует ли драйвер кэширование из документации не очевидно, да и не совсем понятно как устроен контроллер в самой CF.
Кстати, отключение кэширования будет замедлять работу системы, как я понимаю.

А, по моему, вполне даже очевидно:
Код:
io-blk.so
Block I/O support

Syntax:
driver [blk option[,option...]] [fstype [options]]

Options:
delwri=delay
Specify the delay time for delayed writes. A dirty disk block remains in the cache without being physically written to the disk for up to delay seconds. The default is 2 seconds. For more information, see "Controlling writing operations," below.
Тоесть, если запустить
deb-eide blk delwri=0
то кеширования записи не будет.
А если запустить
deb-eide
то блок будет висеть в памяти до 2 секунд.

Еще в самом devb-eide параметр есть для физического устройства
Код:
Device-specific options:
wcache
Enable the device write cache.
Хотя, вряд-ли, CF - настолько интеллектуальное устройство, что имеет встроеный кеш
записи. Wink
Записан
oder
Гость
« Ответ #14 : Августа 09, 2011, 09:01:54 pm »

Кстати, отключение кэширования будет замедлять работу системы, как я понимаю.

Если открывать файлы по open(..., O_DSYNC, ...), тогда - вполне. А если таким не заниматься, тогда - с чего это?

[edit:]
Тоесть, понятно, что если долбить безустанно файл, то с кешированием записи будет быстрее, чем без неё. Но это же надо мозги хоть немного иметь и не долбить без крайней надобности. Тем более, что CF имеет вполне ограниченный ресурс записи и, если постоянно её писать, очень скоро она угробится.
« Последнее редактирование: Августа 09, 2011, 09:10:29 pm от oder » Записан
Страниц: [1] 2 3
  Печать  
 
Перейти в: