Linux——进程
进程介绍及其使用
- 1、认识冯诺依曼体系
- 2、操作系统
- 如何理解操作系统对硬件做管理?
- 3、进程
- 如何创建进程
- 进程状态
1、认识冯诺依曼体系
在计算机的硬件结构中,有着图灵和冯诺依曼俩位举足轻重的人物。对于计算机的发展来说有着十分重要的意义。冯诺依曼结构也是现在大多数计算机的硬件结构。
输入、输出设备都是外设。外设数据传输时比较慢,例如磁盘相较于内存来说速度就比较慢。为了防止木桶效应。计算机为了兼顾这些外设运行速度就不得不说到存储器,这里的存储器就是特指内存。因为CPU计算速度十分快,所以内存可以帮我们对于数据进行预加载。这样CPU进行数据访问时就不需要访问外设,直接在内存中就可以的得到数据。所以在数据层面上一般CPU不会直接和外设沟通,而是直接和内存打交道。与外设进行数据层面沟通一般是内存。
在硬件层面上,单机和跨主机之间数据流向是通过一台冯诺依曼体系结构的输入设备输入进入内存,内存被CPU访问后。通过控制器进行数据输出到内存,再由内存输出到输出设备。中间还有一些其他设备在中间进行传输到另外一台冯诺依曼体系。进行相同方法数据的读取及其访问。
2、操作系统
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等等)
本质就是一款对于软硬件资源管理的软件。
如何理解操作系统对硬件做管理?
在理解上软件、硬件本就是不同概念。所以比较形象理解就是领导对于公司给出决策。策划对于决策执行,员工实现策划给出的方案。实施后数据好坏都会被统计,反馈。但是对于整个方案实施。领导只是给了决策对于方案实施并没有参与,但是通过数据分析后就可以对于公司作出管理。对于满勤员工进行奖金发放,缺勤的员工进行惩罚。并没有直接和员工进行面对面交流沟通。只是通过保安对于每天员工打卡数据的进行一个管理。就可以实现公司管理。每一个员工在公司中的职位、工资,名字……进行一个结构体或者类的定义,这样就方便管理。所以管理就是建模,是对于管理对象数据的管理。
管理本质:先描述,在组织
在操作系统软件中就是通过计算机语言描述,用单链表或者更加高效的数据结构来进行组织管理。
3、进程
程序的一个执行实例,正在执行的程序等。内核观点:担当分配系统资源(CPU时间,内存)的实体。在操作系统中就是PCB,linux中是task_struct。
平时使用应用和运行一个可执行程序就会有得到一个进程。可以在我们电脑的任务管理器中查看自己当前运行的进程。当我们关闭一个应用时是不会影响我们其他应用的。所以进程是独立的。不会相互影响。在linux中也可以使用命令
ps axj
对于当前用户还可以使用命令
top -u 用户名//查看当前运行任务
对于每一个进程操作系统要进行管理,毕竟内存空间是有限的。冯诺依曼体系就决定了进程使用就需要用内存进行数据预加载。将文件的内容加载内存,不同进程管理就需要不同的pcb进行进程管理。对于pcb中会保存进程的基本属性。linux中task_struct属性基本就是
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
如何创建进程
在程序中使用fork函数。函数返回值
子进程返回0;父进程会返回子进程的pid。返回-1就是创建失败。
函数执行数据代码可以是共享的,也可以在不同进程中对数据,因为使用函数后对于产生不同的输出流。对于数据会发生写时拷贝。
会对不同属性进程的优先级作出判断方便进程调度。在linux下可以验证进程独立
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>int main(void) {pid_t ret=fork();if(ret==0){while(1){printf("这是子进程,我的pid:%d,父进程ppid:%d\n",getpid(),getppid());}sleep(1);}else if(ret>0){while(1){printf("这是父进程,我的pid:%d,父进程ppid:%d\n",getpid(),getppid());}sleep(1);}return 0;
}
然后进行对于一个进程使用kill命令
进程的pid每一次运行是不同,根据os的每次调用来进行分配。也可以理解是对于同一所学校报考后。入学会产生一个学号。但是一旦休学后在进入学校学习后有新的学号。可以通过进程的pid来识别不同进程。os对于内存进行管理也会在进程较多时,接近于宕机时对于部分进程进行kill命令来减缓内存压力。
进程状态
首先是阻塞状态,还有挂起状态。
阻塞:进程因为等待某些条件就绪,而导致的一种不推进状态。
对于常见进程阻塞就是在启动多个应用时,造成的系统卡顿。就是多个应用启动时都会使用同一份资源比如说是网卡,对于多个应用同时需要向外界发送信息时。资源就比较紧缺。CPU就会对于进程的先后顺序进行排队使用。等前面使用完资源后,资源再被自己使用。但是当CPU要处理单机的进程时,对于还没有得到资源的进程就会处于挂起状态。挂起后的进程代码和数据被放置在磁盘中的,内存中只有进程的pcb,当CPU再次调度该进程时,数据和代码才会被预加载进入内存。
常见状态
R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))
D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的
进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可
以通过发送 SIGCONT 信号让进程继续运行。
对于上面代码运行后后发现状态不是R状态,而是S状态。这是因为CPU运行速度大于外设运行速度。通过printf函数向显示器打印数据。所以在CPU看来就是大多时候是在进程挂起状态。还有状态后面有一个‘+’。这是用于区分状态在前台运行还是在后台运行的标志。可以使用
kill -19 进程pid//暂停进程
kill -18 进程pid//恢复进程
再次恢复后,'+'消失。但是再次使用Ctrl+c就会发现无法终止进程,只能终止前台运行的进程。需要kill -9命令来终止进程(后台、前台进程都可以终止)。D状态暂时没有遇见过,但是对于系统的危害极大,会造成内存泄漏。可以直接断电终止该状态。但是数据会丢失。还有就是等待它自己恢复。
相关文章:

