LINUX.ORG.RU

Вопрос про сравнение реализаций системных вызовов винды и линукс


0

0

Добрый день! Мне вот очень нужна информация про сравнение реализации системных вызовов в Windows и Linux. Помогите плиз, кто что знает, или подскажите, где про это прочитать. Нужно еще информация относительно того, почему в Windows количество системных вызовов на порядок больше чем в Linux. Поисковые системы не предлагать, уже искал.

anonymous

>почему в Windows количество системных вызовов на порядок больше чем в
>Linux

GUI в ядре

fghj ★★★★★
()

Ну это смотря что считать системным вызовом. Если смотреть на линукс с точки зрения posix то часть ситсмных вызовов может быть реализована как в ядре, так и на уровне библиотек. Если развивать эту идею, то можно начать считать все функции из libc системными вызовами. Помоему в windows аналогичная ситуация, хотя могу и ошибаться.

OxiD ★★★★
()

А. Таненбаум "Современные операционные системы"

anonymous
()
Ответ на: комментарий от OxiD

как можно сравнивать ж..у с пальцем ?
виндовое ядро - это черный ящик
единственное , что могу сказать - это различия в префиксе :-)

kto_tama ★★★★★
()

> Нужно еще информация относительно того, почему в Windows количество системных вызовов на порядок больше чем в Linux.

Win32 на порядок сложнее Unix

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Нужно еще информация относительно того, почему в Windows количество системных вызовов на порядок больше чем в Linux. потому что вв винде все делается через ж...

а Linux'е все делается через апи ввода-вывода

denisko
()

> почему в Windows количество системных вызовов на порядок больше чем в Linux

1. В Windows API более низкоуровневый, в отличие от POSIX. 2. В Windows дизайн менее ортогональный. 3. В Windows больше сущностей.

anonymous
()
Ответ на: комментарий от asgard

>>> в 1001 раз: не в ядре, а на уровне ядра.

>> а в чем разница?

> в кольцах.

То есть "в ядре" и "на уровне ядра" - это типа разные кольца? Орригинально.

tailgunner ★★★★★
()

в линуксе большая часть функций - библиотечные, в винде - все через сусколлы

generatorglukoff ★★
()
Ответ на: комментарий от tailgunner

>То есть "в ядре" и "на уровне ядра" - это типа разные кольца?

код ядра может быть выполнен на 3ем кольце, без перехода на нулевое

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

>> То есть "в ядре" и "на уровне ядра" - это типа разные кольца?

> код ядра может быть выполнен на 3ем кольце, без перехода на нулевое

Вам на лекциях о микроядре рассказали? И наплели о микроядерной архитектуре венды?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Вам на лекциях о микроядре рассказали? И наплели о микроядерной архитектуре венды?

А у вас есть обратные сведения? Код вообще-то закрыт и проверить нельзя...

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

>> Вам на лекциях о микроядре рассказали? И наплели о микроядерной архитектуре венды?

> А у вас есть обратные сведения?

Килограммы

> Код вообще-то закрыт и проверить нельзя...

А, так это упражнение в формальной логике... Код несколько раз утекал в сеть, по архитектуре венды было много книг, и сам Катлер сказал, что NT - ни фига не микроядерная. Но проверить, конечно, нельзя - вдруг это всё заговор матрицы.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Код несколько раз утекал в сеть

я тоже могу выложить /dev/random и сказать что это венда

>Код несколько раз утекал в сеть, по архитектуре венды было много книг, и сам Катлер сказал, что NT - ни фига не микроядерная.

хорошо, а что мешает наличию кусков в коде ядра, которые исполняются (для ускорения) в 3ем кольце?

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

>>Код несколько раз утекал в сеть

>я тоже могу выложить /dev/random и сказать что это венда

Попробуй.

> а что мешает наличию кусков в коде ядра, которые исполняются (для ускорения) в 3ем кольце?

O_o

Немедленно перестань употреблять эти вещества... а на сэконмленные день купи книгу по внутреннему устройству ядра NT, или хороший учебник по ОС.

tailgunner ★★★★★
()
Ответ на: комментарий от generatorglukoff

> исполняются (для ускорения) в 3ем кольце?

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

anonymous
()
Ответ на: комментарий от generatorglukoff

>>хорошо, а что мешает наличию кусков в коде ядра, которые исполняются (для ускорения) в 3ем кольце?

по-мойму тебя здорово глючит =))

alex_custov ★★★★★
()
Ответ на: комментарий от tailgunner

>>а в чем разница?

в нулевом кольце != в ядре. Даже у Руссиновича в книжке ядро и GUI нарисованы на одном уровне (т.е. кольце), но не вместе.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

>>а в чем разница?

> в нулевом кольце != в ядре

Фигассе. Всё, что в нулевом кольце - это ядро по определению.

> Даже у Руссиновича в книжке ядро и GUI нарисованы

Аааа... рекламные материалы Microsoft. Вопросов больше нет.

tailgunner ★★★★★
()
Ответ на: комментарий от generatorglukoff

>Код вообще-то закрыт и проверить нельзя...

