CYueblog

导航

第二章:

进程的定义。组成 组织方式 特征

进程是一种运行过程 强调动态 

在线在计算机中 我们同一个进程要有程序段 存放要执行的程序 存放数据段  还有占用资源 进程描述 优先级 管理信息 这太繁琐了 所以pcb应运而生 把所有程序段和数据段之外的 进行 封装 这样一个进程就分为pcb 程序段 数据段 那么很多个程序要有很多个pcb 怎么控制呢 一,链接方式 用三个队列 1 执行状态的 2 就绪状态的3 阻塞状态的 索引方式也是同理

进程的特征 并发 独立 异步 动态 

pcb进程存放的唯一标志 pcb 就是为了管理 pcb里要有pid

执行 就绪 堵塞是什么 怎么切换 进程就是程序的依次执行  

 

 就绪态到运行态 就是 就绪态就是什么都准备好了就等待处理了 运行态就是 行了 来干吧 干到一半发现不太行咋办 去阻塞态重新准备 所以说i 去阻塞态是自发的 准备好了1那你重新回到就绪态吧

进程控制;那么具体进程是什么呢

 

 

就是改变队列 和改变对应的pcb 如果队列改变了但是pcb没及时改变怎么办?答案是不会 因为采用了原语 原语在执行开始之前有一个命令 不允许被中断 这样就也可以改变pcb而不被打扰

创建中止 唤醒改变 这些都有对应的原语

进程通信:两个不同的进程想要互相访问内存区 这显然不行 因为如果你能随意访问我 那么你就会乱改我的信息

那么我们可以用三种通信方式 

1:共享通信 建立一个共享缓存区 进行通信 

2 管道通信 只能半双工 通信 一个方向 所以要创建两个

3.消息传递 有点类似计网 写出发送方接收方 1 直接传递 在队列里等着取 2.简介 放在缓存区了

线程 多线程 

线程 你打开qq有不同的功能 这就是多个线程 因为直接去做一个不大现实  所以引用了线程 他是处理及 处理的最小单位 进程是处理及分配资源的最小单位 

变化是 同一个进程切换不同线程 不用转换资源  开销小 

还有用户级线程 内核级线程 这是从不同的是视角看 但是处理及只能处理内核级

比如说 你看到语音 文件发送 全球音乐是三个线程 有可能内核 把文件发送 语音看变成一个 

有多对一一对一多对多 我们用多对多 一对一 每个用户线程对应一个内核线程 这样好处是清晰 坏处是浪费资源 多对一 多个线程用一个内核级别线程 这样有一个堵塞全都堵塞

处理机调度概念层次:

 
中级调度:是指在内存工作时 把用不到的进程暂时放入外存 时机成熟后安宅哦一定规则放回来的调度 为了实现虚拟存储 是效率最大化 挂起-》就绪
低级调度:是指按照规则把在外村上就绪态的线程按照一定规则分配个内存 使之成为运行态 也叫进程调度  
进程调度的时机 切换过程和方式  
进程调度的实际:一种是主动放弃 1.进程结束2发生异常 3.等待io 二 被动放弃 1.io异常2.有更紧急的任务
什么时候不能进程调度 1.在操作系统临界区中 操作系统临界2
区 就是只能一个资源被访问的区域 互斥访问 你访问我就锁死了 这样不能完成进程调度 2 原语3.处理中断的时候
进程带哦都切换的方式:1.非抢占式 只能等你主动放弃 2.抢占式 有更优先的你就要靠一靠
进程切换过程分两步:1.保存当前的数据和环境 一般放在pcb里 2.给新的进程恢复环境 用pcb的
调度算法的评价指标:1.cpu利用率 就是忙碌的时间 除总时间 2.系统吞吐量 就是单位时间能干多少是 响应时间 从提交请求到产生相应的事件 4周转时间 有一两个 1.周转时间 就是总时间 2带权周转时间 总时间/忙碌的时间 5 等待时间 等待被服务时间的综合 三个调度算法;先来先服务 :优点:公平、算法实现简单    缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即,FCFS算法对长作业有利,对短作业不利
                      短作业优先:最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)  如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饥饿”现象。如果一直得不到服务,则称为“饿死” 
                  高相应比优先: 在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务 第一个先算 算完按照时间记录他们的响应时间的等待时间+需要时间/需要时间 
 
