Я ищу ответ в течение многих дней, но ни один из них не разрешил мой запрос. Какая разница в системном вызове b/w & пользовательский вызов, я хочу рассчитать время процессора USER & Ключевое время CPU для функции printf() в C. Время cpu пользователя занимает время, затраченное процессором на выполнение пользовательской процедуры & Время ядра время занято cpu для выполнения программы ядра. Мой вопрос в том, где при вызове printf(), В конце вызова системы вызывается печать символов на дисплее. Я хочу сказать, что в обычной printf() часть принадлежит пользователю &, часть которого принадлежит ядру. Простой оператор присваивания a = b включает системный вызов?Различия b/w системные вызовы и вызовы пользователей в linux или любой ОС
0
A
ответ
1
Простой оператор a=b
в C не требует системных вызовов; это полностью выполняется в пользовательском пространстве.
В printf()
большая часть кода выполняется в пользовательском пространстве (например, форматирование предоставленных аргументов). Только для записи окончательного форматированного текста в stdout вызывается системный вызов write
. Вы можете увидеть это с помощью инструмента strace
, который показывает все системные вызовы, сделанные приложением.
Это означает, что MOV a b является пользовательским вызовом. Если оба операнда находятся в том же сегменте памяти, доступном для этого процесса, это будет выполняться в пользовательском пространстве. Хорошо, спасибо. –
Правильно. AFAIK при переходе Unix из пользовательского пространства в пространство ядра происходит только явно, т.е. вы увидите его в коде ассемблера (например, как инструкция SYSENTER, или обычно как вызов функции libc, которая выполняет системный вызов). – oliver