有两类特定于体系结构的代码:

  • 专门由内核特定体系结构的部分使用和调用组件
  • 每个体系结构都必须定义接口函数。如,每个移植版都因提供一个switch_to函数,用于在两种进程间切换时维护硬件方面的细节。

数据类型

内核区别下列三种基本数据类型:

  • C语言标准数据类型,如unsigned long、void *、char、int等。C语言并未固定比特位数,只要保证long的比特数大于int的这种等式即可。
  • 固定比特位数类型,具有预定义的比特位数,如u32和s16。各个体系结构必须定义这些缩写,并映射到基本数据类型。
  • 特定于子系统的类型,不会直接操作,需要提供槽中这些类型数据的函数。

对齐

将数据对齐到特定的内存地址,对于高效使用处理器高速缓存和提升性能。一些体系结构强制要求,对特定长度的数据类型进行特定的对齐。将数据类型对其到其自身的字节长度,称之为自然对齐。

  • get_unaligned(ptr) : 对位于非对齐内存位置的一个指针,进行反向引用操作。
  • put_unaligned(val, ptr) : 向ptr指定的一个非对其内存位置写入值val

内存页面

在大多体系结构上,内存页长度为4KB,也有长达几MiB的页。

系统调用

发出系统调用的机制,实际上是进行一个从用户空间到内核空间的可控切换。

  • 它定义了预处理器常熟,将所有系统调用的描述符关联到符号常数
  • 定义了在内核内部调用系统调用所用的函数。使用了一种预处理机制,连同用于自动生成代码的内联汇编。

字符串处理

内核中各处都会处理字符串,因而对字符串处理的时间要求很严格。由于很多体系结构都提供了专门的汇编指令来执行所需的任务。因此所有体系结构都定义了自身的各种字符串操作(asm-arch/string.h);
如:strcmp、strcpy、strcat、strncat等

Last modification:August 21, 2022
If you think my article is useful to you, please feel free to appreciate