调度算法:时间片流转:设计一个时间片 每个进程按照时间片运作 然后放在队尾 同时上来的进程也放在队尾 按照队列去运作 运行结束直接调度 
优先级调 度:按照优先级一直做 改良是 如果等待了很长时间提高优先级
多级反馈队列:  放几个不同的队列 越后的优先级越低 但是优先级越低 分配的时间片越大 进入的进程先进入第一个 优先级最大的队列 然后处理 登上一个队列空 处理下一个队列 如果这一个进程正处理 突然有一个新的1 新的明显优先级更高 九先处理 但是把旧的放在原队列

 

  进程同步 进程互斥

进程同步是针对进程异步提出的   例如几个进程异步执行 一定要有几个有先后顺序 进程同步就是在这个基础上提出来的 

进程互斥 就是针对临界区访问的原则 1忙则等待有人进厕所你不能去

2.闲则让进 不能不让去3优先等待你得保证都能去 让全等待 你等也别堵门

互斥的软件实现.单标志发:我使用完 指定一个人可以去  

双标执法 :运用数组告诉你我想不想进去 代码如下:

 

 危险是 在一处进行切换到5 两个都走  违反忙则等待

双标志后检查:  

 

 

还是一样的问题 1 执行了 5在执行 

 违背空闲让进

oeterson 算法 谦让

 

 

谁最后谦让对方用

进程互斥的硬件算法:

中断屏蔽算法: 在访问时 关中断 指令

ts指令:有点类似 双标志 但是好处是 用硬件 一气呵成 不被打断

 

 

 信号量机制: 刚才的几个软硬件的实现方法去本部都满足不了让权等待 就是你在排队的时候一直在循环 浪费资源 于是提出了这两个算法

首先运用了不能被打断的原语 wait he singal 或者叫pv

算法如下:

 

这个依然不满足让权等待

于是提出了这个

 

 

 信号量机制实现进程互斥  

上面的都是对资源数量的访问 那么互斥问题可以看成只有一个资源 只能一个访问 这跟之前的问题异曲同工

进程同步 如果明确规定 代码执行顺序有先后 我们就可以在先执行的代码后加上v操作释放  后执行的代码前加上p操作运行 当然要把资源设为0还可能是n 看你最后要怎样才能动

 

 

 生产者消费者

分析她一共出了几个同步和互斥关系

一 你满了 我就不能填了 2.你空了 我就不能要了 异步 我们不能同事都访问一个管道

这就是全部的关系

所以我们涉及三个量 1.full=0 代表开始时候 没满 empty-n 代表没空 穆mutex=1

生产者生产一个产品 消耗一个空闲缓冲区 p(e) 放入缓冲区 增加一个产品 v(full) 生产者先消耗一个产品 p(full)缓存区去除v(e)异步操作在最里面才行 所以有

 

    

 

管程。为什么引入管程 因为之前的所有东西比较难理解 难书写 所以引入了管程 管程呢个就是方便实现进程同步和互斥的操作 他把西斜复杂的东西封装在一个函数里 只能允许一个进程调用 只有调有关城的函数才能访问缓冲区 

 

在Java里  一般用synchonized来表示管程

死锁:

 

 

 银行家算法 就是把所有的进程以矩阵的形式写出来 然后比较安全与否

 

 看这是还剩多少 挑能满足的完成释放 然后再挑 跳不动了就是不安全

死锁检测:

 

 画出这个环图:蓝色的是请求 卢瑟的是分配 可以看出p2请求但是没了 就思索了

   

 

      

 

posted on 2022-05-07 12:16  唱月CY  阅读(26)  评论(0编辑  收藏  举报