操作系统 第二章 (用户态 核心态 中断 异常)

操作系统 第二章

  • 进程的定义
  • 进程的状态与转换
  • 进程控制
  • 进程通信
  • 线程概念和多线程模型
  • 处理机调度的概念、层次
  • 进程调度的时机、切换与过程、方式、
  • 调度算法评价指标

进程的定义

程序:就是一个指令序列
PCB(进程控制块存放有进程位置等信息)、程序段和数据构成了进程实体(进程映像),PCB是进程存在的唯一标志
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程的组织方式
1)链接方式:按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针
2)索引方式:根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引的指针
在这里插入图片描述

进程的状态与转换

进程的三种基本状态:
1)运行态:占有CPU并在CPU上运行
2)就绪态:已经具有运行条件,但是没有空闲CPU暂时不能运行
3)阻塞态:因等待某事件发生而不能运行,比如资源分配等
进程的另外两种状态:
4)创建态:正在被系统创建,初始化PCB等
5)终止态:进程正从系统撤销,操作系统回收进程的资源
在这里插入图片描述
在这里插入图片描述

进程控制

用原语实现进程控制。原语的特点是执行期间不允许中断,这种不中断的操作称为原子操作。原语采用“关中断指令”和“开中断指令”实现,原语运行在核心态

在这里插入图片描述

进程通信

各进程拥有的内存地址空间相互独立,一个进程不能直接访问另一个进程的地址空间
进程通信的方式:
1)共享存储:
①基于数据结构的共享:比如共享空间只能存放长度为10的数组。这种共享方式速度慢,是一种低级通信的方式
②基于存储区的共享:在内存中画出一块共享存储区,是一种高级通信方式
2)管道通信:pipe通信,是指用于连接读写进程的一个共享文件,其实是内存中大小固定的一个缓冲区。
①管道通信只能半双工,某一时间内只能实现单向传输。如果需要实现双向同时通信,则需要设置两个管道。
②各个进程需要互斥的访问管道。
数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待系统将数据取走。当度进程将数据全部取走后,管道变空,此时度进程的read()系统调用将被阻塞。
没有写满不允许读,没有读空不允许写
⑤数据一旦被独处,就从管道中被抛弃,这意味着读进程最多只能有一个
3)消息传递:进程间的数据以格式化的消息为单位。进程通过操作系统提供的“发送消息/接受消息”两个原语进行数据交换。分为直接通信方式和间接通信方式(又称信箱通信方式Eg:计网中的邮件系统)
在这里插入图片描述

线程概念和多线程模型

线程是基本的CPU执行单元,也是程序执行流的最小单位
进程是处理机调度的基本单位,进程是资源分配的单位
线程是处理机调度的基本单位

进程内的线程之间可以并发,进一步提高了系统的并发度。比如一个QQ进程可以语音同时发文件,就是两个线程同时处理两个任务。
引入线程后,进程只作为除CPU之外的系统资源的分配单元。如打印机、内存地址空间分配等
线程的实现方式:
1)用户级线程:线程管理工作由应用程序负责,线程切换可以在用户状态下完成,用户级线程只能为用户看到不能被系统看到
2)内核级线程:线程的管理由操作系统完成,线程切换在核心态下完成,从操作系统视角可以看到线程
内核级线程才是处理机分配的单位
多线程模型:
多对一模型:多个用户线程映射到一个内核级线程
优:进程管理开销效率高
缺:一个线程阻塞会导致整个进程都被阻塞(并发度低)
一对一模型:一个用户线程映射到一个内核级线程
优:各个线程可以分配到多核机并行处理,并发度高
缺:进程管理的开销大
多对多模型:n个用户线程映射到m个内核模型
在这里插入图片描述

处理机调度的概念、层次

三层调度:高低中级和低级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程调度的时机、切换与过程、方式、

进程在操作系统临界区中不能进行调度和切换,内核程序临界区一般是用来访问某种内核数据结构的
进程调度方式:
非剥夺调度方式:又称非抢占式,适合于早起批处理系统
剥夺调度方式:又称抢占方式,适合分时操作系统、实时操作系统
在这里插入图片描述

