Linux-进程概念

1. 进程基本概念

        书面概念:程序的一个执行实例,正在执行的程序等

        内核概念:担当分配系统资源(CPU时间,内存)的实体。

2. 描述和组织进程-PCB

        PCB(process contral block),进程信息被放在一个叫进程信息控制块的数据结构里面,在Linux下,PCB是:task_strut

        每一个进程都会对应生成一个task_struc,操作系统通过这个结构体来管理进程。

        这些task_struc会以链表的形式存在内核中,操作系统通过增删查改这个链表来管理这些进程。

3. task_struc包含内容

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息

3.1 标识符

        进程用PID(process id)来标识,可以通过三种方式来查看:

1. /proc 目录

ls /proc

所有进程都会放在这个目录下,还可以通过

ls -al /proc/(pid)

获得进程的详细信息

这里cwd就是表示可执行程序的当前工作目录

2. ps

ps axj

显示所有的进程

ps -axj | head -1 && ps -axj | grep myproc | grep -v grep

 查询单个进程

3. top

3.2 进程状态

进程状态(STAT)在系统层面可以大致分成以下几种:

  • 新建:进程刚刚创建出来,代码和数据还没有加载到内存中
  • 运行:进程被放到了,CPU的运行队列中
  • 阻塞:等待非CPU资源就为,例如位于磁盘读取等待队列
  • 挂起:在内存资源不足时,OS通过适当的置换进程的代码和数据到磁盘(swap)来缓解内存不足

在Linux下,task_struc的进程状态可以分为下面几种:

  • R(runing)
  • S(sleeping)
  • D(disk sleep)
  • T(stopped)
  • t (tarcing stop)
  • X(dead)
  • Z (zombie)

R运行状态:对应运行态

S睡眠状态:对应阻塞态,可中断睡眠

D磁盘休眠状态:进程不可以被中断,需要等待io完成,磁盘返回信息,结束休眠状态,不可中断睡眠

T停止状态:通过信号来暂停进程,例如(kill -19 pid),也可以通过信号来结束停止状态例如(kill -18 pid)

t调试状态:和暂停状态一样,是由调试暂停引起的进程暂停

X死亡状态:这个状态只是一个返回状态,你不会在任务列表里看到这个状态

Z僵尸状态:当子进程退出,并且父进程没有读取到子进程退出的返回代码时,就会产生僵死(尸)进程

这个状态下,子进程的PCB会被保留下来

还有一种叫孤儿进程:父进程先退出,子进程就称之为“孤儿进程”,孤儿进程会被1号init进程领养,结束时再被init进程回收

注意:

R+表示程序运行,在前台

./myproc&

就可以让程序在后台运行,状态就是R

3.3 优先级

cpu资源分配的先后顺序,就是指进程的优先权(priority)

查看进程优先级:

ps -l

这里PRI就是priority的简写,NI是nice的简写

PRI值越小,优先级越高,越早被执行

nice值,表示进程可被执行的优先级的修正数值,可以通过修改nice来改变PRI

PRI(new)= PRI(old)+ NI

PRI(old)表示进程创建时的默认优先级。

NI值的取值范围【-20,19】

修改进程优先级:

top -> 'r' ->输入进程的PID -> 输入nice值

3.4 内存指针

struct mm_struct *mm;

task_struct里面有一个指针指向mm_struct这样的一个结构体

在mm_struct中包含对应内存中的地址空间的begin和end,描述进程所需内存的区域划分。

3.5 上下文数据

为了更好的理解这里,先提出进程并发的概念

一个CPU在一个时刻只能执行一个进程,但是CPU是一个一个处理进程的吗?

其实不是,每的进程在CPU上只跑一小会,不论进程完成的程度怎么样,都要退下来,让下一个进程继续执行。一小会假定是10ms,那么在一秒钟CPU就可以跑100个进程。在短时间内,我们可以认为,CPU在同时执行这些进程,这些进程也在同步进行。

对于一个进程而言,这次CPU执行到这里,下次CPU来了要继续从这里执行下去。所以就需要保存程序执行时产生的数据和代码执行到的对应位置。CPU下次通过寄存器直接获取这些数据,就可以继续下去。

这些数据就叫上下文数据,由task_struct来保存。

这样子做到了,CPU在不同进程间的切换

4. 其他概念

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为 并发

关于进程的更多内容敬请关注Linux-地址空间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【讲解下如何Stable Diffusion本地部署】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

20240324-2-频繁模式FrequentPattern

频繁模式(frequent pattern) 频繁模式一般是指频繁地出现在数据集中的模式。这种频繁模式和关联规则是数据挖掘中想要挖掘的知识。我们都知道一个很有趣的故事,就是啤酒和尿布的故事, 在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关…

SCP 从Linux快速下载文件到Windows本地

需求:通过mobaxterm将大文件拖动到windows本地速度太慢。 环境:本地是Windows,安装了Git。 操作:进入文件夹内,鼠标右键,点击Git Bash here,然后输入命令即可。这样的话,其实自己本…

java农家乐旅游管理系统springboot+vue

实现了一个完整的农家乐系统,其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区订票模块、景点分类模块、会员等级模块、会员模块、交流论坛模块、度假村信息模块、配置文件模块、在线客服模块、关于…

基于深度学习的番茄成熟度检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:在本博客中,我们深入探讨了基于YOLOv8/v7/v6/v5的番茄成熟度检测系统。核心技术基于YOLOv8,同时融合了YOLOv7、YOLOv6、YOLOv5的算法,对比了它们在性能指标上的差异。本文详细介绍了国内外在此领域的研究现状、数据集的处理方…

