Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 29 июн 2017, 18:55

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




Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 18 мар 2015, 13:59 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9651
Откуда: Харьков
Olej писал(а):
Всё! :

Попутно возникает вопрос: а зачем тогда вообще нужна спин-блокировка?

1. Для операций в обработчике аппаратных прерываний IRQ, когда нельзя потерять контекст выполнения, отвалившись в блокированное состояние... это да. Это то, что касается ядра системы, понятно и лежит на поверхности...

2. А в приложениях userspace? в стандарте POSIX - <pthread.h>:
Цитата:
pthread_spin_init ()
pthread_spin_destroy ()
pthread_spin_lock ()
pthread_spin_trylock ()
pthread_spin_unlock ()


Такое впечатление, что использование спин-блокировки в приложениях может объясняться ... только жадностью ;-) , т.к. классические блокировки, переводящие поток в блокированное состояние - накладные, требующие дёргать системный шедулер.

Ещё может быть аргументом сохранение закрепления за потоком конкретного номера процессора, и при возобновлении не возникновение необходимости синхронизации кэша процессора (если процессор поменялся). Но это сложные вопросы...


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 19 мар 2015, 10:18 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9651
Откуда: Харьков
Olej писал(а):
Те задачи, что обсуждались здесь, и ещё некоторые вопросы и задачи - собраны в связный текст и выложены для свободного использования: Практикум по Linux Kernel (продолжение).

Возможно, этот материал будет дополняться и обновляться.
Тогда это будет делаться (обновлением ссылок) прямо на этой странице.


Выложен обновлённый (сильно) вариант этого текста + архива примеров кода + архива вариантов решения задач + сопроводительного текста-справки к решению задач (чтобы понятно было где что искать).

На сегодня там порядка 56 задач, ... в порядке упражнений в программировании модулей ядра.
Это итоговая сборка всего, что показывалось на многих страницах обсуждения здесь в теме.

Ссылка та же, страница та же ... чтобы не плодить во множестве.
Только обновились ссылки на более свежие версии файлов.
Интересующиеся могут там всё это свободно скачать.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 19 мар 2015, 11:06 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9651
Откуда: Харьков
Olej писал(а):
Такое впечатление, что использование спин-блокировки в приложениях может объясняться ... только жадностью ;-) , т.к. классические блокировки, переводящие поток в блокированное состояние - накладные, требующие дёргать системный шедулер.


А ещё, по числу публикаций, такое впечатление, что спин-блокировка - это какое-то любимое детище MS, родившееся в недрах Windows ... ну ещё и Intel, оптимизирующей команды под эффективность Windows.
Извечное желание MS наэкономить много-много пятаков по мелочам.
С их "критическими секциями" и другими прелестями: Spinlock:
Цитата:
Кроме того, в той же Windows есть разновидности мьютексов (например, общеизвестная CRITICAL_SECTION, или же FAST_MUTEX в ядре), которые сначала работают как spinlock, используя опрос значения в памяти, и только потом, по истечении большого количества опросов, переходят в ядро к блокирующему ожиданию. Такие объекты сочетают лучшие качества спинлоков (минимальная цена захвата) и мьютексов (отсутствие растраты ресурса процессора на опрос).


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 26 апр 2017, 06:42 
Не в сети

Зарегистрирован: 21 апр 2017, 16:43
Сообщения: 1
Здравствуйте, Olej.
Прежде всего хочу поблагодарить вас за ваш "Практикум по модулям ядра Linux" - очень полезное пособие.
Минимум воды и максимум сути по важным практическим моментам.
Подробно и обстоятельно описаны действительно тонкие вещи, информацию по которым раньше приходилось искать по десяткам разных источников в сети - и далеко не всегда успешно.

Собственно по теме моего поста - хочу сообщить что при попытке запуска тестовой утилиты mp из архива int80 - системные вызовы возвращают ошибку EFAULT.
Если в mp.c заменить инструкцию 'int $0x80' на 'syscall' с соответствующими регистрами - то всё заработает.

Архитектура: x86_64
Ядро: 3.10.0-514.10.2.el7.x86_64
Дистр: CentOS 7.3.1611

Возможно на x86_64 начиная с определённых версий ядра 'int $0x80' больше не поддерживается?


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 29 апр 2017, 22:34 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9651
Откуда: Харьков
AleksOst писал(а):
Собственно по теме моего поста - хочу сообщить что при попытке запуска тестовой утилиты mp из архива int80 - системные вызовы возвращают ошибку EFAULT.
Если в mp.c заменить инструкцию 'int $0x80' на 'syscall' с соответствующими регистрами - то всё заработает.

Архитектура: x86_64
Ядро: 3.10.0-514.10.2.el7.x86_64
Дистр: CentOS 7.3.1611

Возможно на x86_64 начиная с определённых версий ядра 'int $0x80' больше не поддерживается?

Скорее всего (я уже не вспомню), примеры типа низкоуровневых вызовов mp проверялись и отлаживались только на 32-бит архитектурах, поскольку там ассемблерные инлайновые вставки, то на 64-бит их нужно писать по-другому.
Но очень интересно бы было посмотреть ваш пример, полный код, который работает ... сравнить и обсудить.

P.S. Непосредственно к этой теме может быть полезным, из новых экспериментов:
1. 4 способа писать в защищённую страницу (это относительно подмены системных вызовов).
2. 4 статьи о системных вызовах Linux
Цитата:
1. Делаем доступным все символы ядра.
2. Модификация системного вызова.
3. Сетевые системные вызовы.
4. Добавить системный вызов.

(здесь много нового, особенно относительно сетевых системных вызовах ... connect(), accept() и т.д., и относительно их принципиальной разницы реализаций на 32 и 64 бит)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: практикум по Linux Kernel
Непрочитанное сообщениеДобавлено: 29 апр 2017, 22:42 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9651
Откуда: Харьков
AleksOst писал(а):
Возможно на x86_64 начиная с определённых версий ядра 'int $0x80' больше не поддерживается?

Код:
   __asm__ volatile ( "int $0x80":
      "=a" (__res):
      "a"(__NR_mknod),"b"((long)(pathname)),"c"((long)(mode)),"d"((long)(dev))
   );

Я предполагаю (IMHO!), что нужно будет просто более тщательно разобраться с загрузкой 64-бит регистров, ... синтаксисом макроса online GCC для загрузки 64-бит регистров.
Команды sysenter/syscall появились достаточно поздно, в процессорах Pentium IV, если не путаю ...
А Linux, даже с достаточно поздними ядрами, работает на Pentium II и III :?:

P.S. Тем более, указанное вами ядро 3.10 - не такое уж и позднее ... и не так сильно отстоит от 2.6.42, на котором эти низкоуровневые примеры ещё работали точно ... дальше не помню. Я думаю, что проблема, скорее, с корректной загрузкой 64-бит регистров.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.135s | 17 Queries | GZIP : On ]