Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Общение
L4:fiasco
alman
Добавлено 01.03.2011 18:09 Сообщение: 11
alman
2

Пункты: 740
Регистрация: 04.02.2011
Пол: Мужчина
Цитата

По моему это огромный минус - переносимость кода должна иметь приоритет над эффективностью.


Это вопрос из области философии. L4 X2 предлагает 12 системных вызовов, из которых в User Space активно используются лишь один - L4_IPC.

Цитата

Странное заявление - многопоточные приложения никто не мешает писать и под Linux. Для справки - начиная с версии 2.6.37 ядро linux можно собрать полностью без BKL, а RT патч для ядра например полностью заменяет все спинлоки rt-мьютексами а все обработчики прерываний исполняются в отдельных потоках.


Разумеется, pthreads никто не отменял. А вот построить ядро на основе многопоточности? Кто может этим похвастаться? :)

Цитата

Вот когда вы доберетесь хотя бы до работы с USB (я уже не говорю про различные аудио/видео мультимедиа ускорители и кодеры/декодеры) тогда и будет смысл о чем то говорить. Дискету я последний раз видел пару лет назад случайно у жены.


С этим не спорю. Разумеется, всё так и есть. До работы с USB, если не случиться чудо, доберусь через полгода-полтора года. Где-то так.

Цитата

Несереьезно противопостовлять вашу ОС Linux - ни по скорости ни по функционалу, откуда будут у вас "вливания" если система закрытая ?


Я не противопоставляю систему Linux. Сейчас это было бы по меньшей мере глупо и смешно. Впрочем, спорить с Вами я тоже не хочу - Вы мне очень помогли, отвечая на вопросы и давая советы. Смысла спорить не вижу. Наоборот, я надеюсь, что Вы мне ещё поможете, как это делали раньше.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.03.2011 20:17 Сообщение: 12
sasamy
4.70

Пункты: 76914
Регистрация: 14.08.2009
Цитата

Это вопрос из области философии.


Чего же вы тогда на ассемблере не пишите - ведь это же так эффективно :)

Цитата

Разумеется, pthreads никто не отменял. А вот построить ядро на основе многопоточности? Кто может этим похвастаться? :)


посмотрите на список процессов в linux - ps ax.
Код

UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:25 ? 00:00:00 /sbin/init
root 2 0 0 15:25 ? 00:00:00 [kthreadd]
root 3 2 0 15:25 ? 00:00:00 [migration/0]
root 4 2 0 15:25 ? 00:00:01 [ksoftirqd/0]
root 5 2 0 15:25 ? 00:00:00 [watchdog/0]
root 6 2 0 15:25 ? 00:00:00 [migration/1]
root 7 2 0 15:25 ? 00:00:00 [ksoftirqd/1]
root 8 2 0 15:25 ? 00:00:00 [watchdog/1]
root 9 2 0 15:25 ? 00:00:01 [events/0]
root 10 2 0 15:25 ? 00:00:00 [events/1]
root 11 2 0 15:25 ? 00:00:00 [cpuset]
root 12 2 0 15:25 ? 00:00:00 [khelper]
root 13 2 0 15:25 ? 00:00:00 [netns]
root 14 2 0 15:25 ? 00:00:00 [async/mgr]
root 15 2 0 15:25 ? 00:00:00 [pm]
root 17 2 0 15:25 ? 00:00:00 [sync_supers]
root 18 2 0 15:25 ? 00:00:00 [bdi-default]
root 19 2 0 15:25 ? 00:00:00 [kintegrityd/0]
root 20 2 0 15:25 ? 00:00:00 [kintegrityd/1]
root 21 2 0 15:25 ? 00:00:00 [kblockd/0]
root 22 2 0 15:25 ? 00:00:00 [kblockd/1]
root 23 2 0 15:25 ? 00:00:00 [kacpid]
root 24 2 0 15:25 ? 00:00:00 [kacpi_notify]
root 25 2 0 15:25 ? 00:00:00 [kacpi_hotplug]
root 26 2 0 15:25 ? 00:00:00 [ata/0]
root 27 2 0 15:25 ? 00:00:00 [ata/1]
root 28 2 0 15:25 ? 00:00:00 [ata_aux]
root 29 2 0 15:25 ? 00:00:00 [ksuspend_usbd]
root 30 2 0 15:25 ? 00:00:00 [khubd]
root 31 2 0 15:25 ? 00:00:01 [kseriod]
root 32 2 0 15:25 ? 00:00:00 [kmmcd]
root 35 2 0 15:25 ? 00:00:00 [khungtaskd]
root 36 2 0 15:25 ? 00:00:00 [kswapd0]
root 37 2 0 15:25 ? 00:00:00 [ksmd]
root 38 2 0 15:25 ? 00:00:00 [aio/0]
root 39 2 0 15:25 ? 00:00:00 [aio/1]
root 40 2 0 15:25 ? 00:00:00 [ecryptfs-kthrea]
root 41 2 0 15:25 ? 00:00:00 [crypto/0]
root 42 2 0 15:25 ? 00:00:00 [crypto/1]
root 50 2 0 15:25 ? 00:00:00 [scsi_eh_0]
root 51 2 0 15:25 ? 00:00:02 [scsi_eh_1]
root 53 2 0 15:25 ? 00:00:00 [kstriped]
root 54 2 0 15:25 ? 00:00:00 [kmpathd/0]
root 55 2 0 15:25 ? 00:00:00 [kmpathd/1]
root 56 2 0 15:25 ? 00:00:00 [kmpath_handlerd]
root 57 2 0 15:25 ? 00:00:00 [ksnapd]
root 58 2 0 15:25 ? 00:00:04 [kondemand/0]
root 59 2 0 15:25 ? 00:00:03 [kondemand/1]
root 60 2 0 15:25 ? 00:00:00 [kconservative/0]
root 61 2 0 15:25 ? 00:00:00 [kconservative/1]
root 338 2 0 15:25 ? 00:00:00 [scsi_eh_2]
root 339 2 0 15:25 ? 00:00:01 [usb-storage]
root 341 2 0 15:25 ? 00:00:00 [usbhid_resumer]
root 364 2 0 15:25 ? 00:00:00 [jbd2/sda3-8]
root 365 2 0 15:25 ? 00:00:00 [ext4-dio-unwrit]
root 366 2 0 15:25 ? 00:00:00 [ext4-dio-unwrit]
root 397 2 0 15:25 ? 00:00:00 [flush-8:0]
root 435 1 0 15:25 ? 00:00:00 upstart-udev-bridge --daemon
root 439 1 0 15:25 ? 00:00:00 udevd --daemon
root 706 1 0 15:25 ? 00:00:03 /usr/local/Mobile_Partner/driver/HWActivator .bin
root 770 2 0 15:25 ? 00:00:00 [kpsmoused]
root 820 2 0 15:25 ? 00:00:00 [iwlagn]
root 821 2 0 15:25 ? 00:00:00 [phy0]
root 843 2 0 15:25 ? 00:00:00 [i915]
root 965 2 0 15:25 ? 00:00:00 [hd-audio0]
root 1014 2 0 15:25 ? 00:00:00 [jbd2/sda4-8]
root 1015 2 0 15:25 ? 00:00:00 [ext4-dio-unwrit]
root 1016 2 0 15:25 ? 00:00:00 [ext4-dio-unwrit]


вот те что в квадратных скобках с PPID 2 ([kthreadd]) - это все потоки ядра - или этого мало ?

Цитата

Впрочем, спорить с Вами я тоже не хочу - Вы мне очень помогли


В споре рождается истина и эти разговоры всего лишь разговоры, я бы помог вам на фисташку портировать но в okl4 питон 2.4 у меня не заработал нормально и мне неохота систему ломать, а старая фисташка из вашего архива на arm похоже вообще не соберется.
Спуститься к концу Подняться к началу
Персональная информация
alman
Добавлено 02.03.2011 01:37 Сообщение: 13
alman
2

Пункты: 740
Регистрация: 04.02.2011
Пол: Мужчина
Цитата

Чего же вы тогда на ассемблере не пишите - ведь это же так эффективно :)


Но непереносимо и геморройно. Говорят, современные компиляторы оптимизируют получше человека. Иногда всё же приходится писать на ассемблере всякие crt0 и тому подобные вещи, но это не от хорошей жизни :)

Цитата

вот те что в квадратных скобках с PPID 2 ([kthreadd]) - это все потоки ядра - или этого мало ?


Упс. Как-то пропустил, надо бы глянуть как оно внутри устроено. Но когда начал писать свою систему, этого не было. Зуб даю, что не было. А прошло всего каких-то 8 лет.

Я расскажу как у меня работает файловая система и почему она не похожа на другие реализации. Писал её в среде MS Visual Studio C++ 6.0. Образы файловых систем сформировал под Linux и перетянул их в Windows. Писал по спецификациям и книжке Таненбаума - всё получилось классно, но в одном потоке. Когда понял, как "форшманулся", было уже поздно - файловая система была готова и вообще не подразумевала многопоточность. Обращение к консоли через файловую систему блокировало все задачи до нажатие пользователем на клавишу. Серьёзная ошибка проектирования, исправление которой потребовал бы полностью переписать код файловой системы...

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

