操作系统:精髓与设计原理 线程

2024-05-05 18:58

本文主要是介绍操作系统:精髓与设计原理 线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

进程的概念 细划分为2个特点

  资源所有权   包括一组程序 数据 栈 进程控制块定义的集合   拥有对资源的控制权 (由操作系统提供保护功能 避免冲突)

  调度/执行   一个进程具有一个执行状态和一个被分配的优先级,它是一个可被操作系统调度和分派的实体

线程  调度单位    包括 线程执行状态  线程上下文 

线程优势    创建时间  终止时间  切换时间 小于进程      同一进程下效率更高 无需调用内核

线程分类    用户级线程(User-Level Thread)  内核级线程(Kernel-Level Thread)

线程状态    

派生(派生一个新进程时 为该进程派生了一个线程  线程拥有自己的寄存器上下文和栈空间)  

阻塞(当线程需要等待一个事件时,它将被阻塞(保存它的用户寄存器 程序计数器 栈指针) 此时处理器转而执行另一个就绪线程)

解除阻塞  (当阻塞一个线程的事件发生时,该线程被转移到就绪队列中)

结束  (当一个线程完成时 寄存器上下文和栈都被释放)


与并发相关的关键术语

原子操作  一个函数或者由一个或多个指令的序列实现的动作(对外不可见)  也就是说 没有其他进程能看到中间状态和中断该操作       要么作为一个组来执行,要么都不执行

对系统状态没有可见的影响   原子性保证了并发进程的隔离

临界区  是一段代码       在这段代码中 进程将访问共享资源 当另一个进程已经在该代码上运行时,该进程就不能在这段代码中执行

互斥  当一个进程进入临界区访问共享资源时,其他进程不能进入该临界区访问任何共享资源

死锁  两个或两个以上的进程因其中的每个进程都在等待其他进程做完某些事情而不能继续执行 

活锁  两个或两个以上的进程为了相应其他进程的变化而持续改变自己的状态但不做有用的工作

饥饿  一个可运行的进程被调度者无限期忽视 不能被调度执行

竞争条件 多个线程或多个进程读写一个共享数据时 其结果依赖于它们执行的相对时间


常用并发机制

信号量  用于进程间传递信号的一个整数值   可进行三种操作  初始化  递减  增加   操作均为原子操作    递减操作用于阻塞一个进程    增加操作用于解除阻塞进程

二元信号量     只取0和1的信号量

互斥量  类似于二元信号量 但加锁(设定值为0) 解锁(设定值为1)的进程均为同一进程

条件变量  一种数据结构  用于阻塞进程或线程  直到特定条件为真

管程  一种编程语言结构   封装了变量  访问过程 初始化代码      管程中的变量只能由管程自己访问过程来访问  每次只能有一个进程在其中执行 其他进程将被阻塞  

消息/信箱   两个进程交换信息的一种方法 可用于同步 (使用无阻塞的send和阻塞receive)

自旋转 一种互斥机制 进程在一个无条件循环中执行  等待锁变量的值变为可用


使用队列来保存在信号量上等待的进程

强信号量  strong semaphore      采取先进先出队列   被阻塞时间最久的进程先从队列中释放出来

弱信号量   weak semaphore   并没有规定进程从队列中移出顺序的信号量


生产者消费者问题 (producer/ consumer)

有一个或多个生产者生产某种类型的数据(记录、字符)并放置在缓冲区中

有一个消费者从缓冲区中取数据

保证当缓存已满时,生产者不会继续向其中添加数据  当缓冲为空时,消费者不会从中消耗数据


消息不是直接从发送者发送到接收者,而是发送到一个共享数据结构,该结构由临时保存信息的队列组成(成为信箱)

解决有界多生产者消费者问题    利用一个创建信息的信箱 一个消费信息的信箱 


读者写者问题(reader/writer)

有一个由多个进程共享的数据区,这个数据区可以是一个文件或者一块内存空间,甚至一组寄存器,一些进程只读这个数据区中的数据

