zoukankan      html  css  js  c++  java
  • OS知识点回忆整理(2) +数据结构

    树是什么?
    每个节点(下面如果有几个子节点的话)之间都不能互相交错。
    二叉树就是只有一个左右子节点。
    有很多性质运用。用于计算。
    节点数。
    度为1的节点数是n1 
    度为0的节点数是n0
    度为2的节点数是n2
    有一个关系是n0 = n2 +1
    证明:
    如果节点总数是k+1
    那么边的数量是k(根据树性质,节点数和度数关系,度数+1=节点数)
    所以有一个公式: k+1 =  n0+ n1+ n2 
                                  k = n1  + 2n2
    相减 一下:1= n0- n2
    所以n0 = 1 + n2
    这个关系经常被用上。
     
    // 叶子节点是767 
     
     
     
     
    森林就是加上了一个父节点的很多子树组成。
     
     
     
     
    请求分页系统,
            这主要是在基本分页系统的基础上增加了几个功能:
     
    页表机制也 是在基本分页系统上增加了点功能。不是段表机制哦。补充了:请求分页和页面替换是增加的功能部分。它是发现和处理哪些页面不在内存里这两个问题 ?
     
    表被分成几个页是实现请求分页系统的基本。之前说过的分页系统和分段系统和分段页式系统有什么优缺点吗?
     
    分段系统,印象中,是按照逻辑上把主存地址分成几段,每一段长度都不同。每一段不像分页那样。
     
    分页系统:均分为几页。均分为几页,是不太可能分成整页数的。最后一页肯定是破碎的。如果一个逻辑段
     
    分段页是啥?分段 页 是段在前,页在后啊。。。  
           在分段的基础上,分页 。每一个段先逻辑上分好了,如果太长了的话,就再分成几页去了。如果段太短了呢?段好像没必要分页了,如果很短的段,再分页。就很多页数啦。很多页数就得频繁得进行页面调度啦。执行时间很短,这样会造成页面的颠簸。
    缺页率增加,离最佳替换算法的性能就差的很远; 效率会下降的。
     
    cache的地址是怎么划分的呢?
    分成行列形式。每一行有很多个块。行列存储矩阵形式。
     
    主存也是和cache一样分配的。主存地址连续分块,分行 来分配自己的地址区间。
    cache必须处理好和主存的地址映射。
     
     
    cache的块block 的大小设置和 时间片 大小设置 需要考虑多点。
    block设置得刚刚好的话,cache才能最优化发挥自己的效用。block太大的话,我找一个内容很大概率上就不在block里,我就要把这个block调出去,把含有我的内容的调进来。页面调度算法发挥作用啦。多调度几次,我就不要执行进程啦,各种时间进行各种调度。
        block太小的话,在cache里和主存里都有很多块。很大情况下,我要找的一个内容,就在block,就不用调度去了。直接在cache里命中了。命中率高的话,系统cpu执行得很好。
     
    页面替换:凭借什么策略把页换进换出呢?
     
     
     
    分三种:
    请求分页
    请求分段
    请求分段页
     
     
    缺页中断机制,
    缺页中断,
    一般中断就是在指令执行完成后,cpu才能处理中断信号
     
     
    访管指令是什么?trap指令,自我陷入指令。访问管态(kernel态)指令。和访问目态(user mode指令对应起来)
    访问内核态指令。如果用户态指令使用管态指令的话,只有自己陷入,中断,访问管态后,又去回来用户态。而不是像外设给一个中断信号的外中断。
     
    访管指令本质上就是在运行目态指令时候设置访管标志为1 ,就直接去调用内核的功能了。
     
     
    特权指令:有特殊权限的指令。 指的是用户态程序没有的权限。但是如果用户态程序要转入 进入内核态。就需要特权的指令。
     
     
    命令接口:
        脱机接口:用于批处理系统中,雇主把要做的事写在一个清单里,工人按照清单一步一步执行。不用动脑子。
        联机接口:用在分时系统里,交互性强。雇主说一句话,计算机就开始做一件事,工人同时给出反馈。
    系统调用:通过美丽的封装好的接口,用户直接使用核心态功能。比如,用户是无法自己写一个时钟中断系统的。只能是系统程序员做好了,隐藏各种细节。
     
     
     
    是虚拟存储技术需要实现的几个硬件吗
     
    物理帧是什么?
    帧增加了几个状态标志。
    访问位:该块在cache 里吗?如果在,访问位就是
    状态位P:该块 如果被查询到了在内存里,状态位就是1,没在就是0
    修改位:如果该块的页在放入内存后被修改了,被替换出去或者被换进来了 修改位为1。
    外存地址:根据物理块号和块内地址算出实际的物理块号。
     
     
     
    哪个算法最靠近opt,才是最优算法。
    FIFO性能比较差,不是最优的算法,容易实现,硬件支持需要不多, 
    LRU算法:有点难实现,需要栈,后进能先出去。缺页率是不如先进先出的队列实现法。先进先出的,缺页率太高,很多时间浪费去了调页,调入调出。
    还有啥硬件呢?缺页中断机构也是一种硬件啊。
     
    如何实现缺页中断,和普通的中断信号有什么区别呢?
    缺页中断在一条指令执行过程之中频繁得被中断。
     
     
     
    FIFO会发生页面belady异常,但是会抖动的(缺页中断)吗?
     
    belady异常是什么?是在FIFO算法的时候,如果 一个进程 没有分配全部页,就会出现分配页面数量增加而缺页率反而升高这种现象。只有这种现象就叫做belady异常。
     
    抖动是什么?有缺页中断就会处理中断而进行页面调度。   这是种频繁进行页面调度的行为。如果一个进程花在页面调度的时间,多过执行的时间就是在颠簸。颠簸降低了cpu的性能。
     
    为什么频繁缺页中断呢?就是进程需要频繁访问的页面数量大于实际可用的物理帧数量。
    cache 地址和主存地址怎么对应,换算,需要一定的方法地址映射算法。在组成原理书介绍该点。
     
    总得来说:主存块数量会比cache块数更多,成倍数。那么两者对应起来也需要一定的策略。
     
     
    cache 和主存地址映射:
     
    评价三种算法的标准就是 实现难度,和cache命中率。cache 命中率太低的话,算法是不好的,cache的功能没用好。实现再容易也别用。
     
    (八路)组相连映射:一个区分为几个组,区之间是随机映射。组内是每个每个对应起来。
    区之间随机,组内按顺序 ,会导致实现很快,命中率也有一定的保证。应该是比较常用的算法。
     
    全相连映射:不分区了,直接每个cache和每个主存按顺序对应起来。
    花费时间太长了,命中率也很低。
     
    优点是什么?按顺序查找了,命中率按序查找就好。命中率挺高,但是实现效率非常低,代价非常大。
     
    直接相连映射:cache地址和主存地址随机映射,主存多个块随机和cache对应起来。
    块任意关系进行对应,实现上很轻易,花费代价不高,但是cache能否命中很悬啊,命中率很低。
     
     
    虚实地址的转换:这部分知识需要结合组成原理的cache地址转换,知识点一起结合进行讲解。虚地址实地址转换。
     
     
     
    除了先入先出和最近最少使用算法,还有别的什么页面置换方法呢
     
    访问位是什么意思呢?是访问的页,最近被修改过置为1
    简单的时钟替换?clock算法:只是设置一个访问位。
    改进版本:设置访问位和一个修改位。写命令时候需要重置修改位,表示该页面被修改过。
     
    为什么队列的数据结构比栈的不好,造成缺页中断率更高呢?栈后进先出去。先进来的一段时间没访问了,程序局部原理,访问概率比刚刚出去的概率大。缺页中断率不太高。
    belady异常和抖动(缺页中断)是一个概念吧?
     
     
    程序经常使用 表 数组,队列等数据簇集形式。所以数据总是在循环来去。循环就导致了空间和时间轮转。
     
     
     
    分配几个物理块和选择哪个页进行换出去,换进来,需要一定思路进行考量。
     
     
    基于什么因素,操作系统常常采用什么策略:
     
    这些策略有啥用的?
     
     
    固定分配,局部替换(分配的是物理块数,替换的是要把可能不用的页拿出去,给要调入的页使用。)
     
        每个进程都有一定数量的物理块,整个运行期间都不改变。当发生缺页时,只从里面选择一页换出,然后调入需要的页。实现这种策略,很难确定到底要分配多少个物理块。分配少了,频繁缺页中断,太多又会使得cpu和其他资源的利用率下降。
     
    可变分配,全局替换(全局和局部区别)
     
        最容易实现的,它为系统中进程分配一定数量的物理块,也有空闲的块的队列。如果需要调入的时候,从空闲的队列里取出一块物理块给进程使用,这种方法比固定分配,局部替换更加灵活)。
     
    可变分配,局部替换 (为每个进程分配一定数量的物理块,当发生缺页时,只从里面选择一页进行替换,因此不会影响其他进程的运行)   
     
     
  • 相关阅读:
    SAP Spartacus 自定义Popover指令,如何实现弹出对话框自动关闭功能
    SAP Spartacus B2B 页面信息提示图标的弹出窗口显示实现逻辑
    一个好用的 SAP UI5 本地打包(build)工具,自动生成Component-preload.js
    什么是 SAP UI5 的 Component-preload.js, 什么是Minification和Ugification
    云小课 | 一个三分钟快速定制OCR应用的神器,要不?
    JavaScript实现:如何写出漂亮的条件表达式
    想做测试工程师,这7件事你必须先知道
    比物理线程都好用的C++20的协程,你会用吗?
    解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移
    数据中心太耗电,送你一个节能神器
  • 原文地址:https://www.cnblogs.com/yizhizhangBlog/p/10730964.html
Copyright © 2011-2022 走看看