ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 操作系统进程

操作系统进程

Linux操作系统 作者:lenghong 时间:2019-12-06 11:58:17 0 删除 编辑

并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件)
共享:系统中的资源可以被内存中多个并发执行的进线程共同使用
虚拟:通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个
异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进

2,进程与线程

2.1 多进程的组织形式包括下面3个关键部分:

1)用来记录进程信息的数据结构(管理进程的核心,包含了PID等进程的所有关键信息)

2)进程的状态:1:就绪状态,2:执行状态,3:阻塞状态(多线程时也是这些状态)

3)队列:就绪队列、等待(阻塞)队列。

 

处于就绪状态的进程,在调度程序为之分配了处理机之后便开始执行, 就绪 -> 执行
正在执行的进程如果因为分配他的时间片已经用完,而被剥夺处理剂, 执行 -> 就绪
如果因为某种原因致使当前的进程执行受阻,使之不能执行。               执行 -> 阻塞

2.2 CPU调度算法  (在就绪序列中怎么挑选进程让CPU执行)

先了解两个概念:

  • 周转时间: 从开始申请执行任务,到执行任务完成
  • 响应时间: 从开始申请执行任务到开始执行任务

先来先服务调度算法FCFS:按作业或者进程到达的先后顺序依次调度;(平均周转时间可能会很长 )

短作业优先调度算法SJF:算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行(周转时间短,但是响应时间长 )

高相应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;

时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;(响应时间可以得到保证)

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

2.3 进程的分类


2.4 线程

线程有自己的TCB(thread control block线程控制块), 只负责这条流程的信息,包括PC程序计数器,SP栈,State状态,和寄存器,线程id。

线程有内核级线程和用户级线程,我们一般说的都是用户级线程,内核级线程由内核管理。

补充小知识:

1)只有内核级线程才能发挥多核性能,因为内核级线程共用一套MMU(即内存映射表),统一分配核1核2(即有多个CPU,可以一个CPU执行一个内核级线程)。进程 无法发挥多核性能,因为进程切换都得切MMU    富山电视剧   www.f5cd.com

2)为什么需要内核级线程??如果只有用户级线程,在内核中只能看到进程,所以当用户级线程中一个线程进行IO读写阻塞时,内核会将该线程所在的进程直接切换。例如当用浏览器打开网页,这个进程中有下载数据线程,有显示数据线程,当数据下载读写阻塞时,内核直接切到qq(这些切换是指在CPU上运行的程序的切换)


2.5 进程和线程的对比

进程是系统进行资源调度和分配的基本单位;线程是CPU调度的基本单位。

进程 = 资源 (包括寄存器值,PCB,内存映射表)+ TCB(栈结构)
线程 = TCB(栈结构)

线程 的资源是共享的
进程 间的资源是分隔独立的,内存映射表不同,占用物理内存地址是分隔的

线程 的切换只是切换PC,切换了TCB(栈结构)
进程 的切换不仅要切换PC,还包括切换资源,即切换内存映射表

2.6 进程间通信方式

2.7 进程间同步

经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题

同步的解决方案:管程,信号量。

死锁定义:

  在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。

产生条件:

  1:互斥条件        -- 一个资源一次只能被一个进程使用

     2:请求保持条件 -- 一个进程因请求资源而阻塞时,对已经获得资源保持不放 

  3:不可抢占条件 -- 进程已获得的资源在未使用完之前不能强行剥夺

  4:循环等待条件 -- 若干进程之间形成一种头尾相接的循环等待资源的关系 

 死锁处理:

  1. 预防死锁:破坏产生死锁的4个必要条件中的一个或者多个;实现起来比较简单,但是如果限制过于严格会降低系统资源利用率以及吞吐量

  2. 避免死锁:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)-如银行家算法

  3. 检测死锁:允许系统运行过程中产生死锁,在死锁发生之后,采用一定的算法进行检测,并确定与死锁相关的资源和进程,采取相关方法清除检测到的死锁。实现难度大

  4. 解除死锁:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,通过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大

死锁忽略: windows,Linux个人版都不做死锁处理,直接忽略,大不了重启就好了,小概率事件,代价可以接受


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69956714/viewspace-2667242/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2019-12-06

  • 博文量
    1
  • 访问量
    337