Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Программирование для Linux. Профессиональный подход - Митчелл М.

Митчелл М., Оулдем Дж., Самьюал А. Программирование для Linux. Профессиональный подход — М.: Вильямс , 2003. — 288 c.
ISBN 5-8459-0243-6
Скачать (прямая ссылка): programmirovaniedlyalinux2003.djvu
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 128 >> Следующая

Листинг 9.1. (bit-posJoop.c) Нахождение позиции старшего значащего бита в
цикле
#mclude <stdio.h>
#include <stdlib.h>
int main (xnt argc, char* argv[])
(
long max = atoi (argv[l)),-
long number; long l;
unsigned position; volatxle unsigned result;
/* Повторяем вычисления для большого количества чисел. */ for (number =
1; number <= max; ++number) {
/* Сдвигаем число вправо, пока результат не станет равным нулю.
Запоминаем количество операций сдвига. */
Гяава 9. Встроенный ассемблерный код 177
for (i = (number " 1), position =0; i 1=0; ++position)
i "= 1;
/* Позиция старшего значащего Сита - это общее число операций сдвига,
кроме первой. */ result = position;
}
return 0;
)
Листинг 9.2. (bit-pos-asm.c) Нахождение позиции старшего значащего бита с
помощью инструкции Ьяг!
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* argv[])
(
long max = atoi (argv[l]); long number; unsigned position; volatile
unsigned result;
/* Повторяем вычисления для большого количества чисел. *J for (number =
1? number <= max; ++number) {
/* Вычисляем позицию старшего значащего бита с помощью ассемблерной
инструкции bsrl. * 1 asm ('bsrl %1, %0" : "=r" (position) : ''г"
(number)); result = position;
)
return 0;
]
Скомпилируем обе версии программы в режиме полной оптимизации:
1 сс -02 -о bit-pos-loop bit-pos-loop.c
% сс -02 -о bit-pos-asm bit-pos-asm. с
Теперь запустим их с помощью команды time, которая замеряет время
выполнения. В командной строке каждой программы указано большое значение,
чтобы программа выполнялась хотя бы несколько секунд.
% time ./bit-pos-loop 25СС0000С
19.51user O.OOsystem G:20.40elapsed 95%CPU (Oavgtext+Oavgdata
Omaxresident)kOinputs+Ocutputs {73major+llminor)pagefaults Oswaps
% time ./bit-pos-asm 250000000
3.19user O.OOsystem 0:03-32elapsed 95%CPU (Oavgtext+Oavgdata
Cmaxresident)kCinputs+0outputs (73major+llminor)pagefaults Oswaps
Приведенные результаты могут немного меняться в зависимости от
загруженности системы, но хорошо видно, что ассемблерная версия
выполняется гораздо быстрее.
9.5. Вопросы оптимизации
Даже при наличии в программе ассемблерных вставок модуль оптимизации
компилятора пытается переупорядочить и переписать код программы, чтобы
минимизировать время ее выполнения. Когда оптимизатор обнаруживает, что
выходные даииые функции asm () не используются, он удаляет ее, если
только ему ие встречается ключевое слово
178 Часть I). Секреты Linux
volatile. Любой вызов функции asm [ ] может быть перемещен самым
непредсказуемым образом. Единственный способ гарантировать конкретный
порядок ассемблерных инструкций - включит ь все нужные инструкции в одну
функцию asm ().
Применение функции asm[] ограничивает эффективность оптимизации,
поскольку компилятор не понимает семантику используемых в ней
ассемблерных выражений. Помните об этом!
9.6. Вопросы сопровождения и переносимости
Если вы решили включить в программу архитектурно-зависимые ассемблерные
вставки. поместите их в отдельные макросы или функции, что облегчит
сопровождение программы. Когда все макросы находятся в одном файле и
задокументированы, программу легче будет перенести в другую систему, так
как придется переписать одии-едииствениый файл. Например, большинство
вызовов asm {) в исходных текстах Linux сгруппировано в файлах
/usr/src/linux/include/asmH /usr/src/linux/include/asm-i386.
Глава 9. Встроенный ассемблерный код 179
Безопасность
В этой главе...
10.1. Пользователи и группы 182
10.2. Идентификаторы пользователей и групп,
закрепленные за процессами 183
10.3. Права доступа к файлам 184
10.4. Реальные и эффективные идентификаторы 187
10.5. Аутентификация пользователей 190
10.6. Дополнительные проблемы безопасности 191
Одним из основных достоинств Linux является поддержка одновременной
работы нескольких пользователей, в том числе по сети. Но у всякой медали
есть обратная сторона. В данном случае - это угрозы безопасности,
возникающие, когда система подключена к Internet. При благоприятном
стечении обстоятельств хакер сможет войти в систему и прочитать,
модифицировать или удалить хранящиеся в ней файлы. Кроме того, сами
пользователи системы могут получать несанкционированный доступ к чужим
файлам.
В ядре Linux есть множество средств, позволяющих предотвратить подобные
события. Но защищать следует и обычные приложения. Предположим, к
примеру, что разрабатывается бухгалтерская иро1рамма. Любой пользователь
может зарегистрировать в программе отчет о расходах, но далеко не каждый
имеет право утвердить этот отчет. Пользователям разрешается просмат
ривать информацию о своих зарплатах, ио, естественно, tie
о зарплатах своих коллег. Менеджерам может быть разрешено получать
данные о зарплатах служащих их отделов, но не служащих других отделов.
Все эти меры предосторожности требуют особого внимания. Очень легко
допустить ошибку, из-за которой пользователи смогут делать то, что им ие
разрешено. Конечно, лучше всего воспользоваться помощью экспертов по
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 128 >> Следующая