本章知识点
Linux系统提供复杂的内存管理功能,内存的概念在Linux系统中相对复杂,有常规内存、高端内存、虚拟地址、逻辑地址、总线地址、物理地址、I/O内存、设备内存、预留内存等概念。
1、内存和I/O的硬件机制,主要涉及内存空间、I/O空间和MMU。
2、Linux的内存管理、内存区域的分布、常规内存与高端内存的区别。
3、Linux内存存取的方法,主要涉及内存动态申请以及通过虚拟地址存取物理地址的方法。
4、设备I/O端口和I/O内存的访问流程。
5、I/O内存静态映射。
6、设备驱动中的DMA与Cache一致性问题以及DMA的编程方法。
11.1 CPU与内存、I/O
11.1.1 内存空间与I/O空间
在x86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,IO空间通过特定的指令in、out来访问。端口号标识外设的寄存器地址。Intel语法中的in、out指令格式如下:
IN 累加器, {端口号│DX}
OUT {端口号│DX},累加器
目前,大多数嵌入式微控制器(如ARM、PowerPC等)中并不提供I/O空间,仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序及在程序运行中使用的变量和其他数据都存在于内存空间中。
内存地址可以直接由C语言指针操作,在186处理器中执行如下代码:
unsigned char *p = (unsigned char *)0xF000FF00;
</