Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 669
от 29.01.2007, 04:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: , Экспертов:
В номере:Вопросов: 2, Ответов: 5


Вопрос № 72242: Здравствуйте. Подскажите на каком уровне ОС понимает что она работает на 2 процесорах? Как в программе разделить код на 2 процесора чтобы он равномерно распределялся. я так понимаю это происходит на 0 уровне. И где можно взять документаци...
Вопрос № 72300: Подскажите плиз как решить такую задачу. Имеется два компьютера в сети, на каждом из них выполняется по одному процессу, которые используют общий для этих двух процессов файл. Необходимо синхронизировать использование этого файла <...

Вопрос № 72.242
Здравствуйте.
Подскажите на каком уровне ОС понимает что она работает на 2 процесорах?
Как в программе разделить код на 2 процесора чтобы он равномерно распределялся. я так понимаю это происходит на 0 уровне.
И где можно взять документацию?
Отправлен: 23.01.2007, 12:06
Вопрос задал: Сергей Скобин (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Сергей Скобин!

ОС сама выделяет и распределяет процессоры по приоритетам. Для этого используй потоки, thread.

В системе Windows есть функции CreateThread.

Также можно указать желаемый процессор для этого потока.


---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 23.01.2007, 12:14


Вопрос № 72.300
Подскажите плиз как решить такую задачу.
Имеется два компьютера в сети, на каждом из них
выполняется по одному процессу, которые используют общий
для этих двух процессов файл. Необходимо
синхронизировать использование этого файла
этими двумя процессами. Т.е. если один процесс
работает с этим файлом другой - ожидает пока
первый процесс закончит свою работу.
Как это реализовать? Хотя бы основные принципы!
Спасибо за ответы!
Отправлен: 23.01.2007, 19:38
Вопрос задал: kool (статус: 6-ой класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ramok
Здравствуйте, kool!

самое просто это использовать файлов-флагов.
например у вас файл называется share.dat.
первый процесс пытается создать файл share.dat.lock нулевого размера, если ему это удается, то он начинает работать с файлом, и когда заканчивает то стирает этот файл.
процесс два тоже пытается создать файл share.dat.lock, но допустим что этот файл уже создан. значит другой процесс сейчас работает над этим файлом. процесс переодически пытается создать лок файл, до тех пор пока ему это не удается. после окончании работы он в свою очередь стирает лок файл.
Ответ отправил: ramok (статус: Студент)
Ответ отправлен: 23.01.2007, 19:49
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Это наверное самое универсальное решение, хотя и не самое быстрое!

Отвечает: Евгений Иванов
Здравствуйте, kool!

Используй атрибут доступа. Открывай файл с закрытием доступа, и с проверкой на доступ. Если доступ закрыт, то ждёт по циклу, пока доступ будет разрешён. Когда один комп завершит работу, закрывай файл, тогда второй комп откроет его и т.д.

Насчёт задержек - отдавай процессорное время и проверяй через каждые 500 мс, взгляни на прерывание int 21 и её функции 83h и др.

Удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 23.01.2007, 19:52
Оценка за ответ: 5
Комментарий оценки:
Наверное это самое лучшее, но хотелось бы
чтобы ожидающая прога не занимала процессорное время, каждый раз проверяя
освободился ли файл.
Спасибо!

Отвечает: Лысков Игорь Витальевич
Здравствуйте, kool!
Хочу предложить взглянуть на проблему по-другому.
Если один процесс является основным и является хозяином файла.
Тогда можно организовать систему по принципу клиент-сервер.
В таком случае основной процесс монопольно работает с файлом сам,
плюс выполняет запросы от клиентов.
Клиент-сервер можно организовать, например, при помощи пайпов или сокетов

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 24.01.2007, 11:23
Оценка за ответ: 5
Комментарий оценки:
Но если сервер упадет (скажем комп
отключился), то все.
Но вариант интересный!
Спасибо!

Отвечает: Зенченко Константин Николаевич
Здравствуйте, kool!
если Вы используете CreateFile: Вам нужно переменную dwShareMode обнулить
файл открывается блокированным для других процессов до закрытия файла
если файл уже открыт фунция дает ошибку.
если Вы используете OpenFile: Вам нужно переменной uStyle присвоить значение
OF_SHARE_EXCLUSIVE
Удачи!
Ответ отправил: Зенченко Константин Николаевич (статус: 1-ый класс)
Ответ отправлен: 25.01.2007, 11:41
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.43 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное