操作系统 (1)+同步异步+并行并发+死锁+页面置换算法+进程调度算法+分段和分页

概述
定义: 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。
在操作系统的发展过程中,主要是分时系统实时系统,分时系统是提供多个终端供多个用户使用,具有人机交互,多用户共享主机的优点,例如现在使用的Windows系统。实时系统是能够及时响应,并规定时间内完成,控制所以实时任务协调一致的运行,例如嵌入式系统

基本特性

  • 并发: 两个或多个程序在同一时间段内发生,公用一个CPU,抢占CPU的方式
  • 并行:同一时刻多个事件发生,是每个cpu运行一个程序。
  • 共享: 系统中的资源可供内存中多个并发执行的进程共同使用,注意限定了进程在内存期间。
  • 虚拟: 利用时分复用和空分复用技术来实现把一个物理实体虚拟多个。
  • 异步: 在多道程序环境下,系统允许多个进程并发执行,以走走停停的方式执行的,并以不可预知的速度推进,现在操作系统都是这样了。

同步:

同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
特点:
同步是阻塞模式
同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行;

异步:

是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
特点:
异步是非阻塞模式,无需等待
异步是彼此独立,在等待某事件的过程中,继续做自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式。
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

同步与异步的优缺点:

  • 同步可以避免出现死锁,读脏数据的发生。一般共享某一资源的时候,如果每个人都有修改权限,同时修改一个文件,有可能使一个读取另一个人已经删除了内容,就会出错,同步就不会出错。但,同步需要等待资源访问结束,浪费时间,效率低
  • 异步可以提高效率,但,安全性较低

主要功能
处理器管理: 处理器管理最基本的功能是处理中断事件。其中处理机分配是以进程为单位,可以理解为对进程的管理,包括进程同步、进程通信和进程调度等。
存储器管理: 简单理解对内存的管理,当然还有一些虚拟内存等。主要任务是:分配内存空间,保证各作业占用的存储空间不发生矛盾,并使各作业在自己所属存储区中不互相干扰。
设备管理: 管理所有的外围设备,包括完成用户的IO请求、为用户进程分配IO设备等。
文件管理: 管理用户文件和系统文件,方便使用同时保证安全性。

进程和线程

进程
定义
进程是程序的一次执行过程,进程实体的运行过程,是系统进行资源分配的基本单位,例如打开QQ或者微信都是一个进程。

生命周期
在这里插入图片描述
就绪状态: 等待进程调度装填,进程获得了除处理机之外的一切所需资源,如果得到处理机即可运行。
运行状态: 进程正在处理机上运行。
阻塞状态(等待状态): 进程正在等待某一事件而阻塞运行,比如等待某资源为可用或者输入/输出完成。

全双工:打电话一样,发送数据的同时也能接受数据,两者同时进行
半双工:允许数据在两个方向上传输,但是某一时刻只允许数据在一个方向上传输。对讲机
单工:数据传输只支持一个方向的传输。同一时间,只有一方能接受或者发送信息。电视、广播
进程通信
1.管道:速度慢,容量有限,只有父子进程能通讯
(1)匿名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权力,一般使用fork函数实现父子进程的通信
(2)**命名管道:**在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权力,没有血缘关系的进程也可以进程间通信。
特点:

  • 面向字节流
  • 生命周期随内核
  • 自带同步互斥机制
  • 半双工,两个管道实现双向通信。

2.FIFO:任何进程间都能通讯,但速度慢

3.消息队列:消息的链表,存放在内核中并由消息队列标识符表示
消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被任务是有一个类型,接收者接受的数据块可以有不同的类型。
消息类型必须是长整形的,必须是结构体类型的第一个成员
一旦接受消息成功,则消息从消息列表中删除,

  • 每个消息的最大长度有上限,每个消息队列的总字节数有上限。
  • 消息队列可以双向通信
  • 克服了管道只能承载无格式字节流的缺点

4.信号量:不能传递复杂消息,只能用来同步
信号量是一个计数器,用来控制多个线程对共享资源的访问。
它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。信号量会有初值,当有进程申请使用信号量时,通过p操作对信号量-1,当计数器=0时,说明没有资源了。
临界区:是一个访问共用资源的程序片段。
临界资源:只能被一个进程使用,互斥
当进程请求共享资源时,执行的操作:
(1)首先检测该资源的信号量
(2)如果信号量>0, 则进程可以使用该资源,此时信号量值-1
(3)如果信号量=0,进程进入休眠状态,直到信号量>0时进程被唤醒, 访问该资源。
当进程不再使用一个信号量控制的共享资源时,该信号量值+1,如果此时有进程处于休眠状态等待此信号量,则该进程会被唤醒。
信号量结构:
在这里插入图片描述
semval:信号量值
sempid:最近一个操作的进程号pid.

