Системное программирование в среде Windows
Шрифт:
Область | Windows | UNIX | Библиотека С | Примечания |
---|---|---|---|---|
Асинхронный ввод/вывод | GetOverlappedResult | – | – | |
Асинхронный ввод/вывод | ReadFileEx | – | – | Расширенный ввод/ вывод с процедурой завершения |
Асинхронный ввод/вывод | SleepEx | – | – | Ожидание в дежурном режиме |
Асинхронный ввод/вывод | WaitForMultipleObjects (в данном случае ожидание дескрипторов файлов) | poll, select | – | |
Асинхронный ввод/вывод | WaitForMultipleObjectsEx | – | – | Ожидание в дежурном режиме |
Асинхронный ввод/вывод | WriteFileEx | – | – | Расширенный ввод/ вывод с процедурой завершения |
Асинхронный ввод/вывод | WaitForSingleObjectEx | waitpid | – | Ожидание в дежурном режиме |
Область | 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.