计算机操作系统知识梳理

2023-05-16

1、进程和线程以及它们的区别

(1)进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现操作系统并发。

(2)线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部并发。

(3)一个程序至少有一个进程,一个进程至少有一个线程,线程依赖进程的存在。

(4)进程执行过程中拥有独立的内存单元,而多个线程共享进程的内存。

2、进程间的通信的几种方式

(1)管道(pipe)及命名管道(named pipe:管道可用于具有亲缘关系的父子进程间通信,命名管道除了具有管道所具有功能外,还允许无亲缘关系进程的通信。

(2)信号signal):是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

(3)消息队列:是消息的链接表,克服上两种通信方式中信号量有限的缺点,具有写权限的进程可以按照一定规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。

(4)共享内存:最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。

(5)信号量:主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段。

(6)套接字:这是一致性更为一般进程间通信机制,它可用网络中不同机器之间进程间通信,应用非常广泛。

3、线程同步的方式

1互斥量Synchronized/lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。

2)信号量Semaphore它允许同一时刻多个线程访问同一资源,但需要控制同一时刻访问此资源的最大线程数。

3)事件(信号),Wait/Notify:通过通知操作的方式来保存多线程同步,还可以方便的实现多线程优先级比较操作。

4、什么是死锁?死锁产生的条件?

4.1死锁的概念:

在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗讲,就是两个或者多个进程无限期的阻塞、相互等待的一种状态。

4.2死锁产生的四个必要条件

1)互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;

2)占用并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;

3)非抢占;进程不能被抢占,即资源只能被进程在完成任务后资源释放。

4)循环等待:若干进程之间形成一种头尾相接的环形等待资源关系。

4.3死锁处理的基本策略和常用方法

解决死锁的基本方法主要有:预防死锁,避免死锁,检测死锁,解除死锁等思想。

(1)死锁预防

死锁预防基本思想:只要确保死锁发生的四个必要条件至少有一个不成立,就能预防死锁。

①打破互斥条件:允许进程同时访问某些资源。但是,有些资源是不能被多个进程所共享的,这是由资源本身属性所决定的,因此,这种办法通常并无实用价值。

②打破占用并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。

③打破非枪占条件:允许进程强行从占有者哪里夺取某些资源,也就是说,但一个进程占有了一部分资源,在其申请新的资源且得不到满足时,它必须释放所有占有的资源以便让其它线程使用。这种预防死锁的方式实现起来困难会降低系统性能。

④打破循环等待条件:实行资源有序分配策略。对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源,这样就不回产生环路,预防死锁的发生。

(2)死锁避免

死锁避免的基本思想是动态检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。其中,资源分配图算法应用场景为每种资源类型只有一个实例(申请边,分配边,需求边,不形成环才允许分配),而银行家算法应用于每种资源类型可以有多个实例的场景。

(3)死锁解除

死锁解除的两种常用方法为进程终止和资源抢占。所谓进程终止是指简单地终止一个或多个进程以打破循环等待,分终止所有死锁进程、一次只终止一个进程直到取消死锁循环为止。所谓资源抢占就是指从一个或多个死锁进程哪里抢占一个或多个资源,此时需考虑三问题

①选择一个牺牲品。

②回滚到安全状态

③饥饿(在代价因素中加上回滚次数,回归的越多则越不可能作为牺牲品,避免一个进程总是被回滚)。

5、进程有哪几种状态?

1)就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;

2)运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;

3)阻塞状态:进程等待某种条件,在条件满足之前无法执行;

 

6、线程有几种状态?

Java虚拟机 中,线程从最初的创建到最终的消亡,要经历若干个状态:创建(new)、就绪(runnable/start)、运行(running)、阻塞(blocked)、等待(waiting)、时间等待(time waiting) 和 消亡(dead/terminated)。

 

 


7、分页和分段有什么区别(内存管理)?

段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

两者不同:

(1)目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

(2)大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定

(3)地址空间不同:段向用户提供二维地址空间;页向用户提供的是一维地址空间;

(4)信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

(5)内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

8、操作系统中进程调度策略有哪几种?

(1)FCFS(先来先服务,队列实现,非抢占的):先请求CPU的进程先分配到CPU

(2)SJF(最短作业优先调度算法):平均等待时间最短,但难以知道下一个CPU区间长度

(3)优先级调度算法:优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题是:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿;解决方案:老化

(4)时间片轮转调度算法(可抢占的):队列中没有进程被分配超过一个时间片的CPU时间,除非它是唯一可运行的进程。如果进程的CPU区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。

(5)多级队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。

(6)多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多CPU时间,那么它会被转移到更低的优先级队列;在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。

9、说一说进程同步有哪几种机制

