2017年4月问题记录与总结

来源:互联网 发布:神马seo搜索排名优化 编辑:程序博客网 时间:2024/06/07 01:23

1.MMU中的页模式和段模式

现在的CPU,无论是ARM架构还是POWER PC以及MIPS,都会有相应的MMU。所谓MMU,就是memory management units的所写,也就是内存管理单元,它的作用就是把虚拟地址空间的地址转换成物理空间对应的地址。

那么直接使用物理地址有什么坏处吗?可能到我们这个时代都不会用这种方法,但是搞单片机的时候是这个情况,就一个程序,没有多任务和多进程的概念,程序在ram或者flash里面跑起来了,所有的全局变量,访问外设地址几乎都是确定的,就一个运行实体,所以不存在换入换出,竞争内存资源这样的事情。到了有操作系统,多个进程运行起来以后,如果直接访问的物理地址,主要有三个问题:1.内存不够用;2.进程的地址空间不能隔离;3程序每次运行的地址都不确定。MMU就是为了解决这个问题而加入的中间层,一般是一个物理器件,用户只修要配置相应的MM表就OK了,硬件会自动去转化这个关系。

分段模式和分页模式是对于这种地址转换的两种不同的办法:

分段机制:

粗浅的理解就是把虚拟地址和物理地址一段一段的对应上,有人可能会纳闷,那这跟直接使用物理地址有什么区别吗?肯定是有的,第一,分段是以进程为单位分配内存,每一个进程的运行地址空间是确定的,如果访问别的进程地址空间,会被拒绝。第二,他也解决了程序地址重定位的问题,每个进程有自己的堵路的互相不重叠的物理地址空间对应的虚拟地址空间。但是分段机制的问题就是资源浪费太严重,因为以程序为主体,当内存不够用的时候,需要整个换出到磁盘,这样效率非常低。所以有了后来的分页机制。

分页机制:

所谓分页,就是一方面将内存分成了更小的以页为单元的物理内存块,一般是4K一个,这种块在linux中叫做物理页框,并不是每一个进程被创建出来就会分配固定的物理页框,linux使用一种叫做缺页异常的机制来更高效的分配内存。这里分成了三个空间,进程虚拟地址空间,物理地址空间和磁盘空间,不用的数据块就放到磁盘中,常用的数据和代码页装载到内存中,各个进程表面上使用的是连续的虚拟空间,但是在物理内存上可能是不连续的,甚至是重叠的,重叠的部分可以理解为共享的。

在处理器中,选择页模式还是段模式包括每一页的大小,段的其实地址结束地址和长度都是可以配置的。

 

2.C语言中的有符号值和无符号值

当遇到有符号值和无符号值混在一起操作的时候,最重要的是注意相互的取值范围,比如int a=-1,unsigned int b=1;一个在机器中是原码形式存储,一个是补码,1存储的是0000000000000001-1存储的是1111111111111111,假如b=a,打印出来就是65535。所以在遇到有符号和无符号数相加或者操作的时候,C语言是会强制转换为同一类型再去做运算,一定要算清楚按照什么规则转换类型,转换后得到什么结果,以及自己想要得到什么结果。

至于按照什么规则网上很多,charshort最低,double最高。signed int 会转换为unsigned int

 

3.什么是双口ram

以前一个RAM只能被一个CPU或者控制器使用,双口就是一个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元。需要注意的是对同一地址的访问冲突控制,权限分配以及中断如何处理等等。

 

原创粉丝点击