总结 进程调度的基本过程

news2024/9/27 15:24:22

一.进程管理

一个运行起来的程序就是进程,点开一个软件的.exe可执行文件,这个程序就跑起来就产生了一个进程。我们可以打开任务管理器 - 首页进程,可以看到3个正在使用的应用,还有71个后台进程。

 

对于多进程,需要进行管理。进程管理大致包括两个方面:

  1.  描述一个进程: 使用结构体或类,把一个进程有哪些信息表示出来
  2.  组织这些进程: 使用一定的数据结构,把这些结构体或对象放到一起

二.描述进程——PCB的相关属性

   PCB(Process Control Block)是进程控制块,每一个进程均有一个PCB,它随进程的创建而出现,随进程的结束而消失。 PCB用于描述进程的当前情况和控制进程运行的全部信息,下面总结PCB的几个核心属性:

 pid: 每个进程的唯一身份标识
内存指针: 当前这个进程使用的内存是哪一部分
文件描述符表: 进程每打开一个文件,就会产生一个文件描述符,用来标记这个被打开的文件,一个进程可能打开很多文件,对应一组文件描述符,把这些文件描述符放到顺序表里,构成文件描述符表。

( 此处的文件指的是在硬盘上存储的数据,这些数据往往以"文件"为单位进行整理,并非"文件夹"中"文件"的意思。)

另外,PCB还包括一系列与CPU资源相关的属性, 以便辅助进行进程调度:

进程状态:简单分为就绪态(该进程随时可以上CPU执行)和阻塞态(该进程暂时无法上CPU执行)
进程的优先级:优先级高的进程先调度去执行
进程的上下文:存取和读取上下文的过程可以简单理解为存档读档,上下文是指进程运行过程中CPU内部的一系列寄存器的值。 进程离开CPU,将寄存器的值保存到PCB的上下文字段(存档),进程回来CPU, 将PCB中的值又恢复到寄存器(读档)。 寄存器最典型的作用是: 保存当前进程的中间结果,  包括进程运行到哪一条指令。
进程的记帐信息:统计每个进程在CPU上执行了多久,可以作为进程调度的依据

并行+并发

每个程序,相当于一组“二进制指令”集合,集合就在CPU上运行。CPU有一个概念:核心数。打开任务管理器 - 性能,可以看到此计算机的核心数。内核(8)逻辑处理器(16)即为该计算机为 8 核 16 线程,有 8 个物理核心、16 个逻辑核心,可以理解为有8个核心,但是每个核心一个顶俩,所以有16个核心。

 对于文章开头所提到的,计算机在同一时刻,正在运行的应用+后台进程将近一百多个进程,但是只有16个核心来处理这些进程,明显任务多干活的少,要同时运行这么多进程,如何来实现呢?这里需要提到并行和并发两个概念。

        并行:同一时刻,两个核心,同时执行两个任务(进程)。

        并发:一个核心,先执行进程1,执行一会儿后去执行进程2,执行一会儿进程2再去执行进程3......只要切换速度足够快,就可以认为进程1、2、3...是“同时”执行。

  通过合理地安排进程 并行和并发 ,计算机就可以同时处理一百多个进程了。另外还有一点,因为 并行+并发 是完全由操作系统进行控制的,宏观上感知不到,所有也把 并行+并发 统称为 并发 。

    
三.  组织进程——双向链表

        操作系统使用双向链表来组织PCB:

  1. 创建一个进程:创建一个链表的节点
  2. 销毁一个进程:删除链表的节点
  3. 遍历进程列表:就是遍历链表

四.内存分配

  操作系统给进程分配的内存,是“虚拟地址空间”。每个进程访问的内存地址,都不是真正的物理内存的地址。

若进程直接访问物理内存的地址,如果进程有异常,就会出现问题。比如进程1出现bug(数组下标越界、野指针),就可能引起进程2的内容也出现问题,因为进程1的bug引起进程2的bug,对操作系统的稳定性产生极大的威胁。

  而如果给进程分配的是虚拟地址空间,都是固定范围,比如进程1和2能访问的都是虚拟地址0x00-0xff,建立一个页表将虚拟地址映射到页表上,再把页表上的地址映射到物理内存,进程1对应0xaa00-0xaaff,进程2对应0xbb00-0xbbff。        站在两个进程的角度,进程中的代码操作的内存地址都是0x00-0xff,访问的这个地址就会被操作系统自动映射到真实的物理内存上,进程自身感知不到实际的物理地址。

  任何一个内存操作,都需要通过页表翻译一下,对其进行校验,在此加持下,进程就有了"独立性".

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

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

相关文章

个推数据驱动运营增长城市巡回沙龙首发北京站

如今很多互联网企业正在加速数智化升级,希望通过运用数据以实现降本提效和运营增长。为帮助更多伙伴在工作中“用好”数据,提升运营效率与效果;同时和更多对用户运营感兴趣的伙伴,共创、共享数智运营实践成果,个推重磅…

学习系统编程终章【多线程剩余知识】

引言: 北京时间:2023/8/3/19:21,刚刚将文章更新,是近期以来为数不多的一次早更,不然每次更文都要卡在12点左右,这是我们实现日更的一个好开端,再接再厉实现日更不是梦。最近失眠一直困扰着我&a…

智慧影院--java开源电影票优惠券制作系统快速开发

搭建一个智慧影院可以通过使用Java开源电影票优惠券制作系统来快速开发。这个系统可以帮助影院管理电影票的销售和优惠活动,提供便捷的购票方式和优惠券的生成与使用功能。 首先,我们需要建立一个数据库来存储电影、影厅、放映计划、订单等信息。在数据…

