进程的了解

目录

一、进程控制块抽象(PCB Process Control Block)

1.pid:进程的身份标识

2.内存指针:

3.文件描述符表

进程的调度(额外知识,不是进程属性):

4.进程的状态:

5.进程的优先级

6.上下文

7.记账信息

二、虚拟地址空间


每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位

一、进程控制块抽象(PCB Process Control Block)

计算机内部要管理任何实事物,都需要将其抽象成一组有关联得、互为一体的数据。在Java语言中,我们可以通过类/对象来描述这一特征。

通过PCB来描述、抽象进程的属性。

// 以下代码是Java伪代码的形式,重在说明,无法运行
class PCB{//进程的唯一标识--pid;//内存指针//文件描述符表//状态//优先级//记账信息//上下文
}

使用这个PCB描述进程的属性,一个进程就可以使用一个或多个PCB来表示

系统中会使用类似于双向链表这样的数据结构来组织多个PCB:

创建新的进程,就是创建PCB并且把PCB插入到链表中。

需要销毁进程时,就是把PCB从链表上删除并释放。

展示进程链表时,就是相当于遍历链表的每个节点。

1.pid:进程的身份标识

每个进程都会有pid,同一时刻,不同进程之间的pid是不同的,每个进程的pid是唯一的。

2.内存指针:

用来区分进程中内存空间的属性

每个进程在运行时,都会分配一定的内存空间,而这个进程的内存空间、具体是在哪里,以及分配的内存空间中有哪些部分,每个部分是干啥的...所以就有这么一组指针来进行区分。

最典型的,比如进程的内存空间,需要有专门的区域存储要执行的指令,以及指令依赖的数据,同时还要存储一些运行时产生的临时数据,所以就是需要一组指针来区分。

3.文件描述符表

每个进程都有自己的文件描述表,文件描述表时操作系统中的数据结构,它用于跟踪当前进程打开的所有文件,当进程打开一个文件时,内核会为这个文件分配一个文件描述符,并且会创建一个条目在文件描述表符中,这个表包含了打开的文件相关联的所有信息。

文件描述符表包含了进程所关联的文件的所有信息。

进程的调度(额外知识,不是进程属性):

进程调度是操作系统中的一个核心功能,它负责决定哪个进程应该何时使用CPU。进程调度的主要目标是合理地分配CPU时间,以实现多种不同的目标,比如提高系统吞吐量、保证进程响应时间、确保公平性和优先级等。

给进程分配合理的CPU时间。

PCB引入了还引入了一些属性,用来支持操作系统实现进程调度的效果。

  • 进程的状态
  • 进程的额优先级
  • 进程的上下文
  • 进程的记账信息

4.进程的状态:

表示进程当时的运行状态。

  • 就绪状态:
  1. 进程正在CPU上执行;
  2. 虽然进程没在CPU上执行,但是时刻准备着去CPU执行。

  • 阻塞状态:

某个进程,某种执行条件不具备,就导致这个进程暂时无法参与CPU的调度。

还有其他状态,不做一一讨论。

5.进程的优先级

操作系统在调度多个进程的时候并非是一视同仁,有些会给更高的优先级,优先调度。优先级可以通过系统api进行设置。

6.上下文

上下文是支持进程调度的重要属性。

进程从CPU离开之前,需要把当前CPU中各种寄存器的状态,都记录到内存中。等到下次进程回到CPU上执行的时候,此时就可以把保存的这些寄存器的值恢复回去,然后进程就会沿着上次执行到的位置继续往后执行。

进程结束前,保存进程的状态到内存中,以方便进程再次执行时沿着上次的继续执行。

7.记账信息

通过优先级机制,对不同的进程分配了不同的资源,但是为了让某些资源也能分配到资源,就是要记录当前进程持有CPU的情况(进程的创建时间、开始时间、结束时间和运行时间),以这个为依据作为操作系统调度进程的参考依据,更加合理的分配资源。

记录进程的情况合理调度。


二、虚拟地址空间

早期的操作系统,程序运行时分配的内存就是“物理内存”。

如果B进程越界访问了A进程的内存,把A内存写成错误的值,A进程可能崩溃。

所以操作系统要给进程提供稳定的运行环境。

引入“虚拟地址空间”,不是直接分配物理内存了,而是分配虚拟的内存空间,操作系统对内存进行了一层抽象。

 A操作某个内存中的数据,就需要把操作的虚拟地址告诉给系统,系统再把虚拟地址翻译成物理地址然后在对物理地址进行操作,如果给定的虚拟地址是非法的,操作系统就能及时发现对当前进程进行处理。通过这样的操作,就能保证进程之间存储数据的独立性,不会涉及到其它进程。

保证进程独立后,进程之间就相互隔开了,但如果需要进程之间的配合,就是需要实现进程之间的通信,后面博客主要介绍两种:通过文件,网络(socket)。

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

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

相关文章

学习threejs,通过THREE.Raycaster给模型绑定点击事件

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Raycaster光线投射概…

Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程 1、为什么学习Go? 简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的…

图神经网络

定义: 对图上所有的属性,包括顶点、边、全局、上下文进行的一个可以优化的变换,该变换可以保存住图的对称信息(将顶点进行另外一个顺序的排序后,结果不变) Message passing neural network:使…

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持:Java拥有丰富的网络编程库,如Apache HttpClient、OkHttp等,这些库提供了强大的HTTP请求功能,使得发送请求和处理响应变得简单。高效的数据处理:Java的数据处理能力,结…