原子操作、信号量机制、自旋锁管程、会合、分布式系统

10、什么是虚拟内存?

10.1内存发展历程

没有内存抽象(单进程,除去操作系统所用的内存之外,全部给用户程序使用) —>有内存抽象(多进程,进程独立的地址空间,交换技术(内存大小不可能容纳下所有并发执行的进程)—> 连续内存分配(固定大小分区(多道程序的程度受限),可变分区(首次适应,最佳适应,最差适应),碎片)—> 不连续内存分配(分段,分页,段页式,虚拟内存)

10.2虚拟内存

虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上,如图所示。

 

由图可以看出,虚拟内存实际上可以比物理内存大。当访问虚拟内存时,会访问MMU(内存管理单元)去匹配对应的物理地址(比如图5的0,1,2)。如果虚拟内存的页并不存在于物理内存中(如图5的3,4),会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出。

10.3页面置换算法

1)FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到);

2)LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断;

3)LFU(Least frequently use)最少使用次数算法:根据使用次数来判断;

4)OPT(Optimal replacement)最优置换算法:理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。

10.4虚拟内存应用及优点

虚拟内存很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中。当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。

好处:

(1)在内存中可以保留多个进程,系统并发度提高

(2)解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大

11、颠簸

颠簸本质上是指频繁的页调度行为,具体来讲,进程发生缺页中断,这时,必须置换某一页。然而,其他所有的页都在使用,它置换一个页,但又立刻再次需要这个页。因此,会不断产生缺页中断,导致整个系统的效率急剧下降,这种现象称为颠簸(抖动)。

解决策略包括:

(1)如果是因为页面替换策略失误,可以修改替换算法来解决这个问题;

(2)如果是因为运行的程序太多,造成程序无法同时将所有频繁访问的页面调入内存,则要降低多道程序的数量;

(3)否则,还剩下两个办法:终止该进程或增加物理内存容量。

12、局部性原理

1时间上的局部性:最近被访问的页在不久的将来还会被访问;

2空间上的局部性:内存中被访问的页周围的页也很可能被访问。

