『 Linux 』进程概念

文章目录

    • 🗞️ 冯诺依曼体系结构 🗞️
      • 📃 为什么在计算机当中需要使用内存充当中间介质而不使CUP与外设直接进行交互?
      • 📃 CPU如何读取数据
    • 🗞️ 操作系统(Operating system) 🗞️
      • 📃 操作系统如何对资源进行管理
    • 🗞️ 进程 🗞️
      • 📃 进程是如何被管理的?
      • 📃 如何观察进程?
      • 📃 以文件目录的形式观察进程
      • 📃 进程标识符
      • 📃 父进程

🗞️ 冯诺依曼体系结构 🗞️

在这里插入图片描述

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

存储器:

在当前的计算机组成当中,存储方式分为内存存储与硬盘存储等;

与之不同的是硬盘为非易失性存储器(断电不易失),内存为易失性存储器(断电易失);

输入设备:

在生活当中, 键盘,摄像头,话筒,磁盘(读取文件),网卡等都为输入设备;

输出设备:

显示器,音响,磁盘(写入文件)网卡等都为输出设备;

CPU(中央处理器):

  • 运算器

    算逻运算 - 算术运算(±运算等)与逻辑运算(if,else)

  • 控制器

    CUP是可以相应外部事件的(协调外部就绪事件,例如将数据拷贝至内存当中)


📃 为什么在计算机当中需要使用内存充当中间介质而不使CUP与外设直接进行交互?

在各个存储介质当中,不同类型的存储介质的读取速度也不同

响应速度分别为:

CPU&&寄存器 > 内存 > 磁盘/SSD > 光盘 > 磁带

在最早的计算机当中是不存在内存的;

在这里插入图片描述

也就是外设与CUP之间直接进行交互;

但是实际上在计算机当中,最影响计算机整体速度的并不是计算机中最快的,而是最慢的;

若是使外设直接与CPU直接进行交互将会导致外设的速度大大拖慢CPU的速度导致计算机整体效率变慢;

而若是在计算机当中添加存储器后,可以使得外设中的数据通过操作系统率先load(加载)至存储器中,而又由于存储器与CPU的读写速度相差跨度并不是特别大,所以当数据加载至存储器当中CPU可以直接访问存储器从而加快计算机整体的速度;


📃 CPU如何读取数据

以当前大环境而言,CPU一般读取数据(数据,代码)都是从内存之中进行读取;所以若是以数据的角度进行观察:CPU不和外设直接进行交互;

当CPU需要处理数据时会首先将外设中的数据加载到内存当中(外设只与内存进行交互);

以这种方式可以进行一种分类

  • input

    将数据从外设(输入设备)加载至内存中;

  • output

    将数据从内存加载至外设(输出设备)当中;

当数据需要处理时数据首先会加载至内存,通过CPU读取内存数据并作出相应处理;

当数据处理完毕之后并不会直接从CPU转至外设(输出设备),会先将处理后的数据存放回内存并让外设(输出设备)进行显示;


🗞️ 操作系统(Operating system) 🗞️

在这里插入图片描述

操作系统可以看作一个用来对软硬件资源进行管理的软件;

硬件

硬件是整个计算机之中最基本的,任何操作系统都是基于硬件之上;

而在一个机器当中的所有硬件都是按照冯诺依曼体系结构进行存放,不存在杂乱无章;

驱动程序

而紧接着在硬件之上就是驱动程序,驱动程序也是系统软件部分的一部分,它的主要功能就是对硬件进行操作;

主要提供软件级别的对硬件操作的接口;

操作系统的主要工作分为两个方面:

  • 对上提供良好的使用环境;
  • 对下通过管理软硬件资源使计算机保持更高的稳定性;

📃 操作系统如何对资源进行管理

操作系统对资源进行管理时主要按先描述后组织的概念进行管理;

操作系统在整体中处于一个管理者的位置,而这里的先描述后组织的意思即为:

管理者将所有的被管理者以特定的结构进行描述,由于被管理者类型的不同,所以整体的结构也跟着不同;

由于大部分常见的操作系统都是由C/C++开发,所以可以将这个所谓的结构看成是一个结构体(被管理者可以看成类似实例化);

struct A{/*属性*/
};

而管理者正式通过这些对象的属性,根据需要的条件对资源进行操作和管理;


🗞️ 进程 🗞️

由于操作系统需要对软硬件资源都进行管理,当然这里的资源也包括进程;

