linux操作系统的进程状态

news2025/1/16 13:48:42

这个博客只是为了自己复习用的!!!

冯诺依曼体系结构
在这里插入图片描述
计算机是由一个一个硬件组成的
输入设备:键盘,鼠标,扫描仪,写板等等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,播放器等等

关于冯诺依曼,必须强调几点:
这里的存储器指的是内存
不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备都只能直接和内存打交道。

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

键盘(输入设备)-》存储器-》cpu(加密,解密)-》输出设备 -》计算机网络 -》另一台的输入设备-》内存-》cpu(解密)->输出设备(显示屏)

那如果是发送文件呢?
在界面选择文件(这复杂)-》内存->cpu ->网络发送

操作系统(Operator System)os

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)
设计OS的目的
与硬件交互,管理所有的软硬件资源
为用户程序(应用程序)提供一个良好的执行环境

在这里插入图片描述
我们讲一个故事来理解这个。我们假设上面这是一个银行,行长则表示操作系统。我们看到的银行操作是我们作为一个用户,我们去银行办理业务,我们作为开发操作(存款,取款业务)。我们有一个操作选项,选择我们想要的操作。这里的系统调用接口可以表示为银行有很多功能。但是他们肯定不会把所有的地方都开放,就只保留了柜台给我们用户操作,其他的仓库啊我们看都看不到我们要去取钱只能通过柜台去取钱,但是这个为什么会有一个用户操作接口呢?我们可以这样想,随着时间的变化,银行升级了,有些老婆婆和大爷无法同步操作,这时候有一个大堂经理,大堂经理就会负责这些人,说你把信息填好,我帮你去办理业务。这里就相当于是有人帮我们做了一些事,让我们去完成事情更简单了。常见的呢,bash窗口,窗户界面,C语言的库,我们只需要调用就好了,他会帮我们去做一些事,但是我们要自己做好准备,老婆婆和爷爷要去银行才能找大堂经理帮忙,那我们想使用c语言的库方便我们调用也要包含头文件。 以上就是人管理人,我们知道人也是可以管理机器的啊。这里代表的就是软件也可以管理硬件,首先我们要明确一个事实 ,就是说我们的键盘和电脑是分开买的,电脑里面有操作系统,底层硬件相当于是键盘。那怎么让他们连接呢?就是驱动呀,操作系统为了管理这些硬件,会预留规范,厂商只要实现规范就行了。然后操作系统就可以通过这些规范去调用底层硬件。

在操作系统中,驱动程序(通常简称为“驱动”)扮演着至关重要的角色,它们作为硬件设备和操作系统之间的桥梁。驱动程序是特定于硬件的软件代码,使操作系统和其他软件应用能够与硬件设备交互。不同的硬件设备,如打印机、显卡、网络适配器、输入设备等,都需要各自的驱动程序,以确保这些设备能够以正确和高效的方式工作。
驱动程序的主要角色和功能:
硬件设备通信:驱动程序提供了必要的指令集,使操作系统能够识别和控制硬件设备。没有正确的驱动程序,操作系统可能无法识别或不正确地使用某个硬件设备。
数据转换:驱动程序将操作系统的一般指令转换为硬件设备能够理解的专用指令。同样地,它也能将硬件设备的信号转换为操作系统能够理解的数据格式。
提供抽象层:驱动程序为硬件设备提供了一个标准化的抽象接口,使上层的软件(如操作系统内核、应用程序)不需要关心底层的硬件细节。这样,软件开发者就可以编写与硬件无关的代码,增加了软件的通用性和可移植性。
错误处理和设备管理:驱动程序负责监控硬件的状态和性能,处理硬件错误,以及执行必要的故障排除和维护任务。它们还可以提供接口来配置设备设置或更新固件。
性能优化:针对特定硬件优化的驱动程序可以显著提高该硬件的性能。这对于那些对性能要求极高的应用程序(如视频游戏、图形设计软件)尤其重要。

计算机管理硬件的步骤?
1 描述起来,用struct结构体
2 组织起来,用链表和其他高效的数据结构

简单理解:
驱动管理硬件的话为硬件设备提供了一个标准化的抽象接口,调用接口就能实现某些功能。但这里我们需要定义各种属性,比如说键盘的按键,按到了某个按键的话,某个电流就跳动一下。操作系统呢?就是我现在按了键盘的A键,那操作系统就要帮我去找A键对应的功能。

操作系统 -》要进行内存管理,驱动管理哦,进程管理,文件管理!

先将进程!
什么是pcb呢?
在这里插入图片描述
这里我们知道我们的磁盘存了两个程序,我们要运行这个程序需要将我们的数据和代码先放到内存,但是他不是直接把这个给cpu运行。
这里用了一个PCB块,是一个链表。链表里面有很多属性,其中一个属性指向的是下一个pcb块,其中一个属性是指向代码和数据。、这里是PCB的属性(task_struct)

在这里插入图片描述
数据结构+程序 (代码和数据)= pcb(个人理解)

进程有哪些 状态呢?

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

这里介绍 运行状态 挂起状态 阻塞状态

