从零了解进程(操作系统定位,进程的概念,特征,虚拟地址)

news2024/11/20 8:43:09

目录

操作系统的定位

进程的概念

如何描述进程?

如何组织进程?

进程的特征

1.pid

2.内存指针

3.文件描述符

4.进程调度的相关属性

(1)进程的状态

(2)优先级

(3)上下文

(4)记账信息

进程是如何利用cpu资源的?

进程的虚拟地址

物理地址

内存随机访问的特性

为什么程序不直接获取内存的物理地址?

虚拟地址


操作系统的定位

介绍进程之前我们先简单介绍一下操作系统

操作系统是一个搞管理的软件,它对下管理硬件设备,对上给软件提供稳定的运行环境,操作系统是:软件 硬件 用户之间交互的媒介

我们熟悉的操作系统有:Window Linux Mac......

进程的概念

一个正在运行的程序,就是一个进程.

 比如我们打开任务管理器,这些都是进程,它们对应着一些cpu,内存,磁盘,网络资源,

进程是操作系统资源分配的基本单位.

进程是一个重要的软件资源,由操作系统负责管理的
操作系统是如何管理的呢?

简单来说就是,描述和组织进程,讲清楚进程有哪些属性和特征,通过一定的数据结构把多个这样的
基本单位串联起来.

如何描述进程?

使用结构体来描述进程,
用来描述进程的结构体我们称之为PCB(进程控制块)

如何组织进程?

通过双向链表,把多个PCB串联在一起,
创建一个进程,本质上就是创建一个pcb这样的结构体对象,把它插入到双向链表当中
销毁一个进程,本质上就是把链表上的pcb节点删除掉
用任务管理器查看进程,本质上就是遍历整个pcb链表

进程的特征

我们用pcb这个结构体来描述进程,那么pcb描述了进程的哪些特征?

1.pid

进程的身份标识符,是唯一的一串数字

2.内存指针

指向了说自己要用到哪些内存

3.文件描述符

硬盘上的文件等其他资源

4.进程调度的相关属性

(1)进程的状态

就绪状态:随叫随到,随时准备到cpu上取执行

运行状态:正在cpu上执行

堵塞状态:短时间内无法在cpu上执行

(2)优先级

进程也是有优先级的.谁先排,谁后排也是有一定的算法逻辑的

(3)上下文

简单来说就是"存档"和"读档",操作系统在进行切换的时候,就需要把中间状态给记录下来,
下次这个进程再上cpu上执行时,就可以恢复上次的状态继续往下执行了.

本质上,进程的上下文,就是cpu中的各个寄存器的值.
寄存器:cpu内置的存储数据模块,保存的就是程序运行的中间结果
保存上下文:就是把这些cpu寄存器的值,记录到内存中
恢复上下文:就是把内存中这些cpu寄存的值,恢复回去

(4)记账信息

操作系统,统计在每个进程在cpu上占用的时间,和执行的指令数目,
根据这个来决定,下一阶段该如何调度.

进程是如何利用cpu资源的?

内存指针和文件描述符,其实就是描述了,进程持有了哪些硬件资源
进程的调度的相关属性,其实就描述了进程是如何利用cpu资源的.

硬件资源,内存,硬盘,网卡等比较好分,而cpu资源不好分,
一般我们的电脑进程有上百个,而cpu只有一个,尽管现在cpu是多核的,每个核心都可以看作一个独立的cpu,但是往往也就是8核,12核,16核......还是不够进程分!

狼多肉少,这些进程都希望能够同时运行,这时我们就要用到并行核并发了.

并行:微观上,同一时刻,俩个核心上的进程,就是同时执行的

并发:微观上同一时刻,一个核心上只能运行一个进程,但是能够进行快速切换
比如一个cpu核心上,先运行谷歌浏览器,再运行qq音乐,再运行微信......
只有切换速度足够快,宏观上,让人感知不到

操作系统内核处理的应用程序,我们感知不到是并行还是并发
因此,往往把并行和并发统称为并发