从之前的知识点中可以总结出一条结论:当一个程序被运行时,必须将该程序先加载到内存当中,这是因为由于冯诺依曼体系结构规定CPU访问数据时或者要对数据进行对应操作时首先必需从内存中访问;

当然这句话说的并不全面,对于"当一个程序被运行时,必须将改程序先加载到内存当中",事实是如此,但这仅仅只是以硬件的角度进行观察,真正意义上来说,当一个程序被运行之后,将不能叫做程序,应该叫做"进程的一部分";

以Windows11为例,当我Ctrl+Alt+del并选择任务管理器时可以观察到许多进程;

在这里插入图片描述

根据用户的需要,用户可以通过这个任务管理器去结束相应的进程;

本质上操作系统并不具备直接管理程序的能力,但是操作系统中存在着一个进程管理;

当一个程序被运行起来之后,它将被加载进内存成为进程的一部分,而操作系统通过进程管理可以完成对这个进程的资源管理;

在Linux中也是如此,每当运行一个程序或者执行一条命令时都是将程序/命令加载进内存使其成为进程从而对该资源进行对应的管理;


📃 进程是如何被管理的?

在Linux中,可以同时运行多个程序或者同时执行多条命令的,当然这也意味着在Linux是可能同时存在大量的进程;

那么当Linux同时存在大量的进程时,操作系统该如何对进程这个资源进行管理;

其实很简单,在上文中我们提到的一个概念为 “先描述,后组织”;

操作系统对进程的管理也是如此;

在进程种有一种数据结构叫做PCB(Process Control Block),也可以称之为进程控制块,可以理解为进程属性的集合;

而在Linux下描述进程信息的PCB为task_struct,是以结构体的形式进行实现的;

当一个程序加载进内存成为进程时,操作系统将自动为这个进程创建一个PCB结构体对象,实现对这些进程的描述;相应的这个结构体内存着对应进程的所有属性,而操作系统将用某种数据结构将这些结构体对象链接在一起,从而使得能够通过不同的属性对进程进行对应的资源管理;

这就可以理解了为什么说"当程序被加载进内存的时候就成为了进程的一部分",因为只有加载进内存的程序(代码与数据) + 该进程所对应的PCB结构体这个整体才能称为是一个进程;

在这里插入图片描述

在PCB种包含的结构体化的数据属性中包含了:

  • 标识符

    描述本进程的标识符;

  • 状态

    任务状态,退出代码等;

  • 优先级

    程序相对于其他进程的优先级;

  • 程序计数器

    程序中即将被执行的下一条指令的地址;

  • 内存指针

    程序对应的代码以及数据的位置信息;

  • 上下文数据

    进程执行时处理器的寄存器中的数据;

  • I/O状态

  • 记账信息

    可能包括处理器时间总和等各种信息;

  • 其他


📃 如何观察进程?

在上文中我们提到了进程有关的概念,那么在Linux中该如何观察进程?

  • 在Linux一般可以使用ps来观察进程;

在这里插入图片描述

但是ps只能观察当前窗口(终端)的进程;

若是想要观察所有的进程的话需要使用指令ps axj,当然也可以配合管道|grep来查到对应所需要的进程;

在这里插入图片描述

那么该如何更直观的观察到进程?

假设有一个.cpp文件,代码为:

#include<iostream>using namespace std;
int main()
{while(1) cout<<"进程1"<<endl;
}

并执行这段程序;

此时就已经是执行了一个进程,当然可以使用ps命令的方式观察这个进程;

使用ps axj | head -1 && ps axj | grep myproc查询该进程:

在这里插入图片描述

该进程就已经跑了起来;

此时在终端使用ctrl+C结束该进程并再次查询该进程时发现该进程不存在;

在这里插入图片描述


  • 在Linux中除了用ps命令以外还可以使用top命令;

top命令在Linux中可以看作是Windows下的任务管理器;


📃 以文件目录的形式观察进程

  • 除了可以以上面的方式观察进程以外还可以以目录文件的形式观察进程;

以上面的方式我们再次运行那个程序,将进程跑起来;

  1. 先使用ps的方式查看进程的对应信息;

    在这里插入图片描述

    将会看到PID与PPID;

    我们首先观察23460的这个进程(下面的进程为使用grep时的进程,在本次中可以不进行观察);

  2. 再使用ls查看目录/proc;

    在这里插入图片描述

    可以发现/proc目录下的文件就是一些进程;

  3. 再使用ll并使用grep来找当前目录下的PID23460的这个进程(此时进程还在运行当中);

    在这里插入图片描述

    当我们手动使用Ctrl+C将程序结束时再使用该指令查找该进程时将发现该进程已经不存在;

    在这里插入图片描述

