操作系统中的进程

news2024/11/28 18:48:31

目录

什么是进程/任务(Process/Task)

PCB的具体信息

1.pid 进程的身份标识

2.内存指针

3.文件描述符表

4.进程状态

5.进程优先级

6.进程上下文

7.进程 记账信息

虚拟地址空间


我的GitHub:Powerveil · GitHub

我的Gitee:Powercs12 (powercs12) - Gitee.com

皮卡丘每天学Java

什么是进程/任务(Process/Task)

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

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

对进程的管理

  1. 描述:详细的表示清楚一个进程有哪些属性/信息

    使用一种结构体来描述,结构体(PCB,进程控制块)里面包含一个进程的各种信息,

  2. 组织:通过一定的数据结构,把若干个用来描述的实体,放到一起,进行增删改查

    系统通常会使用 双向链表 这样的结构来把这些 PCB 组织在一起

创建一个进程,本质上就是创建 PCB ,并且加入到链表上

销毁一个进程,本质上就是从链表上删除对应的 PCB 节点

查看任务管理器的进程列表,本质上就是在遍历这个 链表

注意:

一个进程可能是一个 PCB 也可能对应多个

系统这里管理 PCB 的链表也不一定是一个

PCB的具体信息

任务管理器中查看

 

命令行窗口查看

 

1.pid 进程的身份标识

一个主机,同一时刻,这些进程的 pid 是唯一的 通过 pid 来区分一个进程

2.内存指针

描述进程持有的 内存资源 一个可执行文件双击后开始运行,操作系统把文件中的核心数据(要执行的指令和指令依赖的数据)加载到内存中 既然要创建进程,势必要给进程分配空间,然后这个内存空间上就有很多区域。有的区域存放指令,有的区域存放数据,还有的用来维护运行状态

3.文件描述符表

描述进程持有的 文件资源 每个进程都可以打开一些文件(文件其实是存储在硬盘上的数据) 文件描述符表里面就记录了当前进程都打开了哪些文件

上面两条可以说明 进程 是操作系统分配资源的基本单位

以下几个属性都和“进程调度”有关系

为什么要有“进程调度”

资源有限,需要合理安排 CPU 资源。进程可以有很多个,但是 CPU 只有几个(例如8核CPU,只能同时跑8个进程)

“进程调度”是什么

所谓的进程调度就是通过“并行”和“并发”的方式让计算机可以“同时”执行多个进程(任务)

“并行”和“并发”

并行执行 每个 CPU 核心上都可以独立的运行一个进程(运行进程的相关指令),多个 CPU 就可以同时独立运行多个进程

并发执行 一个 CPU 核心 先运行一个进程1,再运行进程2,再运行进程3,只要微观上切换的速度足够快,宏观上看起来就好像3个进程同时运行一样

4.进程状态

一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。

进程状态大致可以分为三个状态(也可以细分为五个状态)

(1)运行(running)态:进程占有处理器正在运行。

