内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。如何查看进程发生缺页中断的次数?用ps -o majflt,minflt -C program命令查看。majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。 这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:1、检查要访问的虚拟地址是否合法2、查找/分配一个物理页3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干)4、建立映射关系 Read More
posted @ 2013-10-13 22:13 moon_cat Views(629) Comments(0) Diggs(0) Edit
极度无聊的人才会纠结这个事情,但是今天又有人问起,做个试验,看结果咯,VC6 下测试的,GCC下待测。 Read More
posted @ 2013-10-13 20:32 moon_cat Views(171) Comments(0) Diggs(0) Edit
# arm-linux-gcc -v xxx 4.3.3/* main.c */static unsigned *p = (unsigned*) (0x0000); /* 当外部的初始化为0,一切OK int main (void){ xxxxx; ...... ;}# arm-linux-gcc -O0 main.c -g -c -Wall 当我们不加不优化的时候 文件瞬间变的很大,当 -O2的时候,一切OK或许这个是一个BUG. Read More
posted @ 2013-10-13 17:59 moon_cat Views(427) Comments(0) Diggs(0) Edit
哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处文档整理自ARM System Developer's Guide一.虚存的工作原理为了使任务有各自的虚拟存储映射,MMU硬件采用地址重定位(address relocation),即在地址访问主存之前,转换由处理器核输出的存储器地址。可认为在介于内核和主存间的MMU中有一个重定位寄存器,这样就能很容易理解这个转换过程。当处理器核产生一个虚拟地址时,MMU取 出这个虚拟地址的高位,并用重定位寄存器中的值来替换它,从而形成一个物理地址。虚拟地址的低位是一个偏移量,它转换成物理存储器的一个特定地址。一个重 定位寄存器只能转换一 Read More
posted @ 2013-10-13 17:58 moon_cat Views(1349) Comments(0) Diggs(0) Edit
# git clone https://github.com/vim-scripts/armasm.git# mv ./arm/asm/armasm.vim /usr/share/vim/vim73/syntax/restart ur vim Read More
posted @ 2013-10-13 17:55 moon_cat Views(392) Comments(0) Diggs(0) Edit
ARM 进入异常模式后,访问的都是各自模式的寄存器,相互模式的访问(不包括用户模式),都是用修改 CPSR 进入另一个模式后,才访问,而相互之间的CPY SET ,都是通过 unbanked regs (R0 - R7)来做的。那么特权模式怎么访问用户态的寄存器?其实答案是很简单的,只要修改CPSR 寄存器,设置模式位即可达到进入相应模式的目的。MSRMRS两个特殊指令能做到。 Read More
posted @ 2013-10-13 17:51 moon_cat Views(814) Comments(0) Diggs(0) Edit
进程运行必须占用内存,运行之前就已定义好的即为静态分配,运行时分配的便是动态分配。5种类型:1. 代码段 .text 存放指令代码,属性为只读。很多人不理解为什么哈弗结构既然是 .text 和 .data 分离,那只有一个RAM ,怎么解释呢,其实这很简单啊,IA32不是有选择子么 数据段有数据段的选择字,有数据段的属性,代码段有代码段的属性,有它的选择字,ARM 也无非就是将段分成不同的属性来管理,一个介质RAM搞定。2. 数据段 .data 存放已初始化数据,这个真没啥好说的。3. BSS段 .bss 存放未初始化全局变量,由此一同事问我,为什么BSS不需要占用 ... Read More
posted @ 2013-10-13 17:46 moon_cat Views(269) Comments(0) Diggs(0) Edit