Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А, так вы из этих.
Интересно, а чем вам posix не нравится, почему так «не надо делать»?
There are two reasons why POSIX programmers call fork(). One reason is to create a new thread of control within the same program (which was originally only possible in POSIX by creating a new process); the other is to create a new process running a different program. In the latter case, the call to fork() is soon followed by a call to one of the exec functions.
named pipes в \\.\pipe\ — wtf
unix сокетов нет
mmap только в виде file-mapping
Да, реализаций asyncIO в ванильном ядре две.
И обе работают, и каждая удобнее, чем IOCP.
Create* стал удобнее fork через mingw? Это разные подходы, но использовать удобнее pthead.
Что вы на select наговариваете. Вам в одном потоке зачем 1024 дескриптора? За такое по рукам бьют…
по поводу select-это в винде он используется на всю катушку
ужас какой
p.s. ваши посты интересно читать очень, но уж очень какая-то радикальная позиция
Я честно говоря затрудняюсь вспомнить вообще хоть одну вещь, которая в Linux-е сделана лучше чем в NT.
А как на виндузе передать хэндл в другой процесс? Про DuplicateHandleEx знаю, но это решение на порядки хуже.
В линуксе создание процесса ничего не стоит, в отличие от винды. Это куда более серьезное подспорье для декомпозиции чем так критикуемый вами sh скрипт.
«Безопасность» если что поддерживается — есть базовая UNIX модель прав доступа, есть ACL.
One of the fundamental security problems with many historical UNIX systems has been that the privilege mechanism is monolithic-a user has either no privileges or all privileges. Thus, a successful «trojan horse» attack on a privileged process defeats all security provisions. Therefore, POSIX.1 allows more granular privilege mechanisms to be defined. For many historical implementations of the UNIX system, the presence of the term «appropriate privileges» in POSIX.1 may be understood as a synonym for «superuser» (UID 0). However, other systems have emerged where this is not the case and each discrete controllable action has appropriate privileges associated with it. Because this mechanism is implementation-defined, it must be described in the conformance document. Although that description affects several parts of POSIX.1 where the term «appropriate privilege» is used, because the term «implementation-defined» only appears here, the description of the entire mechanism and its effects on these other sections belongs in this equivalent section of the conformance document. This is especially convenient for implementations with a single mechanism that applies in all areas, since it only needs to be described once.
Message-oriented каналы тоже есть
А как на виндузе передать хэндл в другой процесс? Про DuplicateHandleEx знаю, но это решение на порядки хуже.Потрудитесь показать, чем же хуже.
Вот как то так. Безопасность в POSIX — implementation defined, что уже на много порядков лучше «классической юникс безопасности».
Message-oriented каналы тоже естьТе, которые pipe() или те которые socketpair()? Если присмотреться, я говорил именно о пайпах.
kqueue использует тот же принцип, что и IOCP. Какие там подробности реализации — уже неважно — огрехи реализации легко исправимы (даже если таковые имеются), огрехи дизайна — нет. epoll — хуже хотя бы потому, что никак не помогает с асинхронным вводом/выводом.
Ответил выше. fork помимо проблем с семантикой, просто тупо дороже.А CreateProcess связывается по LPC с Win-подсистемой, а там внутри неонка :) Я уверен что fork не копирует структуру страниц «в лоб». Например при отображении разделяемой памяти есть опции отложенной модификации таблицы страниц, здесь я думаю используется что-то подобное (таблица она же иерархическая, все ветки можно сразу не заполнять).
Ну хотя бы тем, что у процесса, в которого дуплицируется хендл, нет никакого контроля над тем, что в него дуплицирует.
hTargetProcessHandle [in]
A handle to the process that is to receive the duplicated handle. The handle must have the PROCESS_DUP_HANDLE access right.
Примерная аналогия — два процесса могут общаться через пайп; а могут путем прямой записи в адресное пространство друг друга. Так вот DuplicateHandle — это второе. А если нам нужно получить хендл из непривилегированного процесса?
Цитата вобще ни о чем.
Начиная с того, что называется «scope»: имеет три функции Бесселя третьего порядка, но совершенно не имеет безопасности. Нет ее в POSIX (используется обтекаемый термин «appropriate persmissions»). Действительно, зачем интерфейсу операционной системы средства безопасности?
Речь про сокеты. Какая разница? Вам шашечки или ехать?
Кстати на MacOS kqueue не поддерживает AIO в принципе. На FreeBSD, не уверен что AIO может работать с чем-то помимо файлов.
Я, честно говоря ожидал, что вы будете сравнивать AIO vs. non-blocking IO.
таблица она же иерархическая, все ветки можно сразу не заполнять
Кстати, какие вы видите проблемы в сочетании fork+треды?
Как вы кстати оцениваете концепцию имперсонации в windows?
Ну хотя бы тем, что у процесса, в которого дуплицируется хендл, нет никакого контроля над тем, что в него дуплицирует.Неправда.
hTargetProcessHandle [in]
A handle to the process that is to receive the duplicated handle. The handle must have the PROCESS_DUP_HANDLE access right.
Все контроллируется теми же средствами, что и весь остальной доступ в системе.
Цитата о том, что сам POSIX говорит о том, что вопросы безопасности стандарта не касаются.
Перечитайте еще раз контекст. Изначально речь шла о пайпах.Напомню что речь шла о том что в винде пайпы имеют режим с сохранением границ сообщений, а Linux — нет. Так вот я никак не пойму, как можно создать анонимный пайп с сохранением границ сообщений. А именованные пайпы надо с локальными сокетами сравнивать.
Хотя могу поклясться, что точно читал про асинхронный ввод/вывод с kqueue: может я ошибаюсь, а может и автор той статьи — найти ее сейчас не представляется возможным, так что готов принять позицию, что kqueue настолько же плох, насколько и epoll.
Какие там подробности реализации — уже неважно — огрехи реализации легко исправимы (даже если таковые имеются), огрехи дизайна — нет. epoll — хуже хотя бы потому, что никак не помогает с асинхронным вводом/выводом.
Я, честно говоря ожидал, что вы будете сравнивать AIO vs. non-blocking IO.Именно это я и сделал для epoll. И да, принципиальная разница есть, по крайней мере при высоких нагрузках (а зачем еще возиться с epoll/kqueue или IOCP).
таблица она же иерархическая, все ветки можно сразу не заполнятьУ иерархии всего два уровня. Зависимость от размера рабочего набора родительского процесса все равно линейная.
Кстати, какие вы видите проблемы в сочетании fork+треды?А Вы почитайте вот прямо сам SUS, разделы fork, pthread_atfork (ссылки я уже приводил), там все рассматривается.
Как вы кстати оцениваете концепцию имперсонации в windows?А давайте Вы мне не будете экзамен устраивать. Тем более по «концепциям».
Вы так не нервничайте пожалуйста. Винда ваша не идеальная система, и уж точно не лучше всего на свете, примиритесь с этим.
Вам могут сдуплицировать 1 хендл или 1000 или 100000, вы этот процесс уже не можете контролировать
...
Вы как-то странно понимаете термин безопасность. По факту — она есть.
Так вот я никак не пойму, как можно создать анонимный пайп с сохранением границ сообщений. А именованные пайпы надо с локальными сокетами сравнивать.
Короче вам асинхронный ввод-вывод подавай, иначе не православно :)
Ваши собственные слова. Вот видите — реализацию можно и пофиксить. А тезис об ущербности epoll опровергнут выше.
Пруф или не было.
epoll — хуже хотя бы потому, что никак не помогает с асинхронным вводом/выводом
Кстати стандартом предусмотрена функция posix_spawn(), которая работает как fork+exec и может быть реализована отдельным системным вызовом
Я их наизусть знаю. Так какие «проблемы» вы видите?
Просто мне идея имперсонации кажется плохим техническим решением. Но по этому вопросу я себя экспертом не считаю, вот и спрашиваю вашего мнения.
Вам могут сдуплицировать 1 хендл или 1000 или 100000, вы этот процесс уже не можете контролироватьНу, ок. Для предметного разговора мне нужна модель угрозы.
Отмечу лишь, что sendmsg/recvmsg легко реализуется на основе NtDuplicateHandle при помощи доверенного брокера (если это ДЕЙСТВИТЕЛЬНО понадобится, что само по себе еще не доказано), а вот
реализовать NtDuplicateHandle на основе сокетов — не получится (как пример: как мне восстановить связь с клиентами после рестарта демона).
Вы как-то странно понимаете термин безопасность. По факту — она есть.В POSIX она «implementation defined». Даже для файлов, где chmod сотоварищи пришлось оставить (посмотрите так же всякие open/fopen и прочие — попробуйте найти хоть какое то упоминание того, что конкретно может привести к EACCES), не говоря уже о kill и прочих штуках традиционно требовавших рута (и целого букета дополнительных ad-hoc правил, позволяющих обойти ограниченность классической модели безопасности).
Так вот я никак не пойму, как можно создать анонимный пайп с сохранением границ сообщений. А именованные пайпы надо с локальными сокетами сравнивать.Ок. Вот только это Win32 вызов (к некоторым частям которого я имею немало претензий). И именованные и анонимные пайпы сводятся к NtCreateNamedPipeFile, который позволяет указать режим.
Ваши собственные слова. Вот видите — реализацию можно и пофиксить. А тезис об ущербности epoll опровергнут выше.В целом вынужден согласиться. epoll в будущем вполне можно будет использовать для ожидания окончания асинхронных операций. Причем в рамках текущего интерфейса — не прибегая к костылям типа signalfd сотоварищи.
Очередная самоцитата:Пруф или не было.Я, честно говоря ожидал, что вы будете сравнивать AIO vs. non-blocking IO.Именно это я и сделал для epoll. И да, принципиальная разница есть, по крайней мере при высоких нагрузках (а зачем еще возиться с epoll/kqueue или IOCP).
epoll — хуже хотя бы потому, что никак не помогает с асинхронным вводом/выводом
Проблема в том, что fork предполагает исключительно однопоточный контекст (при этом «поток» является одновременно и «процессом» — контейнером ресурсов). «Разветвление» потока исполнения автоматически приводит к «разветвлению» ресурсов, что уже требует всяких хитростей в случае эксклюзивного владения. Введение POSIX thread-ов запутало ситуацию еще больше. pthread_atfork — попытка решения проблемы и, соответственно, признание ее существования.
Просто мне идея имперсонации кажется плохим техническим решением. Но по этому вопросу я себя экспертом не считаю, вот и спрашиваю вашего мнения.Не знаю откуда у Вас такое впечатление. Может Вы просто не совсем правильно понимаете призвание имперсонации. Это не механизм защиты (например, понижения привилегий для исполнения недоверенного кода), это механизм, облегчающий написание сервера: вместо того, чтобы самостоятельно сверять токен с дескриптором безопасности перед каждой операцией, эта работа возлагается на ОС: «пока не попрошу обратного сверяй весь доступ из этого потока с вот этим вот токеном, потому что мне лень делать это самостоятельно». То есть он позволяет сэкономить на вызовах Get(Named)SecurityInfo/AccessCheck и больше ничего (при этом делая код более надежным исключая человеческий фактор).
Вообще идея запуска двух потоков с разным уровнем доверия в одном процессе кажется мне несколько, как бы это сказать… неочевидной, что ли.
Можно пооткрывать файлов в эксклюзивном режиме и закинуть их хендлы в другой процесс, в результате все «шишки» достанутся жертве.
Принимается. Кстати считаю это очередным подтверждением моего тезиса о том, что не так уж и важно, насколько ОС замечательная сама по себе
Не понял кейс с рестартом демона. Клиенты сами переподключаются при обрыве соединения.
AFAIK неименованные пайпы сделаны из именованных under the hood.
Какая разница, что внутри, если функционал такой же?
Не считаю signalfd костылем. Файловый дескриптор — это все равно, что хендл в windows.
Так откуда берется принципиальная разница между AIO и non-blocking IO при высоких нагрузках?
А много вы знаете объектов в UNIX с эксклюзивынм владением? Мне кажется что все сложности успешно разрешены в рамках текущего стандарта.
Ну вот именно поэтому у меня идея имперсонации вызывает подозрения.
А на счет человеческого фактора вы не правы AFAIK — насколько я помню, нужно приложить определенные усилия для того, чтобы не было имперсонации при обычном вызове CreateFile
Начиная с того, что называется «scope»: имеет три функции Бесселя третьего порядка, но совершенно не имеет безопасности. Нет ее в POSIX (используется обтекаемый термин «appropriate persmissions»). Действительно, зачем интерфейсу операционной системы средства безопасности?
Не в обиду, но вы застряли в прошлом веке — и средствами, и инструментами, и мыслями…
Уровень большинства студентов оставляет желать лучшего, боюсь, это неразумно
Су-57 сейчас и есть самолёт для обучения. Для реального использования не хватает стабильности, над этим работают люди, а для обучения — прекрасен, т.к. полностью открыт, все приборы и прочее хорошо описано, есть руководство по сборке (также открытое и бесплатное), и т.д. и т.п.
Як-130 тут вообще ни к чему. Кстати, ещё есть и L-39 и многое другое. Но мне жаль студентов, которые будут всегда обучаться летать на каких-то игрушках. Надо смотреть на реальные вещи, приобретать полезные практические навыки и теоретические знания.
МГТУ им.Баумана запускает дисциплину «Операционные системы» на базе ReactOS