操作系统基础教程

news/2024/4/26 16:57:34/文章来源:https://blog.csdn.net/m0_67623521/article/details/128103657

目录

第二章:处理器管理

概览

进程调度的层次

进程的调度方式:

调度的评价标准:

典型的调度算法:

第三章:同步、通信和死锁

什么是进程同步?

什么是进程互斥?

进程同步的实现方式

进程互斥的实现方式

信号量和PV操作

管程


第二章:处理器管理

操作系统学习(3)处理机调度:调度的概念、时机、切换、过程以及调度方式和基本准则 | Echo Blog

概览

1、指令系统和寄存器。

2、特权指令和非特权指令:特权指令只能在内核态使用,非特权指令在内核态和用户态(管态和目态)都可以使用。

3、内核态、用户态

4、处理器状态及其转换:有几种情况可以让处理器从用户态转为内核态,一、执行系统调用,程序请求操作系统服务;二、中断事件;三、产生异常。

中断技术:分为内中断(出现就立即执行),外中断。

进程调度的层次

有三种层次:

1、高级调度:作业调度,内存与辅存之间的调度

2、中级调度:一种缓冲机制,作用是将暂时挂起的进程重新调入内存运行。进程挂起当内存不足的时候该进程不进入内存,而是在外存等待,即挂起状态。

3、低级调度:进程/线程调度,是操作系统中最基本的一种调度。

进程的调度方式:

1、非剥夺式调度,一旦开始就必须等他运行结束,实现简单,系统开销小。

2、剥夺式调度:在有优先级的进程时,处理一个优先级更高的进程,这个进程就要是剥夺式进程,就是要处理更加紧急的进程任务。釆用剥夺式的调度,对提高系统吞吐率和响应效率都有明显的好处。

调度的评价标准:

1、CPU 利用率

2、系统吞吐率

3、周转时间:作业完成时间-作业到来时间

平均作业周转时间(相加之和/数量)、平均带权作业周转时间=(完成时间/所需CPU时间+...)/size

4、等待时间

5、响应时间

典型的调度算法:

1、先来先服务算法(First Come First Served,FCFS):每次从就绪队列中选择最先进入该队列的进程,直到完成。

2、短作业优先算法(Shortest Job First,SJF):从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。由于一直选则最短的作业运行,最早进入但是运行时间长的作业等待时间会很长,出现饥饿现象。

3、最短剩余时间优先算法(Shortest Remaining Time First,SRTF):将SJF改为剥夺式算法就成为了该算法。

3、优先级调度算法:优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。也分为静态优先级和动态优先级,静态优先级可能会造成饥饿现象,即低优先级的进程一直推迟运行。

4、高响应比优先算法(Highest Response Radio First,HRRF):该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。其中响应比=(等待时间 + 作业处理时间) / 作业处理时间。

5、时间片轮转调度算法(Round-Robin,RR):在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms,形成一个时间环。

6、多级反馈队列调度算法:它是时间片轮转调度算法和优先级调度算法的综合和发展,多个就绪队列,每个队列赋予不同的优先级,而且赋予每个队列的时间片也不相同,如第一个队列的优先级最高,时间片最短。如果是一个短作业,它在级别较高的队列就可以处理完;如果是一个长作业,第一级队列没有完成,可以转到下一个时间片更长的队列末尾,以此类推。

第三章:同步、通信和死锁

操作系统~进程同步与进程互斥的概念和实现方式_Listen-Y的博客-CSDN博客

什么是进程同步?

请看这个管道通信的例子,显然必须先往里面写了数据之后,才可以读数据,但是读数据和写数据是异步发生的,我们不知道实际的读写数据操作谁先谁后,所以需要用进程同步来解决这种问题。

同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作

什么是进程互斥?

一句话来解释就是对共享资源(也叫临界资源)的互斥访问的控制。共享资源就是多个进程之间的需要共享的资源,在一个进程使用的时候,另外一个进程必须等待(C++中可以使用std::unique_lock<std::mutex> std::lock_guard<std::mutex>来实现资源的互斥锁)。

实现资源互斥,需要遵循以下原则:1.空闲让进。2.忙则等待。3.有限等待。4. 让权等待。

进程同步的实现方式

1、临界区:Critical Section 通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