Поскольку запрос на чтение файла может инициировать несколько обращений к диску (напимер, чтение контрольной информации о файле чтобы найти сектор на диске, затем чтение самого сектора), то между запросом read() и ответом на него, во время операции чтения, другие процессы могут без проблем выводить информацию на экран, ждать ввода с клавиатуры или даже параллельно читать/писать другой файл - и всё это без потери производительности. При этом можно быть уверенным, что не произойдёт рассинхронизации данных, когда несколько задач или юзерспэйс нитей будут обращаться к внутренним данным файловой системы. Даже трудно посчитать, сколько зайцев было убито одним выстрелом.

Собственно говоря, ошибка проектирования сыграла ключевую роль в создании хитрого алгоритма, благодаря которому система выгодно отличается от остальных. К слову говоря, в Solaris на каждую юзерспэйс нить создаётся нить в ядре. Нормально? Я бы так не сказал.

Наконец, предвижу критику апологетов мнопроцессорных систем - мол, глупо и не оптимально в одном потоке разгребать запросы от нескольких процессоров. Якобы потеряются все преимущества от многопроцессорности. А вот и нет! Благодаря переключению контекста на основе стека, все операции файловой системы вырождаются в относительно небольшие участки кода, исполняемые между запросами/ответами. На синхронизацию доступа к общим ресурсам потратится больше времени, чем на обслуживание коротких запросов. Кроме того система станет более отзывчивая, а планировщик задач более простым.

К чему я это рассказываю? Ну, наверное, чтобы ещё через 8 лет повторить кому-нибудь, а мне ответили, что современные системы так и работают. :(


Цитата

В споре рождается истина и эти разговоры всего лишь разговоры, я бы помог вам на фисташку портировать но в okl4 питон 2.4 у меня не заработал нормально и мне неохота систему ломать, а старая фисташка из вашего архива на arm похоже вообще не соберется.


Собирал okl4 на Slackware 12.0.0 python 2.5
Пришлось сделать хардлинк с python 2.5 на python 2.4 и собралось без проблем.

А Вы Линукс в виртуальной машине используете или как основную систему? Я использую Windows и MS Virtual PC со Slackware внутри. Теперь, правда, добавилась VMWare с Debian от starterkit.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.03.2011 09:40 Редактировалось 02.03.2011 10:01 Сообщение: 14
sasamy
4.70

Пункты: 76914
Регистрация: 14.08.2009
Цитата

Собирал okl4 на Slackware 12.0.0 python 2.5
Пришлось сделать хардлинк с python 2.5 на python 2.4 и собралось без проблем.

А Вы Линукс в виртуальной машине используете или как основную систему? Я использую Windows и MS Virtual PC со Slackware внутри. Теперь, правда, добавилась VMWare с Debian от starterkit.


У меня нативный ubuntu и с 2.6 такой трюк не проходит

Код

tools/SCons/Sig/MD5.py:41: DeprecationWarning: the md5 module is deprecated; use hashlib instead
md5 = imp.load_module('md5', file, name, desc)
tools/SCons/Environment.py:41: DeprecationWarning: The popen2 module is deprecated. Use the subprocess module.
import popen2
scons: Reading SConscript files ...
File "tools/SCons/Tool/gas.py", line 36

import as

^

SyntaxError: invalid syntax


update
хех - переустановил пакеты с python2.4 - вроде задышало :) с тулчейном только проблема возникла - похоже собирать нужно только ихними инструментами..
Спуститься к концу Подняться к началу
Персональная информация
alman
Добавлено 03.03.2011 12:04 Сообщение: 15
alman
2

Пункты: 740
Регистрация: 04.02.2011
Пол: Мужчина
Цитата

хех - переустановил пакеты с python2.4 - вроде задышало :) с тулчейном только проблема возникла - похоже собирать нужно только ихними инструментами..


Их тулчейн вполне может ужиться с тулчейном, идущим на диске starterkit. Неужели можно надеяться, что Вы запустите OKL4?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 03.03.2011 16:04 Сообщение: 16
sasamy
4.70

Пункты: 76914
Регистрация: 14.08.2009
Цитата

Неужели можно надеяться, что Вы запустите OKL4?


По крайней мере не вижу препятствий сделать это :)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Общение