(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。

(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。

5.进程优先级

系统调度的时候就会根据优先级,来给进程安排时间 创建进程的时候可以通过一些系统调用来干预优先级的(相对的)

6.进程上下文

进程在 CPU 上执行了一会之后,要切换给别的进程,就需要保存当前运行的中间结果(存档),下次再轮到它执行的时候,就恢复之前的中间结果(读档),继续往下执行

对于进程来说,上下文 就是 CPU 中间的寄存器的值(寄存器的值就包含了运行的中间结果,需要把这些结果保存到 PCB 的上下文信息中(内存))

7.进程 记账信息

每个进程在 CPU 上执行了多久,统计信息,辅助调度的效果 执行进程的时候,虽然有优先级,但是还是不希望让有的进程完全受到 CPU 的 青睐

记账信息的单位不是时间为单位,而是执行指令的条数

这样使得进程调度更加均衡,避免发生 CPU 完全没有执行某个进程

虚拟地址空间

虚拟地址空间会给每个进程安排一些内存资源

看一下直接分配内存会有什么问题

 

假设出现极端的情况,线程1 中,出现了 内存访问越界 这样的操作就可能影响其它进程。保存了一个无效的内存地址(野指针),通过解引用对该块内存进行操作。

即不能让 进程1 这里的指针越界操作,影响到进程2

上述操作会产生进程间的相互影响 为了解决这个问题,就需要让每个进程都有各自的内存空间(活动范围)不要让这些进程的活动范围重叠 给每个进程划分内存空间,都叫做“虚拟地址空间”(不是真是的物理内存地址),通过专门的设备 MMU 来完成 虚拟地址 到物理地址之间的 映射。

 

MMU 就可以针对这里的地址进行校验,如果是非法地址,直接就通知进程(比如把进程给杀死)从而及时止损,避免影响到其他进程的运行

针对 进程1 和 进程2 来说,能够访问的内存空间,就只是0x0000-0xFFFF 这一段 如果不小心访问了更大的内存空间,在 MMU 映射的时候就能及时发现,从而避免对物理内存产生影响

使用虚拟地址空间,就认为进程之间存在了“隔离性” 一个进程是不能直接访问另一个进程内存数据的,防止干扰的操作,提高了系统的稳定性。不会说某个进程出现bug影响到其他进程

新的问题

有了隔离性之后,虽然进程是稳定了,但是也有新的问题

有些需求场景,就是需要多个进程相互配合的 进程隔离了,此时进程之间就很难进程交互了

所以系统又引入了一个机制 进程间通信

找一块 多个线程 都可以访问到的 公共资源,然后基于公共资源来交换数据

这块公共资源可以是一块内存,也可以是一个文件,还可以是网卡......

进程是要求要有独立性的(相互之间不影响) 进程如果需要进程通信,就需要使用特定的进程间通信机制(基于文件,基于 socket(网卡))

虚拟地址空间(进程独立性)和进程间通信的配合类似面向对象中的“封装” 对于程序员的“自由”的限制

这种限制其实是有益的,条条框框越不容易出错,自由会出现各种错误

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

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

相关文章

28年蛰伏,易特驰打响「软件定义汽车」硬战

今年3月,特斯拉给车主推送了新的软件更新版本2022.8.2,更新内容包括:车辆温度预设改进、空调页面显示除雾/除霜提醒、预计充电时间更精准估算、正在进行的通话更新等。 这并不是特斯拉第一次通过升级OTA,增加新功能、完善现有功能…

防火墙的前世今生

防火墙的前世今生 1、第一代防火墙:包过滤防火墙,实现简单的访问控制,也就是我们经常在交换机路由器用到ACL技术 当我们192.168.1.1需要访问192.168.2.1的WEB服务的时候,先要去精确控制能匹配源目地址,端口号&#xf…

限制 SLS告警通知时段的几种常见方法

前言 在对系统进行监控告警的过程中,有时候并非在任何时候都要接收告警通知,例如以下场景: 计划内变更触发的已知告警可以无需通知非工作时间不接收不严重的告警夜里不接收电话告警等等 本文会介绍几种常见的限制告警通知时段的方法&#x…

IDEA技巧汇总:这30个强大的功能,总有一个你能用上!

目录查看代码历史版本调整idea的虚拟内存:idea设置成eclipse的快捷键设置提示词忽略大小写关闭代码检查设置文档注释模板显示方法分隔符设置多行tabtab过多会自动关闭快速匹配方法的大括号位置代码结尾补全模糊搜索方法预览某个类的代码查看方法在哪里被调用代码模板…

一个简单的网页制作期末作业,学生个人html静态网页制作成品代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

12月13日:跟着猫叔写代码,fastadmin中Api相关只是

Api权限管理 api常用返回信息实例 api获取所有方法,都在common目录下cotroller文件夹中Api.php中 /*** 需要登录的接口**/public function test2(){//$this->success(返回成功, [action > test2]);//判断当前用户是否登录//$this->success(返回成功, $t…

1. Python_Django项目之大型电商项目介绍

1.开发项目目的 联系已掌握的知识点发现新的知识点掌握开发技巧掌握项目结构增加项目经验 2.所用技术 语言:Python3(Django4)数据库:MySQLweb服务器:Nginxuwsgi开发环境:VScode、linux 3.功能介绍 商品…

动态规划——背包问题(3)

文章目录求解最佳方案数例题思路代码混合背包问题例题思路代码有依赖的背包问题例题思路代码考察思维的一些背包题目机器分配金明的预算方案货币系统能量石总结求解最佳方案数 例题 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#…

springboot前后端交互(小白教学)

在上次前后端交互,我们使用的是最基本的HTMLServlet的组合,比较基础,今天我们来讲一讲HtmlSpringboot框架,前后端交互实现更为简便,大大降低了我们开发人员在代码上面所花费的时间,那今天让我们一探究竟吧。…

1998-2014年工企污染数据库

1998-2014年工企污染匹配数据库 1、时间区间为:1998-2014年 2、部分指标: 工业总产值(现价)(万元)、工业用水总量(吨)、煤炭消费总量(吨)、其中:新鲜水量(吨&#xff…

是谁实现了 Pod 的多副本管理?

目录一、前言二、案例分析三、案例总结一、前言 在 K8s 中 Pod 是由 Controller 来管理的,Controller 定义了 Pod 的部署 spec,如 Pod 的副本数、运行的 Node 等。不同的业务场景 Controller 是不同的。K8s 提供了多种 Controller,如常见的 …

POCV/SOCV 、LVF

1.POCV与OCV、AOCV 为了模拟片上PVT的差异带来的影响,最早提出了OCV(On Chip Variation)给每个cell都设置一个固定的derate值,来覆盖最悲观的情况,但是随着工艺发展,设计规模增大,OCV过度的悲观…

Docker之Nacos的持久化和集群部署

目录 一、外网单节点部署 1.docker mysql:5.7的持久化存储及远程连接 1.下拉镜像 2.在宿主机中相关目录,用于挂载容器的相关数据 3.创建mysql5.7容器 4.修改mysql允许Navicat远程连接 5.创建数据库nacos_config,并进行初始化 ​编辑 2. nacos-d…

DNS解析过程以及基本原理

目录 1.什么是 DNS 2.分布式、层次数据库 A.什么是分布式? B.什么是层次? D.什么是根 DNS 服务器 E.顶级域 DNS 服务器 F.权威 DNS 服务器 3.本地 DNS 服务器 4.递归查询、迭代查询 A.图解DNS解析过程 B.解析过程当中的递归解析和迭代解析 5…

STM8开发实例-IAR开发环境搭建

IAR开发环境搭建 IAR Embedded Workbench for STM8 是一个集成开发环境,具有高度优化的 C/C++ 编译器和全面的 C-SPY 调试器。 它为 STM8A、STM8L、STM8S、STM8T、STNRG 和 STLUX 系列中的器件提供全面支持。 1、IAR下载并安装 IAR Embedded Workbench For STM8官方下载地址…

3U 轨道交通车载工业级M12 PoE交换机,防护等级IP66

支持软硬件定制服务的轨道交通工业交换机 支持双电源冗余 支持Bypass 专门为轨道交通应用设计和制造的以太网数据通信设备 根据IEC61375-2-5和IEC61375-2-3协议实现的列车级骨干以太网核心设备 支持中国铁路 产品认证 XM-5145工业交换机是专为轨道交通、船载、车载等恶劣环…

非零基础自学Golang 第2章 安装和运行Go 2.1 GOROOT和GOPATH 2.2 在Windows 下安装Go

非零基础自学Golang 文章目录非零基础自学Golang第2章 安装和运行Go2.1 GOROOT和GOPATH2.2 在Windows 下安装Go第2章 安装和运行Go Go的安装主要分为两种方式:安装包安装和源代码安装: 安装包安装:即已编译好的可直接运行的程序&#xff0c…

145.如何评价个性化推荐系统的效果-2

145.1 E值 E值表示查准率P和查全率R的加权平均值,当其中一个为0时,E值为1,其计算公式: b越大,表示查准率的权重越大。 145.2 平均正确率(Average Precision) 平均正确率表示不同查全率的点…

【Effective Objective - C】—— 读书笔记(三)

【Effective Objective - C】—— 读书笔记(三) 文章目录【Effective Objective - C】—— 读书笔记(三)15.用前缀避免命名空间冲突要点:16.提供“全能初始化方法”要点17.实现description方法debugDescription&#x…

2023年Python、Golang、Java、C++如何选择?

前言 我们都有知道,开发后台语言可选择的方向会很多,比如,Java,go,Python,C/C,PHP,NodeJs…等很多,那么他们都有什么的样的优势?如果学习一门后端语言,又该如何选择呢? …