浅谈进程调度

       要想了解进程调度,我们首先得知道什么是进程,那么什么是进程呢?其实进程就是正在运行的程序,如此说来,是不是就认为一个程序只能有一个进程,其实不然,同一个程序运行多次可能会出现多个进程。如我们多次点击浏览器,就会有多个浏览器的窗口,这也就使得同一个程序有着多个进程。通常我们说的程序,只是一个可执行文件,而把可执行文件里的数据和指令加载到内存中,并且让cpu去执行这里的指令,完成一系列相关的任务的运行起来的程序,也是动态的程序,此时这个东西就是进程。

        进程能完成一系列的任务,就说明它要消耗一定的硬件资源,如cpu资源,内存资源,网络带宽,硬盘等等,那么可执行文件是否需要呢?其实它只占了硬盘空间,因为此时它并没有运行起来,因此与其他的文件并没区别,单纯的存储在硬盘上罢了。因为进程它会消耗一定硬件资源,因此也可以说进程是系统分配资源的基本单位。一个运行了的电脑,它一定有着许多进程,进程多了,那么就必须得进行管理。那么怎样进行管理呢?计算机中针对进程的管理采取的是先描述,再组织的思路。先描述指的是使用一个专门的结构体,记录每个进程的各个属性。再组织指的是使用一系列的数据结构,把多个进程进行一个有效的组织,随时方便进行遍历等操作。但是如果进程的数量非常少,如只要俩仨个,那么则不会考虑先描述,再组织。并且这个专门的结构体的结构体也有着一个专门的名字:PCB(进程控制块),而再组织通常是用双向链表的方式进行组织(针对Linux来说)。当使用双向链表进行组织时,查看进程的列表,本质上是遍历这个链表。创建一个进程,就是创建一个PCB结构体,并且插入到链表上。销毁一个进程,就是把这个PCB结构体从链表上删除并释放。Linux里的PCB结构体为task_struct结构体。描述进程的部分都可以称为PCB。

        说了这么多PCB,那么PCB里到底有些什么呢?

1)pid:进程的标识。同一个系统中,同一时刻的进程,它们的pid都是不同的。

2)内存指针:表示该进程对应的内存资源(主要是可执行文件加载过来的指令(代码的逻辑,交给CPU来执行)和数据)是怎样的。

3)文件描述符表:和硬件资源有关。硬盘是硬件,应用程序一般是没法直接接触到硬件这一层的,实际上是操作系统抽象成文件这样的概念,程序操作的是文件,文件实际上是存储在硬盘上的。每个进程都会有一个文件描述符来记录当前这个进程正在使用那些文件,操作系统每打开一个文件,就会产生一个文件描述符(就像文件的身份标识一样,不过只是再进程内部生效),同时会使用文件描述符表(类似数组)把文件描述符组织起来。

        既然进程通常都较多,那么操作系统如何对进程进行调度呢?不可能一个一个调用吧。当然,操作系统调用进程主要有两种方法,一种是并发,一种是并行。

1)并行:两个或者多个进程在不同的CPU逻辑核心上同时运行。

2)并发:多个进程轮流在同一个CPU逻辑核心上运行。(由于cpu在切换进程时速度极快,因此在宏观上,应用程序感觉不出来,但系统内核感觉的出来,由于宏观上感觉不到,通常也会用并发代指并发和并行)。

操作系统在调用这些进程时,可能按照的时并发,也有可能按照的是并行的方法来调用。

        同样,PCB中也有着关于进程调度相关的属性(这些属性也就描述了进程对应的CPU资源对应的使用情况)。

1)状态:就绪状态:进程已经做好了随时在CPU上执行的准备。

                阻塞状态:进程没有做好被CPU执行的准备。

实际上进程在系统中不只有这两种状态,但它们是最关键的状态。

2)优先级:系统给进程进行调度的时候,也不是完全公平的,也会根据优先级的不同,来决定时间分配的权衡,就可以把系统资源调配给更重要的进程。

