学习笔记16——操作系统

学习笔记系列开头惯例发布一些寻亲消息,感谢关注!

链接:https://www.mca.gov.cn/lljz/indexdetail.html?id=d0afa7f6f36946319a206d61937f9b63&type=0&t=10.11199120579373845

八股------操作系统一些基础知识整理

  • 一个java程序对应一个jvm吗?

  • 内核态和用户态的区别?

  • 局部性原理

    • 时间局部性:刚被访问,再被访问概率很大
    • 空间局部性:刚被访问,附近被访问的概率很大
  • 线程和进程的区别?

    1. 线程是调度的基本单位;进程是拥有资源的基本单位
    2. 资源开销:进程拥有自己独立的代码和空间(堆和元空间)切换会有较大的开销,而线程拥有独立的虚拟机栈、本地方法栈和程序计数器,切换的开销比较小
    3. 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
  • 进程的上下文切换调度算法

    • 先来先服务
    • 短作业优先
    • 最短剩余时间优先
    • 时间片轮转
    • 优先级调度
    • 多级反馈队列
  • 内存的动态分区分配方式有哪些

    • 首次适应:从低地址顺着链查找,找到第一个满足条件的

    • 最佳适应:容量递增,找到第一个最小满足要求的分区

    • 最坏适应:容量递减,找到最大满足要求的分区

    • 邻近适应:上次查到哪里,这次接着查,避免碎片集中在低地址或者高地址

  • 覆盖和交换【解决小内存不够大程序运行的问题】

    • 内存中更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存

    • 覆盖解决同一进程的问题,交换是两个进程之间

    • [操作系统学习 - 内存覆盖与交换_简单阐述交换与覆盖技术的相同点-CSDN博客](https://blog.csdn.net/u014117943/article/details/118278581#:\~:text=两种技术的对比 1 相同点:两种技术都是为了解决"小内存运行大程序"的问题。 2,不同点: 粒度不同,覆盖技术的粒度是模块,交换技术的粒度是进程。 覆盖技术需要程序员声明覆盖结构,操作系统完成覆盖操作。 而交换技术不需要程序员参与,全程由操作系统完成。)

  • 逻辑地址到物理地址的映射过程

  • 什么是快表/慢表

    • 是一种访问速度比内存快很多的高速缓冲存储器,存放最近使用的页表
    • 存放在内存中的页表称为慢表
  • 什么是页表寄存器

    • 存放当前进程的页表在内存中的起始地址和页表长度,进程未执行时只放在PCB中,当进程被调度时,操作系统内核会将其放置在页表寄存器中
  • 虚拟地址-物理地址的转化【快表】

    • CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较

    • 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。

    • 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表未命中,则访问某个逻辑地址需要两次访存(注意:在找到页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照-定的算法对旧的页表项进行替换)

  • 快表和无快表的区别

  • 内存交换是调页算法,和交换技术不是一种,什么是内存抖动?

    • 页面频繁的换入换出内存,主要原因是实际物理内存小于进程频繁访问的页面数量
  • 中断和异常的区别?

    • 中断是CPU 执行指令以外的事件引起,如IO终端、时钟中断,这些信号通过中断控制器发给cpu由cpu判断接收到的中断来自于哪个硬件设备,并交给内核处理,中断是随时带来的
    • 异常是由 CPU 执行指令的内部事件引起,如内存溢出,是cpu产生的发给内核要求内核处理异常,异常是由cpu产生的所以是时钟同步的
  • 详细说一下中断的完整流程

    • 待补充
  • 你了解虚拟技术吗?【虚拟技术将一个物理实体转化为多个逻辑实体,给人一种独占的假象】

    • 时分复用技术:多进程和多线程,进程和线程都是轮流使用但是给人一种独占的感觉,计算机中的时间管理大师
    • 空分复用技术:内存有限制,但是通过虚拟内存映射,让每个进程都感觉自己一直独占内存,计算机中的一房多卖。逻辑地址一直是相对于0来说的,但是真实的物理内存地址并不会从0开始,所以就需要记录下当前逻辑地址的相对位置0的真实地址存放在页表寄存器中,每次对逻辑地址进行映射找到真实的物理地址,其中在内存中有一个页表结构,记录着当前映射对应的物理内存,但是如果当前页尚未被加载到内存,那么就会产生一个缺页中断,操作系统处理中断会尝试将分页从磁盘上的虚拟内存文件调入内存。
  • 进程和线程的切换

    • 同一进程下的线程切换只有pc,虚拟栈的切换,无需切换资源
    • 进程的切换涉及到虚拟地址空间的切换,虚拟空间的实现是将一张虚拟地址到物理地址的对照表交给内存控制器,内存控制器寻址时通过该表的翻译得到实际的物理地址,因此在切换进程的时候需要切换页表寄存器
    • 以上两种切换都是内核完成的,内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。
  • 多CPU和多核的区别?

  • 如何区分以下几种进程类型

    • 父进程:拥有一个或者多个子进程的进程
    • 子进程:父进程fork出的进程,与父进程共享代码空间,拥有父进程数据空间的完整拷贝,指令指针位置相同,PC计数器值相同
    • 进程组:多个进程集合
    • 作业:类似于进程组,shell前后台作业可以由多个进程组成,shell可以运行一个前台作业和任意多个后台作业
    • 会话:进程组的集合
  • 操作系统的内存和jvm内存有什么区别

  • 页面置换算法

    • 最佳置换法
    • 先进先出
    • 最近最久未使用
    • 时钟置换算法
  • 磁盘调度算法:旋转时间+寻道时间+实际传输

    • 先来先服务
    • 最短寻道优先
    • 电梯扫描
  • 分页和分段和段页式的区别

  • 交换技术

    • 内存交换中换出的进程放在外存,且对于有交换功能的操作系统,外存分为文件区和对换区,文件区主要追求空间的利用率,对换区主要追求换入换出的速度
  • 重定位寄存器和页面寄存器

    • 重定位寄存器用来存放进程在物理内存上起始地址,在将进程装入内存时,就可以确定进程真实地址,因此将相对于0开始的程序逻辑地址转化为物理地址

    • 页面寄存器是根据cpu给出的一个虚拟地址,没错就算重定位了这里给的还是虚拟地址(也是一个相对地址,整个进程范围内的地址都有可能给到,但是其实内存根本放不下那么大), 在进程地址空间内的所有页,依次在页表中有一页表项 ,其中记录了相应页在内存对应的物理块号,cpu去访问页面寄存器以及页表,判断是否在内存中,如果在内存中那么就可以直接去访问重定位后的物理地址,如果不在内存中那么就需要调入,对于cpu来说,他以为整个进程都在内存中。但其实只有部分进程被重定向到内存中

    • 页表寄存器存储的是页表的起始地址,虚拟地址已知自己的页号和偏移量,去读取页表的起始地址,先匹配页号是否在页表长度内,再去查询该页号对应的真实的内存块,匹配了就直接去访问,没查到就去磁盘调用【挨个去查地址太麻烦了,这里相当于用页面把内容装起来了,判断页面在不在即可】

  • java和c+的内存分配区别?

  • 冯诺依曼结构以及与当前的对应模块

  • 原子操作

    • 总线锁: 所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。
    • 缓存锁,只保证对某个内存地址的操作是原子性,而不把其他处理器对其他内存的访问也锁住
  • 共享方式:互斥共享和同时共享,互斥共享的资源称为临界区

  • 死锁:

    • 必要条件
      • 互斥条件
      • 不剥夺条件
      • 请求和保持条件
      • 循环等待条件
    • 预防
  • 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/375804757)

    • 存储器:内存,磁盘
    • 运算器:cpu
    • 输入设备
    • 输出设备
  • 原子操作

    • 总线锁: 所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。
    • 缓存锁,只保证对某个内存地址的操作是原子性,而不把其他处理器对其他内存的访问也锁住
  • 共享方式:互斥共享和同时共享,互斥共享的资源称为临界区

  • 死锁:

    • 必要条件
      • 互斥条件
      • 不剥夺条件
      • 请求和保持条件
      • 循环等待条件
    • 预防
    • 避免
相关推荐
黑叶白树1 小时前
简单的签到程序 python笔记
笔记·python
@小博的博客1 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
幸运超级加倍~2 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生2 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步3 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope3 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen3 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)3 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典4 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
hong1616884 小时前
跨模态对齐与跨领域学习
学习