目录
10、在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
1、什么是冯诺依曼模型?
计算机基本结构的五个部分:运算器、控制器、存储器、输入设备、输出设备
2、如何让程序跑的更快?
优化指令数、每条指令的平均时钟周期数CPI、和时钟周期时间
3、存储器的层次结构?
运行速度:CPU(寄存器, L1-L3 cache)、内存、磁盘
存储容量:磁盘、内存、CPU(L3-L1 cache , 寄存器)
4、如何写出让CPU跑的更快的代码?
提升缓存命中率,可分别从数据缓存和指令缓存两方面考虑,数据缓存,即我们可以连续存放数据,CPU在操作时一般是顺序地操作连续内存;指令缓存,我们可以使用有规律的条件分支,这样,这样有利于CPU分支预测器发挥作用;最后,如果是多核CPU,线程可能在不同CPU之间切换,影响缓存命中率,因此可以将线程绑定到某一CPU上,提升缓存命中率。
5、如何实现CPU缓存一致性?
要想实现CPU缓存一致性,主要有2点,第一点是要写传播,即某一个CPU核心发送写入操作时,要通知其他CPU核心;第二点是事务的串行化执行,保障程序在不同的核心上的运行结果是一致的,这两点有赖于我们的基于总线嗅探机制的MESI协议。
分别由已修改,独占,共享,已失效四种状态,其中,已修改,独占状态的写操作不需要分享给其他核心。
6、什么是软中断?
正常的中断处理程序分为上下部分,上部分是硬中断,由硬件触发中断,用于快速处理中断,下部分是软中断,由内核触发中断,用来异步处理上半部未完成的工作。
7、为什么要有虚拟内存?
为了让多进程环境下,各个进程之间的内存地址不受影响,相互隔离,操作系统为每个经常独立分配了一套虚拟内存空间,一方面可以让运行内存大于实际物理内存,一方面避免了多进程下的内存地址冲突混乱,虚拟内存中还包含了对于某页的读写权限等,提供了更好的安全性。
8、malloc 是如何分配内存的?
主要由brk()和mmap(),分配大的内存空间时采用mmap(),避免回收内存空间时带来较大的性能消耗,而brk()分配时也有着会产生内存碎片的缺点,因此需要在分配内存的时候结合这两种方式来进行。此外,malloc分配的是虚拟内存。
9、内存回收的方式?
一共有两种,后台内存回收和直接内存回收两种方式,后台内存回收指的是在物理内存紧张的时候,会唤醒内核线程来回收内存,这个回收的过程是异步的,不会阻塞进程的执行,直接内存回收是指如果后台内存回收的速度更不上进程内存申请的速度,就会开始直接回收,这个回收的过程是同步的,会阻塞进程的执行。
10、在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
在32位操作系统中,进程理论上最大申请3GB大小的虚拟内存,所以直接申请8G内存,会申请失败。 在64位操作系统中