Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Управление процессами

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix
Предыдущая тема :: Следующая тема  
Автор Сообщение
alexxxxxxxxxx
Гость





СообщениеДобавлено: Вт Июл 16 2002 15:37    Заголовок сообщения: Управление процессами Ответить с цитатой

Пишу под freeBSD дрова и столкнулся з задачкой. Если кто знает решение подскажите please.

А вот и задачка
Приложение вызывает read(). Этот вызов передается в драйвер и там обрабатывается. В это время приклодная программа спит до тех пор пока покаа драйвер не реализует этот
read(). Драйвер данные для read() берет из буфера, который должен быть предварительно заполнен через обработчик прерываний. Если буфер не полостью заполнен то возвращается как бы ошибка и сейчас по идее прикладная программа просто циклиться до момента пока буфер не заполнится и драйвер не вернет данные.
Можно ли это все сделать на уровне драйвера без зацикливания прикладной программы (т.е. чтобы прикладной процесс входил в состояние сна до тех пор пока read не выдаст аполненный буфер). Проблема возможно усложняется тем, что к драйверу могут обращаться два прикланых процесса. Проблема в том что если заблокировать код read() в драйвере (через вызов tsleep(addr)), то сможет ли потом другой процесс воспользоваться эим read() если буфер для этого процесса заполнен и готов к выдаче (т.е. read() контролирует разные буферы для разных файловых дескрипторов)
Вернуться к началу
Dmitry.Karpov http://www.
Гость





СообщениеДобавлено: Ср Июл 17 2002 08:17    Заголовок сообщения: Думаю, что дело в read() Ответить с цитатой

Насколько я понимаю, вызов read() обязан вернуть результат сразу, сообщив при этом количество байт, которые удалось прочитать. Если надо дождаться прочтения нужного числа байт, то надо использовать что-то типа семафоров, сигналов и других подобных мехнизмов... IMHO...
Вернуться к началу
alexxxxxxxxxxx
Гость





СообщениеДобавлено: Ср Июл 17 2002 10:21    Заголовок сообщения: Re: Думаю, что дело в read() Ответить с цитатой

Это точно
Вот и я поэкспериментировав 2 часа обнаружил что read() в коде драйвера можно просто усыпить (причем он заснет только для процесса вызвавшего read(), дугой процесс может обратиться к read() и все сработает как необходимо для этого процесса - вот это блин по настоящему круто, а я думал что заснет весь код драйвера, ну кроме аппаратных прерываний)

Спасибо за совьет

Что касается сигналов, то можно ли как то обойти момент завершения прикладной программы когда она получает сигнал от драйвера, а обработчика этого сигнала она не имеет (ну в общем в принципе не знает что ей драйвер может посылать какие то сигналы)?
Вернуться к началу
Dmitry.Karpov http://www.
Гость





СообщениеДобавлено: Ср Июл 17 2002 13:23    Заголовок сообщения: Надо узнать, стандартный обработчик или нет. Ответить с цитатой

По умолчанию на /proc монтируется псевдофайловая система, в которой можно узнать о процессе все (IMHO). Попробуй копнуть туда...
Вернуться к началу
alexxxxxxxx
Гость





СообщениеДобавлено: Ср Июл 17 2002 14:59    Заголовок сообщения: Re: Надо узнать, стандартный обработчик или нет. Ответить с цитатой

Сигнал не стандартный (пользовательский SIGUSR1), который можно игнорировать и прочее, но он зарезервирован системой именно для пользовательских сигналов.
А что именно содержит /proc когда запущен некоторый процесс (хотя бы в общем)?
Спасибо.
Вернуться к началу
alexxxxxxxxxxx
Гость





СообщениеДобавлено: Чт Июл 18 2002 11:06    Заголовок сообщения: Re: Надо узнать, стандартный обработчик или нет. Ответить с цитатой

В обшем разобрался как можно обойти аварийное завершение процесса приполучении им сигнала если отсутствует обработчик.
Во freeBSD под которую я пишу в структуре proc
можно откапать данные о том имеет ли процесс, которому собираются послать сигнал, обработчик этого самого сигнла и все характеристики того каким образом он реагирует на этот сигнал (маски, флаги. Ну и если имеет то можно посылать сигнал не боясь что программа аварийно завершится, а если нет то здесь все на совести передающего сигнал...
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...