查看日志信息

查看日志信息 在我们编写代码的过程中可能看不懂错误提示信息,或者不知道错出在什么地方的情况,我们可以打印输出日志信息来检查 使用lombok提供的日志记录器,自定义编程查看调试信息 1、引入lombok依赖 2、在application.properties中配置日…

Observable设计模式简介

Observable设计模式存在于许多Java API和响应式编程中。下面介绍Java中永恒的Observable模式。 Observable设计模式用于许多重要的Java API。一个众所周知的示例是使用ActionListenerAPI执行操作的JButton。在这个例子中,我们ActionListener在按钮上进行了监听或…

玩嵌入式,一般怎么入门?

入门阶段:(不要只看书,要多动手,但千万不是直接动手,不去看书) C语言:嵌入式编程大多用C语言、少量汇编,先学习C语言,汇编用到的时候再上网查询。教材:随便一…

快讯|新 CEO:Tubi 将成为下一代观众的首选

在每月一期的 Tubi 快讯中,你将全面及时地获取 Tubi 最新发展动态,欢迎关注【比图科技】,一起成长变强! 你将通过本文了解 Tubi 在 2023 年 7 月的重要大事: 新 CEO:Tubi 将成为下一代观众的首选 Tubi…

【数学】协方差介绍、相关系数介绍,Python代码

协方差 协方差(Covariance)是统计学中用来衡量两个随机变量之间关系的一种度量。它反映了这两个变量的变化趋势是否一致,即当一个变量偏离其均值时,另一个变量是否也倾向于偏离其均值。协方差可以帮助我们了解变量之间的线性关系…

❤ TypeError: Assignment to constant variable-Vue3 项目使用

❤ TypeError: Assignment to constant variable 背景: Vue3 项目使用 TypeError: Assignment to constant variable. 原因: 因为我对const定义的常量重新赋值了 解决方法: 换成 var 声明

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

内存新一轮暴跌,即将大量流行“官方翻新”

如果说最近一年你有在关注 PC 硬件价格,内存、SSD 想必是值得感慨的。 一次次的好价抄底,似乎永没有尽头。 SSD 降价归功于国产长江存储闪存颗粒大量出货,但内存的猛降能理解但又不完全能理解。 DDR4 到 DDR5 换代没错,但更早知…

COS控制台体验升级 - 文件列表支持网格布局

前言 对象存储(Cloud Object Storage,COS)控制台文件列表页以表格的形式列出存储桶下的所有文件,为了提高用户在COS控制台文件列表页的操作体验,我们对其进行了改版,现在文件列表页支持网格视图&#xff0…

攻防世界-web-shrine

1. 题目描述 打开链接,发现是一串源码: 从源码中不难发现关键词是flask.render_template_string(safe_jinja(shrine)) ,这个函数说明了题目的关键点在于模板渲染,即存在模板注入 2. 思路分析 从代码中不难发现,即使…

什么是思维导图?怎么制作思维导图?看这篇就够了!

在当下快节奏的社会中,无论是学习、工作还是生活,我们都需要处理大量的信息和任务。对于这些复杂的信息和任务,如何有效地理解、记忆和管理,成为了我们面临的一个重要挑战。对于诸如此类场景,使用思维导图就能很好地辅…

python-docx常用方法总结

由于最近有任务需要自动生成word报告,因此学习了一些python-docx的使用方法,在此总结。 目前网上相关的资料不算太多,且大多数都很简单。有一些稍微复杂的需求往往找不到答案,很多想要的方法这个库似乎并没有直接提供。在git上看…

面部表情识别(Pytorch):人脸检测模型+面部表情识别分类模型

目录 0 相关资料1 基于人脸检测面部表情分类识别方法2 项目安装2.1 平台与镜像2.2 项目下载2.3 模型下载2.4 上传待测试图片2.5 项目安装 3 demo测试 0 相关资料 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net…

链表oj (环形链表oj)

文章目录 1.数组oj 2.链表oj 文章内容 1.数组oj 1. 原地移除数组中所有的元素值为val&#xff0c;要求时间复杂度为O(N)&#xff0c;空间复杂度为O(1)。力扣 int removeElement(int* nums, int numsSize, int val){int k numsSize;int a 0;int b 0;while(b<k){if(nu…

Centos7安装jdk8教程——rpm安装

1. rpm文件下载 下载链接 Java SE 8 Archive Downloads (JDK 8u211 and later) 2.上传到服务器指定路径下并安装 切换到上传目录&#xff0c;然后执行以下命令 rpm -ivh jdk-8u221-linux-x64.rpm3. 设置环境变量并重载配置 # 设置环境变量 vim /etc/profile# 文件末尾添加…

【网站搭建】开源社区Flarum搭建记录

环境 服务器系统&#xff1a;腾讯云 OpenCloudOS 宝塔版本&#xff1a;免费版8.0.1 Nginx&#xff1a;1.24.0 MySQL&#xff1a;5.7.42 PHP&#xff1a;8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安装扩展&#xff1a;flieinfo、opcache、exif 2.解除禁用函数&#xff1a;putenv…

Llama 2 with langchain项目详解(一)

Llama 2 with langchain项目详解(一) 2023年2月25日,美国Meta公司发布了Llama 1开源大模型。随后,于2023年7月18日,Meta公司发布了Llama 2开源大模型,该系列包括了70亿、130亿和700亿等不同参数规模的模型。相较于Llama 1,Llama 2的训练数据增加了40%,上下文长度提升至…