操作系统(四)

操作系统引入进程的目的是为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量


引入线程是为了减少程序并发执行时系统所付出的额外开销,使操作系统具有很好的并发性。


进程的两个基本属性:

进程是拥有资源的独立单位

进程同时是一个可以独立调度的基本单位。


既能提高进程并发度,又能降低系统的额外开销。实现:将进程的资源申请和调度属性分开。把进程作为资源的申请和拥有这,但是不作为调度的基本单位。

线程是进程中的一个实体,是独立调度和分派的基本单位。

线程自身基本上不拥有系统资源,只拥有少许运行中比不可少的私有资源。线程有】可以与同属一个进程的其他线程共享进程的全部资源。

进程中所有的线程共享该进程的状态。

线程具有三种基本状态:就绪、执行、阻塞。

一般不具有挂起状态。


一个进程可以创建和撤销多个线程,统一进程中的多线程可以并发执行。

对线程的操作包括:

派生:当系统创建一个进程时,同时也为该进程派生一个线程,同一进程中的线程可以派生其他线程。

阻塞:当线程需要等待某件事时,它将被阻塞。释放处理机执行线程。

解除阻塞:当线程的阻塞时间发生,其状态转换为就绪,并插入到就绪队列。等待调度执行。

结束:当线程执行完毕,释放其私有资源。

线程的类型

用户线程:

内核级线程


多个进程常常需要共同修改某些共享资源、表格文件数据等,协同完成一些功能。

必须确保他们对共享变量的修改是正确的,保证数据的完整性。

共享协作同样涉及到互斥、死锁和饥饿问题。但更强调对数据的写操作必须互斥地进行。


并发控制——通信协作:当进程进行合作时,各个进程之间需要建立连接,进程同行需要同步和协调,进程通信的方式很多,包括消息传递,管道,共享存储区等。

通过消息传递实现进程通信时,由于没有共享资源,故无需互斥,但仍可能出现死锁和饥饿。


互斥与同步的解决策略

软件方法:由进程自己通过执行相应的程序指令,实现与别的进程的同步与互斥


硬件方法:通过屏蔽中断或采用专门的机器指令控制同步方法。

屏蔽中断:系统将无法响应任何外部请求,仅仅对单处理机有效,对多处理机无效。

专用机器指令:机器指令在一个指令周期执行,不会受到其他指令的中断。


信号量方法;

信号量方法能实现进程的互斥与同步,而不必忙等。

两个或多个进程可以通过传递信号进行合作,可以迫使进程在某个位置暂时停止执行,直到它收到UI个可以“向前推进”的信号,(被唤醒)。将实现信号灯作用的变量称为信号量,常定义为记录型变量s,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)

定义对信号量的两个原子操作:

wait(s)和signal(s)

信号量分为:互斥信号量和资源信号量。

互斥信号量用于申请或释放资源的使用权,常初始化为1.资源信号量用于申请或规范资源,可以初始化为大于1的正整数,标识系统中某类资源的可用个数。

wait操作用于申请资源(使用权),进程执行wait原语时,可能会阻塞自己。signal操作作用于释放资源(归还资源),进程执行signal原语时,有责任唤醒某个阻塞进程。


生产者与消费者模式

代表一类具有相同属性的进程,共享一个大小固定的缓冲区,其中,一个或多个生产者生产数据,并将生产的数据存入缓冲区,并有一个消费者从缓冲区中取数据,

生产者和消费者互斥进入缓冲区,某时刻只允许一个实体访问缓冲区。生产者必须互斥消费者和其他生产者。生产者不能向满缓冲区写数据,消费者不能向空缓冲取数据。

即生产者和消费者必须同步。


读者与写者模式

允许多个读者可以同时读数据,不允许多个写着进程同时写数据,即只能互斥写数据。若有写着进程正在写数据,则不允许读者进程度数据。

该方法称为“读者优先”,一旦有读者正在读数据,允许多个读者同时进入读数据,只有当全部读者退出,才允许写着进入写数据。

管程方法

管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制。利用管程可以锁定任何对象,尤其是链表型数据结构,可以锁定整个链表,或链表中的某个元素。


消息传递方法

进程之间的通信内容通常包含两种内型:控制信息和大批量信息。

低级通信:进程之间交换控制信息的过程

高级信息:进程之间交换批量数据的过程。

进程之间的同步与互斥是一种低级通信。用来控制进程执行速度。

常用的线程通信机制

基于共享存储区的方式:生产者、消费者通过共享缓冲区实现数据传递。属于基于共享存储区通信。不需要数据移动,一般用于本地通信。

通过程序设计来实现。

由操作系统在内存中划分出一块区域作为共享存储区,进程在通信前向系统分出一块区域作为共享存储区。进程在通信前向系统申请共享存储区中的一个分区。

消息传递模式

阻塞发送,阻塞接受:进程间的紧密同步;

不阻塞发送,阻塞接受:常用于服务进程为其他进程提供服务。

不阻塞发送,不阻塞接受。


邮箱机制

当第一个希望进入临界区的进程执行receive语句时,进入临界区执行,这时邮箱变为空,即没有消息,其后执行receive语句希望进入临界区的进程被阻塞。

当进入临界区的进程执行完临界区的代码,退出临界区时,执行send语句,将这条空消息归还给邮箱,并唤醒一个阻塞进程,使其取走这条消息,进入临界区执行。


死锁:

进程的并发控制不仅要控制若干线程的同步与互斥,确保进程之间正常通信,还需要解决进程之间的死锁。

多个进程因为竞争资源,或自行时推荐的顺序不当,或相互通信而永久阻塞时,如果没有外力,这种现象将永久保存下去。

系统中的资源大体可分为:可重用资源(某一时刻仅允许被一个进程使用的。不能被进程消耗的,释放以后还可以被其他进程使用的资源,如处理机,I/O通道)和可消耗资源(可消耗资源,指可以创造(生产)和撤销(消耗)的资源,其数量不限,如中断,洗好,消息)。两种都可能产生死锁


死锁产生的原因;

1、互斥:竞争的资源一次只能被一个进程使用

2、占用且等待:当一个进程占有一些资源,同时又申请新的资源。如果新资源申请失败。进程将占有资源且阻塞等待。

3、非剥夺:进程已占有资源不能被其他资源强行剥夺

4、循环等待:在系统中存在一个由若干个进程形成的环形请求链。

系统的两个状态:安全状态和不安全状态。是指系统能按照某种进程顺序,分别为这n个进程分配其所需要的资源,直至最大需求。使得每个进程都能顺利完成。

若系统不存在这样的一个安全序列,则程系统处理不安全状态。


银行间算法:

银行家算法用于银行发放一笔贷款前,预测该笔贷款是否会引起银行资金周转问题。

可用资源向量Avalilable,是一个具有m个元素的数组,其中每个元素代表一类可利用的资源的数目,其初始值为系统中该类资源的最大可用数目,其值将随着该类资源的分配和回收而动态改


哲学家进餐问题


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值