Главная страница
Навигация по странице:

  • Второе издание книги включает...

  • Вступительное слово Эндрю

  • Второе издание


    Скачать 3.09 Mb.
    НазваниеВторое издание
    Дата08.09.2019
    Размер3.09 Mb.
    Формат файлаpdf
    Имя файлаLav_Robert_Razrabotka_yadra_Linux_Litmir.net_264560_original_254.pdf
    ТипДокументы
    #86226
    страница53 из 53
    1   ...   45   46   47   48   49   50   51   52   53
    п
    Память
    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 — зарегистри- рованная торговая марка Линуса Торвальдса.
    1   ...   45   46   47   48   49   50   51   52   53


    написать администратору сайта