Linux——进程
进程介绍及其使用 1、认识冯诺依曼体系2、操作系统如何理解操作系统对硬件做管理? 3、进程如何创建进程进程状态 1、认识冯诺依曼体系 在计算机的硬件结构中,有着图灵和冯诺依曼俩位举足轻重的人物。对于计算机的发展来说有着十分重要的意义。冯诺依曼结…...

计及氢能的综合能源优化调度研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

基于Bert的知识库智能问答系统
项目完整地址: 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式,通常用于支持智能问答系统。在一个知识库中,每个句子通常来说…...
libapparmor非默认目录构建和安装
在AppArmor零知识学习五、源码构建(2)中,详细介绍了libapparmor的构建步骤,但那完全使用的是官网给出的默认参数。如果需要将目标文件生成到指定目录而非默认的/usr,则需要进行一些修改,本文就来详述如何进…...

2023-04-14 算法面试中常见的查找表问题
2023-04-14 算法面试中常见的查找表问题 1 Set的使用 LeetCode349号问题:两个数组的交集 给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 [1,2,2,1], nums2 [2,2] 输出: [2] 示例 2:输入: nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:…...

从TOP25榜单,看半导体之变
据SIA报告显示,2022年全球半导体销售额创历史新高达到5740亿美元。尽管2022年下半年,半导体市场出现了周期性的低迷,但其全年的销售额相较2021年增长了3.3%。 近日,市调机构Gartner发布了全球以及中国大陆TOP25名半导体厂商的排名…...
[异常]java常见异常
Java.io.NullPointerException null 空的,不存在的NullPointer 空指针 空指针异常,该异常出现在我们操作某个对象的属性或方法时,如果该对象是null时引发。 String str null; str.length();//空指针异常 上述代码中引用类型变量str的值为…...

gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT
原文:gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT 什么是gpt4all gpt4all是在大量干净数据上训练的一个开源聊天机器人的生态系统。它不用科学上网!甚至可以不联网!本地就能用,像这样↓: 如何使用ÿ…...

AcWing语法基础班 1.1 变量、输入输出、表达式和顺序语句
预备知识 首先先来了解一下最简单的C代码。 本文的所有代码操作均在AcWing的AC Editor中 #include <iostream>using namespace std;int main(){cout << "Hello World" << endl;return 0; }然后使用编译(点击调试,再点击运…...