5.共享内存区:两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种有效的方式。
如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
共享内存不提供同步机制。
优点:通信方便,数据的共享不用传送,直接访问内存,加快了程序的效率
缺点:没有同步机制

共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如 P操作、V操作),对共享空间的写/读进行控制。

消息传递
在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的,通过系统提供的发送消息和接收消息两个原语进行数据交换。

管道通信
管道指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件,主要是通过文件读写的方式。

进程同步
多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调,使并发执行的多个进程之间可以有效的共享资源和相互合作。

死锁

1.死锁:指各并发进程彼此互相等待对象所拥有的资源,且这些并发程序在得到对方的资源之前不会释放自己所拥有的资源。从而造成死锁。
2.死锁的根本起因:系统提供的资源个数 < 并发进程所要求的该类资源数。
3.产生死锁的必要条件:必须同时满足以下4个条件
(1)互斥条件:资源不能同时被两个以上进程使用或操作
(2)不剥夺条件:进程所拥有的资源,未释放之前,不能被其他进程强行剥夺
(3)部分分配:进程每次只能申请它所需要的一部分资源,在等待新资源的同时,继续占用已分配到的资源。
(4)环路条件:存在一个进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。
银行家算法:避免死锁发生;
4.死锁的排除方法:预防、避免、检测和恢复
(1)死锁预防:
a.打破资源的互斥和不可剥夺这两个条件:允许进程同时访问某些资源。但是这种方法不能解决那些不允许被同时访问的资源时所带来的死锁问题。
b.打破资源的部分分配:即预先分配各并发进程所需要的全部资源。如果进程资源得不到满足,就排序等待让其他进程释放资源。出现的问题:
(1)一个进程在执行之前不可能提出它所需要的全部资源
(2)无论资源何时用到,一个进程只能在所要求资源都得到满足之后才开始执行。
(3)对于那些不常用的资源,进程在生存周期一直占用它们是一种浪费。
(4)降低了进程的并发性。
c.打破死锁的环路条件。把资源分类按顺序排列,使进程在申请、保持资源时不形成回路。如有m种资源,列出R1<R2<…<Rm.若进程Pi保持了资源Ri,则它只能申请比Ri更高的资源Rj(Ri<Rj)。释放资源时,必须是Rj先于Ri被释放,从而避免环路的发生。缺点:限制了进程对资源的请求,而且对资源的分类编序也会耗去一定的系统开销。

进程调度算法:
(1)先来先服务
(2)最短作业优先
(3)最短剩余实践优先
(4)最高响应比优先:根据比率:R=(w+s)/s (R为响应比,w为等待处理的时间,s为预计的服务时间)
虚拟内存
由于技术限制,计算机的真实内存空间是有限的。如果存在一个程序,所需内存空间超过了计算机可以提供的实际内存,那么由于该程序无法装入内存所以也就无法运行。单纯的增加物理内存只能解决一部分问题,但是仍然会出现无法装入单个或者无法同时装入多个程序的问题。但是可以从逻辑的角度扩充内存容量,即可解决上述两种问题。
(时间局部性,空间局部性)
基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。
在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。
另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。
这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器

7、分页和分段有什么区别(内存管理)?

段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
内存碎片分为:内部碎片和外部碎片

  • 内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;
  • 外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page)而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

两者的不同点:
在这里插入图片描述
目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;

地址空间不同: 段向用户提供二维地址空间(段号+段内地址);页向用户提供的是一维地址空间;

信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

页面置换算法:
在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法

  • 最佳置换算法: 将当前页面中在未来最长时间内不会被访问的页置换出去。
  • 先进先出置换算法: 简单粗暴的一种置换算法,每次置换最早调入的页面。
  • 最近最少使用算法LRU:
    算法赋予每个页面一个访问字段,用来记录上次页面被访问到现在所经历的时间t,每次置换的时候把t值最大的页面置换出去(实现方面可以采用寄存器或者栈的方式实现)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值