Есть такая штука, как Windows Research Kernel. Исходники предоставляются для изучения вузам. Искать в гугле по слову cdcfkw.zip

kaktyc ★★★★
()
Ответ на: комментарий от anonymous

>Меня чрезвычайно заинтересовали причини, по которым код в третьем кольце может выполняться быстрее кода в нулевом кольце.

я не говорил, что именно код будет выполнятся быстрее, но вот на переключении контекстов можно выиграть время.

generatorglukoff ★★
()
Ответ на: комментарий от tailgunner

>>>Фигассе. Всё, что в нулевом кольце - это ядро по определению.

Ахренеть! Я вот написал код, который перезватывает вызовы API, при этом он работает в ринг0 - так он что, теперь ядро? Даже если вообще кольца убрать, оставить одно - испортится секъюрность - но от этого приложения не станут ядром. Вспомните хотя бы ДОС =)

theos ★★★
()
Ответ на: комментарий от theos

>>>Фигассе. Всё, что в нулевом кольце - это ядро по определению.

> Ахренеть!

Не переживай так - когда-то ты должен был это узнать.

> Я вот написал код, который перезватывает вызовы API, при этом он работает в ринг0 - так он что, теперь ядро?

Он теперь часть ядра.

> Даже если вообще кольца убрать, оставить одно - испортится секъюрность - но от этого приложения не станут ядром. Вспомните хотя бы ДОС =)

/me зопесал: "theos думает, что win32k.sys является приложением ДОС".

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>/me зопесал: "theos думает, что win32k.sys является приложением ДОС". ээ не понял? Я про ДОС вне кнтекста винды сказал, просто как пример ОС где приложения выполняются с ядром в одном кольце.

А вам не кажется что ядро/не ядро - это разделение _логическое_ а не физическое? и что ОС и их ядра появились раньше, чем придумали "кольца защиты"?

theos ★★★
()
Ответ на: комментарий от theos

> А вам не кажется что ядро/не ядро - это разделение _логическое_ а не физическое?

Дружище, я достаточно знаю об ОС и их ядрах... а изучение истории нашего ремесла - так вообще мое хобби.

> ОС и их ядра появились раньше, чем придумали "кольца защиты"?

Если я правильно понял, речь шла о двух конкретных ОС, а не путях развития сферичеких ядер в вакууме.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да, о двух конекрентых. Просто ты сказал, то в одном кольце => в ядре. И для меня это кажется совершенно несуразным. Потому что такая классификация бессмыслена: получается что все прикладные программы в железякакх колец - в ядре. ДОС кстати - не сферична, а используется до сих пор (что я думаю вы и без меня конечно знаете, тем более странно об этом думать). Или ваше определения ядра касается только Windows? тем более странно.

theos ★★★
()
Ответ на: комментарий от theos

s/железякакх колец/железяках без колец

s/этом думать/это слышать

theos ★★★
()
Ответ на: комментарий от theos

> Да, о двух конекрентых. Просто ты сказал, то в одном кольце => в ядре.

Потому что для них - это так. И для большинства существующих ОС - это так.

> И для меня это кажется совершенно несуразным.

А ты подумай и перестань тормозить

> Потому что такая классификация бессмыслена: получается что все прикладные программы в железяках без колец - в ядре.

При желании, любая прога в железках без колец может стать частью ядра. Ты что, не перехватывал int 21h в ДОС?

> Или ваше определения ядра касается только Windows? тем более странно.

Любой монолитной операционки на архитектуре с режимами пользователя и супервизора.

Ну а если ты дашь отвечающее здравому смыслу определение того, что такое "быть частью ядра", ты всё поймешь.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Руссинович, Соломон "Внутреннее устройство Windows, 4 изд", которую кстати рецензировал Катлер:

Windows включает следующие компоненты режима ядра:
- Исполнительная система Windows, содержащая базовые сервисы операционной системы,
которые обеспечивают управление памятью, процессами и потоками, защиту, ввод-вывод и взаимодействие между процессами
- Ядро (kernel) Windows
- Драйверы устройств
- Уровень абстрагирование от оборудования, изолирующий ялдро, драйверы и 
исполнительную систему от специфики оборудования на данной аппаратной платформе
- Подсистема поддержки окон и графики

                Пользовательский режим
-------------------------------------------------------------
                Режим ядра


   ----------------------------------       --------------------
   |  Исполнительная система        |       |  Поддержка окон  |
   |---------------------------------       |  и графики       |
   |  Ядро  |   Драйверы устройств  |       --------------------
   |---------------------------------
   |              HAL               |
   ----------------------------------

alex_custov ★★★★★
()
Ответ на: комментарий от tailgunner

имхо у тебя слишком широкое понятие ядра, для тебя в ядре и на уровне ядра - одно и то же, для меня - нет. Вообще, об этом можно спорить вечно =)

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

> имхо у тебя слишком широкое понятие ядра

Не-а, обычное, инженерный здравый смысл. Почитай хоть http://en.wikipedia.org/wiki/Kernel_(computer_science) и сравни это с API, предоставляемым компонентом NT Executive, который MS (по исторически-маркетинговым причинам, ИМХО) называет "kernel".

