20240304-1-操作系统

操作系统

知识体系

Questions

1.进程和线程的区别

  • 进程是系统进行资源分配和调度的基本单位;
  • 线程是CPU调度和分派的基本单位。
    • 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小;
    • 一个进程至少有一个线程,线程依赖于进程而存在;
    • 每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行;
    • 多线程程序只要有一个线程崩溃,整个程序就崩溃了,但多进程程序中一个进程崩溃并不会对其它进程造成影响,因为进程有自己的独立地址空间,因此多进程更加健壮。

2.协程

  • 协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

3.进程的状态

三态模型
  • 运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
  • 就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
  • 阻塞:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。

三态模型

五态模型
  • 新建:对应于进程被创建时的状态,尚未进入就绪队列。
  • 终止:进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止时所处的状态。

4.进程间通信方式

  • 匿名管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

  • 高级管道:将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程。

  • 有名管道:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

  • 消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

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

  • 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

  • 套接字:套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

5.僵尸进程和孤儿进程

  • 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。
  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

6.死锁

  • 死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
死锁产生的必要条件
  • 互斥条件:一个资源每次只能被一个进程使用;
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
  • 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺;
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
死锁预防
  • 破坏互斥条件:允许某些资源同时被多个进程访问,但是有些资源本身并不具有这种属性;
  • 破坏请求与保持条件:
    • 实行资源预先分配策略(当一个进程开始运行之前,必须一次性向系统申请它所需要的全部资源,否则不运行);
    • 只允许进程在没有占用资源的时候才能申请资源(申请资源前先释放占有的资源);
  • 破坏不剥夺条件:允许进程强行抢占被其它进程占有的资源,这样做会降低系统性能;
  • 破坏循环等待条件:将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出。
死锁避免

银行家算法

参考: 银行家算法

7.页面置换算法

  • 最佳置换算法(OPT):选择以后永不使用的或者是在最长时间内不再被访问的页面;

  • 先进先出置换算法(FIFO):优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面;

  • 最近最久未使用置换算法(LRU):置换出未使用时间最长的页面;

  • 第二次机会算法(SCR):按FIFO选择某一页面,若其访问位为1,给第二次机会,并将访问位置0;

  • 时钟算法(CLOCK):SCR中需要将页面在链表中移动(第二次机会的时候要将这个页面从链表头移到链表尾),时钟算法使用环形链表,再使用一个指针指向最老的页面,避免了移动页面的开销。

  • 注:LRU算法题

8.分页和分段的区别

  • 段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的;
  • 段的大小不固定,由它所完成的功能决定;页的大小固定,由系统决定;
  • 段向用户提供二维地址空间;页向用户提供的是一维地址空间;
  • 段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。

9.硬中断和软中断

硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。

​ 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断)。

硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

10.IO模型

  • 阻塞式 I/O:应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回;

  • 非阻塞式 I/O:应用进程可以继续执行,但是需要不断地执行系统调用来获知 I/O 是否完成,这种方式称为轮询;

  • I/O 复用:单个进程具有处理多个 I/O 事件的能力;

    • select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间(缺点1:每次都要复制,开销大),由内核根据就绪状态修改该集合的内容。(缺点2)集合大小有限制,32位机默认是1024(64位:2048);采用水平触发机制。select函数返回后,需要通过遍历这个集合,找到就绪的文件描述符(缺点3:轮询的方式效率较低),当文件描述符的数量增加时,效率会线性下降;

      默认单个进程打开的FD有限制是1024个,可修改宏定义,但是效率仍然慢。

    • poll:基本原理与select一致,也是轮询+遍历;唯一的区别就是poll采用链表的方式存储,没有最大文件描述符限制。

    • epoll:通过内核和用户空间共享内存,避免了不断复制的问题;支持的同时连接数上限很高(1G左右的内存支持10W左右的连接数);文件描述符就绪时,采用回调机制,避免了轮询(回调函数将就绪的描述符添加到一个链表中,执行epoll_wait时,返回这个链表);支持水平触发和边缘触发,采用边缘触发机制时,只有活跃的描述符才会触发回调函数。

  • 信号驱动式 I/O:内核在数据到达时向应用进程发送 SIGIO 信号;

  • 异步 I/O:内核完成所有操作后向应用进程发送信号。

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

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

相关文章

Java基础 - 7 - 常用API(三)

API(全称 Application Programming Interface:应用程序编程接口) API就是Java帮我们已经写好的一些程序,如类、方法等,可以直接拿过来用 JDK8 API文档:Java Platform SE 8 一. JDK8之前传统的日期、时间 …

基于springboot+vue的流浪宠物管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

js面试 forEach ,map,for ,for in , for of

forEach ,map,for ,for in , for of 1 forEach 回调3个参数value,index,arr(原数组) 2 map 1:map() 不会改变原始数组 2:函数的作用是对数组中的每一个元素进行处理,返回新的元素…