调度算法评价指标

CPU利用率:忙碌的时间/总时间
系统吞吐量:总共完成了多少道作业/总共花了多少时间
周转时间:指从作业被提交给系统开始,到作业完成为止这段时间间隔
平均周转时间:各作业的周转时间之和/作业数
带权周转时间:作业周转时间/作业实际运行时间
平均带权周转时间:各作业带权周转时间之和/作业书
等待时间:作业等待处理机状态时间之和,对于进程,等待时间就是指进程建立后等待被服务的时间之和
响应时间:提出请求到首次响应的间隔

热门文章

暂无图片
编程学习 ·

PCL点云焊点提取

滚回来更新一篇文章,和各位交流一下 待处理点云: 数量级:百万 类型:零部件 描述:弯曲表面上有一些凸起在上面,需要提取凸起和平面接触的一圈点云,作为焊接的加工点参考:https://zhuanlan.zhihu.com/p/32111069其实这篇文章也算是全面了,思路和他的差不多,只是算法不太一…
暂无图片
编程学习 ·

2020上半年为你留下了什么?

今天是2020年6月30号,2020年上半年的最后一天.蓦然回首,发现时光过得飞快,记忆中那憋在家里,数着日子,焦虑不安的情景还历历在目.那时候最大的愿望就是像电视中那样:一觉醒来,半年过去了,大家又都按部就班没羞没躁的生活着.好多文人墨客都会鼓吹:每种经历都是人生的财富,人生没…
暂无图片
编程学习 ·

2020年陆月份生活随笔

今天是建党99年,党的生日,不是党员,要按照党员的标准严格要求自己。昨天看了一下月跑量,计划着跑一个总里程171.99,计算了一下今天跑一个8.48就可以,今天跑步特意戴上耳机听跑步软件播报公里数,到了八公里就放满了速度,跑着距离感觉快到了,心想过了这个路口再看手机,…
暂无图片
编程学习 ·

leetcode:208. 实现 Trie (前缀树)

链接:https://leetcode-cn.com/problems/implement-trie-prefix-tree/ 实现一个前缀树(节点),一个前缀树节点需要保存它可能的26个孩子的信息,以及这个节点是不是一个单词的结尾。 C++代码: class Trie {Trie * children[26];bool isWord = false; public:/** Initialize…
暂无图片
编程学习 ·

React配置less以及less的全局变量设置

工作中接触react的项目比较的少,对于less的全局变量设置在vue项目中设置过,react的全局变量设置没怎么接触了。 看到有小伙伴问这个,试着在网上找了下,也是花费了不少的功夫才找到不错的方式,在这里分享给大家。 由于之前vue项目里没法使用sass-resource-loader,一开始也…
暂无图片
编程学习 ·

基于stm32单片机温度报警器LCD1602液晶电子制作智能测量

演示视频:https://v.youku.com/v_show/id_XNDU3OTU0MDcwOA==.html 将链接复制至IE浏览器打开!!! 功能说明: 上电后,会一直显示测量出来的温度值,没有按键按下情况下一直会显示。 当温度超过高限或者低于下限会报警。 按下设置键后可以对高限底限进行设置。
暂无图片
编程学习 ·

Android 解析jwt遇到java.lang.IllegalArgumentException: bad base-64

解析jwt的时候遇到了java.lang.IllegalArgumentException: bad base-64 百思不得其解 按照网上说的:Android&ios java 这俩咋就不好使呢? 后来我看了篇帖子说 android开发中的bad base-64错误在涉及到服务器的软件中,由于使用android的Base64解码功能,而服务器端加密为…
暂无图片
编程学习 ·

JavaIo流看这一篇就足够了