tailgunner ★★★★★
()

ну вы даете, вместо того что бы обсжудать различия сисколов, вы тут нафлудили что ядро а что нет. Что касается winapi, так эти функции и не системные вызовы вовсе... это сервисы из библиотек типа kernel32, user32 и т.д., которые в свою очередь уже могут там вызывать какие нить системные вызовы...а могут и не вызывать, поэтому этих функций так многа. Плюс обьема гуи добавляет, да и вообще в дизайне win32 многа лишней хрени, которая только все усложняет. К тому в никс много операций осуществляется через /proc и /dev, а в венде это снова winapi. Если нужна информация по поводу механизма системных вызовов, то про винду у русиновича почитать можно, а про никс исходники ядра (где то есть статьи с описанием базовых техник в ядре с приведением кода ядра), можно маны еще посмотреть, но там хз.

s0L
()
Ответ на: комментарий от s0L

Руссинович, Соломон "Windows Internals", тётка эта, как её, которая ядро WinNT с Катлером проектировала, "Inside Windows NT"

"системный API" в винде размазан: kernel32, user32 являются "внешним" стабильным API к ядру, экспортирующим внутреннее нестабильное "нативное" API, функции Nt... , которое в свою очередь реализует сисколы или является обёрткой к ним.

Сам сисколл -- заглушка-обёртка для трансляции вызова API из режима пользовательского в режим ядра, функция, которая вызывается из стабильного пользовательского API OS из юзерленда, далее эта функция вызывает прерывание или SYSENTER для перехода в кольцо 0 "в режим ядра", которое диспетчиризует вызов далее в нужную внутреннюю функцию ядра (нативное апи, нестабильный интерфейс ядра в линукс итп.)

это нагляднее видно не на виндоус/линукс вообще, а на каком-нибудь простом наглядном примере маленькой ОС вообще, например,

Хайку http://haiku-os.org/documents/dev/hello_kernel_you_have_a_syscall_from_userland

или простое самописное ядро на С++

google "Writing Kernel in C++":

http://www.osdever.net/tutorials/pdf/cpp_kernel.pdf

http://www.mail-archive.com/linux-development-sys@senator-bedfellow.mit.edu/msg 01076.html

по ядру линукс вроде есть Lions book , комментарии ядра с исходниками (правда, ядро не помню, то ли линукс, то ли классический юникс). Есть книжка "ядро Линукс с комментариями"

По Windows лучшие книжки -- это "Windows Internals" и "Inside Windows NT"

anonymous
()
Ответ на: комментарий от tailgunner

> Любой монолитной операционки на архитектуре с режимами пользователя и супервизора.

а что ядро, а что нет, например в QNX?

если менеджеры устройств, драйвера работают в кольце 0, они становятся от этого "ядром"?

если модульность чётко выделена -- это всё равно ядро потому что есть возможность переписать "не свой кусок памяти"?

если ресурсы менеджером/монитором выделяются православным другим способом -- это ядро или уже нет?
а каждый модуль работает в отделенных закрытых контейнерах, закрытых на уровне MMU (экзоядро, которое выделяет / мультиплексирует ресурсы безопасным способом модулям, модули, которым закрыт прямой доступ к памяти) -- где тут ядро? :)

//да, я тот анонимус :))

anonymous
()
Ответ на: комментарий от anonymous

> тётка эта, как её

Хелен Кастер (Helen Custer)

> которая ядро WinNT с Катлером проектировала

Не-а, но "Inside Windows NT" всё равно отличная книга :) Хотя слегка устаревшая, и до деталей реализации тех же системных вызовов не опускается.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>> Любой монолитной операционки на архитектуре с режимами пользователя и супервизора.

> а что ядро, а что нет, например в QNX?

В таких архитектурах границы становятся размытыми.

> экзоядро, которое выделяет / мультиплексирует ресурсы безопасным способом модулям, модули, которым закрыт прямой доступ к памяти) -- где тут ядро? :)

Речь шла о двух конкретных ОС с традиционной архитектурой.

Кстати, ну и что такое ядро в экзоядерной ОС?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>http://www.mail-archive.com/linux-development-sys@senator-bedfellow.mit.edu /msg 01076.html

ссылка http://209.85.135.104/search?q=cache:XWM5HmefoIsJ:www.mail-archive.com/linux-development-sys%40senator-bedfellow.mit.edu/msg010...

но тред бестолковый, можно не читать. Лучше почитать про Fiasco как они ядро на С++ писали.

anonymous
()
Ответ на: комментарий от tailgunner

ага, ядро "размазано по небезопасному API"

> Кстати, ну и что такое ядро в экзоядерной ОС?

continuations небезопасных функций, замыкания самого экзоядра?

а так как экзоядро минимальное, просто мультиплексор ресурсов, то их можно выделить в отдельный модуль и назвать "ядро". Физически это будет ядро в смысле как минимальное API. Но остальные модули изолированы друг от друга нормальным безопасным API libOS, поэтому в ядро не входят. Можно наверно и дополнительно возможности позакрывать, где ожидается какая-то динамически меняющаяся часть в неизвестном заранее окружении.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.