2、互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的。

3、信号量(Semaphore)

4、事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

进程互斥的实现方式

软件算法:Peterson算法,给每个进程设置标志,为true代表此进程要求进入临界区。

硬件算法:

1、中断屏蔽方法:利用“开/关中断指令”实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个线程同时访问临界区的情况)

2、测试并设置指令:系统利用TS指令来实现临界区的上锁和开锁原语操作(不可以中断的操作)。

3、对换指令:void SWAP(bool key, bool lock){ bool temp=b; b=a; a=tmep;}

信号量和PV操作

1、一般信号量

typedef struct{ int value; struct pcb* list;}void P(semaphore s){ s.value--; if(s.value<0) sleep(s.list);}

void V(semaphore s){ s.value++; if(s.value<=0) wakeup(s.list);}

上面就是PV操作的相关结构和函数,注意PV操作都是原语(Atomic Language)。

推论:

1)若s.value>0,s.value代表可以使用的资源数量。

2)若s.value<0,s.value代表等待队列中的进程数量。

3)通常P操作代表申请一个资源,v操作代表归还一个资源

信号量解决的问题:

  1. 信号量实现互斥
  2. 信号量解决五位哲学家进餐问题
  3. 信号量解决生产者-消费者问题
  4. 信号量解决读者-写者问题
  5. 信号量解决睡眠理发师问题。

管程

在管程中有一个很重要的东西,叫做条件变量。

怎样理解C++11中的条件变量? - 知乎

std::condition_variable - cppreference.com

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

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

相关文章

JVM总结

1. 内存结构 线程私有区 程序计算器 作用&#xff1a;是一块较小的内存空间&#xff0c;存储的是当前线程所执行的字节码文件的序号特点&#xff1a;线程私有&#xff0c;不会出现内存空间溢出 虚拟机栈 虚拟机栈是管理JAVA方法执行的内存模型&#xff0c;每个方法执行时都…

贴吧顶贴软件《今日/更新》

贴吧顶贴软件《今日/更新》百收贴吧工具箱&#xff0c;贴吧顶帖软件&#xff0c;贴吧推广引流神器#贴吧顶帖#贴吧推广 hello&#xff0c;大家好&#xff0c;我是软件的作者百收编辑狂潮老师。本次的视频讲解是作为一个百度顶贴的自动化脚本的视频安装教程和使用教程。你作为新…

SpringCloud(五)MQ消息队列

MQ概念常见消息模型helloworld案例实现实现spring AMQP发送消息实现spring AMQP接收消息工作消息队列实现发布订阅模型Fanout Exchange实现DirectExchange实现TopicExchange实现DirectExchange 和FanoutExchange的差异DirectExchange 和TopicExchange的差异基于RabbitListener注…

钉钉产品体验报告

一、调研的目的了解企业社交软件&#xff0c;借写竞品分析来帮助自己整理思路&#xff0c;看清市场的发展趋势&#xff1b;体验这类企业设计软件&#xff0c;掌握产品核心业务流程和产品结构&#xff0c;把握需求对应的功能点和界面结构&#xff0c;并侧面了解用户习惯&#xf…

用Python做数据分析有哪些优势?

众所周知&#xff0c;可以用作数据分析的语言有很多&#xff0c;包含Python、R语言等&#xff0c;而且Python被誉为数据分析的一大利器&#xff0c;更是该领域的首选语言&#xff0c;那么用Python做数据分析有哪些优势呢?跟着蛋糕往下看。 第一、Python语言自身的优势 Pytho…

ShardingSphere水平、垂直分库、分表和公共表

目录一、ShardingSphere简介二、ShardingSphere-分库分表1、垂直拆分&#xff08;1&#xff09;垂直分库&#xff08;2&#xff09;垂直分表2、水平拆分&#xff08;1&#xff09;水平分库&#xff08;2&#xff09;水平分表三、水平分库操作1、创建数据库和表2、配置分片的规则…

BigGAN

1、BIGGAN 解读1.1、作者 Andrew Brock、Jeff Donahue、Karen Simonyan 1.2、摘要 尽管最近在生成图像建模方面取得了进展&#xff0c;但从 ImageNet 等复杂数据集中 成功生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此&#xff0c;我们以迄 今为止最大的规模训练生…