参考博客:https://blog.csdn.net/justloveyou_/article/details/78304294

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机操作系统知识梳理 的相关文章

  • pycharm运行shift+f10停止ctrl+f2快捷键

    运行 shift 43 f10 停止 ctrl 43 f2
  • 嵌入式第一课

    GPIO实例应用 include 34 stm32f10x h 34 ifndef LED H define LED H void LED Init void endif include 34 led h 34 void LED Init
  • 范式通俗理解:1NF、2NF、3NF和BNCF

    范式通俗理解 xff1a 1NF 2NF 3NF和BNCF 准备知识超键 候选键 主键函数依赖部分依赖传递依赖 范式1NF2NF3NFBCNF 参考 准备知识 超键 候选键 主键 超键 超键 super key xff1a 在关系中能唯一标
  • 基于springboot的小区社区物业管理系统

    一 基于springboot的小区社区物业管理系统 此社区物业管理系统融合了大多数功能 xff0c 具有管理员和住户两种角色 管理系统可以使小区的管理水平有很大的提升 xff0c 使小区的管理更加方便便捷 社区管理员具有 xff0c 车位管
  • 基于springboot的电影推荐网站管理系统

    一 基于springboot的电影推荐网站管理系统 普通用户 浏览电影列表查看电影预告与详情查看收录的电影网站查看最新电影动态 管理员 管理电影预告与详情管理收录的电影网站管理最新电影动态管理网址信息管理友情链接 二 技术框架 这是一款基于
  • 代码优化-减少if else

    写在前面 不知大家有没遇到过像 横放着的金字塔 一样的 if else 嵌套 xff1a 我并没夸大其词 xff0c 我是真的遇到过了 xff01 嵌套 6 7 层 xff0c 一个函数几百行 xff0c 简 xff01 直 xff01 看
  • iapp裕v3语言浏览器教程

    如果你要写简单的浏览器的话 你可以这么做qwq 创建好应用后先添加浏览器 他的属性为 width span class token operator 61 span span class token operator span span c
  • VMOS-Pro一款虚拟机app。

    vmos分为两个版本 xff1a 安卓vmos 安卓vmospro 两个的差距在于界面 xff0c 可以说vmospro是重磅更新了 xff0c 让我们了解这一款虚拟机吧 xff01 首先这两款虚拟机都是安卓系统 xff0c 你要ios上红
  • UTM虚拟机-首款iOS虚拟机

    utm虚拟机 xff1b 非越狱安装方法 utm虚拟机是一款ipa为后缀的文件 xff0c 需要爱思助手安装 越狱安装方法 使用uncover越狱后在安装ipa文件 utm介绍 他跟bochs limbo qemo apq等app一样 xf
  • 所有小米机型 解BT+刷Magisk并ROOT+躲避应用ROOT环境检查教程

    废话章节 xff0c 可以不看 时隔一年又回来了 上一篇文章还是在2021年更新的 xff0c 因为学业问题我这是1年1更显然不行 xff0c 那我这次为啥不更新iApp了 xff1f 因为忘得差不多了 我也没想到我有一天回过头来看自己的文
  • 【Minecraft】【ModPC】【我的世界】 我的世界电脑版如何进入网络游戏?

    我的世界电脑版如何进入网络游戏 xff1f 须知 看看就好 xff0c 不要频繁使用modpc xff0c 破坏游戏玩家体验 xff01 不知道为什么Win11会用着用着就会闪退 降级到Win10就什么事也没有 下载 ModPC下载 包含普
  • WindwosServer系统一些设置【网卡驱动修复】【安装UWP应用】【服务器管理取消开机自启动】

    WindwosServer系统一些设置 这里以2022为例 xff1a 第一 网卡驱动丢失修复 此教程只针对I219 V LM网卡 xff01 小知识 xff1a 当电脑没网时 xff0c 将手机和电脑用USB数据线连接 打开设置 xff1
  • dp最长不上升子序列 二分upper lower+贪心

    题意 找出最长不上升子序列长度 再找出最长不下降子序列最大长度 写法运用了指针 减少了代码量 include lt iostream gt include lt algorithm gt using namespace std const
  • 小米平板5ProWIFI(elish)刷ArrowOS

    文章目录 警告下载奇兔刷机系统本体及Recovery 清除数据刷入AospRec开始刷入警告 完成设置输入法 变砖头了qwq又是警告 芝士截图Root方法结尾 警告 此文章只针对 小米平板5Pro Wifi版本 xff08 elish xf
  • 【宝塔】【Windows】【Blessing-Skin】【我的世界】用宝塔Windows搭建皮肤站

    文章目录 前言所需环境相关链接安装宝塔安装步骤访问宝塔同意协议 安装环境安装WNMP添加站点 开始安装皮肤站配置网站配置Nginx URL重写规则 xff08 即 伪静态 xff09 配置PHP 安装皮肤站 一些小调整安装插件常见问题 插件
  • ping的详细过程学习笔记

    pc1 ping pc2 也就是pc1 xff1a 192 168 1 1 ping pc2 xff1a 192 168 1 2 属于同一网段的ping过程 步骤1 ping开始 即后台运行192 168 1 1 ping 192 168
  • FTPClient上传文件内容为空/损坏/缺失

    项目场景 xff1a 项目场景 xff1a 本地项目联调OA系统的时候 xff0c 在发送审批时会传送相关附件 xff0c 该附件由本地项目上传至FTP xff0c OA系统会根据我们提供的路径和文件名去FTP中找到该文件 问题描述 xff
  • Debian9桌面设置

    本文由荒原之梦原创 xff0c 原文链接 xff1a http zhaokaifeng com p 61 665 新安装的Debian9桌面上啥都没有 xff0c 就像这样 xff1a 图 1 虽然很简洁 xff0c 但是用着不是很方便 x
  • 爬虫遇到Cloudflare问题

    网址 xff1a https opensea io rankings sortBy 61 seven day volume 返回代码 xff1a 403 遇到的问题 xff1a Access denied api opensea io us