3)上下文:因为进程是轮着上的,一次运行不完,就需要保证下次上CPU运行的时候,能够从上次运行到的位置,继续往后运行,而上下文就充当这个记录当前位置的角色,也就是存档和读档。对于操作系统来说,所记录的的上下文是该进程在执行过程中,CPU的寄存器所对应的数据,这些寄存器有的是存一些中间结果,有的是存一些特定含义的数据(如当前函数的调用关系),这些数据就需要在进程离开cpu之前都保存好,保存到对应进程的pcb的上下文字段中。下次再次调用该进程时,就可将pcb的上下文里的数据回复到对应的寄存器中,如此,进程就和上次执行的状态一模一样。

4)记账信息:相当于一个统计信息。会统计每个进程在cpu上都执行了多久,执行了多少个指令等。

        每个进程都需要有一定的内存资源,早期的操作系统就是直接把物理内存(电脑上的内存条)分配给进程,这就带来一个严重问题,一旦内存访问越界,就可能影响到别的进程,后来操作系统就引入了“虚拟地址空间”的概念,虚拟地址并非是在物理内存上真实存在的地址,而只是该进程内存在,不同的进程中,可以存在相同的虚拟地址,但是实际上对应到的时不同的物理地址,虚拟地址和物理地址可以被操作系统进行灵活的转换。但对于应用程序来说,只能见到虚拟地址而见不到真实的地址。这样设定之后,每个进程的有效虚拟地址都是固定范围,进程使用该虚拟地址的内存,都需要操作系统进行转换成物理地址的过程,这个转换过程中,就可一针对虚拟地址是否有效做出一个校验,提高了系统的稳定性,通过虚拟地址空间,把进程隔离开了,但是有些时候,还需要让进程之间,产生点配合和联系,也就是进程间通信,就要在进程隔离性的基础上,开个口子,让进程间能够有限制的进行相互影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动硬盘不显示怎么办?正确解决方式看这里!

移动硬盘为存储带来了很大的方便,在对数据存储时,可做到即插即用,且其体积小、容量大,且比较安全可靠。但在实际的使用中,也会出现各种问题。请看下面2个常见案例。 案例1:“各位朋友,我新买了一…

iTOP-RK3568开发板Windows 安装 RKTool 驱动

在烧写镜像之前首先需要安装 RKTool 驱动。 RKTool 驱动在网盘资料“iTOP-3568 开发板\01_【iTOP-RK3568 开发板】基础资料 \02_iTOP-RK3568 开发板烧写工具及驱动”路径下。 驱动如下图所示: 解压缩后,进入文件夹,如下图所示:…

Ant Design Pro 封装网络请求

可以直接在antdPro项目的app.tsx文件中对request进行运行时配置,并且该配置会直接透传到umi-request的全局配置。后续直接从umi中引入request或者useRequest直接使用,可以说是非常方便。文档可查看:umi.js 具体配置代码: import…

Android Calendar

1.字符串日期比较大小 public static boolean compareDate(String pre, String last) {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd");try {Date lastDate sdf.parse(last);Calendar lastCal Calendar.getInstance();lastCal.setTime(lastDate);Date …

Python爬虫Scrapy(二)_入门案例

入门案例 学习目标 创建一个Scrapy项目定义提取的结构化数据(Item)编写爬取网站的Spider并提取出结构化数据(Item)编写Item Pipelines来存储提取到的Item(即结构化数据) 一、新建项目(scrapy startproject) 在开始爬取之前,必须创建一个新的Scrapy项目。进入自定…

Django系列之Channels

1. Channels 介绍 Django 中的 HTTP 请求是建立在请求和响应的简单概念之上的。浏览器发出请求,Django服务调用相应的视图函数,并返回响应内容给浏览器渲染。但是没有办法做到 服务器主动推送消息给浏览器。 因此,WebSocket 就应运而生了。…

深入理解设计模式之门面模式

深入理解设计模式之门面模式 什么是门面模式? 门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,用于访问复杂子系统中的一组接口。门面模式通过封装子系统的复杂性,提供了一个更简…

809协议服务端程序解码程序

809协议服务端程序解码程序 目录概述需求: 设计思路实现思路分析1.服务端2.code: 拓展实现性能参数测试:1.功能测试 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip…

easyui主表子表维护页面

easyui主表子表维护页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><!-- <#include "common.html"/> --><link rel"stylesheet" type&quo…

释放三年版本:Aspose.Total For NET [21.7/22.7/23.7]

请各位对号入座&#xff0c;选择自己需求范围&#xff0c;你懂的&#xff0c;你懂的&#xff0c;你懂的 Aspose.Total for .NET is the most complete package of all .NET File Format Automation APIs offered by Aspose. It empowers developers to create, edit, render, …

tinkerCAD案例:29. New: Cruising with Shapes 新功能:与形状一起Cruising

tinkerCAD案例&#xff1a;29. New: Cruising with Shapes 新功能&#xff1a;与形状一起Cruising 原文&#xff1a;有动图演示 Stacking and assembling shapes has never been easier with Tinkercad’s new Cruise tool! 使用Tinkercad的Cruising工具堆叠和组装形状从未如…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能&#xff01; 2.时间组件功能&#xff0c;并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题&#xff0c;BUG 3.1.有点时候js访问不到路径 3.2在增加…

高级 IO

目录 前言 什么是IO&#xff1f; 有哪些IO的的方式呢&#xff1f; 五种IO模型 这五种模型在特性有什么差别呢&#xff1f; 其他高级IO 非阻塞IO fcntl 实现函数SetNonBlock I/O多路转接之select 初识select select函数 参数说明&#xff1a; 关于timeval结构 函数…

通过一次线上问题,讲下Ribbon重试机制

前言 前段时间&#xff0c;产品经理在线上验证产品功能的时候&#xff0c;发现某个功能不符合需求预期&#xff0c;后来测试验证发现是服务端的一个接口大概率偶现超时&#xff0c;前端做了兜底处理&#xff0c;所以对线上用户么有太大影响。 问题排查过程 由于服务端的接口…

Linux——总复习2

1.配置用户更改密码 &#xff08;1&#xff09;强制在其第一次登录时更改密码&#xff1a;chage -d 0 user &#xff08;2&#xff09;将用户密码的最短期限设置为10天&#xff1a;chage -m 10 user &#xff08;3&#xff09;将用户密码的最长期限设置为30天&#xff1a;ch…

测试平台——项目工程创建和配置

这里写目录标题 一、配置开发环境二、配置MySql数据库三、配置工程日志 一、配置开发环境 项目的环境分为开发环境和生产环境。 开发环境:用于编写和调试项目代码。 生产环境:用于项目线上部署运行。 base.py 修改BASE_DIR&#xff1a;拼接.parent 原因&#xff1a;原BASE_D…

如何评判算法好坏?复杂度深度解析

如何评判算法好坏&#xff1f;复杂度深度解析 1. 算法效率1.1 如何衡量一个算法好坏1.2 算法的复杂度 2 时间复杂度2.1 时间复杂度的概念2.1.1 实例 2.2 大O的渐进表示法2.3 常见时间复杂度计算举例 3 空间复杂度4 常见复杂度对比5 结尾 1. 算法效率 1.1 如何衡量一个算法好坏 …

shell脚本练习--安全封堵脚本,使用firewalld实现

一.什么是安全封堵 安全封堵&#xff08;security hardening&#xff09;是指采取一系列措施来增强系统的安全性&#xff0c;防止潜在的攻击和漏洞利用。以下是一些常见的安全封堵措施&#xff1a; 更新和修补系统&#xff1a;定期更新操作系统和软件包以获取最新的安全补丁和修…

【机器学习】分类算法 - 朴素贝叶斯 MultinomialNB

朴素贝叶斯 1、朴素贝叶斯API2、朴素贝叶斯算法实际应用2.1、获取数据集2.2、划分数据集2.3、特征归一化2.4、贝叶斯算法处理并评估 3、常见问题 朴素贝叶斯法&#xff08;Naive Bayes model 简称 NBM &#xff09;是基于「贝叶斯定理」与「特征条件独立假设」的分类方法。 「…

「JVM」Full GC和Minor GC、Major GC

Full GC和Minor GC、Major GC 一、Full GC1、什么是Full GC?2、什么情况下会触发full gc&#xff1f; 二、Minor GC1、什么是Minor GC&#xff1f;2、什么情况下会触发Minor GC&#xff1f; 三、Major GC1、什么是Major GC&#xff1f;2、什么情况下会触发Major GC&#xff1f…