- 博客(9)
- 收藏
- 关注
原创 用户程序函数调用过程中的参数传递方式
在C语言中,在调用一个函数func()时,如果func()接受不超过4个的参数,则调用者直接将实参从左到右依次赋值给r0, r1, r2, r3寄存器(如果是指针则传入地址),然后调用func()。进入func()函数后,func()将自己的栈紧接着caller的栈顶向下扩展,从r0, r1, r2, r3寄存器中拿参数,然后开始做事。而如果func()有超过4个参数,例如:int f...
2018-03-29 20:32:47 2614
原创 看盘古系统杂记
看视频 盘古:阿里云飞天分布式存储系统实践 过程中记的乱七八糟的东西。仅是个人笔记供以后查阅,没有参考价值,各位看官还是各自散去~分布式和集群的区别: 分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。...
2018-03-10 21:26:05 1145
原创 Linux内核中的锁
1. 为什么要保证原子性处理器分两种:cisc(复杂指令集,可以直接在内存上进行操作,如x86,一条汇编指令可以原子的完整读内存、计算、写内存)和rics(精简指令集,所有操作都必须是在CPU内部进行。所以你想给内存某个变量做加法,你要先用load指令把内存load到CPU的寄存器、再执行add,再执行store把结果放到内存中)。因此a++这句话在rics上并不是原子的,必须翻译成一个r...
2018-03-07 00:05:34 6447
原创 Linux内存管理 —— DMA和一致性缓存
1. 出现内存不一致的原因CPU写内存的时候有两种方式: 1. write through: CPU直接写内存,不经过cache。 2. write back: CPU只写到cache中。cache的硬件使用LRU算法将cache里面的内容替换到内存。通常是这种方式。DMA可以完成从内存到外设直接进行数据搬移。但DMA不能访问CPU的cache,CPU在读内存的时候,如果cache命中...
2018-03-06 18:34:30 26661 6
原创 Linux内存管理 —— 文件系统缓存和匿名页的交换
1. swap的含义在Linux里swap有两个意思: 1. 动词:交换。内存和磁盘的颠簸行为。 2. 名词:硬盘的swap分区。没有文件背景的页面,即匿名页(anonymous page),如堆,栈,数据段等,不是以文件形式存在,因此无法和磁盘文件交换,但可以通过硬盘上划分额外的swap交换分区或使用交换文件进行交换。即上面wap作为名词的意思。Swap分区可以将不活跃的页交换到硬盘...
2018-03-06 18:27:22 16668 3
转载 CPU是如何访问到内存的?--MMU最基本原理
本文转载于:http://mp.weixin.qq.com/s/SdsT6Is0VG84WlzcAkNCJA Linuxer微信公众号假设页表只有一级对于一个有MMU的CPU而言,MMU开启后,CPU是这样寻址的:CPU任何时候,一切时候,发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表来在页表里面查出来这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条。MMU里面...
2018-03-06 18:04:23 9271
原创 Linux内存管理 —— 进程的虚拟地址空间和VSS
1. 进程虚拟地址空间进程的虚拟地址空间记录在其task_struct结构的指针成员mm中(struct mm_struct),这是用户态进程才有的,里面包含pgd、代码段、堆、栈地址等信息。(kernel不需要mm,因为kernel不需要引用动态库,内核线程有自己的栈空间,虚拟地址映射关系也是全局可见的,注意vmalloc和kmap产生的映射是由内核中的全局变量swapper_pg_dir和...
2018-03-06 17:47:07 1475
原创 Linux内存管理 —— 内核态和用户态的内存分配方式
1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述。所有zone都是通过buddy系统管理的,buddy system由Harry Markowitz在1963年提出。buddy的工作方式我就不说了,简单来说buddy就是用来管理内存的使用情况:一个页被申请了,别人就不能申请了。通过/proc/b...
2018-03-06 17:36:04 14860
原创 Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
本文都是假设系统是32位,页大小为4KB,基于ARM架构(不过和体系结构相关的内容不多)。1. 了解MMU在启用MMU的Linux内核中,CPU是通过虚拟地址来访问物理内存的。MMU(Memory Management Unit),即内存管理单元,它集成在CPU中,负责虚拟地址到物理地址的映射,以及物理地址的访问,并提供内存访问权限检查机制,以达到内存保护的作用(ARM里面的MPU(M...
2018-03-06 17:12:32 2225 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人