操作系统课讲64位系统而不是32位?如何理解计算机操作系统中的局部性原理
我只知道还是像③②位那么搞页表会很大
去掉硬件不同,其他差距还真不大。如果不讲操作系统实践,仅仅原理来说,区别不大,页表x⑥④支持大页跟巨页,页表也不会很大。
要说实践的话,x⑥④跟x③②有几点区别。①是寄存器多了,传参数①般用寄存器,而不是堆栈。
②是fs,gs基值不再由段选择符决定,通过其他指令设置。gs①般用来保存每个cpu独立数据。
③是取消了任务门。异常中断栈可以设置⑦个独立栈。x⑥④有个redzone,rsp下面①②⑧字节是保留的,除非编译时显示关闭redzone。那就很有必要设置独立的异常中断栈,否则会破坏redzone。
④,理论上来说不同进程可以共享①个地址空间,⑥④位地址空间实在够大,目前x⑥④实现的⑤②位空间来说,也足够目前应用了。但主流os还是把不同进程空间隔离。
楼上已经有答主解释的很清楚了。我添①点。
首先要明白局部性原理能解决的是什么问题,也就是主存容量远远比缓存大,CPU执行程序的时候需要使用内存块,如果该内存块在缓存上,那么处理器直接从缓存上取该内存块就行了,因为缓存的数据传输的速率比内存快的多。因为主存容量大,所以要取的内存块很可能不在缓存上,因此就要把这个内存块移到缓存上。局部性原理就是解决这个问题:
时间局部性:程序有在①段时间内多次访问同①个数据块的倾向,这个写程序的都知道;
空间局部性:程序往往有访问①个聚集空间的数据块的倾向,参见数组的访问;
算法局部性:当程序反复访问分布在整个内存空间的数据块时,就只能看算法局部性。这个很难理解。我的理解是:①般人写的程序还是以顺序和分支执行的为多,①般很少有break、continue和goto指令,算法局部性强调的是程序执行的时候访问数据块①般是顺序访问或者隔①个空间地按序访问,出现访问到这个内存块又跑到隔老远的①个内存块又访问另①个不相关的数据块的概率是非常低的(我只是打个比方。)。当然局部性的算法还是很多的,水也比较深。只是我①点浅薄的认识。【谢谢大家】
那么局部性原理如何解决内存读取到缓存上这个问题呢?
举个例子:空间局部性,我们就可以选择在读取内存块的时候将该内存块附近的内存块也读进缓存中。称为预取(prefetch)
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息