Чтение онлайн

ЖАНРЫ

Системное программирование в среде Windows

Харт Джонсон М.

Шрифт:
IPC RevertToSelf – – IPC SetNamedPipeHandleState – – IPC TransactNamedPipe – – WriteFile; ReadFile IPC WriteFile (в данном случае используется дескриптор именованного канала) write (fifo), msgrcv – Разное GetComputerName uname – Разное SetComputerName – – Безопасность SetNamedPipeIdentity Используйте
второй промежуточный бит каталога –
Глава 14: асинхронный ввод/вывод
Область Windows UNIX Библиотека С Примечания
Асинхронный ввод/вывод GetOverlappedResult
Асинхронный ввод/вывод ReadFileEx Расширенный ввод/ вывод с процедурой завершения
Асинхронный ввод/вывод SleepEx Ожидание в дежурном режиме
Асинхронный ввод/вывод WaitForMultipleObjects (в данном случае ожидание дескрипторов файлов) poll, select
Асинхронный ввод/вывод WaitForMultipleObjectsEx Ожидание в дежурном режиме
Асинхронный ввод/вывод WriteFileEx Расширенный ввод/ вывод с процедурой завершения
Асинхронный ввод/вывод WaitForSingleObjectEx waitpid Ожидание в дежурном режиме
Глава 15: Безопасность объектов Windows
Область Windows UNIX Примечания
Безопасность AddAccessAllowedAce chmod, fchmod Средства защиты объектов библиотекой С не поддерживаются
Безопасность AddAccessDeniedAce chmod, fchmod
Безопасность AddAuditAce
Безопасность CreatePrivateObjectSecurity
Безопасность DeleteAce chmod, fchmod
Безопасность DestroyPrivateObjectSecurity
Безопасность GetAce stat*, fstat*, lstat
Безопасность GetAclInformation stat*, fstat*, lstat
Безопасность GetFileSecurity stat*, fstat*, lstat
Безопасность GetPrivateObjectSecurity
Безопасность GetSecurityDescriptorDacl stat*, fstat*, lstat
Безопасность GetUserName getlogin
Безопасность InitializeAcl
Безопасность InitializeSecurityDescriptor umask
Безопасность LookupAccountName getpwnam, getgrnam
Безопасность LookupAccountSid getpwuid, getuid, geteuid
Безопасность getpwend, setpwent, endpwent
Безопасность getgrent, setgrent, endgrent
Безопасность setuid, seteuid, setreuid
Безопасность setgid, setegid, setregid
Безопасность OpenProcessToken getgroups, setgroups, initgroups
Безопасность SetFileSecurity chmod*, fchmod
Безопасность SetPrivateObjectSecurity
Безопасность SetSecurityDescriptorDacl umask
Безопасность SetSecurityDescriptorGroup chown, fchown, lchown
Безопасность SetSecurityDescriptorOwner chown, fchown, lchown
Безопасность SetSecurityDescriptorSacl

ПРИЛОЖЕНИЕ

В

Результаты измерения производительности

В примерах программ представлено широкое разнообразие альтернативных методик решения одних и тех же задач, как это было, например, при рассмотрении копирования файлов или преобразования текстовых файлов из кодировки ASCII в Unicode, и поэтому рассуждения о сравнительных преимуществах этих методик в отношении производительности являются вполне уместными. Однако в процессе создания приложений одних рассуждений подобного рода мало, и требуется точное знание количественных характеристик, позволяющих судить о влиянии того или иного выбора варианта реализации на производительность, а также о том, каковы в этом смысле потенциальные преимущества той или иной версии Windows, конфигурации оборудования или средств Windows, таких как потоки или асинхронный ввод/вывод. Программа timep (программа 6.2) позволяет измерять реальное (истекшее), пользовательское и системное (затраченное функциями ядра) время, необходимое для выполнения программ, и предоставляет удобный способ измерения производительности и определения ее зависимости от выбора методик и принципов программирования.

Тестовые конфигурации

Тестирование производилось путем выполнения на ряде хост-систем репрезентативного набора приложений из числа приведенных в данной книге примеров программ.

Приложения

В приведенных ниже таблицах приведены временные характеристики, полученные с использованием программы timep при выполнении тестовых программ на нескольких различных системах. Для этой цели были выбраны следующие функциональные области:

1. Копирование файлов. Показатели производительности определялись для нескольких различных методик, с помощью которых выполнялась эта операция, включая использование библиотеки С и Windows-функции CopyFile. Копирование файлов позволяет сосредоточить внимание на операциях ввода/вывода, не сопровождаемых обработкой данных.

2. Преобразование символов из кодировки ASCII в кодировку Unicode. В этой серии тестов выяснялась зависимость производительности от использования отображения файлов, буферов большого размера, флагов Windows, задающих последовательный режим обработки, и операций асинхронного ввода/вывода. Преобразование символов позволяет сосредоточить внимание на операциях ввода/вывода, сопровождаемых незначительной обработкой данных в процессе их перемещения из одного буфера в другой.

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

4. Сортировка файлов. Эта серия тестов демонстрирует, какое влияние на производительность оказывает использование отображения файлов и обработка файлов в памяти, а также переход к многопоточному режиму выполнения. При сортировке основная доля времени, по крайней мере, в случае крупных файлов, приходится не на файловые операции ввода/вывода, а на обработку данных процессором.

5. Многопоточная система "производитель/потребитель". Эта серия тестов позволила исследовать влияние на производительность различных методов синхронизации, используемых для реализации системы с многопоточной очередизацией, что дало возможность оценить сравнительные достоинства и недостатки обсуждавшихся в главах 8-10 моделей, основанных на применении объектов CRITICAL_SECTION, мьютексов и функции SignalObjectAndWait, а также сигнальной и широковещательной моделей переменных условий.

Программы для всех перечисленных приложений компоновались с использованием Microsoft Visual C++ 7.0 и 6.0 в виде окончательных (release), а не отладочных (debug) версий. Выполнение отладочных версий программ привело бы к заметному искажению картины показателей производительности. Специально проведенные тесты с интенсивной загрузкой процессора показали, что в этом случае доля дополнительных накладных расходов может достигать 80%, не говоря уже о том, что размеры отладочных исполняемых модулей превышают размеры модулей окончательных версий в два-три раза.

Хост-системы

Показатели производительности измерялись на четырех современных (по состоянию на 2004 год) системах, характеризующихся широким разнообразием конфигураций ЦП, памяти и ОС. Во всех случаях использовалась файловая система NTFS. В некоторых случаях приводятся также данные, полученные на устаревших системах.

1. Лэптоп, процессор Pentium с частотой 1 ГГц, ОС Windows 2000 Professional.

2. Лэптоп, процессор Intel Celeron с частотой 2 ГГц, ОС Windows XP.

Поделиться с друзьями: