Разработка ядра Linux (Второе издание)
Шрифт:
В серии 2.6 количество поддерживаемых аппаратных платформ было доведено до 20 за счет добавления платформ Motorola 68k бел устройства MMU, H8/300, IBM POWER, v850, x86-64 и версии ядра, которое работает на виртуальной машине под ОС Linux - Usermode Linux. Поддержка 64-разрядной s390 была объединена с 32- разрядной платформой s390, чтобы избежать дублирования.
Необходимо заметить, что каждая из этих аппаратных платформ поддерживает различные типы машин и микросхем. Некоторые из поддерживаемых аппаратных платформ, такие как ARM и PowerPC, поддерживают очень большое количество типов микросхем и машин. Поэтому, хотя ОС Linux и работает на 20 аппаратных платформах, она работает на гораздо большем количестве типов компьютеров!
Размер машинного слова и типы данных
Машинное слово (word) — это количество данных, которые процессор может обработать за одну операцию. Здесь можно применить аналогию документа, состоящего из символов (character, 8 бит) и страниц (много слов). Слово— это некоторое количество битов, как правило 16, 32
Размер процессорных регистров общего назначения равен размеру машинного слова этого процессора. Обычно разрядность остальных компонентов этой же аппаратной платформы в точности равна размеру машинного слова. Кроме того, по крайней мере для аппаратных платформ, которые поддерживаются ОС Linux, размер адресного пространства соответствует размеру машинного слова [92] . Следовательно, размер указателя равен размеру машинного слова. В дополнение к этому, размер типа
92
Размер адресуемой памяти может быть меньше максимального значения машинного слова. Например, для 64-разрядных аппаратных платформ размер указателя ранен 64 бит, однако только 48 бит можно использовать для адресации. В дополнение к этому, общее количество физической памяти может быть больше максимального значения машинного слова, как, например, это имеет место при наличии расширения Intel PAE..
Для некоторых операционных систем и процессоров стандартную порцию данных не называют машинным словом. Вместо этого, словом называется некоторая фиксированная порция данных, название которой выбрано случайным образом или имеет исторические корни. Например, в некоторых системах данные могут разбиваться на байты (byte — 8 бит), слова (word — 16 бит), двойные слова (double word — 32 бит) и четверные слова (quad word — 64 бит), несмотря на то что на самом деле система является 32-разрядной. В этой книге и вообще в контексте операционной системы Linux под машинным словом понимают стандартную порцию данных процессора, как обсуждалось ранее.
Для каждой аппаратной платформы, поддерживаемой операционной системой Linux, в файле
Таблица 19.1. Поддерживаемые аппаратные платформы
Аппаратная платформа | Описание | Размер машинного слова |
---|---|---|
alpha | Digital Alpha | 64 бит |
arm | ARM и StrongARM | 32 бит |
cris | CRIS | 32 бит |
h8300 | H8/300 | 32 бит |
I386 | Intel x86 | 32 бит |
ia64 | IA-64 | 64 бит |
m68k | Motorola 68k | 32 бит |
m86knommu | m68k без устройства MMU | 32 бит |
mips | MIPS | 32 бит |
mips64 | 64-разрядная MIPS | 64 бит |
parisc | HP PA-RISC | 32 бит, или 64 бит |
ppc | PowerPC | 32 бит |
ppc64 | POWER | 64 бит |
s390 | IBM S/390 | 32 бит, или 64 бит |
sh | Hitachi SH | 32 бит |
sparс | SPARC | 32 бит |
sparc64 | UltraSPARC | 64 бит |
um | Usermode Linux | 32 бит, или 64 бит |
v850 | v850 | 32 бит |
x86_64 | X86-64 | 64 бит |
Стандарт языка С явно указывает, что размер памяти, которую занимают переменные стандартных типов данных, зависит от аппаратной реализации [93] , при этом также определяется минимально возможный размер типа. Неопределенность размеров стандартных типов языка С для различных аппаратных платформ имеет свои положительные и отрицательные стороны. К плюсам можно отнести то, что для стандартных типов языка С можно пользоваться преимуществами, связанными с размером машинного слова, а также отсутствие необходимости явного указания размера. Для ОС Linux размер типа
93
За исключением размера типа
94
На самом деле, для 64-разрядных аппаратных платформ, которые поддерживаются ОС Linux, размеры типов
Ситуация еще более запутывается тем, что одни и те же типы данных в пространстве пользователя и в пространстве ядра не обязательно должны соответствовать друг другу. Аппаратная платформа sparc64 предоставляет 32-разрядное пространство пользователя, а поэтому указатели, типы
Всегда необходимо помнить о следующем.
• Как и требует стандарт языка С, размер типа
• Нет никакой гарантии, что размер типа
• То же касается и типа
• Никогда нельзя надеяться, что тип
• Так как размер типа
• Точно так же нельзя предполагать, что размер типа
Скрытые типы данных
Скрытые (opaque) типы данных — это те типы, для которых не раскрывается их внутренняя структура, или формат. Они похожи на черный ящик, насколько это можно реализовать в языке программирования С. В этом языке программирования нет какой-либо особенной поддержки для этих типов. Вместо этого, разработчики определяют новый тип данных через оператор
Еще один пример скрытого типа данных — это тип
Другие примеры скрытых типов данных в ядре — это
• Нельзя предполагать, что данные скрытого типа имеют некоторый определенный размер в памяти.
• Нельзя преобразовывать скрытый тип обратно в стандартный тип данных.
Разрабатывать код необходимо с учетом того, что размер и внутреннее представление скрытого типа данных могут изменяться.