Второе издание
Скачать 3.09 Mb.
|
г Библиография и список литературы С писок литературы отсортирован и содержит некоторые из самых интересных и полезных книг, которые близки по теме, или дополняют материал данной книги. Полезность этих книг проверена временем. Некоторые из них представляют со- бой "священные писания" но соответствующим темам, в то время как другие просто кажутся автору интересными, глубокими или занимательными. Автор надеется, что читателю они тоже окажутся полезными. Наилучшая ссылка на "дополнительное чтение", которая лучше всего дополняет материал данной книги — это исходный код ядра. Для работы с ОС Linux у нас есть неограниченный доступ к полному исходному коду ядра современной операционной системы. Не принимайте это как должное! Разберитесь с ним! Читайте код! Пишите код! Книги по основам построения операционных систем В этих книгах рассмотрены принципы работы операционных систем в объеме учебных курсов. В них описываются основные понятия, алгоритмы и проблемы, свя- занные с построением высокофункциональных операционных систем, а также реше- ния указанных проблем. Все эти книги могут быть рекомендованы, но если нужно выделить одну, то это, конечно, книга Н. Deitel. • Deitel H., Deitel P. and Choffnes D. Operating Systems. Prentice Hall, 2003. Прекрасная книга по теории операционных систем с отличными примерами из теории и практики. Автор помогал в техническом редактировании этой книги, что, может быть, и является причиной его предвзятого отношения, но все же хочется верить, что от этого книга стала значительно лучше. • Tanenbaum Andrew. Operating Systems: Design and Implementation. Prentice Hall, 1997. Хорошие начальные сведения об оснопах построения, принципах работы и ре- ализации Unix-подобной операционной системы Minix. • Tanenbaum Andrew. Modern Operating Systems. Prentice Hall, 2001. Детальный об- зор стандартных проблем разработки операционных систем, а также обсужде- ние многих концепций, которые используются в современных операционных системах, таких как Unix и Windows. • Silberschatz A., Galvin P. and Gagne G. Operating System Concepts. John Wiley and Sons, 2001. Также известна, как "книга про динозавров", в связи с тем что на обложке нарисованы динозавры, которые не имеют никакого отношения к теме. Хорошее введение в основы построения операционных систем. Книга часто перерабатывается, но все издания должны быть хорошими. Книги о ядрах Unix В этих книгах описываются принципы работы и особенности реализации ядер Unix. В первых пяти рассмотрены конкретные варианты Unix, в двух последних — общие моменты всех вариантов Unix. • Bach Maurice. The Design of the Unix Operating System. Prentice Hall, 1986. Обсуждение особенностей построения операционной системы Unix System V, Release 2. • McKusick M., Bostic K., Karcls M. and Quarterman J. The Design and Implementation of the 4.4BSD Operating System. Addison-Wesley, 1996. Описание особенностей по- строения и реализации операционной системы 4.4BSD от разработчиков этой системы. • McKusick M. and Neville-Neil G. The Design and Implementation of the FreeBSD Operating System. Addison-Wesley, 2004. Основы построения операционной систе- мы FreeBSD 5. • Mauro J. and McDougall R. Solaris Internals: Core Kernel Architecture. Prentice Hall, 2000. Интересное обсуждение основных подсистем и алгоритмов работы ядра ОС Solaris. • Cooper С. and Moore С. HP-UX Lli Internals. Prentice Hall, 2004. Обзор внутренне- го устройства операционной системы HP-UX аппаратной платформы PA-RISC. • Vahalia, Uresh. Unix Internals:The New Frontiers. Prentice Hall, 1995. Отличная кни- га о возможностях современных Unix-подобных операционных систем, вклю- чая управление потоками и вытеснением кода в режиме ядра. • Schimmel Curt. UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers. Addison-Wesley, 1994. Прекрасная книга о пробле- мах поддержки современных аппаратных платформ современными Unix-подоб- ными операционными системами. Книги о ядрах Linux В этих книгах, как и в текущей, рассказывается о ядрах Linux. • Rubini A. and Corbet J. Linux Device Drivers. O'Reilly and Associates, 2001. Прекрасная книга о том, как писать драйверы устройств для ядер Linux серии 2.4. 434 Приложение Г • Bovet D. and Cesati M. Understanding the. Linux Kemel O'Reilly and Associates, 2002. Обсуждение основных алгоритмов работы ядер Linux серии 2.4. Основное вни- мание уделено основополагающим принципам функционирования ядра. • Mosberger D. and Eranian S. IA-64 Linux Kernel: Design and Implementation. Prentice Hall, 2002. Отличная книга, посвященная аппаратной платформе Intel Itanium и ядру Linux серии 2.4 для этой аппаратной платформы. Книги о ядрах других операционных систем Понимать врагов, точнее не врагов, а конкурентов, — никогда не повредит. В этих книгах обсуждаются основы работы и особенности реализации операционных си- стем, отличных от операционной системы Linux. Смотрите, что у них хорошо, а что — плохо. • Kogan M. and Deitel H. The Design of OS/2. Addison-Wesley, 1996. Интересный об- зор операционной системы OS/2 2.0. • Solomon D. and Russinovich M. Inside Windows 2000. Microsoft Press, 2000. Интересный взгляд на операционную систему, которая чрезвычайно отличает- ся от Unix. • Richter Jeff. Advanced Windows. Microsoft Press, 1997. Описание низкоуровневого и системного программирования под ОС Windows. Книги по API Unix Детальное описание системы Unix и API этой операционной системы важно не только для того, чтобы писать мощные прикладные программы, но и для понимания того, что требуется от ядра. • Stevens W. Richard. Advanced Programming in the UNIX Environment. Addison-Wesley, 1992. Отличное, если не самое полное, обсуждение интерфейса системных вы- зовов Unix. • Stevens W. Richard. UNIX Network Programming, Volume 1. Prentice Hall, 1998. Классический учебник по API сокетов операционной системы Unix. • Johnson M. and Troan E. Linux Application Development. Addison-Wesley, 1998. Общий обзор операционной системы Linux и интерфейсов, которые специ- фичны для этой операционной системы. Другие работы Книги, которые не посвящены операционным системам, но имеют к ним прямое отношение. • Knuth Donald. The Art of Computer Programming, Volume 1. Addison-Wesley, 1997. Бесценный курс по фундаментальным алгоритмам и теории вычислительных систем, который включает лучшие и не самые лучшие алгоритмы управления памятью. (Имеется русский перевод: Кнут Дональд Эрвин. Искусство програм- мирования. Том 1. Основные алгоритмы, 3-е издание. - М: "Вильяме", 2000.) Библиография и список литературы 435 • Kernighan В. and Ritchie D. The С Programming Language. Prentice Hall, 1988. Наилучшая книга по языку программирования С. (Имеется русский перевод: Брайан Керниган, Деннис Ритчи. Язык программирования С— М: "Вильяме", 2005 г.) • Hofstadter Douglas. Godel, Escher, Bach: An Eternal Golden Braid. Basic Books, 1999. Глубокий взгляд на человечество через исследование различных предметов, включая компьютерные науки. Web-сайты Эти WWW-сайты предоставляют последние новости и другую информацию, свя- занную с операционной системой Linux и ее ядром. • Kernel Traffic. Отличный обзор сообщений в списке рассылки разработчи- ков ядра Linux (lkml) за последнюю неделю (очень рекомендуется), h t t p : / / www.kerneltraffic.org/ • Linux Weekly News. Хороший сайт новостей о том, что произошло касательно ядра Linux за последнюю неделю, с прекрасными комментариями (очень реко- мендуется), http://www.lwn.net/ • Kernel Newbies. Сайт "Kernel Newbies" — это проект сообщества разработчиков с целью предоставления информации и помощи начинающим хакерам, которые стремятся заниматься разработкой ядра. http://www. kernelnewbies -org/ • Kernel.org. Официальный архив исходных кодов ядра. Здесь также находятся до- машние страницы многих разработчиков основных подсистем ядра с соответ- ствующими заплатами http://www.kernel.org/ • KernelTrap. Сайт, посвященный всему, что связано с ядром операционной систе- мы, с большим уклоном в сторону ядра Linux. На сайте много информации о новостях и обзорах из области разработки ядра Linux. Здесь также в большом количестве размещаются интервью с ведущими разработчиками ядра. h t t p : / / www.kerneltrap.org • OS News. Новости об операционных системах, а также статьи, интервью и обзо- ры из этой же области. http://www.osnews.com/ • Сайт, посвященный этой книге. Новости, сообщения об ошибках и другая инфор- мация, которая касается этой замечательной книги. h t t p : / / t e c h 9 . n e t / r r a l / kernel_book/ 436 Приложение Г Предметный указатель А Application Programing Interface, API, 96 E Exception, 99; 110 G gec, 40 аннотация ветвлений, 41 встроенный ассемблер, 41 функции с подстановкой тела, 40 Granularity, 174 L Linux Kernel Mail List, 405 lkml, 405 P POSIX, 96 S SHA, 425 SMP-привязка, 71 T Task, 46 Translation lookaside buffer, TLB, 329 V Virtual memory area, 316 VMA, 316 A Адресное пространство плоское, 311 процесса, SI 1; 313 сегментированное, 311 структура address_space, 297; 333 address_space_operations, 334 Алгоритм, 429 Аппаратная платформа, 391 Атомарные операции, 177 битовые, 181 change_bit(), 182 clear_bit(), 182 set_bit(), 182 test_and_change_bit(), 182 test_and_clear_bit(), 182 test_and_set_bit(), 182 test_bit(), 182 отладка, 381 тип atomic_t, 178 целочисленные, 178 atomic_add(), 180 atomic_add_negative(), 180 atomic_dec_and_test(), 180 atomic_inc(), 180 atomic_inc_and_test(), 180 atomic_read(), 180 atomic_set(), 180 atomic_sub(), 180 atomic_sub_and_test(), 180 Б Бинарное дерево, 314 базисное, 335 красно-черное, 320 Блок, 294 Блокировки advisory, IBS dcache_lock, 282 deadlock, 172 deadly embrace, 172 dentry->d_lock, 282 inode_lock, 273 lock contention, 174 mmlist_lock, 314 page_table_lock, 329 sell-deadlock, 172 voluntary, 168 xtime_lock, 219 большая блокировка ядра (BKL), 197 lock_kernel(), 198 unlock_kernel(), 198 захват, 198 освобождение, 198 взаимоблокировка, 172 типа AВВА, 172 в обработчиках нижних половин, 159 защита данных, 186 конфликт при захвате, 168; 174 навязываемые, 168 необязательные, 168 обязательные, 168 порядок захвата, 173 преемптивность, 184 применение, 167 рекомендуемые, 168 рекурсивность, 185 самоблокировка, 172; 189 секвентные, 199; 222 read_seqbegin(), 199 read_seqretry(), 199 write_seqlock(), 199 write_sequnlock(), 199 захват на запись, 200 проверка чтения, 200 семафоры, 184; 190 DECLARE_MUTEX(), 193 DECLARE_RWSEM(), 195 down(), 192; 193 down_interruptible(), 193 down_read(), 195 down_write(), 195 init_MUTEX(), 193 init_rwsem(), 195 sema_init(), 193 up(), 192 up_read{), 195 up_write(), 195 бинарные, 192 захват, 194 захват на запись, 195 захват на чтение, 195 инициализация, 193; 194 инкремент, 192 использование, 196 мьютекс, 192 освобождение, 194 особенности, 191 осовобождение, 195 проверка, 192 реализация, 190 счетчик, 192 чтения-записи, 195 состояние конфликта, 183 спин-блокировки, 183 read_lock(), 188 read_unlock(), 188 spin_is_locked(), 186 spin_lock(), 184 spm_lockbh(), 187 spin_lock_init(), 186 spin_lock_irq{), 186 spin_lock_irqsave(), 185 spin_try_lock(), 186 spin_unlock(), 184 spin_unlock_bh(), 187 spin_unlock_irq{), 186 spin_unlock_irqrestore(), 185 write_lock(), 189 write_unlock(), 189 в обработчиках нижних половин, 187 записи, 188 захват, 187 захват на запись, 190 захват на чтение, 190 инициализация, 187; 190 использование,189; 196 освобождение, 187 отладка, 186; 381 преемптивность, 200 проверка, 190 проверка состояние, 187 чтения,188 структуры completion, 196 rw_semaphore, 195 semaphore, 193 тупиковая ситуация, 172 условные переменные, 196 complete(), 197 wait_for_completion(), 197 Блочное устройство RAID, 300 очередь запросов, 301 сегмент, 298 структура bio, 298 bio_vec, 298 buffer_head, 296; 300 request, 301 request_queue, 301 Буфер, 295 быстрого преобразования адреса (TLB), 329 заголовок, 295 кольцевой,377 сообщений ядра, 377 состояние, 296 В Ввод-вывод страничный, 331 Виртуальный ресурс память, 45; 311 процессор, 45 Возможность использования, 103 CAP_SYS_TIME, 223 Время абсолютное (wall time), 207; 208; 221 начало эпохи (epoch), 222 операции gettimeofday(),223 settimeofday(), 223 относительное, 207 time_after(), 216 438 Предметный указатель time_after_eq(), 216 time_before(), 216 time_before_eq(), 216 работы системы (uptime), 208 часовой пояс (time zone), 223 Выравнивание, 396 естественное, 396 массивов, 397 нестандартных типов данных, 397 объединений, 397 переменных, 396 полей структур, 398 проблемы, 397 структур, 397 Вытеснение, 66; 164 г Генератор случайных чисел, 423 Головка, 295 Гранулярность, 174 cource, 174 fine, 174 уровень крупных структурных единиц, 174 уровень мелких структурных единиц, 174 д Дайджест сообщения, 425 Демон klogd, 377 kupdated, 339 pdflush, 297; 337; 339 diity_background_ratio, 338 dirty_expire_centisecs, 338 dirty_rado, 338 dirty_writeback_centisecs, 338 laptop_mode, 338 предотвращения зависания, 340 syslogd, 377 Деннис Ритчи, 23 Джон фон Нейман, 424 Дональд Кнут, 430 3 Задание, 46 Задача, 46 Заплата генерация, 412 представление, 413 применение, 413 утилиты diff, 412 diffstat, 413 patch, 412 Заполнение структур, 398 И Инсталляция модулей, 38; 347 ядра, 38 Исключительная ситуация, 99; 110 Истинно случайные числа, 423 К Кен Томпсон, 23 Кластер, 295 Клод Шеннон, 423 Код ядра дерево, 34 заплаты, 34 инсталляция, 33 конфигурация, 35 make config, 36 make defconfig, 36 make gconfig, 36 make menuconfig, 36 make oldconfig, 37 make xconfig, 36 переменные, 35 файл .config, 36 получение, 33 сборка, 34 параллельная, 37 Константа __BIG_ENDIAN,401 __LITTLE_ENDIAN, 401 BITTS_PER_LONG, 392 HZ, 401 PAGE_SHIFT, 403 PAGE_SIZE, 403 Конфигурация CONFIG_PREEMPT, 171 CONFIG_SMP, 171 Кэш буферный, 336 дисковый, 331 страничный, 331 Л Линус Торвальдс, 25 м Масштабируемость, 71; 174 О(1),419;431 О(n),421;431 алгоритмов, 429 Машинное слово, 391 Многозадачность preemptive, 66 вытесняющая, 66 Предметный указатель 439 кооперативная, 66 преемптивная, 66 Множество большого-О, 430 болыного-тета, 430 Модуль загружаемый, 343 depmod, 348 EXPORT_SYMROL(), 353 EXPORT_SYMBOL_GPL(), 353 insmod, 348 Makefile, 346 make modules_install, 347 modprobe, 348 MODULE_AUTHOR(), 345 module_exit(), 344 module_init(), 344 MODULE_LICENSE(), 345; 354 module_param(), 351 module_param_array(), 353 module_param_array_named(), 353 module_param_named(), 352 module_param_string, 352 MODULE_PARM_DESC(), 353 rmmod, 348 зависимости, 347 загрузка, 348 инсталляция, 347 конфигурация, 349 параметры, 351 разработка, 343 сборка, 345 экспорт символов, 353 н Наименьшая верхняя граница, 430 Неатомарные операции битовые, 182 find_first_bit(), 183 find_first_zero_bit(), 183 sched_find_first_bit(), 75 Нижние половины, 132; 187 bottom half, 134 ]ocal_bh_disable(), 160 local_bh_enable(), 160 softirq, 135; 136 запрещение, 160 интерфейс ВН, 134; 148 : отложенное прерывание, 134; 169; 188 open_softirq(), 140 raise_softirq(), 140 выполнение, 137 вытеснение, 137 генерация,137 демон ksoftirqd, 138; 147 индекс, 139 использование, 139 отдообработчик, 137 регистрация, 140 тасклет, 141 структура softirq_action, 136 tasklet_struct, 141; 144 тасклет, 134; 139; 169; 187 DECLARE _TASKLET(), 144 DECLARE_TASKLET_DISABLED(), 144 tasklet_disable(), 145 tasklet_disable_nosync(), 145 tasklet_enable(), 145 tasklet_hi_scbedule(), 142 tasklet_init(), 144 tasklet_kill(), 145 tasklet_schedule(), 142; 145 обработчик, 142 планирование, 142; 145 реализация, 141 создание,144 О Область памяти, 311; 316 деревья, 320 интервал адресов, 317 операции, 319 close(),319 nopage(), 320 open(), 319 populate{),320 права доступа, 317 списки, 320 структура vm_area_struct, 319 vm_operations_struct, 319 флаги, 317 защиты, 325 Объект kobject, 356 kobject_get(), 361 kobject_init(), 360 kobject_put(), 361 kobject_set_name(}, 361 декларация, 360 захват, 361 инициализация, 360 освобождение, 361 присвоение имени, 361 счетчик ссылок, 361 Операционная система Linux, 25 Multics, 23 Unix, 23 440 Предметный указатель AT&T, 23 BSD, 24 особенности, 24 многозадачная,65 определение, 26 с виртуальной памятью, 311 Отладка BUG(), 382 BUG_ON(),382 dump_stack(),382 атомарные операции, 381 генерация ошибок, 382 исследование и тестирование, 385 конфигурационные параметры, 381 магическая клавиша SysRq, 382 ограничение частоты событий, 387 утилита ksymoops, 380 функция kallsyms, 380 Отладчик gdb,384 kdb,385 kgdb,385 Отложенное действие, 136 cancel_delayed_work(), 156 create_workqueue(), 156 DECLARE_WORK(), 154 flush_scheduled_work{), 155 flush_workqueue(), 156 INIT_WORK{), 154 queue_work{), 156 run_workqueue(), 152 schedule_delayed_work(), 155 schedule_work{), 155 work_handler(), 154 work queue, 149 демон keventd, 157 использование, 154 ожидание завершения, 155 очереди заданий, 134; 157 планирование, 155 рабочий поток, 150 реализация, 150 создание, 156 структура cpu_workqueue_struct, 150 work_struct, 151 workqueue_struct, 150 Отображение анонимное, 312; 325 выполняемого кода, 312 инициализированных переменных, 312 области ввода-вывода, 319 отладка, 381 совместно используемое, 318; 322 страницы памяти, заполненной нулями, 312 файла, 322; 325 частное, 318 Очередь ожидания add_wait_queue(), 82 DECLARE_WAIT_O_UEUE_HEAD(), 82 remove_wait_queue(), 83 |