(面经整理一)操作系统CPU与内存


在这里插入图片描述

一、操作系统虚拟内存

虚拟内存主要提供了三种能力(三种原因):

【1】将主存看成是一个存储在磁盘上的地址空间的高速缓存(作为缓存)

【2】为每个进程提供一致的地址空间,从而简化内存管理(作为内存管理)

【3】防止每个进程的地址空间被其他进程所破坏(作为内存保护)

(一)虚拟内存原理(局部性原理)

局部性原理的定义是在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内。出现局部性原理有如下原因:

程序在执行时,除了少部分的转移和过程调用指令外,大多数仍是顺序执行的;

子程序调用将会使程序的执行由一部分内存区域转至另一部分区域,也就是说程序只是从一个局部跳跃到另一个局部而已;
程序中存在许多循环结构,循环体中的指令被多次执行;

程序中还包括许多对数据结构的处理,如对连续的存储空间——数组的访问,往往局限于很小的范围内。

虚拟内存是一种允许进程部分装入内存就可以执行的技术,它基于的原理就是局部性原理,因为程序具有局部性,所以只需要把当前需要执行的程序内容装入内存即可,这个时候用户看到的逻辑地址空间就比物理地址空间大,要实现这个功能就必须允许页面能够被换入和换出。

1.页面调入策略
  • 预测调页策略:主动的页面调入策略,即把那些预计很快会被访问的程序或数据所在的页面,预先调入内存;这个策略的性能取决于预测的准确率,预测的准确率不高(50%),主要用于进程的首次调入。也有的系统将预调页策略用于请求调页。
  • 请求调页策略:当进程在运行中发生缺页时,由系统将缺页调入内存;目前虚拟存储器系统大多采用此策略;但在调页时须花费较大的系统开销,如需频繁启动磁盘I/O。
2.页面置换策略

内存可能会有装满的情况下,这个时候如果来了新的程序想要进入内存,就必须执行页面置换,将内存中暂不使用的程序先从内存调出到外存。

最佳页面置换算法

先进先出置换算法

最近最久未使用算法LRU

时钟页面置换算法

最不常用算法LFU

(二)进程地址空间(内存管理)

1.进程内存
进程地址空间

  • 代码段:程序代码,存放函数体的二进制代码。
  • 数据段:在程序运行初已经对变量进行初始化的数据。
  • BSS:在程序运行初未对变量进行初始化的数据。
  • 栈 (Stack):存储局部、临时变量,函数调用返回值。
  • 堆(Heap):存储动态内存分配,需要程序员手工分配,手工释放。

Linux的虚拟地址空间范围为0~4G,Linux内核将这4G字节的空间分为两部分, 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间

  • 进程中变量的存放在进程中都是相较进程地址起始地址的逻辑地址。
  • 虚拟地址到物理地址转换过程有操作系统和CPU共同完成(操作系统为CPU设置好页表,CPU通过MMU单元进行地址转换)

2.线程共享的进程空间和线程独立空间
在这里插入图片描述
3.进程、线程、协程的对比
进程、线程与协程

  • 协程既不是进程也不是线程,协程仅仅是一个特殊的函数,协程它进程和进程不是一个维度的。
  • 一个进程可以包含多个线程,一个线程可以包含多个协程。
  • 一个线程内的多个协程虽然可以切换,但是多个协程是串行执行的,只能在一个线程内运行,没法利用CPU多核能力。
  • 协程与进程一样,切换是存在上下文切换问题的(只在用户态切换)。

二、CPU缓存

在这里插入图片描述
CPU直接读取的数据来自寄存器,L1缓存是离cpu核最近的缓存大小为32k,L2是下一级缓存,大小为256k,L1和L2是每个核心独有的,而L3是多个核心所共有的一块高速缓存,大小大概是几MB到几十MB。L1,L2和L3都是SRAM缓存,而内存是DRAM缓存,数据都被存在电容中,需要不停的刷新。

CPU缓存一致性问题
由于CPU是多核的,且每个核独立拥有L1、L2级缓存,共享L3级缓存,所以会导致CPU缓存一致性问题。
解决方案:

  • 总线嗅探:当某个CPU核更新了cache中的数据,要通过总线将更新事件广播给其他CPU核。
  • MESI协议:用modifed(修改)、exclusive(独占)、shared(共享)和invalidated(失效)四个状态来修饰Cache Line的状态。

(如有错误,请评论指正)
参考链接:
[1]: 小林coding,图解系统
[2]: https://blog.csdn.net/zhangzhebjut/article/details/39060253
[3]: https://blog.csdn.net/zheng199172/article/details/88800275

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值