1什么是文件? 文件可认为是相关记录或存放在一起相关数据的集合。 我们用什么去操作文件呢? 在Java当中专门有一个包Java.io.*;是内置的包,包含对文件的读和写的操作。 2File类 在Java当中使用File类来操作文件和目录。 File类的四个构造方法 File(File parent, String chil…
暂无图片
编程学习 ·

使用MicroPython计算任意位数圆周率

计算任意精度的圆周率是个有趣的主题,得益于python的强大计算能力,我们在MicroPython中也可以轻松的计算pi的数值。先输入下面的代码:""" 文件:pi.py 说明:用MicroPython计算任意精度圆周率计算 作者:未知 版本: 时间: 修改:邵子扬2016.5v1.1 http://b…
暂无图片
编程学习 ·

postman引入文件实现参数化及中文乱码问题解决

1、首先,在postman中输入地址和参数,保证接口请求成功。可以在tests中添加断言2、将需要参数化的参数用变量表示,并将变量添加进全局变量中3、将需要参数化的参数写成CSV,TXT,JSON格式的文档。这里用的是csv格式的文件,其中name是变量名如果用txt格式的文件,多参数之间要用…
暂无图片
编程学习 ·

SpringBoot+Mybatis实现简单的增删改查

SpringBoot+Mybatis实现简单的增删改查 首先是在Springboot项目中整合Mybatis 先导入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependen…
暂无图片
编程学习 ·

加速推进新基建,中国联通软件研究院助力广东智造云升级为全国工业平台

加速推进新基建,中国联通软件研究院助力广东智造云升级为全国工业平台发稿时间:2020-07-01 11:260【字体: 大 中 小】6月23日,中国联通智造云全国级工业市场顺利完成上线,6月28日,智造云产品成功在湖北省签约下单,打破了省内地域的限制,实现了省分政企创新业务迈向全国…
暂无图片
编程学习 ·

哈夫曼编码

哈夫曼编码 输入一个字符串文本 #include <stdio.h> #include <stdlib.h> #include <string.h>#define cmax 0x3f3f3f3f // 宏定义一个较大的数,作为比较数据 #define cmaxsize 10000 // 宏定义数组的长度 // ---构建哈夫曼树 // ---定义哈夫曼…
暂无图片
编程学习 ·

jdk源码解析二之HashMap

这里写自定义目录标题HashMapputremovereplaceget扩容resize迭代器总结什么时候采用红黑树?为什么每次扩容后,是2的幂次方?为什么扩容后,相同的在原位置保存,而不同的则当前索引+之前原位置索引保存?为啥用尾插法?为什么线程不安全? HashMap HashMap的loadFactor为什么是0…
暂无图片
编程学习 ·

python读取Excel工作簿、工作表

python读取Excel工作簿、工作表 最近需要用python操作Excel表格,因此大概学习了一下如何操作,表较简单但是很实用,这里记录一些简单的操作。 import xlrd # 读取工作簿 wb=xlrd.open_workbook(招生表.xls) # 读取工作簿下所有的工作表 ws=wb.sheets() # 读取工作簿下所有工作…
暂无图片
编程学习 ·

07:从一个二维数组中查找一个数

题目:从一个二维数组中查找一个数 数组要求:从左到右,从上到小依次递增的矩形二维数组 思路:我们从矩阵的右上角开始查找,若该位置的数值小于目标值,列数减一;若数值大于目标值,行数加一,后续重复。 public class Offer07 {public static void main(String[] args) {i…
暂无图片
编程学习 ·

Niushop单商户商城系统后台新增功能啦!

随着单商户商城系统直播功能的上线,越来越多的牛友反馈,这真的是太方便啦! 抗疫期间,商城直播无疑是当下最红,再加上地摊经济,线上直播,线下溜达的功夫还能看看商品实物,简直不要太完美! 因此,Niushop研发团队就直播这一功能,又新增了几项功能,更方便于牛友们直播带…
暂无图片
编程学习 ·

浙江工业大学计算机技术专业考研经验分享帖

浙江工业大学复试经验分享自我介绍初试复习复试流程复试感想心态分享 自我介绍我,本科双非二本,软件工程专业,大学四年学业成绩在专业前十,拿过奖学金,参加过一些没啥含金量的比赛,不爱且不怎么会敲代码。就这样一个平凡的我决定考研了,考虑到地理,专业等因素,我将浙江…
暂无图片
编程学习 ·

深入javascript计划六:深入浅出异步

什么是进程?进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。通俗来讲就是:一个进程就是一个程序的运行实例(详细解释就是,启动一个程序的时候,操作…