任意多的读进程可以同时读这个文件      

一次只有一个写进程可以写文件   

如果一个写进程正在写文件 那么禁止其他进程读文件

两种思路  读者优先  写者优先


可重用资源  一次只能供一个线程使用并不会由于使用而耗尽的资源

可消耗资源  看可以被生产和消耗的资源

死锁产生条件   互斥 一次只有一个进程可以使用该资源,其他进程不能访问已分配给其他进程的资源   (为保证结果的一致性 互斥是非常必要的)

                           占有且等待    当一个进程等待其他进程时,继续占有已经分配的资源 

                           不可抢占  不能强行抢占进程所占有的资源       (设计数据资源 提供回滚机制保证恢复到适当的状态)

                           循环等待   存在一个封闭的进程链   使得每个进程至少占有此链中下一个进程所需要的资源   (充分条件)

死锁预防    间接预防   排除死锁产生的可能性   前三个条件

                    直接预防   防止循环等待的发生

死锁避免    需要知道进程资源的请求情况  

                    如果进程请求会导致死锁,则不启动此进程                          进程启动拒绝  (假设所有进程同时发出它们的最大请求)

                    如果进程增加的资源请求会导致死锁,则不允许此分配      资源分配拒绝  (银行家算法)    安全状态:至少有一个资源分配序列不会导致死锁

死锁检测   周期性的检测是否出现死锁   检测到死锁之后 修复死锁

综合的死锁策略     把资源分成几组不同的资源类   为预防在资源类之间由于循环等待产生死锁  定义线性排序策略         在一个资源类中,使用该类最适合的算法

 

哲学家就餐问题 

一大碗面  5个盘子   5个哲学家  5把叉子   每位想吃饭的哲学家需要2把叉子来吃面

1 增加一位服务员 同一时刻只允许4个哲学家进入餐厅

2 使用管程  同一时刻只有一个哲学家进入   拿起左边叉子时   右边叉子没人拿 就一定可以拿到

              

                                                          


                   






     

这篇关于操作系统:精髓与设计原理 线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962425

相关文章

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

在线装修管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,装修队管理,用户管理,装修管理,基础数据管理,论坛管理 前台账户功能包括:系统首页,个人中心,公告信息,论坛,装修,装修队 开发系统:Windows 架构模式:B/S JDK版本:Java JDK1.8 开发工具:IDEA(推荐) 数据库版本: mysql5.7 数据库可视化工具: navicat 服务器:SpringBoot自带 ap

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

DDei在线设计器-API-DDeiSheet

DDeiSheet   DDeiSheet是代表一个页签,一个页签含有一个DDeiStage用于显示图形。   DDeiSheet实例包含了一个页签的所有数据,在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。   一个DDeiFile实例至少包含一个DDeiSheet实例。   本篇最后提供的示例可以在DDei文档直接预览 属性 属性名说明数

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页:

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

比较学习难度:Adobe Illustrator、Photoshop和新兴在线设计平台

从入门设计开始,几乎没有人不知道 Adobe 公司两大设计软件:Adobe Illustrator和 Photoshop。虽然AI和PS很有名,有一定设计经验的设计师可以在早期探索和使用后大致了解AI和PS的区别,但似乎很少有人会系统地比较AI和PS。目前,设计软件功能多样,轻量级和网页设计软件已成为许多设计师的需求。对于初学者来说,一篇有针对性的AI和PS比较总结文章具有非常重要的指导意义。毕竟

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

计算机组成原理——RECORD

第一章 概论 1.固件  将部分操作系统固化——即把软件永恒存于只读存储器中。 2.多级层次结构的计算机系统 3.冯*诺依曼计算机的特点 4.现代计算机的组成:CPU、I/O设备、主存储器(MM) 5.细化的计算机组成框图 6.指令操作的三个阶段:取指、分析、执行 第二章 计算机的发展 1.第一台由电子管组成的电子数字积分和计算机(ENIAC) 第三章 系统总线