Что издержки вовлечены в переключатель режимов

Я поражен, что никто не упомянул Pragmata. Это - BMW программирования шрифтов. Сжатый, читаемый, и вершина простой элегантности.

сопроводительный текст http://www.fsd.it/fonts/imm/pr_abc.gif

существует теперь проект сбора средств, продолжающийся для PragmataPro (который покрывает большую часть Unicode, чем Pragmata) сделать его доступным бесплатно в соответствии с лицензией Creative Commons!

14
задан ghayalcoder 7 December 2009 в 14:19
поделиться

2 ответа

На переключателе простого режима не должно быть кеша процессора или сброса TLB.

Быстрый тест показывает мне, что на моем ноутбуке с Linux для завершения процесса пользовательского пространства требуется около 0,11 микросекунды. простой системный вызов, выполняющий незначительный объем работы, кроме переключения в режим ядра и обратно. Я использую getuid (), который копирует только одно целое число из структуры в памяти. strace подтверждает, что системный вызов повторяется МАКС. Раз.

#include <unistd.h>
#define MAX 100000000
int main() {
  int ii;
  for (ii=0; ii<MAX; ii++) getuid();
  return 0;
}

На моем ноутбуке это занимает около 11 секунд, измерено с использованием time ./testover, а 11 секунд, разделенные на 100 миллионов, дают вам 0,11 микросекунды.

Технически это два переключателя режимов, поэтому я полагаю, вы можете утверждать, что переключение одного режима занимает 0,055 микросекунды, но односторонний переключатель не очень полезен, поэтому я '

12
ответ дан 1 December 2019 в 14:21
поделиться

Есть много способов переключить режим на процессорах x86 (что я предполагаю здесь). Для пользователя, называемого функцией, обычным способом является выполнение перехода к задаче или вызова (называемых воротами задач и воротами вызова). Оба они включают переключение задач (эквивалентное переключению контекста). Добавьте к этому небольшую обработку перед вызовом, стандартную проверку после вызова и возврат. Это округляет минимум до переключателя безопасного режима.

Что касается тайминга Эрика, я не эксперт по Linux, но в большинстве ОС, с которыми я имел дело, простые системные вызовы кешируют данные (если это можно сделать безопасно) в пространство пользователя, чтобы избежать этих накладных расходов. И мне кажется, что getuid () будет лучшим кандидатом для такого кеширования данных. Таким образом, Эрик '

2
ответ дан 1 December 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: