首页 > 系统相关 >进程理论、进程与程序的区别、调度算法、进程的创建,状态,终止

进程理论、进程与程序的区别、调度算法、进程的创建,状态,终止

时间:2024-05-23 20:51:02浏览次数:24  
标签:作业 程序 调度 阻塞 算法 进程

【一】进程理论

【1】什么是进程

(1)理论

  • 正在进行的一个过程或者说一个任务
  • 而负责执行任务则是 cpu

(2)单任务

  • 一个单独的任务

  • 单核 + 多道,实现多个进程的并发执行

  • 一段时间段只能做一件事:铺床、吹头发、睡觉(cpu 同一时间只能干一个活)

(3)多任务

  • 一段时间可以做很多件事
  • 铺会床---》打会游戏 ----》铺会床 ---》打会游戏 ---》睡觉

【二】进程与程序的区别

【1】理论

  • 程序仅仅只是一堆代码而已
  • 而进程指的是程序的运行过程

【2】示例

  • 每个进程拥有各自的程序

  • 同一个程序执行两次,那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放西游记,一个可以播放水浒传。

【三】进程间的调度算法

  • 要想多个进程交替运行
  • 操作系统必须对这些进程进行调度
  • 这个调度也不是随即进行的,而是需要遵循一定的法则
  • 由此就有了进程的调度算法。

【1】先来先服务算法(FCFS)

  • 谁先来的就先让谁做,是一种最简单的调度算法
  • 适用场景
    • 该算法既可用于作业调度,也可用于进程调度。
    • FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。
    • 由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。

【2】短作业优先调度算法

  • 短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法
  • 谁时间短就先执行谁
  • 适用场景
    • 该算法既可用于作业调度,也可用于进程调度。
    • 但其对长作业不利;
    • 不能保证紧迫性作业(进程)被及时处理;
    • 作业的长短只是被估算出来的。

【3】时间片轮转法

  • 时间片轮转(Round Robin,RR)法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。能够合理分配时间和空间资源。

  • 在时间片轮转法中,需要将CPU的处理时间分成固定大小的时间片

    • 如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。
    • 同时,进程调度程序又去调度当前就绪队列中的第一个进程。
  • 显然,轮转法只能用来调度分配一些可以抢占的资源。并且这些资源可以随时被剥夺并且再分配给别的进程。CPU是可抢占资源的一种。

  • 适用场景

    • 由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使用轮转法。
    • 再轮转法中,时间片长度的选取非常重要。
      • 首先,时间片长度的选择会直接影响到系统的开销和响应时间。
      • 如果时间片长度过短,则调度程序抢占处理机的次数增多。
      • 这将使进程上下文切换次数也大大增加,从而加重系统开销。
    • 反过来,如果时间片长度选择过长
      • 一个时间片能保证就绪队列中所需执行时间最长的进程能执行完毕
      • 则轮转法变成了先来先服务法。

【4】多级反馈队列

  • 前面介绍的各种用作进程调度的算法都有一定的局限性。
    • 如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。
  • 而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。(将你的进程分为几级)

【5】并发和并行

  • 无论是并行还是并发,在用户看来都是’同时’运行的

    • 不管是进程还是线程,都只是一个任务而已
    • 真正干活的是cpu,cpu来做这些任务
    • 而一个cpu同一时刻只能执行一个任务
  • 串行

    • 每个程序依次执行
  • 并发

    • 伪并行,看起来是同时在运行,其实是一个 CPU 在不断的切换(多道技术:时间上的复用和空间上的复用)
  • 并行

    • 多个任务在同时运行

【6】多道技术

  • 内存中同时存入多道(多个)程序
  • cpu从一个进程快速切换到另外一个
  • 使每个进程各自运行几十或几百毫秒
  • 这样,虽然在某一个瞬间
  • 一个cpu只能执行一个任务
  • 但在1秒内,cpu却可以运行多个进程
  • 这就给人产生了并行的错觉,即伪并发
  • 以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)

【7】同步/异步/阻塞/非阻塞

(1)同步

  • 在进行一个程序执行之后,必须等待当前程序执行完成才能继续下一个任务
  • 程序A运行之后 ---》等待结果 ----》程序B

(2)异步

  • 在进行一个程序执行之后,不等待当前程序执行结果如何,继续下一个任务
  • 程序A跑起来 ---》 程序B ---》等待A的结果出现 ---》获取A的结果

(3)阻塞

  • 调用结果返回之前,当前程序一直会被挂起 IO阻塞
    • 函数只有在得到结果之后才会将阻塞的线程激活。
    • 有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。
    • 对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

(4)非阻塞

  • 非阻塞和阻塞的概念相对应

    • 指在不能立刻得到结果之前也会立刻返回
    • 同时该函数不会阻塞当前线程。

【8】总结

(1)同步 | 异步

  • 同步与异步针对的是函数/任务的调用方式

  • 同步就是当一个进程发起一个函数(任务)调用的时候

    • 一直等到函数(任务)完成,而进程继续处于激活状态。
  • 而异步情况下是当一个进程发起一个函数(任务)调用的时候

    • 不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

(2)阻塞 | 非阻塞

  • 阻塞与非阻塞针对的是进程或线程
  • 阻塞是当请求不能满足的时候就将进程挂起
  • 而非阻塞则不会阻塞当前进程

【四】进程的创建(了解)

【1】进程的创建

  • 创建和撤销进程的能力
  • 创建进程是指启动某一个应用程序
  • 撤销进程是指杀死指定的应用程序