DC:5靶机通关详解
信息收集 漏洞发现 扫个目录 发现存在footer.php 查看,发现好像没什么用 参考他人wp得知thankyou.php会包含footer.php 可以通过传参来包含别的文件 但是我们不知道参数,这里用fuzz来跑参数 这里用wfuzz的时候报错了 解决方法如下 卸载 sudo apt --purge remove python3-pycu…...

【测试开发篇9】Junit框架
目录 一、认识Junit框架 Junit和Selenium的关系是什么 导入Junit框架common-io包 二、Junit框架的使用 2.1Junit有哪些常用注解 2.1.1Test注解 2.1.2BeforeEach 2.1.3BeforeAll 2.1.4AfterAll 2.1.5AfterEach 2.2Junit的断言 Assertions.assertEquals(期待值&#…...
《Spring MVC》 第五章 实现RESTful
前言 教授大家如何实现RESTful 1、什么是RESTful resource Representational State Transfer 的缩写,就是“表现层资源表述状态转移” 1.1、Resource(资源) web应用的文件,uri定位 1.2、Representation(资源的描…...
Last Week in Milvus
What’s New Core Updates #23353 在 2.3 版本中, milvus 和 knowhere 引擎会移除了 Annoy 索引。Annoy 索引在性能和召回率方面均不如 IVF、HNSW 等索引,维护成本比较高所以经过讨论决定在 2.3 中移出 Annoy 索引的支持,有使用的用户要注意…...

Cursor IDE一个GPT4人工智能自动程序编辑器
让我们来了解一下Cursor IDE是什么。Cursor IDE是一个新型的编程工具,可以通过它生成、编辑以及与人工智能进行交互分析代码。官方网站上的三个单词“Build Software. Fast.”(快速构建软件)以及“Write, edit, and chat about your code wit…...

PPO算法-理论篇
1. Policy Gradient 【李宏毅深度强化学习笔记】1、策略梯度方法(Policy Gradient) 李宏毅深度强化学习-B站 2. PPO PPO 算法 PPO算法更新过程如下: 初始化policy参数 θ 0 \theta^0 θ0在每一步迭代中: 使用 θ k \theta^k …...
【现货】AP6317 同步3A锂电充电芯片 带短温度保护
AP6317是一款面向5V交流适配器的3A锂 离子电池充电器。它是采用800KHz固定频率的同 步降压型转换器,因此具有高达92%以上的充电效 率,自身发热量极小。 包括完整的充电终止电路、自动再充 电和一个精确度达1%的4.2V预设充电电压,内 部集成了防…...

MyBatis详解(2)
8、自定义映射resultMap 8.1、resultMap处理字段和属性的映射关系 若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射 <!--resultMap:设置自定义映射属性:id:表示自定义映射的唯一标识type:查询…...

2023-04-14 使用纯JS实现一个2048小游戏
文章目录 一.实现思路1.2048的逻辑2.移动操作的过程中会有三种情况 二.代码部分:分为初始化部分和移动部分1.初始化部分1.1.生成第一个方块:1.2.生成第二个方块: 2.移动过程部分: 三.实现代码1.HTML部分2.CSS部分3.JS部分3.1.game对象的属性3.2.game对象的start方法3.3.game对象…...

C++入门(3)
C入门 1.auto关键字(C11)1.1. 类型别名的思考1.2. auto简介1.3. auto使用情景1.4. auto的使用细则1.5. auto不能推导的场景 1.auto关键字(C11) 1.1. 类型别名的思考 随着程序越来越复杂,程序中用到的类型也越来越复杂…...

【亲测有效】更新了WIN11之后 右键无 新建WORD,PPT,EXCEL 选项 问题 解决方案
原本正常的正版系统,在昨天4月自动更新安装之后,发现右键找 不到新建文档了,word,ppt,excel都不见了。 看了网上大神的方法 Win11安装了Office右键没有新建Excel选项怎么办? - 知乎 可以解决一部分 官方解决方案,亲…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...