运行状态怎么解释呢?
上图: CPU会有一个执行队列。凡是在执行队列的的线程状态都为运行状态

在这里插入图片描述

这里的每一个硬件也会有一个执行队列,并且cpu的执行速度是远远大于硬件的执行速度。当我们执行到一个进程的时候,若这个进程需要磁盘的读写,但是这个时候磁盘有任务在做。因为磁盘的处理速度是比cpu运行慢很多的,cpu不会为了这一个进程而等。理解上面的例子可以通过这样理解。大堂经理喊你写表,把信息写完之后他就帮你处理,这时候,他会喊下一个,当你写完的时候就可以去找大堂经理去办业务了。
这里也是,cpu会把这个进程放进磁盘操作的队列里,当磁盘能执行这个进程的时候,会自动向操作系统反馈。并将状态改为阻塞状态。当磁盘能处理的时候,会放到cpu执行队列的末尾。并将状态改为运行状态。
在这里插入图片描述
那什么是挂起?

还是上面那个例子,当被放到内存中的硬件的队列的时候,如果这个时候内存不足了,那么操作系统就会做一件事,将加载进内存的代码和数据放到磁盘的一个地方保存,这个时候就叫做挂起状态。

disk sleep D状态
我们先想这样一个场景,操作系统A ,进程B ,磁盘C。有一天操作系统让B在C上保存10000条用户的信息。但是这个时候内存满了,操作系统很烦,根据指令,他要将一些正在运行的死进程给杀死掉。杀了很多看到B了,然后看到B不作为,直接就把B杀死掉了。这时候C很难受啊,当他写了一条数据之后,在喊B下一条数据,下一条数据。但是这个时候B已经被杀死了。C就说既然B都死了,我这个也没有存在的必要了。然后用户数据写入失败。这时候用户把ABC喊过来,问原因到底怎么回事。A说,我根据规则,我要将哪些占用内存,不做事情的杀死掉,保持我的运行,B说我好好的,我就被杀死了,C说,我只负责写入,其他都不管我的事。三个人互相推脱责任,但这样不行啊。用户就说,我给B一个D状态,在D状态的你就不能杀死他。

head -1 && ps axj | grep myproc

这里的STAT就是状态,+代表的是前台运行状态,就是占用Bash ,你在bash输入任何指令都不会生效的

在这里插入图片描述
有这样一段代码
在这里插入图片描述
发现结果一直在打印
在这里插入图片描述
但是我们打印状态确是阻塞状态。
在这里插入图片描述
为什么呢?因为io很慢很慢(相对于cpu来说),这里的cpu有很多进程。执行一个打印语句很快就要打印完了,然后就把这个进程阻塞在显示屏队列了,而这个速度差异为1000:1.我们几乎就是看到的是阻塞状态和挂起状态。没有+的表示后台进程,不能被杀死,ctrl+C命令杀掉,能通过kill命令杀掉。

stop状态 ,

kill -19 命令

继续stop的进程

kill -18 命令

你会发现,本来是S+的经过stop再重启之后,会变成S状态。

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

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

相关文章

Vue-05

v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5&#xff0c;有点难搞&#xff08;这个东西有点老&#xff0c;版本冲突有些包废弃了等等&#xff09; 最后换到ubuntu系统弄了&#xff0c;下面是我的整体步骤&#xff08;建议先使能一下ssh&#xff08;最下面有&#xff09;&#xff0c;结合…

Macbook文件清理软件 Mac电脑清理垃圾文件怎么清理

为了维护Macbook电脑的系统健康&#xff0c;我们需要定期给电脑进行全面清理&#xff0c;清除系统垃圾文件、软件缓存和系统内存。那么好用的Macbook文件清理软件有哪些呢&#xff1f;今天就给大家介绍几款好用的电脑清理软件并介绍Mac电脑清理垃圾文件怎么清理。 一、Macbook…

RPA自动化小红书自动化写文以及发文!

1、视频演示 RPA自动化小红书自动写作发文 2、核心功能点 采集笔记&#xff1a;采集小红书上点赞量大于1000的爆款笔记 下载素材&#xff1a;下载爆款笔记的主图 爆款改写&#xff1a;根据爆款笔记的标题仿写新的标题以及新的文案 自动发布&#xff1a;将爆款笔记发布到小红…

Django之REST Client插件

一、接口测试工具介绍 在开发前后端分离项目时,无论是开发后端,还是前端,基本都是需要测试API接口的内容,而目前我们需要开发遵循RESTFul规范的项目,也是必然的(自己不开发前端页面)。 在网上有很多这样的工具,常用的postman,但还是需要下载安装。在这我们介绍一个VSCod…

【GEE实践应用】GEE下载遥感数据以及下载后在ArcGIS中的常见显示问题处理(以下载哨兵2号数据为例)

本期内容我们使用GEE进行遥感数据的下载&#xff0c;使用的相关代码如下所示&#xff0c;其中table是我们提前导入的下载遥感数据的研究区域的矢量边界数据。 var district table;var dsize district.size(); print(dsize);var district_geometry district.geometry();Map.…