操作系统也有一个重要的模块调度器,负责让有限的cpu调度执行这么多的进程.

进程的虚拟地址

物理地址

内存:物理上是一条内存条,可以存很多数据,
内存可以想象成一条大走廊,有很多房间,每个房间的大小都是1Byte
每个房间都有一个编号,从0开始依次累加
这个内存编号,就是地址,
这个地址我们称之为物理地址.

内存随机访问的特性

随机访问:访问内存上任意地址的数据,速度都极快,时间上都差不多.
数组取下标时间复杂度是O(1),也是因为内存随机访问的特点.

为什么程序不直接获取内存的物理地址?

虚拟地址

使用物理地址有个明显的弊端,如果出bug了,明明是进程1的bug,可能会把其它进程给搞坏.
所以我们针对进程使用的内存空间,进行"隔离",使用虚拟地址空间,
由操作系统和专门的硬件设备(MMU),负责进行虚拟地址,到物理地址的转换

一旦访问越界了,比如进程1的指针地址成了0x3000
操作系统内核会发现这里的地址超出了进程1的访问范围了
此时就会直接反馈一个错误
因此,谁出bug,影响谁,其它进程不受影响. 

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

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

相关文章

【ML实验7】人脸识别综合项目(PCA、多分类SVM)

实验代码获取 github repo 山东大学机器学习课程资源索引 实验目的 实验环境 实验内容 PCA 两种方法EVD-PCA和SVD-PCA的实现、效率对比见我之前的博客一个PCA加速技巧,这里补充SVD方法的数学推导: 首先,设方阵AAA的特征值分解为AUΣUTAU\S…

ZKP应用:石头剪刀布游戏

1. 引言 开源代码见: https://github.com/spalladino/zkp-tests 对比了分别使用: Iden3团队的circom语言(易于学习ZKP)ZCash团队的Halo2框架Aztec团队的Noir语言(最友好) 编写石头剪刀布游戏的ZKP证明…

IPv6(计算机网络-网络层)

目录 IPv6 的特点 IPv6 数据报的格式 IPv6 分组的格式 IPv6 的扩展首部 从计算机本身发展以及从互联网规模和网络传输速率来看,现在 IPv4已很不适用。 要解决 IP 地址耗尽的问题的措施: 采用无类别编址 CIDR,使 IP 地址的分配更加合理…

MySQL 锁机制

文章目录MySQL 锁机制表锁读锁场景一场景二场景三总结写锁场景一场景二场景三总结行锁场景一场景二总结间隙锁缺点如何锁定一行MySQL 锁机制 表锁 读锁 查看哪些表被加锁了 语法:show open tables 添加读锁 read 读锁关键字 | write 写锁关键字 语法:l…

qt下采用libcurl实现ftp与tftp功能,提供源代码程序

一、FTP简介 FTP(文件传输协议),工作在应用层,是用于在网络上进行文件传输的一套标准协议。它使用 TCP 传输,客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的&…

基于xml的自动装配之byName

基于xml的自动装配之byName 自动装配方式:byName byName:将自动装配的属性的属性名,作为bean的id在IOC容器中匹配相对应的bean进行赋值总结:当类型匹配的 bean 有多个时,此时可以使用 byName 实现自动装配 配置bean &…

02:损失函数总结

目录 nn.L1Loss: nn.NLLLoss: nn.MSELoss: nn.CrossEntropyLoss: 损失函数是用来估量模型的预测值与真实值的不一致程度,它是一个非负实值函数。我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函…

多叉树 [数据结构与算法][Java]

多叉树 在二叉树中每个结点只能有一个数据项, 并且最多有两个子节点, 如果允许每个结点可以有更多的数据项和更多的子节点, 那么就是多叉树 多叉树: multiway tree 那么我们为什么要提出多叉树? 因为二叉树有一定的问题: 即使二叉树的操作效率高, 但是也存在问题: 二叉树需…

django之前后端不分离的操作(增删改查)

