2013-03-11 5 views
0

Я ищу ответ в течение многих дней, но ни один из них не разрешил мой запрос. Какая разница в системном вызове b/w & пользовательский вызов, я хочу рассчитать время процессора USER & Ключевое время CPU для функции printf() в C. Время cpu пользователя занимает время, затраченное процессором на выполнение пользовательской процедуры & Время ядра время занято cpu для выполнения программы ядра. Мой вопрос в том, где при вызове printf(), В конце вызова системы вызывается печать символов на дисплее. Я хочу сказать, что в обычной printf() часть принадлежит пользователю &, часть которого принадлежит ядру. Простой оператор присваивания a = b включает системный вызов?Различия b/w системные вызовы и вызовы пользователей в linux или любой ОС

ответ

1

Простой оператор a=b в C не требует системных вызовов; это полностью выполняется в пользовательском пространстве.

В printf() большая часть кода выполняется в пользовательском пространстве (например, форматирование предоставленных аргументов). Только для записи окончательного форматированного текста в stdout вызывается системный вызов write. Вы можете увидеть это с помощью инструмента strace, который показывает все системные вызовы, сделанные приложением.

+0

Это означает, что MOV a b является пользовательским вызовом. Если оба операнда находятся в том же сегменте памяти, доступном для этого процесса, это будет выполняться в пользовательском пространстве. Хорошо, спасибо. –

+0

Правильно. AFAIK при переходе Unix из пользовательского пространства в пространство ядра происходит только явно, т.е. вы увидите его в коде ассемблера (например, как инструкция SYSENTER, или обычно как вызов функции libc, которая выполняет системный вызов). – oliver