【计算机操作系统】第三篇:进程通信,线程与进程的区别和联系,作业调度算法;死锁产生条件;连续分配存储管理方式;分页存储管理;快表时什么?局部性;

目录

 

进程通信:四种高级通信:

线程与进程:

进程基本属性:

线程的基本属性:

作业调度算法:

先来先服务调度算法(FCFS):

短作业优先调度算法(SPF): 

最高响应比优先算法(HRN):

基于优先数调度算法(HPF):

   基本公式:

死锁产生的必要条件:

产生死锁的原因主要是:

产生死锁的四个必要条件:

解除死锁的方法有:

程序的三种装入方式:

程序的链接:

连续分配存储管理:

一、单一连续分配

二、固定分区分配

三、动态分区分配

分页存储管理:

页面:

页面大小:

快表:

分段:

操作系统有一个虚拟内存映射表。

局部性

 


进程通信:四种高级通信:

  • 管道通信,共享内存,消息队列,信号

进程间通信主要有以下几种方式:
 

  1. 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  2. 有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信;
  3. 消息队列(message queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  5. 信号(sinal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  6. 共享内存(shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
  7. 套接字(socket) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器的进程通信;

线程与进程:

进程基本属性:

  1. 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立的单位;
  2. 进程是一个可拥有资源的独立单位;
  3. 每个进程都有唯一的PCB;
  4. 进程是系统运行程序的基本单位;
  5. 每一个进程都有自己独立的一块空间 一组系统资源;
  6. 每一个进程的内部数据和状态都是完全独立的;
  7. 进程至少包含一个线程 这个线程叫做主线程

线程的基本属性:

 

  1. CPU调度和分派的基本单位;
  2. 进程中执行运算的最小单位,可完成一个独立的顺序控制流程;
  3. 真正在CPU上运行的是线程;
  4. 一个线程可以创建一个线程也可以删除一个线程 -- 线程调度;
  5. 多个线程完成不同工作就是多线程 抢占资源;

作业调度算法:

  • 先来先服务调度算法(FCFS):

  1. 就是按照各个作业进入系统的自然次序来调度作业。
  2. 这种调度算法的优点是实现简单,公平。
  3. 其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。
  • 短作业优先调度算法(SPF): 

  1. 就是优先调度并处理短作业,所谓短是指作业的运行时间短。
  2. 而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 
  • 最高响应比优先算法(HRN):

  1. 响应比=1+作业等待时间/作业处理时间。
  2. FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。
  • 基于优先数调度算法(HPF):

  1. 每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,
  2. 优先选择优先数最高的作业。

   基本公式:

  1. 响应比=(等待时间+运行时间)/运行时间      (响应比=1+   等待时间/运行时间。)
  2. 周转时间=作业完成时间-作业提交时间
  3. 平均周转时间 = 所有进程周转时间 / 进程数
  4. 带权周转时间=周转时间/运行时间
  5. 平均带权周转时间=带权周转时间/进程数

死锁产生的必要条件:

产生死锁的原因主要是:


(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。


产生死锁的四个必要条件:

 

(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。

解除死锁的方法有:

  • 资源剥夺
  • 撤销进程
  • 进程回退

 

  • 程序的三种装入方式:

  1. 绝对装入方式:
  2. 可重定位装入方式:
  3. 动态运行时装入方式:

程序的链接:

  1. 静态链接方式:
  2. 装入时动态链接:
  3. 运行时动态链接:

连续分配存储管理:

一、单一连续分配


最简单的一种存储管理方式,只能用于单用户、单任务的操作系统中。
优点:易于管理。
缺点:对要求内存空间少的程序,造成内存浪费;程序全部装入,很少使用的程序部分也占用内存。

二、固定分区分配


把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个分区。操作系统占用其中一个分区。支持多个程序并发执行,适用于多道程序系统和分时系统。最早的多道程序存储管理方式。
缺点:内碎片(一个分区内的剩余空间)造成浪费;划分为几个分区,便只允许几道作业并发,分区总数固定,限制并发执行的程序数目。

三、动态分区分配


1、分区的大小不固定:在装入程序时根据进程实际需要,动态分配内存空间,即——需要多少划分多少。
2、空闲分区表项:从1项到n项:内存会从初始的一个大分区不断被划分、回收从而形成内存中的多个分区。
3、优点:并发进程数没有固定数的限制,不产生内碎片。缺点:有外碎片(分区间无法利用的空间)
4、分区分配算法

  • ①首次适应算法FF(first-fit)

空闲分区排序:以地址递增的次序链接
检索:分配内存时,从链首开始顺序查找直至找到一个大小能满足要求的空闲分区;
分配:从该分区中划出一块作业要求大小的内存空间分配给请求者,余下的空闲分区大小改变仍留在空闲链中。
若从头到尾检索不到满足要求的分区则分配失败
优点:优先利用内存低址部分,保留了高地址部分的大空闲区;
缺点:但低址部分不断划分,会产生较多小碎片;而且每次查找从低址部分开始,会逐渐增加查找开销。

  • ②循环首次适应算法

空闲分区排序:按地址
检索:从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。为实现算法,需要设置一个起始查寻指针并采用循环查找方式
分配:分出需要的大小
优点:空闲分区分布均匀,减少查找开销
缺点:缺乏大的空闲分区

  • ③最佳适应算法

总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。
空闲分区排序:所有空闲分区按容量从小到大排序成空闲分区表或链。
检索:从表或链的头开始,找到的第一个满足的就分配

分配:分出需要的大小
缺点:每次找到最合适大小的分区割下的空闲区也总是最小,会产生许多难以利用的小空闲区(外碎片)

  • ④最差适应算法/最坏匹配法

基本不留下小空闲分区,但会出现缺乏较大的空闲分区的情况。

  • ⑤快速适应算法

根据进程常用空间大小进行划分,相同大小的串成一个链,需管理多个各种不同大小的分区的链表。进程需要时,从最接近大小需求的链中摘一个分区。
能快速找到合适分区,但链表信息会很多;实际上是空间换时间。

分页存储管理:

页面:

  1. 分页存储管理将进程的逻辑地址空间分成若干页,并为每页编号;
  2. 内存物理地址分成若干块,同意编号;
  3. 进程分配内存时,以块为单位,若干个页分别转入不相邻你的物理块中;
  4. 进程最后一页会形成"页内碎片";

页面大小:

  1. 页面大小为2的幂,通常为1KB~8KB;

地址结构:

页表:

地址变换结构:

快表:

  1. 快表是一个高速、具有并行查询能力的联想存储器,用于存放正运行的进程的当前页号和块号,或者段号和段起始地址。
  2. 加入快表后,在地址转换时,首先在快表中查找,若找到就直接进行地址转换;
  3. 未找到,则在主存页表继续查找,并把查到的页号和块号放入联想存储器中。
  4. 快表的命中率很高,有效地提高了地址转换的速度。

分段:

  1. 是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。
  2. 分段映射机制解决了之前操作系统存在的两个问题:
  3. (1)地址空间没有隔离。(2)程序运行的地址不确定。
  4. 分页方法中,程序所需要的空间会一并在内存中分配,因此空间要么被整体换入,要么被整体换出;不存在由于内存不足而引起的重新申请更多的内存空间的问题。
  5. 不过分段方法存在一个严重的问题:内存的使用效率低。
  6. 分段的内存映射单位是整个程序;如果内存不足,被换入换出到磁盘的空间都是整个程序的所需空间,这会造成大量的磁盘访问操作,并且严重降低了运行速度。

操作系统有一个虚拟内存映射表。

  1. 里面包含了每个进程的虚拟内存地址映射到物理内存的地址。
  2. 操作系统按照页(page)对内存进行管理,一般情况下,一页=4096bytes,当我们需要malloc1000个字节的时候,操作系统就给它分配一页,也就是4096个字节。
  3. 当你在需要分配500个字节的时候,刚才的一页还剩下3096个字节从中在分配出500个字节。
  4. 但是当你还需要分配3000个字节的时候此时一页已经不够了操作系统就会在给你分配一页;

局部性

  1. 时间局部性(temporal locality)
  2. 时间局部性指的是:如果程序中某条指令被执行,则不久后该指令可能会被再次执行;如果某数据被访问,不久后会被再次访问;。
  3. 空间局部性(spatial locality)
  4. 一旦程序访问了某存储单元,不久之后,附近的存储单元也会被访问;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值