# 【1】系统初始化
# Windows里面用的任务管理器
# 随着开机,这些自带的进程也会被启动成功
# 【2】在进程中开设子进程
# 双击腾讯会议就是一个主进程 ---> 需要共享屏幕 --> 开了屏幕共享 子进程
# 【3】交互式请求
# 通过双击应用的快捷方式启动一个主进程
# 桌面上的快捷方式是启动入口
# 【4】批处理作业
# 只会在大型的工厂中

【2】不同系统的新进程的创建方式

(1)Windows:

  • 在 Windows 中该系统调用的是:
    • CreateProcess, 既处理进程的创建,也负责把正确的程序装入新进程。

(2)linux:

  • 内核就是 Unix
  • 在 Unix 中该系统调用的是:fork, fork会创建一个与父进程一模一样的副本

【五】进程的终止

【1】正常的退出

  • 如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出。
  • 在 Linux 中用 exit,在 Windows 中用 ExitProcess

【2】出错退出

  • 在程序执行过程中发生错误,导致程序退出。
  • python a.py中a.py不存在)

【3】严重错误

  • 执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常
  • try…except…

【4】被其他进程杀死

  • linux:
    • kill | pkill 杀死进程
  • Windows:
    • 任务管理器强制结束进程 ----》通过进程号杀死进程

【六】进程的状态

【1】介绍

  • 进程状态反映进程执行过程的变化
  • 这些状态随着进程的执行和外界条件的变化而转换。

【2】三态模型

  • 在三态模型中,进程状态分为三个基本状态,

    • 即运行态,
    • 就绪态,
    • 阻塞态。

【3】五态模型

  • 在五态模型中,进程分为

    • 新建态、
    • 终止态,
    • 运行态,
    • 就绪态,
    • 阻塞态。

标签:作业,程序,调度,阻塞,算法,进程
From: https://www.cnblogs.com/chosen-yn/p/18209318

相关文章

  • 10-2-uptime查看系统负载-top动态管理进程
    10.2.1uptime查看CPU负载工具 任务队列的平均长度是什么?案例1:找出当前系统中,cpu负载过高的服务器。服务器1:loadaverage:0.15,0.08,0.011核服务器2:loadaverage:4.15,6.08,6.011核服务器3:loadaverage:10.15,10.08,10.01......
  • 买卖股票相关算法-动态规划-python
    要求1:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不......
  • python多进程感悟
    对于大量的测试数据,使用多进程时(例如8个进程),最好使用queue来消费数据,不要将测试数据分为8个list,分别送入不同的进程中,因为这样可以避免极端情况出现。例如,每个测试数据处理起来耗时不一样,你刚好把耗时比较长的数据分了同一个list,就会导致其他的进程也会一直等待该进程的完成。......
  • 10.1 进程概述和ps管理进程
    10.1.1什么是进程?进程是已启动的可执行程序的运行实例,进程有以下组成部分:(1.已分配内存的地址空间;(2.安全属性,包括所有权凭据和特权;(3.程序代码的一个或多个执行线程;(4.进程状态程序:二进制文件,静态/bin/date,/usr/sbin/sshd......
  • 代码随想录算法训练营第二天|977(双指针),209(滑动窗口),59(螺旋矩阵)
    977.有序数组的平方**1.数组中有正有负,且本身有序。平方后,较大值从两边来比较取出。**2.使用头尾指针方法。209.长度最小的子数组**1.从数组中找符合要求的连续子数组**2.滑动窗口方法:本质为快慢双指针,快指针不断前进直到子数组满足要求,然后慢指针前进直到子数组不满足......
  • 常见的排序算法——归并排序(五)
    本文记述了自然的两两归并排序并给出了一份参考实现代码。在说明了算法的性能后用随机数据进行了验证。◆思想自然的归并排序是自底向上的。先从第一个元素开始找到一个有序的子范围,然后从紧接着的后面元素开始找到另一个有序的子范围,将这两个子范围归并成一个大的有序子范围。......
  • 基于双向堆栈的二叉树双向迭代算法
    前言之前一直在研究avl树的迭代算法。我参考了C++标准库map的实现,发现他们在树节点上使用了parent指针+一个状态标志位的形式,去实现动态迭代。但是我不想用parent指针,因为觉得会增加调整指针的时间还有浪费存储空间。于是,在我的不屑努力下,终于,找到了一种基于堆栈实现的双向迭代......
  • Windows server高危漏洞 - 目标主机使用了不受支持的SSL加密算法
    系统扫描出高危漏洞:目标主机使用了不受支持的SSL加密算法。 修复过程:使用IISCrypto工具,下载地址:NartacSoftware-IISCrypto1.打开工具,点击“BestPractices”后,会自动反选掉一些选项,如下图,根据解决建议,手动反选掉TLS1.0和TLS1.1。然后Apply,重启服务器。 2. 服务......
  • 分布式任务调度内的 MySQL 分页查询优化 等值在前,排序在中间,范围在最后
    分布式任务调度内的MySQL分页查询优化https://mp.weixin.qq.com/s/VhSzxYIRv83T3D3JD4cORg三、优化方案 3.1优化方案确定 当前SQL执行计划以主键进行顺序遍历,是一个范围扫描,有点像在一片很大的居民区按照序号挨家挨户寻找一些特定的人一样,比较简单也比较低效。 既然......
  • 基于BP神经网络的QPSK解调算法matlab性能仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述       QPSK(QuadraturePhaseShiftKeying)是一种常见的数字调制方式,通过载波的四种相位状态来传输两比特信息。在接收端,准确解调出原始数据成为关键任务。传统的方法如相干解调虽有效但......