使用Yolov10和Ollama增强OCR

1. 训练自定义 Yolov10 数据集 利用物体检测增强 OCR 的第一步是在数据集上训练自定义 YOLO 模型。YOLO(只看一遍)是一种功能强大的实时对象检测模型,它将图像划分为网格,使其能够在一次前向传递中识别多个对象。这种方法非常适合…

【某农业大学计算机网络实验报告】实验二 交换机的自学习算法

实验目的: (1)理解交换机通过逆向自学习算法建立地址转发表的过程。 (2)理解交换机转发数据帧的规则。 (3)理解交换机的工作原理。 实验器材: 一台Windows操作系统的PC机。 实…

Python|基于Kimi大模型,实现上传文档并进行“多轮”对话(7)

前言 本文是该专栏的第7篇,后面会持续分享AI大模型干货知识,记得关注。 假设有这样的需求,需要你通过python基于kimi大模型,上传对应的文档并根据对应的prompt提示词,进行多轮对话。此外,还需要将kimi大模型生成的内容进行存储。具体场景,如下图所示: 也就是说,当我们…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具,在GitHub上竟然能够积累1K的star,看来还是有点东西,当然官方的友链也是发挥了重要作用 首先送上项目地址,有能力的宝子可以自行查看 经典的网络抓包工具有很多,比如: Wireshark&…

KASan部署、使用与原理分析

文章目录 前言1、概述2、使用方法3、测试用例3.1、检测加载的内核模块3.2、检测调用的内核模块3.3、通过系统调用检测3.4、检测编译到Linux内核中的内核模块 4、工作原理4.1、影子内存(Shadow Memory)4.2、内存状态(Memory States&#xff09…

Go小技巧易错点100例(十八)

正文: 使用下划线增加数字可读性 有时候我们代码里会定义很长的数字,虽然计算机程序能支持很大的数据的计算,但是对我们来说,可读性是一个需要考虑的点,特别是1后面全是0的时候。 但是这个问题在Go语言中是可以通过…

使用js和canvas实现简单的网页打砖块小游戏

玩法介绍 点击开始游戏后,使用键盘上的←→控制移动,小球会不停移动,板子触碰小球时会反弹,碰撞到砖块时会摧毁砖块,如果没有用板子接住小球就游戏失败 代码实现 代码比较简单,直接阅读注释即可&#x…

Leetcode—1226. 哲学家进餐【中等】(多线程)

2024每日刷题&#xff08;185&#xff09; Leetcode—1226. 哲学家进餐 C实现代码 class DiningPhilosophers { public:mutex mx;DiningPhilosophers() {}void wantsToEat(int philosopher,function<void()> pickLeftFork,function<void()> pickRightFork,functi…

云快充1.5协议+云快充1.6协议通讯框架

云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 介绍 云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 软件架构 1、提供云快充底层桩直连协…

Java【多线程】阻塞队列

目录 阻塞队列 阻塞队列是什么&#xff1f; 生产者消费者模型 生产者消费者模型的两个重要优势 1.解耦合&#xff08;不一定是两个线程之间&#xff0c;也可以是两个服务器之间&#xff09; 2.阻塞队列就相当于一个缓冲区&#xff0c;平衡了生产者和消费者的处理能力&…

【Web前端概述】

HTML 是用来描述网页的一种语言&#xff0c;全称是 Hyper-Text Markup Language&#xff0c;即超文本标记语言。我们浏览网页时看到的文字、按钮、图片、视频等元素&#xff0c;它们都是通过 HTML 书写并通过浏览器来呈现的。 一、HTML简史 1991年10月&#xff1a;一个非正式…

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础&#xff1a;神经网络、训练过程与激活函数 引言&#xff1a; 深度学习作为机器学习的一个子领域&#xff0c;近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构&#xff0c;使得计算机能够从数据中学习复杂的模式和特征&#xff0c;…

当小程序学会‘读心术’:表单处理的神秘法则

哈喽&#xff0c;我是阿佑&#xff0c;今天将给大家给咱们的小程序赋能——“读心术”&#xff01; 文章目录 微信小程序的表单处理表单元素&#xff1a;小程序的“语言”表单事件&#xff1a;小程序的“听觉”表单提交&#xff1a;小程序的“表达”总结 微信小程序的表单处理 …

1 -《本地部署开源大模型》如何选择合适的硬件配置

如何选择合适的硬件配置 为了在本地有效部署和使用开源大模型&#xff0c;深入理解硬件与软件的需求至关重要。在硬件需求方面&#xff0c;关键是配置一台或多台高性能的个人计算机系统或租用配备了先进GPU的在线服务器&#xff0c;确保有足够的内存和存储空间来处理大数据和复…

设置了超时时间但是不起作用,浏览器里的setTimeout有 bug?

你可能也遇到过这样的问题:写个setTimeout定时器,结果时间一长,浏览器就开始捣乱。比如你想要设置一个几小时甚至几天的延时,突然发现浏览器不听话了!这时候你就会想,难道浏览器的定时器是有上限的?没错,你没看错,setTimeout其实有个最大值限制,时间一超过这个值,就…

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

Python Numpy 实现神经网络自动训练&#xff1a;反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练&#xff0c;重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心&#xff0c;能够通过计算梯度来优化模…