但这并不说明进程在Linux中是以目录的形式存在,实际上/proc是Linux中的一个文件系统,而这个文件系统是一个伪文件系统,通过该文件系统可以访问进程的属性信息而已;

使用ll观察23460这个目录下的文件可以发现,在该目录下存在着两个文件;

在这里插入图片描述

这两个文件分别以cwdexe开头;

  • exe 后所跟的路径为,当前进程所对应程序所在的路径;

  • cwd 后所跟的路径为,当前进程的工作目录;

    当一个程序运行时,每个进程都将会有一个属性来保存当前自身所在的工作路径;


📃 进程标识符

在上面提到了关键字PID,而实际上PID即为进程的标识符;

每个进程所对应的PCB都将会存储这个进程标识符;

进程标识符是每个进程中独有的属性;

当然每个进程在每次运行时其PID都将不同;

在程序中也可以使用getpid()函数来进行对当前进程PID的获取;

在这里插入图片描述

其中pid_t为操作系统中的一个数据类型,是一个无符号整型;

#include<iostream>
#include<sys/types.h>using namespace std;
int main()
{while(1) cout<<"进程1 "<<"PID : "<<getpid()<<endl;
}

在这里插入图片描述

从这里可以看到这里所获取的PID与之前观察到的PID都不同,可以验证在上面所说的"每个进程在每次运行时其PID都将不同";

  • 除了以Ctrl+C的形式结束进程以外也可以使用kill -9 'PID'的形式结束进程;

    在这里插入图片描述


📃 父进程

除了进程以外还有父进程,也可以在程序中使用getppid()函数来获取该进程的父进程的PID;

在这里插入图片描述

而实际上PPID即为bash(Bash 是一种命令行解释器和 shell 程序);

Shell通过创建子进程的方式来完成对应的任务;

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

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

相关文章

使用JavaScript编写游戏平台数据爬虫程序

目录 一、引言 二、准备工作 三、爬取数据 四、数据处理与存储 五、数据分析与利用 六、结论与展望 一、引言 随着网络技术的发展&#xff0c;数据已经成为企业、研究机构和个人的重要资源。数据可以帮助我们了解市场趋势、用户需求&#xff0c;甚至可以用于机器学习和人…

100+ Windows运行命令大全,装B高手必备

操作电脑关闭、重启、注销、休眠的命令细则: 用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f] [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]] 没有参数 显示帮助。这与键入 /? 是一样的。…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)

员工分页查询和账号启用禁用功能 1. 员工分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 封装PageResult1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.4 代码完善 2. 启用禁用员工账号…

【科研绘图】MacOS上的LaTeX公式插入工具——LaTeXiT

在Mac上经常用OmniGraffle绘图&#xff0c;但是有个致命缺点是没办法插入LaTeX公式&#xff0c;很头疼。之前有尝试用Pages文稿插入公式&#xff0c;但是调字体和颜色很麻烦。并且&#xff0c;PPT中的公式插入感觉也不太好看。 偶然机会了解到了LaTeXiT这个工具&#xff0c;可…

thinkphp6 起步

1、安装 composer create-project topthink/think6.0 tp62、使用多应用模式&#xff0c;你需要安装多应用模式扩展think-multi-app composer require topthink/think-multi-app3、config/app.php中&#xff0c;将 ‘auto_multi_app’ > flase, 改为true&#xff1b; 需要自…

QRadioButton、QCheckBox样式表

QRadioButton、QCheckBox样式表 实现效果Chapter1 QRadioButton样式表详细描述示例效果源码样式表 Chapter2 QRadioButton样式表 实现效果 QRadioButton{spacing: 2px;color: white; } QRadioButton::indicator {width: 60px;height: 35px; } QRadioButton::indicator:unchecke…

赛宁网安入选国家工业信息安全漏洞库(CICSVD)2023年度技术组成员单

近日&#xff0c;由国家工业信息安全发展研究中心、工业信息安全产业发展联盟主办的“2023工业信息安全大会”在北京成功举行。 会上&#xff0c;国家工业信息安全发展研究中心对为国家工业信息安全漏洞库&#xff08;CICSVD&#xff09;提供技术支持的单位授牌表彰。北京赛宁…

Spring -Spring之依赖注入源码解析(下)--实践(流程图)

IOC依赖注入流程图 注入的顺序及优先级&#xff1a;type-->Qualifier-->Primary-->PriOriry-->name

python3GUI--PyQt5打包心得(二)nuitka、inno Setup(详细图文演示、附所有软件)