fastadmin:在新增页面,打开弹窗单选,参数回传

样式&#xff1a;核心代码&#xff1a;一、弹窗的控制器中&#xff1a;// 定义一个公共函数select()&#xff0c;如果这个请求是Ajax&#xff0c;则返回index()函数&#xff0c;否则返回view对象的fetch()函数。 public function select() {if ($this->request->isAjax(…

【软件测试】测试老鸟的迷途,进军高级自动化测试测试......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 很多从业几年的选手…

【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例&#xff0c;欢迎点赞&#xff0c;关注共同学习交流。 电影推荐系统 目录电影推荐系统1. 问题介绍1.1推荐系统矩阵分解方法介绍1.2 数据集&#xff1a;ml-100k2. 推荐系统实现2.1 定义矩阵分解函数2.2 …

消息中间件的概念

中间件(middleware)是基础软件的一大类&#xff0c;属于可复用的软件范畴。中间件在操作系统软件&#xff0c;网络和数据库之上&#xff0c;应用软件之下&#xff0c;总的作用是为处于自己上层的应用软件提供运行于开发的环境&#xff0c;帮助用户灵活、高效的开发和集成复杂的…

ICA简介:独立成分分析

1. 简介 您是否曾经遇到过这样一种情况&#xff1a;您试图分析一个复杂且高度相关的数据集&#xff0c;却对信息量感到不知所措&#xff1f;这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术&#xff0c;可让您分离和识别多元数据集中的底层独立来源。 …

PPP简介,PPP分层体系架构,PPP链路建立过程及PPP的帧格式

PPP&#xff08;Point-to-Point Protocol&#xff09;是一种用于在两个网络节点之间传输数据的通信协议。它最初是为在拨号网络上进行拨号连接而开发的&#xff0c;现在已经被广泛应用于各种网络环境中&#xff0c;例如在宽带接入、虚拟专用网&#xff08;VPN&#xff09;等场景…

【JAVA】一个项目如何预先加载数据?

这里写目录标题需求实现AutowiredPostConstruct实例CommandLineRunner实例ApplicationListener实例参考需求 一般我们可能会有一些在应用启动时加载资源的需求&#xff0c;局部或者全局使用&#xff0c;让我们来看看都有哪些方式实现。 实现 Autowired 如果是某个类里需求某…

[1]MyBatis+Spring+SpringMVC+SSM整合

一、MyBatis 1、MyBatis简介 1.1、MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c; iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。…

Vue中如何利用websocket实现实时通讯

首先我们可以先做一个简单的例子来学习一下简单的websocket模拟聊天对话的功能 原理很简单&#xff0c;有点像VUE中的EventBus&#xff0c;用emit和on传来传去 首先我们可以先去自己去用node搭建一个本地服务器 步骤如下 1.新建一个app.js&#xff0c;然后创建pagejson.js文…

【Linux】-- POSIX信号量

目录 POSIX信号量 sem_init - 初始化信号量 sem_destroy - 销毁信号量 sem_wait - 等待信号量&#xff08;P操作&#xff09; 基于环形队列的生产消费模型 数据结构 - 环形结构 实现原理 POSIX信号量 #问&#xff1a;什么是信号量&#xff1f; 1. 共享资源 -> 任何一…

【笔记】两台1200PLC进行S7 通信(1)

使用两台1200系列PLC进行S7通信&#xff08;入门&#xff09; 文章目录 目录 文章目录 前言 一、通信 1.概念 2.PLC通信 1.串口 2.网口 …

时间颗粒度选择(通过选择时间范围和颗粒度展示选项)

<template><div><el-time-selectplaceholder"起始时间"v-model"startTime":picker-options"startPickerOptions"change"changeStartTime"></el-time-select><el-time-selectplaceholder"结束时间&quo…

想招到实干派程序员?你需要这种面试法

技术招聘中最痛的点其实是不精准。技术面试官或CTO们常常会向我们吐槽&#xff1a; “我经常在想&#xff0c;能不能把我们项目中的代码打印出来&#xff0c;作为候选人的面试题的一部分&#xff1f;” “能不能把一个Bug带上环境&#xff0c;让候选人来试试怎么解决&#xf…