如何使用生成式人工智能探索视频博客的魅力?

视频博客,尤其是关于旅游的视频博客,为观众提供了一种全新的探索世界的方式。通过图像和声音的结合,观众可以身临其境地体验到旅行的乐趣和发现的喜悦。而对于内容创作者来说,旅游视频博客不仅能分享他们的旅行故事,还…

YOLOv8姿态估计实战:训练自己的数据集

课程链接:https://edu.csdn.net/course/detail/39355 YOLOv8 基于先前 YOLO 版本的成功,引入了新功能和改进,进一步提升性能和灵活性。YOLOv8 同时支持目标检测和姿态估计任务。 本课程以熊猫姿态估计为例,将手把手地教大家使用C…

大模型推荐落地啦!融合知识图谱,蚂蚁集团发布!

引言:电商推荐系统的新突破 随着电子商务平台的蓬勃发展,推荐系统已成为帮助用户在信息过载时代中筛选和发现产品的关键工具。然而,传统的推荐系统主要依赖历史数据和用户反馈,这限制了它们在新商品推出和用户意图转变时的有效性…

Python使用模块和库编程

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 路在脚下,勇往直前&#x…

面试经典150题——简化路径

"A goal is a dream with a deadline." - Napoleon Hill 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目开始看起来并不太容易知道该怎么写代码,所以不知道什么思路那就先模拟人的行为,比如对于如下测试用例: 首先 /代表根…

【王道操作系统】ch1计算机系统概述-06虚拟机

文章目录 【王道操作系统】ch1计算机系统概述-06虚拟机01传统计算机02虚拟机的基本概念(1)第一类虚拟机管理程序(2) 第二类虚拟机管理程序(3) 两类虚拟机管理程序的对比 【王道操作系统】ch1计算机系统概述…

vite打包构建时环境变量(env)生成可配置的js文件

现实需求 在vite开发过程中,一些变量可以放在.env(基础公共部分变量).env.dev(开发环境)、.env.production(生产环境)中管理,通常分成开发和生产两个不同的配置文件管理&#xff0c…

MATLAB环境下基于区域椭圆拟合的细胞分割方法

使用图像分割技术可以找到图像中的目标区域,目标区域可以定义为具有特定值的单个区域,也可以定义为具有相同值的多个区域。目前图像分割已经融入到生活中的方方面面,在遥感领域,它应用于航拍图中的地形、地貌的分割;在…

【d35】【Java】【力扣】28. 找出字符串中第一个匹配项的下标

题目 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystac…

YOLOv8从入门到入土使用教程!(一)训练模型

⭐⭐⭐瞧一瞧看一看,新鲜的YOLOv9魔改专栏来啦!⭐⭐⭐ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、本文介绍 本文将演示如何使用YOLOv8进行训练及预测! 二…

GitHub登不上:修改hosts文件来解决(GitHub520,window)

参考链接:GitHub520: 本项目无需安装任何程序,通过修改本地 hosts 文件,试图解决: GitHub 访问速度慢的问题 GitHub 项目中的图片显示不出的问题 花 5 分钟时间,让你"爱"上 GitHub。 (gitee.com) GitHub网站…

算法比赛|赛制介绍| ACM, IOI赛制, OI赛制

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 数据结构帮助小白快速入门算法 &#x1f4…

【C++】二叉树进阶面试题(上)

目录 1. 二叉树创建字符串 题目 分析 代码 2. 二叉树的分层遍历1 题目 分析 代码 3. 二叉树的分层遍历2 题目 分析 代码 4. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 题目 分析 代码 5. 二叉树搜索树转换成排序双向链表 题目 分析 代码 1. …

鸿蒙开发实战【网络搜索】

概述 本示例通过eTS来展示电话服务中网络搜索功能&#xff0c;包含无线接入技术、网络状态、选网模式、ISO国家码、信号强度信息列表及Radio是否打开。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 网络搜索 介绍 本示例通过[ohos.telephony.sim][ohos.telephon…

【算法分析与设计】组合

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 示例 1&…

【笔记版】docker常用指令---systemctl类、docker状态

systemctl [options] docker 启动&#xff1a;system start docker查看状态&#xff1a;systemctl status docker停止&#xff1a;systemctl stop docker有警告&#xff1a;service关闭了&#xff0c;但是docker.socket仍响应解决方法&#xff1a;systemctl stop docker.socket…

如何证明线性规划系统最优解存在性

先给定simplex所对应的算法的流程图: 添加图片注释,不超过 140 字(可选) 上图是线性规划算法的基本流程描述,但是给定的基本流程描述中的一些步骤还需要进一步的进行分解,第一步是如何将线性规划系统依靠算法的步骤现转换为标准型的线性规划系统,然后进行判断,主要是判…