文章目录 一&#xff0e;前言二&#xff0e;准备1.nuitka1.1介绍1.3项目地址1.3安装 2.mingw641.1介绍1.2下载安装 3.Inno Setup1.1介绍1.2安装 三&#xff0e;nuitka打包1.打包2.装mingw643.装ccahe4.打包完成 四&#xff0e;测试效果五&#xff0e;inno Setup制作安装软件1.配…

计算机是如何进行工作的+进程和线程

一)计算机是如何工作的? 指令是如何执行的?CPU基本工作过程&#xff1f; 假设上面有一些指令表&#xff0c;假设CPU上面有两个寄存器A的编号是00&#xff0c;B的编号是01 1)第一个指令0010 1010&#xff0c;这个指令的意思就是说把1010地址上面的数据给他读取到A寄存器里面 2…

6.4翻转二叉树(LC226—送分题,前序遍历)

算法&#xff1a; 第一想法是用昨天的层序遍历&#xff0c;把每一层level用切片反转。但是这样时间复杂度很高。 其实只要在遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。 这道题目使用前序遍历和后序遍历都可以&#xff0c;唯独中序遍历不方便&#x…

ChatGPT、GPT-4 Turbo接口调用

接口地址 https://chat.xutongbao.top/api/light/chat/createChatCompletion 请求方式 post 请求参数 model可选值&#xff1a; “gpt-3.5-turbo-1106”、 “gpt-3.5-turbo-16k” 、 “gpt-4”、“gpt-4-1106-preview”。 默认值为&#xff1a; “gpt-3.5-turbo-1106” to…

编码规范集合

文章目录 前言命名规范项目命名目录命名文件命名命名严谨性 HTML 书写规范结构、样式、行为分离缩进文件编码语义化IE 兼容模式viewport为移动端设备优化&#xff0c;设置可见区域的宽度和初始缩放比例iOS 图标favicon&#xff08;网站图标&#xff0c;移动端默认可用于添加到桌…

Wincc flexible SMART v4 报警蜂鸣器的基本使用方法示例

Wincc flexible SMART v4 报警蜂鸣器的基本使用方法示例 WinCC flexible SMART V4 SP1 软件针对SMART LINE V4 面板新增了触发蜂鸣器报警功能,但要注意该功能仅支持固件版本为 4.0.1.0 及以上的设备。 可通过配置以下两个系统函数来触发蜂鸣器: 举例说明: 组态离散量报警,在…

快块手多功能全自动引流软件-引流工具-引流脚本-自动引流技术功能介绍

脚本功能&#xff1a; 功能1_养号功能 功能2_评论区关注 功能3_评论区私信 功能4_评论区用户作品评论 功能5_评论区点赞 功能6_粉丝回关 功能7_自己粉丝私信 功能8_已关私信 功能9_好友私信 功能10_关键词搜索关注 功能11_关键词搜索私信 功能12_搜索ID关注 功能13_搜索ID私信…

Unity 跑酷游戏全部脚本(完结)

脚本1 触发器脚本 这个脚本是主角身上的脚本&#xff0c;用于检测是否碰到其他触发器&#xff0c;并做出对应的行为 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColliidisonTrigger : MonoBehaviour { //触发检测 …

【开源分享】国内可用的免费安卓GPT语音助手 - 可音量键唤起,可联网

写在前面&#xff1a;这是一个我写的开源GPT语音助手&#xff0c;不收钱&#xff0c;只求Star! 简要介绍 这是一个基于ChatGPT的安卓端语音助手&#xff0c;允许用户通过手机音量键从任意界面唤起并直接进行语音交流&#xff0c;用最快捷的方式询问并获取回复 使用效果 一、基…

【码银送书第十期】《强化学习:原理与Python实战》

目录 1.什么是人工智能对齐 2.为什么要研究人工智能对齐 3.人工智能对齐的常见方法 1.什么是人工智能对齐 人工智能对齐&#xff08;AI Alignment&#xff09;指让人工智能的行为符合人的意图和价值观。 人工智能系统可能会出现“不对齐”&#xff08;misalign&#xff09;的…

Opencv for unity 下载

GitHub - EnoxSoftware/VideoPlayerWithOpenCVForUnityExample: This example shows how to convert VideoPlayer texture to OpenCV Mat using AsyncGPUReadback. OpenCV for Unity | Integration | Unity Asset Store

WPF ToggleButton 主题切换动画按钮

WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果&#xff0c;大致思路是文章这样&#xff0c;感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…