Разработка ядра Linux - [186]
Аналогия между дебатами лилипутов и спорами о том, какой порядок байтов лучше, говорит о том, что это вопрос больше политический, чем технический.
Порядок байтов в ядре
Для каждой аппаратной платформы, которая поддерживается ядром Linux, в файле > определена одна из двух констант >__BIG_ENDIAN или >__LITTLE_ENDIAN, в соответствии с используемым порядком байтов.
В этот заголовочный файл также включаются макросы из каталога >include/linux/byteorder/, которые помогают конвертировать один порядок байтов в другой. Ниже показаны наиболее часто используемые макросы.
>u32 __cpu_to_be32(u32); /* преобразовать порядок байтов текущего
> процессора в порядок big-endian */
>u32 __cpu_to_le32(u32); /* преобразовать порядок байтов текущего
> процессора в порядок little-endian */
>u32 __be32_to_cpu(u32); /* преобразовать порядок байтов big-endian в
> порядок байтов текущего процессора */
>u32 __lе32_to_cpu(u32); /* преобразовать порядок байтов little-endian
> в порядок байтов текущего процессора */
Эти макросы выполняют преобразование одного порядка байтов в другой. В случае когда порядки байтов, между которыми выполняется преобразование, одинаковы (например, если выполняется преобразование в обратный порядку байтов и процессор тоже использует такой же порядок), то эти макросы не делают ничего. В противном случае возвращается преобразованное значение.
Таймер
Никогда нельзя привязываться к какой-либо конкретной частоте генерации прерывания системного таймера и, соответственно, к тому, сколько раз в секунду изменяется переменная >jiffies. Всегда необходимо использовать константу >HZ, чтобы корректно определять интервалы времени. Это очень важно, потому что значение частоты системного таймера может отличаться не только для разных аппаратных платформ, но и для одной аппаратной платформы при использовании разных версий ядра.
Например, константа >HZ для аппаратной платформы x86 сейчас равна 1000. Это значит, что прерывание таймера возникает 1000 раз в секунду, или каждую миллисекунду. Однако до серии ядер 2.6 для аппаратной платформы x86 значение константы >HZ было равно 100. Для разных аппаратных платформ эти значения отличаются: для аппаратной платформы alpha константа >HZ равна 1024, а для платформы ARM — 100.
Никогда нельзя сравнивать значение переменной >jiffies с числом, таким как 1000, и думать, что это всегда будет означать одно и то же. Для получения интервалов времени необходимо всегда умножать или делить на константу >HZ, как в следующем примере.
>HZ /* одна секунда */
>(2*HZ) /* две секунды */
>(HZ/2) /* полсекунды */
>(HZ/100) /* 10 мс */
>(2*HZ/100) /* 20 мс */
Константа >HZ определена в файле >. Об этом подробно рассказано в главе 10, "Таймеры и управление временем".
Размер страницы памяти
При работе со страницами памяти никогда нельзя привязываться к конкретному размеру страницы. Программисты, которые разрабатывают для аппаратной платформы x86, часто делают ошибку, считая, что размер страницы всегда равен 4 Кбайта. Хотя это справедливо для платформы x86, для других аппаратных платформ размер станицы может быть другим. Некоторые аппаратные платформы поддерживают несколько размеров страниц! В табл. 19.1 приведен список размеров страниц памяти для всех поддерживаемых аппаратных платформ.
Таблица 19.4. Размеры страниц памяти для разных аппаратных платформ
| Аппаратная платформа | Значение PAGE_SHIFT | Значение PAGE_SIZE |
|---|---|---|
| alpha | 13 | 8 Кбайт |
| arm | 12, 14, 15 | 4 Кбайт, 16 Кбайт, 32 Кбайт |
| cris | 13 | 8 Кбайт |
| h8300 | 12 | 4 Кбайт |
| i386 | 12 | 4 Кбайт |
| ia64 | 12, 13, 14, 16 | 4 Кбайт, 8 Кбайт, 32 Кбайт, 64 Кбайт |
| m68k | 12, 13 | 4 Кбайт, 8 Кбайт |
| m86knommu | 12 | 4 Кбайт |
| mips | 12 | 4 Кбайт |
| mips64 | 12 | 4 Кбайт |
| parisc | 12 | 4 Кбайт |
| ppc | 12 | 4 Кбайт |
| ppc64 | 12 | 4 Кбайт |
| s390 | 12 | 4 Кбайт |
| sh | 12 | 4 Кбайт |
| spare | 12,13 | 4 Кбайт, 8 Кбайт |
| sparc64 | 13 | 8 Кбайт |
| v850 | 12 | 4 Кбайт |
| x86_64 | 12 | 4 Кбайт |
При работе со страницами памяти необходимо использовать константу >PAGE_SIZE, которая содержит размер страницы памяти в байтах.
Значение макроса >PAGE_SHIFT — это количество битов, на которое необходимо сдвинуть влево значение адреса, чтобы получить номер соответствующей страницы памяти. Например, для аппаратной платформы x86, для которой размер страницы равен 4 Кбайт, макрос >PAGE_SIZE равен 4096, а макрос >PAGE_SHIFT — 12. Эти значения содержатся в заголовочном файле >.
Порядок выполнения операций процессором
Вспомните из материала главы 9, "Средства синхронизации в ядре", что для различных аппаратных платформ процессоры в разной степени изменяют порядок выполнения программных инструкций. Для некоторых процессоров порядок выполнения операций строго соблюдается, запись данных в память и считывание данных из памяти выполняются в строго указанном в программе порядке. Другие процессоры имеют ослабленные требования к порядку выполнения операций считывания и записи данных и могут изменять порядок выполнения этих операций с целью оптимизации.
Если код зависит от порядка выполнения операций чтения-записи данных, то необходимо гарантировать, что даже процессор с самыми слабыми ограничениями на порядок выполнения чтения-записи будет выполнять эти операции в правильном порядке. Это делается с помощью соответствующих барьеров, таких как
В отличие от плохого танцора, хорошему сисадмину мешают только кукушкины яйца. Их откладывают в его компьютер злобные хакеры, чтобы из них вылупились программы, делающие своего папу-кукушку суперпользователем. Но сколько кабелю не виться — а кончику быть: бравый сисадмин не дремлет и за годик-другой выводит злоумышленников на чистую воду: на этот раз хакерская тусовка круто пролетела. Такого предельно краткое содержание классической книги эксперта по компьютерной безопасности Клиффа Столла «Яйцо кукушки».
В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Вы пользуетесь Windows ХР и стали задумываться, стоит ли спешить расстаться со ставшей столь привычной операционной системой и переходить на новую Windows Vista, о которой только и говорят? Есть ли в Windows Vista усовершенствования, достойные того, чтобы тратить время на свое обучение и немалые деньги на модернизацию компьютера? Безусловно, есть! И очень скоро большинство пользователей не смогут себе представить, как они обходились без этих возможностей ранее. Данная книга поможет вам присмотреться к новой операционной системе, освоить новые технологии и решения, примененные в Windows Vista, сравнить ее с уже привычной и хорошо изученной Windows ХР.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.