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

    xiaoxiao2025-03-06  31

    目录

     

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

    线程与进程:

    进程基本属性:

    线程的基本属性:

    作业调度算法:

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

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

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

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

       基本公式:

    死锁产生的必要条件:

    产生死锁的原因主要是:

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

    解除死锁的方法有:

    程序的三种装入方式:

    程序的链接:

    连续分配存储管理:

    一、单一连续分配

    二、固定分区分配

    三、动态分区分配

    分页存储管理:

    页面:

    页面大小:

    快表:

    分段:

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

    局部性

     


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

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

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

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

    线程与进程:

    进程基本属性:

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

    线程的基本属性:

     

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

    作业调度算法:

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

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

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

    就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 

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

    响应比=1+作业等待时间/作业处理时间。FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。

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

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

       基本公式:

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

    死锁产生的必要条件:

    产生死锁的原因主要是:

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

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

     

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

    解除死锁的方法有:

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

     

    程序的三种装入方式:

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

    程序的链接:

    静态链接方式:装入时动态链接:运行时动态链接:

    连续分配存储管理:

    一、单一连续分配

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

    二、固定分区分配

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

    三、动态分区分配

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

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

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

    ②循环首次适应算法

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

    ③最佳适应算法

    总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。空闲分区排序:所有空闲分区按容量从小到大排序成空闲分区表或链。 检索:从表或链的头开始,找到的第一个满足的就分配 分配:分出需要的大小 缺点:每次找到最合适大小的分区割下的空闲区也总是最小,会产生许多难以利用的小空闲区(外碎片)

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

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

    ⑤快速适应算法

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

    分页存储管理:

    页面:

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

    页面大小:

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

    地址结构:

    页表:

    地址变换结构:

    快表:

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

    分段:

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

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

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

    局部性

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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    最新回复(0)