Затраты на вызов операционной системы - PullRequest
0 голосов
/ 25 октября 2011

Каковы издержки вызова операционной системы несколько раз?

Например, у Microsoft есть API под названием «Getpixel». Вы должны указать координаты x, y, и он вернет значение цвета.Затем Setpixel должен сделать миллионы запросов к ОС.

Что именно это делает?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Что ж, для примера, который вы приводите для GetPixel, он медленный, потому что он использует драйвер режима ядра для выполнения реальной работы, и в этом драйвере он выполняет ряд проверок и блокировок, чтобы увидеть, действительно ли переданный вами контекст устройства передан. DC и чтобы убедиться, что он не изменен где-то в функции, затем он копирует область в новое растровое изображение в памяти и считывает нужный вам пиксель, а затем освобождает растровое изображение.

Таким образом, у вас есть переключатель режима ядра, блокировки, проверки и выделение памяти, копирование и освобождение, а затем другой режим переключается обратно на пользовательскую землю, и все это требует времени, и поиск способа использования функциональности GetPixel в вашей программе сэкономит вам десятки тысяч тактов.

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

1 голос
/ 25 октября 2011

Нет универсального ответа. Зависит от звонка, например вызовы, связанные с вводом / выводом, будут медленнее, чем те, которые этого не делают, зависит от того, как ОС выполняет системные вызовы, например перебивает? прыгает? - и зависит от архитектуры - например В архитектуре реализована инструкция системного вызова? это делает это обычными прыжками? -.

...