OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 21:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 14:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
В процедуре Modules.GetProcedure происходит ожидание загрузки модуля, в котором должна быть
процедура, если такой модуль не загружен ещё. Почему это сделано так:
Код:
IF ~module.init THEN
   t := Machine.GetTimer();
   WHILE ~module.init & (Machine.GetTimer() - t < ModuleInitTimeout) DO END;
   IF ~module.init THEN (* timeout has expired *)
      RETURN;
   END;
END;

Ведь есть же Kernel.Timer, у него есть Sleep. А также есть AWAIT. Про AWAIT я ещё могу предположить, что он не сможет ощутить таймаут. А почему Sleep не использована?


Последний раз редактировалось budden Воскресенье, 22 Ноябрь, 2020 15:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему бесконечный цикл?
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 14:55 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Здесь нет бесконечного цикла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 15:09 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Семантическая очепятка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 15:37 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Для работы A2 достаточно 4 псевдомодуля ( псевдомодуль, потому что реально это может быть разбито на более мелкие модули ): 1) минимальная абстракция над железом, 2) управление памятью, 3) управление модулями, 4) управление активными объектами.
Теоретически, это 4 модуля Machine, Heaps, Modules, Objects. Это минимально необходимый рантайм для языка Активный Оберон. И здесь не применяются языковые блокировки и механизмы синхронизации. Используются свои блокировки через глобальный спинлок.
Модуль Kernel это прослойка между ядром и вышележащей системой, он находится выше, ядро не может( и не должно) его использовать, и он, в целом, не является обязательным. А сейчас в нём почти ничего и нет.


Последний раз редактировалось Sergej Durmanov Воскресенье, 22 Ноябрь, 2020 16:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 15:49 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Спасибо, понял. Возможно, что те, кому нужно что-то иное, могут обеспечить, чтобы модуль был загружен, сами, до вызова GetProcedure.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 15:56 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Вообще-то, к этому моменту модуль уже загружен. Но может быть еще не инициализирован. Именно завершения инициализации (в случае необходимости ) цикл и ожидает. На цпу с частотой 1Gz цикл ожидания не превысит трех секунд, но инициализация явно завершится раньше)), так что ждать не придется


Последний раз редактировалось Sergej Durmanov Воскресенье, 22 Ноябрь, 2020 16:07, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 16:04 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Эту процедуру не нужно вызывать самостоятельно. Есть предопределенная процедура GETPROCEDURE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 17:48 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Да, я не совсем разобрался в том, что там происходит. Даже если мы ждём инициализации, которая, если я правильно понял, запускает код между BEGIN и END, то она может делать что угодно и сколь угодно долго, и мы будем до 3 секунд молотить этот пустой цикл. Насчёт GETPROCEDURE - нужно бы посмотреть, как она работает. На самом деле в том коде, к-рый я сейчас трогал (а это код отладчика от Богдана Т + реализация главного меню), есть своя хакерская GetProcedure, дающая доступ к коду любой процедуры, независимо от сигнатуры. Я стал сравнивать её с Modules.GetProcedure и увидел этот цикл.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB