进程和线程

进程

进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程
进程包含了正在运行的一个程序的所有状态信息, 代码, 数据, 状态寄存器, 通用寄存器, 进程占用系统资源等
进程的特点: 动态性(可动态的创建/结束), 并发性(可以被独立调度并占用CPU), 独立性(不同进程相互不影响), 制约性(因访问共享数据/资源或进程间同步而产生制约)

进程控制块(PCB, Process Control Block)

管理和控制进程运行所用的信息集合, 操作系统用PCB来描述进程的基本情况及运行变化的过程
PCB是进程存在的唯一标志, 对进程的组织管理都是通过PCB来实现的
进程控制块内容: 进程标识信息, 处理机现场保存, 进程控制信息(调度和状态, 进程间通信信息, 存储管理信息, 所用资源, 有关数据结构连接关系)
PCB可通过链表和索引表组织起来
链表, 同一状态的进程其PCB成一链表, 多个状态对应多个不同的链表, 就绪链表, 阻塞链表, 等待链表
索引表, 同一状态的进程归入一个索引表, 多个状态对应对个不同的索引表

进程状态

进程生命周期划分, 创建, 执行, 等待, 抢占, 唤醒, 结束
创建: 系统初始化/用户请求创建一个新进程/正在运行的进程执行了创建进程的系统调用, 创建好放到就绪队列
等待: 执行过程中某个条件不成立或资源不足够, 进入等待(阻塞)状态, 一定是进程内部的原因导致
被抢占: 有高优先级进程就绪/进程执行当前时间用完
唤醒: 被阻塞进程需要的资源可被满足/等待的事件到达, 只能被别的进程或操作系统唤醒
结束: 正常退出/错误退出(自愿的), 致命错误/被其他进程所杀(强制性的)
挂起: 把进程从内存转到外存,处在挂起状态的进程映像在磁盘上, 目的是减少进程占用内存
就绪, 运行, 等待, 是进程整个生命周期中三种基本状态

线程

线程是进程的一部分, 描述指令流执行状态, 它是进程中指令执行流的最小单元, 是CPU调度的基本单位
进程负责调度线程, 进程控制块保存多个线程堆栈, 线程控制块指针指向各自堆栈
优点: 一个进程中可同时存在多个线程, 各个线程之间可以并发执行, 各个线程可以共享地址空间和文件资源
缺点: 一个线程崩溃会导致所属进程的所有线程崩溃
线程和进程的比较
进程是资源分配单位, 线程是CPU调度单位
进程拥有一个完整的资源平台, 线程只独享指令流执行的必要资源(寄存器和栈)
总结: 线程能减少并发执行的时间和空间开销, 创建终止时间更短, 线程切换时间短, 同一进程的各线程共享内存和文件资源, 不需要通过内核可直接通信

CPU调度

简介

CPU资源的时分复用
进程切换: CPU资源的当前占用者切换, 处理机调度, 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可用的CPU资源
调度程序: 挑选就绪进程的内核函数, 需要注意调度策略和调度时机
调度时机: 进程从运行状态切换到等待状态/进程被终结
比较调度算法的准则: CPU使用率, 吞吐量(单位时间内完成的进程数量), 周转时间(进程从初始化到结束包括等待的总时间), 等待时间(进程在就绪队列的总时间), 响应时间(从提交请求到产生相应的总时间)
响应时间目标: 减少响应时间, 减少平均响应时间的波动
吞吐量目标: 增加吞吐量, 减少等待时间
公平性目标: 保证每个进程占用相同的CPU时间和相同的等待时间, 但公平通常会增加平均响应时间

调度算法

先来先服务算法(FCFS, First Come First Served): 依据进程进入就绪状态的先后顺序排列, 简单, 但平均等待时间波动较大, I/O和CPU资源的利用率较低
短进程优先算法(SPN, SJF, SRT): 选择就绪队列中执行时间最短进程占用CPU进入执行状态, 具有最优平均周转时间, 可能导致饥饿, 长进程无法获得CPU
最高响应比优先算法(HRRN): 选择就绪队列中响应比最高的进程, (等待时间+执行时间)/执行时间, 基于上一个的改进, 不可抢占, 关注进程的等待时间, 防止无限期推迟
时间片轮转算法(RR, Round-Robin): 时间片: 分配处理机资源的基本时间单元, 时间片结束时, 按FCFS算法切换到下一个就绪进程, 每隔n-1个时间片, 进程执行一个时间片
时间片太大等待时间长, 时间片太小影响吞吐量, 合适长度, 经验规则,维持上下文切换开销处于1%以内
多级反馈队列算法(MLFQ):
多级队列: 就绪队列被划分为多个独立的子队列, 比如交互, 批处理, 每个队列拥有自己的调度策略, 队列间的调度使用时间片轮转
多级反馈队列: 进程可在不同队列间移动的多级队列算法, 时间片大小随优先级增加而增加, 如进程在当前时间片没有完成, 则降到下一个优先级
公平共享调度算法(FSS, Fair Share Scheduling): 资源访问的公平, 对用户分组, 一些用户组比其他用户组更重要, 保证不重要的组无法垄断资源

操作系统系列笔记(四) - 进程,线程及CPU调度相关推荐

  1. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制

    本次笔记内容: 7.8 为什么使用线程 7.9 什么是线程 7.10 线程的实现 7.11 上下文切换 7.12 进程控制--创建进程 7.13 进程控制--加载和执行进程 7.14 进程控制--等待 ...

  2. 操作系统复习笔记 05 Thread 线程

    进程的两个基本属性 1.拥有资源的独立单位 2.可独立调度和分派的基本单位 进程的数目不宜过多,进程切换频率不宜过高,限制了并发程度. 操作系统的设计目标是:提高并发度.减小系统开销. 引入线程的目的 ...

  3. 《Windows核心编程》读书笔记四 进程

    第四章 进程 本章内容 4.1 编写第一个Windows应用程序 4.2 CreateProcess函数 4.3 终止进程 4.4 子进程 4.5 管理员以标准用户权限运行时 进程定义为一个正在运行的 ...

  4. Linux系列之查看进程线程的方法

    在window系统查看系统进程,我们一般会使用Ctrl+Shift+Esc打开系统进程监控页面,但是在Linux系统查看进程一般使用top命令或者ps命令,但是如果要查看线程怎么查看?其实也可以使用这 ...

  5. 操作系统概念学习笔记一 进程

    1 作业与进程的区别 进程和作业的概念也有区别.一个正在执行的进程称为一个作业,而且作业可 以包含一个或多个进程,尤其是当使用了管道和重定向 命令.例如"nroff -man ps.1|gr ...

  6. 操作系统学习笔记_03_进程的概念与操作

    1.进程的概念和状态 进程的概念常常和程序糅合在一起,但两者实际是不一样的.首先,"进程"所包含的内容比"程序"丰富."程序"这个概念可以用 ...

  7. 操作系统学习笔记7——进程管理中的数据结构:进程控制块

    进程控制块(PCB)--最重要的记录型数据结构 PCB的作用 1.作为独立运行的基本单位的标志: 系统创建一个新进程时,就为它建立一个PCB,进程结束时回收PCB,进程也随之消亡,系统通过感应PCB来 ...

  8. php 线程周期,进程线程,CPU核心数,时间片轮转机制解读

    ## 进程与线程的区别 **根本区别:** > 进程是资源分配最小单位,资源包括内存,硬盘等 > 线程是程序执行的最小单位 > 计算机在执行程序时,会为程序创建相应的进程,进行资源分 ...

  9. 操作系统:第二章 进程管理2 - 处理机调度

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

最新文章

  1. 20.Feature分支
  2. 每天一个linux命令(31): /etc/group文件详解
  3. Netty 简单服务器 (三)
  4. 转载:谢谢原作者:块设备驱动实战基础篇四 (逐渐成型,加入ioctl通信机制)
  5. 长文 | 从发展轨迹、社会变迁和人口数据变化来看工具类产品的发展出路有哪些(1)
  6. python PyQt5 QVBoxLayout 垂直布局管理
  7. HDU/HDOJ 2612 Find a way 双向BFS
  8. oracle精度说明符1~38_Oracle 错误代码总结及解决方案
  9. jsondataobjects
  10. loadrunner遇到错误继续运行
  11. 【leetcode】91. Decode Ways A-Z的字母表示1-26的数字,反向破解多少种字符串的可能性...
  12. 笔记:Java 性能优化权威指南 第5章 Java 应用性能分析
  13. CSDN账号注销问题
  14. 智慧职教云答案在哪里找_云课堂智慧职教答案哪里找
  15. 伪加密文件的破解方法
  16. gzip already installed and latest version解决方法
  17. signature=4a882a48c4a4b2b41835e11b6fafa69f,ABB 38SC980002R375
  18. Android专业DJ,著名音乐游戏《DJ英雄》登陆Android Market
  19. 67.220.92.12 /forum index.php,http://67.220.92.21/forum/inde PHP静态类
  20. 前端怎么加粗字体_to B 中后台系统 | Web 端 | UI Style Guideline amp; 前端交付文档...

热门文章

  1. gmpy2库的常用函数及其作用
  2. 信息与计算机工程学院英文翻译,成都信息工程学院通信工程学院英文翻译.doc...
  3. android 发送广播 接收广播 动态广播接收
  4. week4 day3/4 常用模块
  5. UC3842电源管理芯片详细解读
  6. 您的推特营销选对群控了吗
  7. 绿盟安全集中系统安装方法
  8. 操作系统:万字长文,重点知识梳理:具体md文档我放在了资源里
  9. cocos2dx 安卓环境播放mid音乐
  10. php中英尺厘米换算,将cm换算为ft (厘米换算为英尺)