学习笔记16——操作系统

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

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

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

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

    • 是的https://www.zhihu.com/question/338477722,在开启一个进程的时候,会分配进程地址空间,其中高位地址通过虚拟映射可以访问全部存储器和执行全部指令,而低位只能执行用户进程代码(包括数据区,堆,栈)
    • 给每个程序分配一个进程控制块:由内核选择相应的PCB,PCB全部放在内核中
  • 内核态和用户态的区别?

    • https://zhuanlan.zhihu.com/p/388057431每个进程都有两个栈,分别是用户栈与内核栈,对应用户态与内核态的使用【有一些"敏感"的地址需要注意下,对于32位进程来说,代码段从0x08048000开始。从0xC0000000开始到0xFFFFFFFF是内核地址空间,通常情况下代码运行在用户态(使用0x00000000 ~ 0xC00000000的用户地址空间),当发生系统调用、进程切换等操作时CPU控制寄存器设置模式位,进入内和模式,在该状态(超级用户模式)下进程可以访问全部存储器位置和执行全部指令。】
    • 从根上理解用户态与内核态 - 知乎 (zhihu.com)
    • 个人理解:在正常执行cpu指令过程中,是由用户态来执行的,但是当遇到一些重要的直接操作硬件的指令,这时不能通过用户命令随意执行(容易发生较大的错误),因此将这段指令交给高权限的内核态执行。在内存资源上的使用,操作系统对用户态与内核态也做了限制,高位由内核态使用,对应一段固定的物理空间,低位可以由不同进程使用,在切换进程的时候,只需要切换用户态这部分即可,内核态是所有进程公用的。
  • 局部性原理

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

    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,虚拟栈的切换,无需切换资源
    • 进程的切换涉及到虚拟地址空间的切换,虚拟空间的实现是将一张虚拟地址到物理地址的对照表交给内存控制器,内存控制器寻址时通过该表的翻译得到实际的物理地址,因此在切换进程的时候需要切换页表寄存器
    • 以上两种切换都是内核完成的,内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。
    • 另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。
    • 还有一个显著的区别是当你改变虚拟内存空间的时候,处理的页表缓冲(processor’s Translation Lookaside Buffer (TLB))被全部刷新,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题。
    • 进程、线程上下文切换的开销_线程上下文切换开销-CSDN博客
    • [送命题:进程切换与线程切换的区别 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/258956479#:~:text=但是进程切换就不一样了,进程切换就好比从你家到别人家,这是两个不同的房子,(不同的虚拟地址空间),出发时要换好衣服、鞋子等等,到别人家后还要再换鞋子等等。 因此我们可以形象的认为线程是处在同一个屋檐下的,这里的屋檐就是虚拟地址空间,因此线程间切换无需虚拟地址空间的切换;而进程则不同,两个不同进程位于不同的屋檐下,即进程位于不同的虚拟地址空间,因此进程切换涉及到虚拟地址空间的切换,这也是为什么进程切换要比线程切换慢的原因。)
    • 进程切换时具体要更新哪些内容?除了CPU相关的寄存器还要更新什么? - 知乎 (zhihu.com) 看第二个回答
  • 多CPU和多核的区别?

    • 多核CPU 是否能同时执行多个进程? - 知乎 (zhihu.com)
    • 区别就是是否多个空间资源
  • 如何区分以下几种进程类型

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

    • jvm其实也是一个进程,像正常进程一样,高位分配内核资源,低位分配给该进程用,分为七段
      • 程序文件段:即二进制可执行代码
      • 已初始化数据段
      • 未初始化数据段
      • 文件映射段
      • 栈段:
    • 而真正的java程序使用的堆栈都是在JVM堆上分配的,在堆上的话不会受到操作系统自动管理,而是由程序员自己设计分配与释放,所以可以新定义一种java执行方式
    • JVM专题之JVM内存和操作系统的进程的内存模型之间的关系_jvm内存和进程内存的差别-CSDN博客
      在这里插入图片描述
      在这里插入图片描述
  • 页面置换算法

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

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

    • 操作系统——存储器管理(分页存储和分段存储)_分页式存储管理和分段式存储管理-CSDN博客
  • 交换技术

    • 操作系统 内存管理 覆盖与交换技术-腾讯云开发者社区-腾讯云 (tencent.com)

    • 个人理解:如果是单核cpu或者多核cpu那么在内存中只能有一个进程处于运行状态,但可以允许别的进程也存在在内存中但是处于就绪状态,交换就是在内存空间不够的时候将部分进程从内存移动到磁盘,在需要运行这些进程的时候再调入到内存,这个相比于调页的粒度更大。

    • 换回来的进程可能已经不在原来的物理内存位置,所以需要地址重定向 操作系统 - 地址重定位_地址重定位算法-CSDN博客

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

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

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

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

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

    • 待补充:java的堆和c+的堆不是一个概念,那么在分配的时候有什么区别吗?java与c语言的内存对比_java和c的虚拟内存划分相同吗相同-CSDN博客
  • 冯诺依曼结构以及与当前的对应模块

    • 控制器:南桥北桥,北桥基本被集合到cpu了,南桥接受外部设备的信息,送到cpu并将处理好的信息送到输出设备 主板上的南桥和北桥是什么意思? - 知乎 (zhihu.com)
    • 存储器:内存,磁盘
    • 运算器:cpu
    • 输入设备
    • 输出设备
  • 原子操作

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

  • 死锁:

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

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

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

  • 死锁:

    • 必要条件
      • 互斥条件
      • 不剥夺条件
      • 请求和保持条件
      • 循环等待条件
    • 预防
    • 避免

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/303129.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法32:针对算法31货币问题进行扩展,并对从左往右模型进行总结

本算法是在算法31的基础之上进行推理总结的,因此,在看本章之前,必须先去了解算法31,否则会觉得莫名其妙。 算法31的推理过程: 如果 x y1 y2 y3 y4 y5 y6. x1 y2 y3 y4 y5 y6 那么 x y1 x1. 根据以…

计算机缺失vcomp120.dll文件怎么办?总结多种解决方法分享

在使用电脑过程中,难免会遇到各种问题,其中vcomp120.dll丢失问题就是其中之一。这个问题可能会给用户带来诸多不便,导致某些应用程序无法正常运行。在这篇文章中,我们将详细介绍vcomp120.dll文件的重要性,以及遇到丢失…

使用 vue-json-viewer 工具在界面显示json格式数据

安装vue-json-viewer npm install vue-json-viewer --save 引入&#xff1a; import JsonViewer from vue-json-viewer Vue.use(JsonViewer) 使用&#xff1a; <json-viewer :value"jsonData" show-double-quotes :preview-mode"true" :show-array…

存储器进化全解析:从NAND到UFS,深入剖析常见存储技术与应用

存储领域发展至今&#xff0c;已有很多不同种类的存储器产品。下面给大家介绍几款常见的存储器及其应用&#xff1a;#存储器#​ 一、NAND NAND Flash存储器是Flash存储器的一种&#xff0c;属于非易失性存储器&#xff0c;其内部采用非线性宏单元模式&#xff0c;为固态大容量…

mmdetection训练自己的数据集

mmdetection训练自己的数据集 这里写目录标题 mmdetection训练自己的数据集一&#xff1a; 环境搭建二&#xff1a;数据集格式转换(yolo转coco格式)yolo数据集格式coco数据集格式yolo转coco数据集格式yolo转coco数据集格式的代码 三&#xff1a; 训练dataset数据文件配置config…

C#,迭代深化搜索(IDS)或迭代深化深度优先搜索(IDDFS)算法的源代码

摘要&#xff1a;本文介绍适合于大数据规模情况下的&#xff0c;新型的迭代深化深度优先搜索(IDDFS)算法的原理、实例及实现的C#源代码。 引言 常用的树&#xff08;或图&#xff09;遍历算法是两种&#xff1a; 广度优先搜索算法&#xff08;BFS&#xff09; 和 深度优先搜索…

C#编程-实现文件输入和输出操作

实现文件输入和输出操作 所有程序接受用户的输入、处理输入并且产生输出。所以,所有的编程语言都支持输入和输出操作。例如,您需要为教师开发程序以接受学生的结果信息。您的程序应该将信息保存在硬盘的Result.xls文件中。您可以在程序中使用文件输入和输出操作以接受来自教…

外汇网站主要业务逻辑梳理

上图为工行ICBC的外汇保证金交易界面。 当需要买入帐户欧元&#xff08;欧元人民币&#xff09;时&#xff0c;买入100欧元&#xff0c;因为没有杠杆&#xff0c;虽然欧元中间价是782.34&#xff0c;但实际需要支付783.14元人民币的保证金&#xff0c;这个兑换不是真实的外汇兑…

全网独家:基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器

近期想测试一下opengauss数据库,官网上单机容器部署只有x86-64平台CentOS 7.6和ARM64平台 openEuler20.03 LTS两种底包方案。本文系全网独家在x86平台上基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器。 opengauss官网上单机容器部署只有x86-64平台Cent…

计算机毕业设计 基于javaweb的学生交流培养管理平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

910b上跑Chatglm3-6b进行流式输出【pytorch框架】

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型&#xff0c;或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…

Unity3d 实现直播功能(无需sdk接入)

Unity3d 实现直播功能 需要插件 :VideoCapture 插件地址(免费的就行) 原理:客户端通过 VideoCapture 插件实现推流nodejs视频流转服务进行转发,播放器实现rtmp拉流 废话不多说,直接上 CaptureSource我选择的是屏幕录制,也可以是其他源 CaptureType选择LIVE–直播形式 LiveSt…

IDEA[Debug]简单说明

目录 &#x1f95e;1.打断点 &#x1f32d;2.第一组按钮 &#x1f9c2;3.第二组按钮 &#x1f953;4.参数查看 1.打断点 1.在需要断点处打上断点&#xff0c;然后点击debug运行 2.执行debug&#xff0c;直接执行到断点处 2.第一组按钮 共有8按钮&#xff0c;从左往右依…

【系统高级-环境变量】path配置一整行,而不是列表

这是列表编辑方便。但是不知道为什么变成一行&#xff0c;非常的令人抓狂&#xff0c;经过研究发现&#xff0c;第一个环境变量必须为C:\Windows\system32 开头才可以 文章如下 修改环境变量中的一行变成列表形式_环境变量编辑不是列表-CSDN博客

回归预测 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变…

苍穹外卖Day01——总结1

总结1 1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 技术选项 3. Swagger4. 补充内容&#xff08;待解决...&#xff09; 1. 软件开发整体介绍 1.1 软件开发流程 1.2 角色分工 从角色分工里面就可以查看自己以后从事哪一…

芯片命名大全:完整的器件型号包括主体型号、前缀、后缀等!

不少公司的采购会发现&#xff0c;拿到工程师提供的BOM中的器件去采购物料时&#xff0c;经常供应商还会问得更仔细&#xff0c;否则就不知道供给你哪种物料&#xff0c;严重时&#xff0c;采购回来的物料用不了。为什么会有这种情况呢&#xff1f;问题就在于&#xff0c;很多经…

数据结构—图(下)

文章目录 12.图(下)(4).生成树和最小生成树#1.什么是生成树和最小生成树&#xff1f;i.生成树ii.最小生成树 #2.Prim算法i.算法思想ii.看看例子iii.代码实现 #3.Kruskal算法i.算法思想ii.看看例子iii.代码实现 #4.次小生成树 (5).最短路径问题#1.加权有向图的最短路径问题#2.单…

盘点三款服务器运维工具

随着世界变得更加数字化&#xff0c;如何便捷高效地管理服务器变得越来越重要&#xff0c;能有一款简易实用且现代化服务器管理工具就显得尤为关键。今天就选取了三款服务器运维工具进行对比分析&#xff0c;评测每款产品的优缺点。 产品清单 宝塔面板 简介&#xff1a;国内老…

工作流自动化:它是什么,常见示例以及如何实现

由于您的组织旨在留住顶尖人才和高价值客户&#xff0c;因此您需要不断为这两个团队提供一流的体验。 就客户而言&#xff0c;它可以实时解决他们的问题和疑虑&#xff0c;并以深思熟虑、可操作的洞察力主动与他们联系&#xff1b;而且&#xff0c;对于员工来说&#xff0c;它可…
最新文章