Почему я должен минимизировать использование системного вызова в моем коде? - PullRequest
5 голосов
/ 21 июня 2011

Я хотел бы знать, есть ли причина минимизировать использование системного вызова в коде, и что является альтернативой неиспользования системного вызова, можно сказать, использовать API, но API по очереди использует системный вызов

Правда ??

Ответы [ 4 ]

12 голосов
/ 21 июня 2011

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

При выполнении системного вызова предпринимаются некоторые действия (предупреждение, это упрощение):

  • Вы вызываете библиотечную (упаковочную) функцию
  • Функция помещает аргументы туда, где они ожидаются.Также функция помещает номер системного вызова в eax
  • Функция вызывает ловушку (int 0x80 или что-то еще)
  • Процессор переключается в режим ядра
  • Ядро вызывает некоторую system_call подпрограмму
  • Регистры сохраняются в стеке ядра
  • Аргументы проверяются на правильность
  • Действие выполняется
  • Регистры восстанавливаются из стека ядра
  • Процессор возвращается в режим пользователя
  • Функция (наконец-то ...) возвращает

И я, наверное, забыл некоторые шаги.Разве это не похоже на много работы ?Все, что вы хотели, это смелая часть.Остальные накладные расходы.

1 голос
/ 21 июня 2011

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

Статья, чтобы лучше это понять:

  1. Понимание режима пользователя и ядра - Джефф Этвуд
0 голосов
/ 21 июня 2011

Единственная причина, которая приходит мне в голову сейчас - это проблемы с переносимостью. Если вы используете системные вызовы, ваш код будет работать только в этой операционной системе. И если вам нужно скомпилировать тот же исходный код для другой ОС, у вас будут проблемы, API может быть совершенно другим.

0 голосов
/ 21 июня 2011

Во-первых, если вы используете каркас или API (например, с помощью wxWidgets вместо рендеринга окон вручную или библиотеки GNU C), ваш код переносится между различными операционными системами.

Во-вторых, если вы используете API, у вас не возникнет проблем, если производитель изменит работу операционной системы под капотом, поскольку API (должны) быть такими же, как и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...