Второе издание
Скачать 3.09 Mb.
|
п Память MMU, Memory Management Unit, 233 адрес, 311 верхняя отладка, 381 переносимость, 403 виртуальная, 234; 311 выделение __alloc_percpu(), 261 __get_free_pages(), 238 alloc_page(),238 alloc_pages, 238 alloc_percpu(), 261 DEFINE_PER_CPU(), 260 get_zeroed_page(), 238 gfp_mask, 238; 241 kmalloc(), 240 kmap(), 257 kmap_atomic(), 258 page_address(), 238 vmalloc(),246 виртуально непрерывный участок, 247 временное отображение, 258 высокоуровневое, 240 контекст процесса, 245 модификаторы зоны, 242 модификаторы операций, 241 нижняя половина, 245 низкоуровневое, 238 обработчик прерывания, 245 отображение верхней памяти, 257 постоянное отображение, 257 связанная с процессором (per-CPU), 259 слябовый распределитель (slab layer, slab allocator), 248 списки свободных ресурсов, 248 стек ядра, 257 физически непрерывный участок, 238; 240; 246 флаги типов, 243 дескриптор, 313 выделение, 315 счетчик использования, 314 удаление, 315 защита, 41 зоны, 235 Предметный указатель 441 ZONE_DMA, 235 ZONE_HIGHMEM, 235 ZONE_NORMAL, 235 верхняя память (high memory), 234; 236 нижняя память (low memory), 236 кэширование, 263 область, 311 освобождение _free_pages(),239 free_page(),239 free_pages(), 239 free_percpu(), 261 kfree(), 245 kunmap(), 258 kunmap_atomic(), 259 vftee(), 247 прямой доступ (ПДП, DMA), 235 связанная с процессором get_cpu_ptr(), 262 get_cpu_var(), 260 put_cpu_ptr(), 262 put_cpu_var(), 260 слябовый распределитель, 47 kmem_cache_alloc(), 254 kmem_cache_create(), 252 kmem_cache_destroy{), 253 NUMA, 249 дескриптор сляба, 250 кэш, 249 отладка, 381 сляб (slab), 249 стек проверка переполнения, 381 процесса, 312 ядра, 42; 256 страница, 233 page_count(), 234 виртуальный адрес, 234 вытеснение, 234 гигантская, 318 данные буфера, 297 измененная, 337 копирование при записи, 54 нулевая, 312 размер, 402 флаги, 234 страничный кэш, 235 структура kmem_cache_s, 250 mm_struct, 313 page, 234;299 slab, 250 vm_area_struct, 316; 319 zone, 237 физическая, 234 Параллелизм pseudo-concurrency, 169 race condition, 164 безопасность при SMP-обработке, 170 при прерываниях, 170 защита данных, 170 истинный, 169 конкурентный доступ, 163 критический участок, 164 многопоточность, 57 многопроцессорность, 403 псевдопараллелизм,169 симметричная многопроцессорность, 170 синхронизация, 164 состояние "гонок", 164 состояние конкуренции за ресурс, 42; Переключение контекста, 87 Переносимость, 43; 389 Планирование передача управления, 66 с динамическим управлением по приоритетам, 68 с управлением по приоритетам, 68 Планировщик, 65 0(1), 66; 71; 175 балансировка нагрузки, 83 битовая маска приоритетов, 74 ввода-вывода, 302 CFQ, 308 deadline, 304 noop, 309 задержки обслуживания, 305 лифтовый алгоритм, 303 объединение, 302 прогнозирующий, 307 слияние, 302 сортировка, 302 с лимитом по времени, 304 с отсутствием операций, 309 с полностью равноправными очередями, 308 массив приоритетов, 74 активный, 76 истекший, 76 очередь выполнения, 72; 174 реального времени, 89 стратегия, 67 SCHED_FIFO, 89 SCHED_RR, 90 структура prio_array, 74 runqueue, 72 Подсистема, 358 163; 164 442 Предметный указатель Порядок выполнения, 180 барьер, 403 барьеры, 180; 202 barrier(), 204 mb(), 203 read_barrier_depends(), 203 rmb(), 202 smp_mb() ( 204 smp_rmb(), 204 smp_wmb(), 204 wmb(), 203 записи памяти, 203 компилятора, 204 чтения памяти, 202 переносимость, 403 Порядок следования __be32_to_cpu(),401 __cpu_to_be32(),401 __cpu_to_le32(),401 __le32_to_cpus(),401 big-endian, 399 little-endian, 399 байтов,399 определение,400 обратный, 399 прямой,399 Поток, 45; 57; 315 пространства ядра, 59; 316 kernel_thread(), 59 Преемптивность, 164; 169 данные связанные с процессорами, 201 запрещение, 200 preempt_disable(), 201 preerapt_enable{), 201 переносимость, 403 счетчик preempt._count, 89; 160 Прерывание, 27; 109; 169; 427 /proc/interrupts, 123 do_IRQ(), 122 handler, 111 interrupt request line, 110 interrupt service routine, 111 IRQ, 110 ret_from_intr(), 123 верхняя половина, 111; 131 контекст, 111; 119 линия запроса, 110 нижняя половина, 111; 132 обработчик, 111 add_interrupt_randomness(), 122 free_irq(), 114 request_irq(), 112 RTC, 117 shared, 116 быстрый, 113 описание, 115 освобождение, 114 регистрация, 112 реентерабельность, 116 совместно используемый, 113; 116 реализация обработки, 121 управление, 124 cli(), 126 disable_irq(), 126 disable_irq_nosync(), 126 enable_irq(), 126 in_interrupt(), 127 in_irq(), 127 irq_disabled(), 127 local_irq_disable(), 125 local_irq_enable(), 125 local_irq_restore(), 125 local_irq_save(), 125 sti(), 126 synchronize_irq(), 126 запрещение, 125 разрешение, 125 флаг SA_INTERRUPT, 113; 117 SA_SAMPLE_RANDOM, 113; 427 SA_SHIRQ, 113; 116 Пространство задачи,27 пользователя,51 ядра, 27; 51 Процесс I/O-bound, 67 ink, 52 parent, 52 processor-bound, 67 runnable, 65 timeslice, 66 wake_up(),83 адресное пространство, 51; 311 вытеснение, 70 пространства пользователя, 88 пространства ядра, 88 готовый к выполнению, 65 дескриптор, 46; 289 создание, 47 удаление, 61 завершение, 59 идентификатор, 48 иерархия, 52 квант времени, 66; 69; 209 контекст, 52; 104 корневой каталог, 290 макрос current, 49 не готовый к выполнению, 65 ограниченный скоростью ввода-вывода, 67 Предметный указатель 443 ограниченный скоростью процессора, 67 операции wakc_up(), 232 определение, 45 парамтер nice, 68 переназначение родительского процесса, 61 порожденный, 46 приоритет, 68; 78 пространство имен (namespace), 291 . родительский, 46 создание, 53 состояние, 5() sel_current_stale(), 51 set_task_state(), 51 sleep, 81 TASK_UNTERRUFTIBLE, 50; 81; 230 TASK_RUNNING, 50; 70 TASK_STOPPED, 51 TASK_UNINTERRUPTIBLE, 51; 81; 230 TASK_ZOMBIE, 51 ожидания, 81 заблокированное, 81 ожидания, 170 структура task_struct, 46 thread_info, 47 текущий каталог. 290 трассировка, 61 флаг need_resched, 83; 212 Псевдослучайные числа, 423 Пул энтропии, 423 операции add_inlerrupl_randomness(), 426 add_keyboard_randomness(), 426 add_mouse_randomness(), 426 get_random_bytes{), 427 р Режим ноутбука, 338 С Сборка модулей, 345 Связанный список, 320; 415 головной элемент, 417 двухсвязный, 415 инициализация, 418 кольцевой, 416 однослязный, 415 операции __list_for_each(), 422 list_add(), 419 list_add_tail(),419 list_del(),419 list_del_init(),419 list_cmpty(), 420 list_cntry(), 421 list_for_each(),421 fist_for_each_prev(), 422 list_for_each_safe(), 422 list_move(), 420 list_move_tail(),420 iist_splice(),420 list_splice_init(), 420 перемещение, 416; 421 структура элемента, 417 Сегмент. bss, 312 данных, 312 кода, 312 .. Сектор, 294 размер, 294 Система, 26 Системный вызов, 27 errno, 97 errnosys_call_table, 98 getpid(), 97 int $0x80, 99 ioctl(), 101; 368 mmap(), 326 mmap2(),, 326 munmapO, 327 sys_ni_syscall(), 98 syscall, 97 syscall(), 106 доступ из пространства пользователя, модификатор asmlinkage, 98 номер, 98 обработчик, 101 передача параметров, 100 планировщика, 91 nice(),91 sched_get_priority_max{), 91 sched_get_priority_min(), 91; 92 sched_getaffinity(), 91 sched_getcheduler(), 91 sched_getparam(), 91 schcd_getscheduler(), 91 . sched_rr_get_interval(), 91 sched_setaffinity(), 91 sched_setparam(), 91 sched_setscheduler(), 91 sched_yield(),91;92 производительность, 99 процессорной привязки schcd_getaffinity(), 92 schcd_sctaffinity(), 92 реализация, 101 106 444 Предметный указатель регистрация,104 файле entry.S, 98; 105 Сообщение Oops, 378 уровень вывода, 376 Сообщество разработчиков, 32; 405 maintainers, 412 ответственные разработчики, 412 отправка сообщений об ошибках, 412 список рассылки, 32; 405 Сосредоточенность во времени, 331 Состояние паники, 378 Средняя загруженность системы, 219 Стиль написания исходного кода, 406 ifdef, 410 indent, 411 typedef, 410 длинные строки, 407 имена, 408 инициализация структур, 411 комментарии, 408 отступы, 406 фигурные скобки, 406 функции,408 Страничный кэш, 331 структура address_space, 332 address_space_operations, 334 Структура attribute, 357; 366 cdev, 356 kobj_type, 357 kobject, 356 kref, 362 kref_get(), 362 kref_init(), 362 kref_put(), 362 kset, 358 list_head, 417 subsystem, 358 Структурность, 174 т Таблица страниц, 327 PGD, 328 PMD, 328 РТЕ, 328 глобальный каталог, 328 каталог среднего уровня, 328 управление, 329 уровни,328 Таймер, 139 APIC, 219 временная отметка (tick), 208 гранулярность, 211 декрементный счетчик, 218 динамический, 208; 223 обработчик, 226 задержки, 223 BogoMIPS, 229 mdelay(), 229 udelay(),229 короткие, 229 очередь ожидания, 232 с помощью цикла, 227 импульс (tick), 208 константа HZ, 209 USER_HZ, 217 операции add_timer(),225 del_timer(), 225 del_timer_sync(), 226 init_timer(),224 mod_timer(),225 schedule_timeout(), 230 переменная jiffies, 225 jiffies_64, 214 xtime, 219; 221 jiffies, 213 переносимость, 401 переполнение, 215 прерывание, 207; 208; 219 программируемый интервальный (PIT), 218 системный, 207; 218 обработчик прерывания, 219 срабатывание, 208 структура timer_list, 224 timespec, 222 счетчик отметок времени (TSC), 219 частота импульсов (tick rate), 208; 209 часы реального времени, 117; 218 ядра, 135; 223 Типы данных char, 396 sl6, 395 s32, 395 s64, 395 s8, 395 ul6, 395 u32, 395 u64, 395 u8,395 Трассировки вызовов функций, 378 Предметный указатель 445 У Упреждающее чтение, 319 Уровень блочного ввода-вывода, 294 Уровень событий kobject_uevent(), 370 kobjcct_uevcnt_atomic{), 371 Устройство блочное, 293 символьное, 293 унифицированная модель представления, 355 Ф Файл System.map, 380 Файловая система /ргос, 363 sysfs, 352; 363 HAL, 365 kobject_add(), 365 kobject_del(),365 kobject_init(), 365 kobject_register(), 365 kobject_unregister(), 365 sysfs_create_file(), 367 sysfs_crcate_link(), 367 sysfs_remove_file(), 368 sysfs_remove_link(), 368 атрибуты, 366 добавление файлов, 357; 366 корневой каталог, 363 операция show(), 367 операция store(), 367 соглашения, 368 структура sysfs_ops, 366 файлы, 366 блок, 294 виртуальная (VFS), 265 диспетчер логических томов (LVM), 273 добавление и удаление объектов, 365 каталог (directory), 268 метаданные (metadata), 268 монтирование (mount), 288 флаги mnt_flags, 289 обобщенный интерфейс, 266 объектная ориентированность, 269 операции суперблок alloc_inode, 273 clear_inode, 274 delete_inode, 273 destray_inode, 273 dirty_inode, 273 drop_inode, 273 put_inode, 273 put_super, 273 read_inode, 273 remount_fs, 274 statfs, 273 sync_fs, 273 umount_begin, 274 unlockfs, 273 write_inode, 273 write_super, 273 write_super_lockfs, 273 файл alo_fsync, 286 aio_read, 285 aio_write, 285 check_flags, 287 fasync, 286 flush, 286 fsync, 286 get_unmapped_area, 287 ioctl, 286 llseek, 285 lock, 286; 287 mmap, 286 open,286 poll, 285 read, 285 readdir, 285 readv, 286 release, 286 sendfile, 287 sendpage, 287 write, 285 writev, 287 файловый индекс create, 276 follow_link, 277 getattr, 278 link, 277 listxattr, 278 lookup, 276; 278 mkdir, 277 mknod, 277 permission, 278 put_link, 277 readlink, 277 femovexattr, 278 rename, 277 rmdir, 277 setattr, 278 setxattr, 278 symlink, 277 truncate, 277 unlink, 277 элемент каталога d_compare, 282 Предметный указатель 446 d_delete, 282 d_hash, 282 d_iput, 282 d_release, 282 d_revalidate, 282 особенности Unix, 267 пространство имен, 55 пространство имен (namespace), 267; 291 путь (path), 268 системные вызовы, 266 структура dentry, 279; 356 dentry_operations, 270; 281 file, 283 file_operations, 270; 284 file_struct, 270 file_system_type, 270; 288 files_struct, 289 fs_struct, 270; 289 inode, 274 inode_operations, 270; 276 namespace, 270; 289 super_block, 271 super_operations, 270; 272 vfsmount, 270; 288 суперблок (superblock), 268; 269; 270 управляющий блок (control block), 270 файловый индекс (inode), 268; 269; 274 кэш (icache), 281 файл (file), 267; 269; 283 элемент каталога (dentry), 268; 269; 279 LRU, 280 кэш(dcache),280 состояния, 280 хеш-таблица, 281 Функция bread(), 332 clone(),54;57 commit_writc(), 335 context_switch(), 390 copy_from_user(), 102 copy_mm(), 315 copy_process(), 55 copy_to_user(), 102 dup_task_struct(), 55 early_printk(),376 exec(), 54 exit(),46;59 exit_mm(), 315 flnd_vma(), 323 find_VMA_intersection(), 324 find_vma_prev(), 324 fork(),46;54;315 madvice(), 319 mmap(),319;325 munmap(), 327 panic(), 382 prepare_wrife(), 335 printk(), 39; 375 readpage(), 335 release_task(), 61 schedule(),76;87;104 SetPageDirty(),335 switch_mm(), 390 switch_to(),390 unhash_process(), 61 vfork(),54;56 vma_link(), 326 wakeup_bdflush(), 337 wb_kupdate(), 338 X Хеш-таблица страниц, 336 Ц Цилиндр, 295 э Энтропия, 423 оценка, 424 Шеннона, 424 Я Ядро Linux, 30 версии, 31 разрабатываемое, 31 стабильное, 31 схема присваивания имен, 31 tainted, 345 Unix, 29 дефекты, 374 микроядро, 29 модульное, 343 монолитное, 29; 343 особенности,38 отладка, 373 уровень событий, 369 экзоядро,29 Предметный указатель 447 Научно-популярное издание Роберт Лав Разработка ядра Linux 2-е издание Литературный редактор Е.Д. Давидян Верстка Т.Н. Артемеико Художественный редактор СЛ. Чернокозинский Корректоры JI.A. Гордиенко, А.В. Луценко, О.В. Мишутина, В.В. Столяр Издательский дом "Вильяме" 101509, г. Москва, ул. Лесная, д. 43, стр. 1 Подписано в печать 27.07.2006. Формат 70x100/16. Гарнитура Times. Печать офсетная. Усл. печ. л. 36,12. Уч.-изд. л. 28,86. Тираж 3000 экз. Заказ № 2169. Отпечатано по технологии CtP в ОАО "Печатный двор" им. А. М. Горького 197110, Санкт-Петербург, Чкаловский пр., 15. Разработка ядра Linux Второе издание Эта книга посвящена основным принципам функционирования и деталям реализации ядра Linux. Материал представлен в форме удобной как для тех, кто занимается разработкой кода ядра, так и для программистов, которые хотят лучше понять особенности работы операционных систем и, соответственно, разрабатывать более эффективные прикладные программы. В книге детально рассмотрены основные подсистемы и функции ядра Linux, особенности их построения, реализации и соответствующие программные интерфейсы. При этом ядро рассматривается с теоретической и прикладной точек зрения, что может привлечь читателей с различными интересами и потребностями. Автор книги является разработчиком основных подсистем ядра Linux. В этой книге он делится своим ценными опытом и знаниями по ядрам Linux серии 2.6. Рассмотренные вопросы включают управление процессами, планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. В книге также рассмотрены интересные новшества, которые появились в ядрах серии 2.6, такие как планировщик O(1), преемптивное ядро, уровень блочного ввода-вывода и планировщики ввода-вывода. Второе издание книги включает... Обновление информации о большинстве подсистем и функций ядер Linux серии 2.6 Новые детали о загружаемых модулях ядра Расширенное рассмотрение виртуальной памяти и особенностей выделения памяти в режиме ядра Дополнительные сведения по отладке кода ядра Примеры, касающиеся синхронизации выполнения кода ядра и работы таймеров Полезные детали по работе с заплатами и вопросы взаимодействия с сообществом разработчиков КАТЕГОРИЯ: Программирование для операционной системы Linux УРОВЕНЬ: Для опытных разработчиков и программистов средней квалификации ОБ АВТОРЕ Роберт Лав является активным разработчиком программного обеспечения с открытым исходным кодом и использует операционную систему Linux с первых дней ее существования. Он активно работает как в сообществе разработчиков ядра Linux, так и в сообществе разработчиков графической среды GNOME и сейчас занимает должность главного инженера по разработке ядра группы разработчиков Ximian Desktop корпорации Novell. Проекты по разработке ядра, которыми занимался автор, включают планировщик выполнения процессов, преемптивное ядро, уровень событий ядра, улучшение поддержки виртуальной памяти, улучшение поддержки многопроцессорного оборудования. Роберт является автором утилит schedutils и менеджера томов GNOME. Автор имеет степень бакалавра по математике и вычислительной технике университета штата Флорида. Вступительное слово Эндрю Мортона (Andrew Morton), ответственного разработчика ядер Linux серии 2.6. Опубликовано с разрешения и при содействии корпорации Novell, Inc. www.novellpress.com ISBN 5-8459-1085-4 0 6 1 7 1 www.williamspublishing.com Novell -зарегистрированнаяторговаямаркав США и других странах. Novell Press и Ximian - торговые марки корпорации Novell, Inc., зарегистрирован- ные в США и других странах. Linux — зарегистри- рованная торговая марка Линуса Торвальдса. |