背景: demo采用的是前后端不分离的操作,用Bootstrap作为前段页面框架使用 1.先说模板之间的继承(针对HTML来讲) 父模板中编写好公共代码块,例如一个网站的导航和footer部分 在内容部分注明 {%block content%} {%e…

53 记一次自定义 classloader 导致的 metadataspace OOM

前言 这是最近 flink 集群上面暴露出现的一个问题 具体的细节原因 就是 flink 上面提交任务的时候, 自定义的 classloader 加载 driver.jar 然后导致 metaspace OOM 由于这边的 TaskManager metadataspace 配置相对较小(MaxMetaspaceSize配置为96M), 然后导致 出现了 metada…

BUUCTF Misc [SUCTF2018]single dog 我吃三明治 sqltest [SWPU2019]你有没有好好看网课?

[SUCTF2018]single dog 下载文件 使用kali的binwalk工具分析 进行文件分离 解压其中的压缩包,得到1.txt 看内容应该是js加密后的结果,复制到AAEncode在线解密网站 得到flag flag{happy double eleven} 我吃三明治 下载文件 使用010 eito…

AICodeHelper - AI编程助手

AICodeHelper是一款AI编程助手,旨在帮助程序员提高他们的编码技能。 简单的像尝试的代码直接问就行,但是一些复杂的,就得需要写技巧; 下面是几个使用的小技巧:链接是:AICodeHelper 1.可以使用中文提问&a…

深度学习Faster-RCNN网络

目录1 网络工作流程1.1 数据加载1.2 模型加载1.3 模型预测过程1.3.1 RPN获取候选区域1.3.2 FastRCNN进行目标检测2 模型结构详解2.1 backbone2.2 RPN网络2.2.1 anchors2.2.2 RPN分类2.2.3 RPN回归2.2.4 Proposal层2.4 ROIPooling2.5 目标分类与回归3 FasterRCNN的训练3.1 RPN网…

Yolov5移植树莓派实现目标检测

Hallo,大家好啊!之前写了几篇Yolov5相关项目的博客,然后学习了树莓派之后,更新了几篇树莓派的博客,我的最终目的是将Yolov5移植到树莓派,通过树莓派上面的摄像头实现目标检测。你想啊,在工厂里面…

【word文档使用方法记录】论文格式修改

word文档使用方法记录**去掉文档都以也封面的页眉:****WPS公式居中,公式号右对齐**为论文每个章节设置不同的页眉去掉文档都以也封面的页眉: 将光标定位在第一页页尾,进入“页面布局”选项卡,点击“分隔符”&#xff…

【MySQL数据库入门】:数据库基础和基本操作

文章目录1. 数据库基础1.1 什么是数据库1.2 主流数据库1.3 如何配置环境1.4 链接数据库1.5服务器,数据库,表关系2.基本的数据库操作3.MySQL架构4.SQL分类5.存储引擎5.1查看存储引擎5.2 存储引擎对比6.总结1. 数据库基础 1.1 什么是数据库 存储数据用文…

安装包UI美化之路-在线安装包

在一些安装场景中,由于完整的安装包很大,下载时间长,且下载后需要人工干预来进行安装,这样会一定程度的降低用户使用体验;nsNiuniuSkin安装包制作解决方案提供了一种在线版本的安装包,支持将实际要安装的内…

C++中delete 和 delete []的真正区别

1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 那么,按照教科书的理解,我们看下下面的代码: int *a new int[10]; delete a; //方…

Java | 详解 Java连接MySQL、编写JdbcUtils工具类、使用数据库连接池、使用JavaTemplate

一、连接mysql数据库 步骤: 1、启动 MySQL :以管理员身份打开 cmd 命令行,输入 net start mysql 2、在 MySQL 创建一张表,用于后面的操作。我这里创建了一张 user 表,有id、name、password三个字段。 3、导入jar包 (1)…

【总结】最系统化的CV内容,有三AI所有免费与付费的计算机视觉课程汇总(2022年12月)...

欢迎大家关注有三AI的计算机视觉课程系列,我们的课程系列共分为5层境界,内容和学习路线图如下:第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用等…