随机推荐

  • java servlet写的网页猜数小游戏

    几年前 xff0c 用java servlet 写了个猜数的网页小游戏 xff1b 今天看了觉得有点意思 xff0c 贴出来怀旧一下 xff1a 1 代码如下 xff1a package cn wzb import java io impo
  • 安卓-system.img镜像文件过大问题

    3126 5 1SDK预置过多apk时导致编译otapackage时报错处理 xff1a 1 修改prebuilts python linux x86 2 7 5 lib python2 7 zipfile py文件中为ZIP64 LIMI
  • 使用Tesseract-OCR识别图片中的文字并生成双层PDF

    识别图片中的文字并不是很困难 如果自己训练一个文字识别的深度学习程序去识别也是可以 xff0c 但是太费劲 Tesseract OCR是一个开源的文字识别引擎 xff0c 并且支持包括中文在内的多国语言 只要将语言配置上去 xff0c 就可
  • iptables(三)iptables命令详解

    一 语法规则 iptables t table COMMAND chain CONDITION j ACTION t table 是指 39 操作的表 39 filter nat mangle或raw 39 默认使用filter 39 CO
  • 单调栈lllll

    单调栈 xff0c 就是一个栈 xff0c 不过栈内元素保证单调性 即 xff0c 栈内元素要么从小到大 xff0c 要么从大到小 而单调栈维护的就是一个数前 后第一个大于 小于他的数 例题 xff1a P5788 模板 单调栈 例题就是一
  • cmake(六)Cmake添加工程子目录

    重点 xff1a 39 cmake3 39 和 39 make 39 命令 39 输出 39 的 39 深刻解读 39 备注 xff1a 当前阶段暂时不使用 39 IDE 39 工具 先 39 熟悉各指令 39 一 ADD SUBDIREC
  • nginx(二十七)长连接和短连接

    一 长连接和短连接 概念 1 39 HTTP 39 的长连接和短连接 39 本质 39 上是 39 TCP 39 长连接和短连接 2 在 39 HTTP 1 0 39 中默认使用 39 短 39 连接 解读 xff1a 客户端和服务器 39
  • nginx(七十四)nginx与跨域细节探究

    一 nginx配置跨域 知识铺垫 强调 xff1a 跨域是 39 浏览器 39 行为 39 不是 39 服务器行为 43 43 43 43 43 43 43 43 43 43 43 43 43 43 34 跨域的两种解决手段 34 43 4
  • HTTP1.1(一)HTTP协议

    一 HTTP协议定义 RFC7230定义 说明 xff1a 关注 39 红色关键字 39 无状态 解读 xff1a 连续的 39 两个 39 请求 后续的请求 39 不能依赖 39 前一个请求 各个请求是 39 相互独立 39 基于请求 相
  • nginx(七十五)nginx与Vary响应头细节探讨

    一 Vary nginx与Vary有关联的地方 nginx源码分析处理Vary响应头的逻辑 CORS和缓存 gzip vary 1 gzip vary on 如果设置为 39 开启 39 2 服务器 39 返回数据 39 时会在头部带上 3
  • JDK1.8之Lambada表达式一

    一 lambada表达式简介 我们知道对于Java变量可以赋给其一个值 而如果想将 34 一块代码 一个完整的方法 34 赋给一个Java变量 如下所示 xff0c 怎么做呢 xff1f 你可能认为 就是下面的方式来实现 很显然 xff0c
  • Oracle(三)

    一 概述 1 DML xff08 data manipulation language 数据操作语言 xff09 insert update delete 2 DDL data definition language 数据定义语言 crea
  • 项目中权限控制系统的设计

    RBAC 权限 xff1a 权利 能做的 和限制 不能做的 xff0c 在权限范围内做好自己的事情 xff0c 不该看的不看 机密 xff0c 不该做的不做 xff01 最开始真正有权限的概念是在Linux上关于文件和目录的权限 xff0c
  • 每天一个Linux命令之(read)

    一 概述 read命令特点 xff1a 1 接收 39 标准输入 键盘 39 的输入 或其它 39 文件 描述符 39 的输入 2 得到输入后 然后将数据 39 保存 39 一个 39 变量 39 中 核心点 xff1a 39 数据源 39
  • LInux shell之(for in 用法总结)

    一 语法 for 变量名 in 列表 do 程序段 command done 注意1 xff1a 是变量名 而不是 变量 xff01 注意2 xff1a 列表 可以做文章 xff01 二 应用 第一类 xff1a 数字性循环 gt seq
  • 一次性将所有变成 long long

    include lt bits stdc 43 43 h gt using namespace std const int N 61 100000 43 100 define int long long define fir i a b f
  • Linux基础命令(二十一)Linux中的磁盘管理(终)

    一 逻辑卷管理器 Logical Volume Manager 需求引入 xff1a 最初规划主机的时候 xff0c 只给了 home 100G的 xff0c 但是随着业务量的增大 xff0c 导致用户的增多 xff0c 这个文件系统不够
  • 【机器学习】DBSCAN聚类算法(含Python实现)

    文章目录 一 算法介绍二 例子三 Python实现3 1 例13 2 算法参数详解3 3 鸢尾花数据集 一 算法介绍 DBSCAN xff08 Density Based Spatial Clustering of Applications
  • Zookeeper深度解析(概念、原理机制、应用场景)

    1 Zookeeper是什么 xff1f 分布 开源的应用程序协调服务 它是集群的管理者 监视着集群中各个节点的状态 xff0c 根据节点的反馈进行下一步合理操作 主要解决分布式应用经常遇到的数据管理问题 如 xff1a 统一命名服务 状态
  • 计算机操作系统知识梳理

    1 进程和线程以及它们的区别 xff08 1 xff09 进程是对 运行时程序的封装 是系统进行资源 调度和分配的 基本单位 实现操作系统 的 并发 xff08 2 xff09 线程是进程的 子任务 是CPU调度和分派的基本单位 用于保证程