9.图像中值腐蚀膨胀滤波的实现

1 简介 在第七章介绍了基于三种卷积前的图像填充方式,并生成了3X3的图像卷积模板,第八章运用这种卷积模板进行了均值滤波的FPGA实现与MATLAB实现,验证了卷积模板生成的正确性和均值滤波算法的MATLAB算法实现。   由于均值滤波、中值滤波、腐…

Flask Python:如何获取不同请求方式的参数

目录 前言 1. 获取GET请求中的查询参数 2. 获取POST请求中的表单数据 3. 获取JSON数据 总结 前言 在使用Flask开发Web应用时,我们经常需要获取不同请求方式的参数。Flask提供了多种方式来获取不同请求方式的参数,包括GET请求中的查询参数、POST请求…

Spring Boot Mockito (二)

Spring Boot Mockito (二) 基于第一篇Spring Boot Mockito (一) 这篇文章主要是讲解Spring boot 与 Mockito 集成持久层接口层单元测试。 1. 引入数据库 h2及其依赖包 <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId…

JavaScript基础代码练习之冒泡排序

一、要求对一个数组进行冒泡排序&#xff0c;并将排序后的结果输出到控制台。在代码中&#xff0c;数组 arr 包含了一组数字&#xff0c;然后使用嵌套的循环来进行冒泡排序。 二、编写代码 <!DOCTYPE html> <html lang"en"><head><meta chars…

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…

《QT实用小工具·九》设备按钮控件

1、概述 源码放在文章末尾 该项目实现了设备按钮控件&#xff0c;主要包含如下功能&#xff1a; 可设置按钮样式 圆形、警察、气泡、气泡2、消息、消息2。可设置按钮颜色 布防、撤防、报警、旁路、故障。可设置报警切换及对应报警切换的颜色。可设置显示的防区号。可设置是否…

实验报告答案

基本任务&#xff08;必做&#xff09; 先用普通用户&#xff08;自己的姓名拼音&#xff09;登录再操作 编程有代码截图和执行过程结果截图 代写获取&#xff1a; https://laowangall.oss-cn-beijing.aliyuncs.com/studentall.pdf 1. Linux的Shell编程 &#xff08;1&am…

实操:Dropzone.js实现文件上传

&#x1f3e0;官网 点我前往 &#x1f953;依赖 <script src"https://unpkg.com/dropzone5/dist/min/dropzone.min.js"></script> <link rel"stylesheet" href"https://unpkg.com/dropzone5/dist/min/dropzone.min.css" type&…

unity工程输出的log在哪里?

在编辑器里进行活动输出的log位置&#xff1a; C:\Users\username\AppData\Local\Unity\Editor\Editor.log ------------------------------------ 已经打包完成&#xff0c;形成的exe运行后的log位置&#xff1a; C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目

【Qt】事件

目录 一、介绍 二、进入离开事件 三、鼠标事件 3.1 鼠标单击事件 3.2 鼠标释放事件 3.3 鼠标双击事件 3.4 鼠标移动事件 3.5 滚轮事件 四、按键事件 4.1 单个按键 4.2 组合按键 五、定时器 5.1 QTimerEvent类 5.2 QTimer类 5.3 获取系统日期及时间 六、事件分…

【游戏逆向】逆向基础----CE使用和基础

windows逆向中&#xff0c;CE扮演着不可或缺的角色。 其根本原因是&#xff0c;上手简单,功能强大&#xff0c;提供多方位的突破口。 点击小电脑图标&#xff0c; 选择我们想要调试的程序&#xff0c; 就可以附加调试了。 很多的游戏保护驱动以及反调试手段&#xff0c;都针对…

澳门媒体发稿套餐9个增长技巧解析-华媒舍

澳门作为一个国际知名的旅游胜地&#xff0c;拥有丰富的媒体资源。利用澳门媒体发稿&#xff0c;既可以提升品牌知名度&#xff0c;又可以吸引更多的目标受众。下面是9个利用澳门媒体发稿套餐的增长技巧&#xff0c;帮助你充分发挥媒体的作用&#xff0c;实现品牌的增长。 1. 制…

机器学习的模型校准

背景知识 之前一直没了解过模型校准是什么东西&#xff0c;最近上班业务需要看了一下&#xff1a; 模型校准是指对分类模型进行修正以提高其概率预测的准确性。在分类模型中&#xff0c;预测结果通常以类别标签形式呈现&#xff08;例如&#xff0c;0或1&#xff09;&#xf…

注意力机制篇 | YOLOv8改进之添加LSKAttention大核卷积注意力机制 | 即插即用,实现有效涨点

前言:Hello大家好,我是小哥谈。LSKAttention是一种注意力机制,它在自然语言处理领域中被广泛应用。LSKAttention是基于Transformer模型中的Self-Attention机制进行改进的一种变体。在传统的Self-Attention中,每个输入序列中的元素都会与其他元素进行交互,以获取全局的上下…

Linux 命令 top 详解

1 top命令介绍 Linux系统中&#xff0c;Top命令主要用于实时运行系统的监控&#xff0c;包括Linux内核管理的进程或者线程的资源占用情况。这个命令对所有正在运行的进程和系统负荷提供不断更新的概览信息&#xff0c;包括系统负载、CPU利用分布情况、内存使用、每个进程的内容…