内存和IO访问

内存和IO访问
摘要由CSDN通过智能技术生成

内存的概念在Linux系统中相对复杂,有常规内存、高端内存、虚拟地址、逻辑地址、总线地址、物理地址、IO内存、设备内存、预留内存等概念。本章将系统讲解内存和IO访问编程

CPU和内存、IO

内存空间和IO空间

在X86处理器中存在着IO空间的概念,IO空间是相对于内存空间而言的,它通过特定指令in和out来访问。
端口号标志了外设的寄存器地址。
目前,大部分的嵌入式微控制器(如ARM、PowerPC等)中并不提供IO空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序及在程序运行中使用的变量和其他数据都存在与内存空间中。
内存地址可以直接由C语言指针操作:e.g:

unsigned char*p = (unsigned char *) 0xF000FF00;
*p = 11;

以上程序的意思是在绝对地址0xF000 + 0xFF00(186处理器使用16位短地址和16位偏移地址)中写入11
而在ARM、PowerPC等未采用段地址的处理器中,p指向的内存空间就是0xF000FF00,而*p = 11,就是在该地址写入11
内存空间是必须的,IO空间是可选的

内存管理单元

高性能处理器一般会提供一个内存管理单元(MMU),该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。操作系统内核借助MMU可以让用户感觉到程序好像可以使用非常大的内存空间,从而使得编程人员在写程序时不用考虑计算机中物理内存的实际容量。
为了理解基本的MMU操作原理,先明晰几个概念:
1.TLB:即转换旁路缓存(Translation Lookaside Buffer):即转换旁路缓存,TLB是MMU的核心部件,它缓存少量的虚拟地址与物理地址的转换关系,是转换表的Cache,因此也经常被称为快表。
2.TTW: 即转换表漫游(Translation Table walk),当TLB中没有缓存对应的地址转换关系的时候,需要通过对内存中转换表(多级页表)的访问来获得虚拟地址与物理地址的对应关系。TTW成功后,结果应该写入TLB中
3.要么TLB成功,要么TTW后把信息写入TLB,然后查找转换关系成功,反正最后都是会TLB成功的。除非该虚拟地址与物理地址的对应关系即不在TLB中也不在内存中的转换表中。
4.ARM中TLB条目中的控制信息用于控制对对应地址的访问权限以及Cache的操作地址。

  • C(高速缓存)和B(缓冲)位被用来控制对应地址的高速缓存和写缓冲,并决定是否进行高速缓存
  • 访问权限和域位用来控制读写访问是否被允许。如果不被允许,MMU则向ARM处理器发送一个存储器异常,否则访问将被允许进行

上述的MMU机制针对的虽然是ARM处理器,但是PowerPC、MIPS等其他处理器也有类似的操作
MMU有虚拟地址和物理地址转换、内存访问权限保护等功能,这将使得Linux操作系统能单独为系统每个用户进程分配独立的内存空间并保证用户空间不能访问内核空间的地址,为操作系统的内存管理模块提供硬件基础。

内存管理单元

对于包含MMU的处理器而言,Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。
在Linux系统中,进程的4GB内存空间被分为两个部分–用户空间和内核空间。用户空间的地址一般分布为0-3GB,这样剩下3GB~4GB为内核空间。用户进程通常是访问不到内核空间的地址的,只有当系统调用(陷入到内核态时)才可以访问到内核空间
每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是有内核负责映射,它不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他进程。
Linux中1GB的内核地址空间,由3GB~4GB,又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区。
当系统物理内存超过4GB时,必须使用CPU的扩展分页模式所提供的64位页目录项才能存取到4GB以上的物理内存,这需要CPU的支持。
直接映射的896MB物理内存其实又分为两个区域,在低于16MB的区域,ISA

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值