51入门之LED

目录 1.配置文件 2.点亮一个LED 2.1单个端口操作点亮单个LED 2.2整体操作点亮LED 3.LED闪烁 4.LED实现流水灯 4.1使用for循环和移位实现 4.1.1移位操作符 4.1.2使用移位操作和for循环实现 4.2使用移位函数实现LED流水灯 众所周知&#xff0c;任何一个硬件工程师…

go juc 线程中的子类

1.go test() 主死随从 package mainimport ("fmt""strconv""time" )func test() {for i : 1; i < 10; i {fmt.Println("hello " strconv.Itoa(i))//阻塞time.Sleep(time.Second)} } func main() {//开启协程go test()for i : 1; …

GT收发器64B66B协议(2)自定义PHY设计

文章目录 前言一、设计框图二、GT_module三、PHY_module3.1、PHY_tx模块3.2、PHY_rx_bitsync模块3.3、PHY_rx模块 四、上板测试 前言 有了对64B66B协议的认识以及我们之前设计8B10B自定义PHY的经验&#xff0c;本文开始对64B66B自定义PHY的设计 一、设计框图 二、GT_module …

什么是redis缓存的雪崩、穿透以及击穿

缓存雪崩 举个例子&#xff0c;例如在双十一中&#xff0c;一点进去。访问量大&#xff0c;所以它很多数据是放在redis区缓存起来&#xff0c;对应redis的100个key。然后假设设置缓存失效时间是三小时。当双十一期间&#xff0c;购物超过这个三小时之后。这个首页的redis缓存会…

Excel、PowerQuery 和 ChatGPT 终极手册(上)

原文&#xff1a;Ultimate ChatGPT Handbook for Enterprises 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 在不断发展的数据管理和分析领域中&#xff0c;掌握 Excel 的查找功能不仅是一种技能&#xff0c;更是高效数据处理的基石。《使用 Power Query 和 Ch…

Red Hat Enterprise Linux release 8.4安装Jenkins

1. 查看安装 1.1 显示 Linux 系统的详细信息&#xff0c;包括内核版本、操作系统版本和其他相关信息 uname -a1.2 查看 Red Hat Linux 系统的版本 cat /etc/redhat-release # 或者 cat /etc/os-release1.3 查看 JDK 是否安装 java -version #查看安装路径 echo $JAVA_HOME1…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下&#xff0c;你可以将多个 Docker 主机组合成一个虚拟主机&#xff0c;称为 Swarm 集群。Swarm 集群由一个或多个管理节点&#xff08;manager nodes&#xff09;和…

前端开发基础(HTML5 + CSS3)【第一篇】:HTML标签之文字排版、图片、链接、音频、视频 涵盖了两个综合案例 做到了基础学得会,实战写的出

点击前往前端开发基础专栏&#xff1a; 文章目录 HTML5 CSS3 开发一、开发环境搭建下载 VS Code1. 2 插件的下载1.3 项目和文件的下载 二、 什么是 HTML2.1 标签的语法2.2 代码演示&#xff1a;2.3 小结 三 、HTML基本骨架3.1 快捷键生成HTML骨架3.2 代码展示3.3 小结 四、标…

【游戏逆向】逆向基础之寄存器和内存

寄存器是中央处理器内的组成部分 它们可用来暂存指令、数据和地址。 具有这样功能还有内存 我们这里说的内存都是指虚拟内存。 寄存器和虚拟内存的主要区别在于它的存储和读取速度更快&#xff0c;那么有的同学会说&#xff0c;那我们全用寄存器就好了&#xff0c;但是&…

NOI - OpenJudge - 2.5基本算法之搜索 - 1490:A Knight‘s Journey - 超详解析(含AC代码)

点赞关注吧~ 1490:A Knights Journey 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. When…

数据仓库面试总结

文章目录 1.什么是数据仓库&#xff1f;2.ETL是什么&#xff1f;3.数据仓库和数据库的区别&#xff08;OLTP和OLAP的区别&#xff09;4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度&#xff1f;5.2什么是指标&#xff1f; 6.什么是数仓建模&#xff1f;7.事实表7.维度表…

StarRocks实战——华米科技埋点分析平台建设

目录 前言 一、原有方案及其痛点 二、引入StarRocks 三、方案改造 3.1 架构设计 3.2 数据流程 3.3 性能指标 3.4 改造收益 前言 华米科技是一家基于云的健康服务提供商&#xff0c;每天都会有海量的埋点数据&#xff0c;以往基于HBase建设的埋点计算分析项目往往效率上…

号卡极团分销管理系统 index.php SQL注入漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…

在ssh 工具 Linux screen会话中使用鼠标进行上下滚动

经过几次发现 除xshell外&#xff0c; WindTerm finalshell MobaXterm 都是进入会话后&#xff0c;发现其界面无法滚动屏幕向上查看 如果想要在Linux screen会话中使用鼠标进行上下滚动。必须首先进入该screen的回滚(scrollback模式)才能进行上下滚动 第一步&#xff…