Linux 进程介绍

news2024/11/23 15:47:13

今天给伙伴们分享一下Linux 进程介绍,希望看了有所收获。

我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!

如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。

一、进程概念讲解

Linux是一种开源的操作系统,它的核心思想是基于冯诺依曼体系结构。是一款基于Unix操作系统的开源软件,它的核心是由Linus Torvalds在1991年开发的。Linux的出现,让计算机操作系统的世界发生了翻天覆地的变化。它的出现,让计算机操作系统变得更加稳定、安全、高效,并且更加适合服务器和嵌入式设备等领域的应用。在Linux的发展历程中,冯诺依曼体系结构的特点也起到了重要的作用。

img

二、冯诺依曼体系结构(了解)

img

  • 冯诺依曼体系结构是计算机体系结构的一种,它是由冯·诺依曼在1945年提出的。冯诺依曼体系结构的特点是将程序和数据存储在同一个存储器中,并且采用了存储程序的概念。

  • 这种体系结构的优点是程序和数据可以共享同一块存储器,从而减少了存储器的浪费,提高了计算机的效率。此外,冯诺依曼体系结构还采用了指令流水线和缓存等技术,进一步提高了计算机的性能。

  • 在Linux的发展历程中,冯诺依曼体系结构的特点也得到了充分的体现。Linux的内核采用了冯诺依曼体系结构,将程序和数据存储在同一块存储器中,并且采用了存储程序的概念。这种设计使得Linux的内核具有高效、稳定、安全的特点,能够在各种不同的硬件平台上运行。

  • 计算机硬件的体系结构如下:

设备归类具体解释
输入单元键盘、鼠标、网卡等以内存为视角,输入信号的被称为输入设备
输出单元显示器,打印机、网卡等以内存为视角,输出信号的被称为输出设备
存储器内存存储器指的是内存,并不是磁盘等外部设备
运算器和控制器中央处理器(CPU)运算器执行数学运算和逻辑运算,控制器执行指令控制逻辑
  • 输入输出设备都被称为外设。输入设备和输出设备并不是非此即彼的,根据使用情况可归为不同的类。

  • 内存是体系结构的核心。外设只能读写内存,同样CPU只能读写内存,CPU和外设之间不可直接交互

  • 内存分为不同级别的存储单元,如下图所示:

在这里插入图片描述

1、操作系统的定义

  • 系统启动之前是作为文件存储在磁盘中的。只有启动的操作系统才有意义。

2、操作系统的目的

  • 对下:与硬件交互,管理所有的软硬件资源

  • 对上:为用户程序提供一个稳定、高效、安全的执行环境

  • 操作系统的定义:操作系统就是一款针对软硬件资源进行管理工作的软件。

  • 操作系统的核心思想就是管理,是对各种资源进行决策和执行。决策需要各种硬软件资源的信息,执行就需要下属的硬软件执行对应的指令。

3、计算机整体结构

计算机体系结构在宏观上指的是冯诺依曼体系结构。还可以划分的更具体一些:

  • 操作系统之下是一些硬件,如网卡、磁盘等,和硬件对应的驱动程序。
  • 操作系统内置最基本的系统软件:进程管理、内存管理、文件系统、驱动管理。通过这些系统级软件,管理软硬件资源。
  • 操作系统之上就是各种软件和用户级程序。

在这里插入图片描述

三、进程的定义

  • 肤浅的来说,加载到内存中的程序就叫做进程
  • 进程在形成之初,操作系统就会为其创建进程控制块 PCB。进程控制块PCB用于描述进程,其中存储着进程的所有属性。
  • 启动程序的本质,就是在内存上创建进程。

3、进程/线程/程序的区别

进程: 是程序运行的过程, 生命周期及运行状态,是已启动的可执行程序的运行实例。

  • 进程有以下组成部分:

    • 已分配内存的地址空间,程序被加载到内存中,系统自动为其创建PCB,以管理该进程。;

    • 安全属性包括所有权,凭据和特权;

    • 程序代码的一个或多个执行线程;

    • 进程状态

**线程:**进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程。

程序: 程序本质就是文件,是编译生成的二进制可执行文件(程序即二进制文件),静态实体 /bin/date,/usr/sbin/sshd

在这里插入图片描述

  • 操作系统在处理进程时, 不是直接操作程序而是读写PCB,因为PCB中含有程序的所有属性。也就是说,进程管理与进程对应的程序毫无关系,只与进程的PCB强相关
  • Linux 系统中,进程控制块PCB 就是一个名为task_struct的结构体

4、进程的属性

  • 进程ID(PID):是唯一的数值,用来区分进程

  • 父进程的ID(PPID)

  • 启动进程的用户ID(UID)和所归属的组(GID)

  • 进程状态:状态分为运行R(running)、休眠S(sleep)、僵尸Z(zombie)

  • 进程执行的优先级

  • 进程所连接的终端名

  • 进程资源占用:占用资源大小(内存、CPU占用量,时间)

5、进程的生命周期

图片

  1. 父进程复制自己的地址空间(fork [fɔ:k] 分叉)创建一个新的(子)进程结构。

  2. 每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。

  3. PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

    • centos5或6PID为1的进程是:init

    • centos7 PID为1的进程是: systemd

    • centso8 PID为1的进程是: systemd

**僵尸进程:**一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

父进程退出了, 子进程没有退出, 那么这些子进程就没有父进程来管理,就变成僵尸进程。

6、PCB 的内部构成

  • 进程编号 —— 每个进程都有编号或称标识符,也就是 PID,具有唯一性用来区别于其他进程。

  • 进程状态 —— 包括进程退出时的退出码、退出信号、任务状态等。

    • 进程结束时的返回值就是返回给系统的退出码,最后被父进程获取。比如 ls 命令结束时的返回状态码 0;`。任务状态描述进程的运行状态,比如有等待状态,死亡状态,阻塞状态,挂起状态等。

    • $ echo $? # 获取最近一次执行命令的退出码
      
  • 优先级 —— 进程很多而 CPU 只有几个,不可能同时运行多个进程,优先级决定了进程的运行先后顺序。

  • 程序计数器 —— 或称 pc 指针,保存程序中即将被执行的指令的地址。

  • 内存指针 —— 指向程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针。

  • I/O状态 —— 包含显式的IO请求,分配给进程的IO设备,被进程使用的文件列表。

  • 审计信息 —— CPU 中有调度模块,负责均衡地调度在运行的进程,使之能较为公平的获得CPU资源得以被执行。而调度模块需要的参考信息就是存在 PCB 中的审计信息。

  • 上下文数据 —— 包含进程对应程序的执行状况等信息的数据。

7、CPU上下文数据

在这里插入图片描述

如图所示,CPU需要在不同的进程之间来回调度,以保证每个进程相对公平地获取资源。

  • 保存上下文:进程之间的来回切换,必须确保在进程被切换后,其的临时数据被更新并存储在它对应的 PCB 中,以便之后再接着上次继续执行。
  • 恢复上下文:这些临时数据就叫做上下文数据,都被存储在寄存器中,当进程被执行时,其 PCB 中的上下文数据就交给了 CPU,以便 CPU 接着上次的地方继续执行。

在这里插入图片描述

如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。

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

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

相关文章

HBase原理和操作

目录 一、HBase在Zookeeper中的存储元数据信息集群状态信息 二、HBase的操作Web Console命令行操作 三、HBase中数据的保存过程 一、HBase在Zookeeper中的存储 元数据信息 HBase的元数据信息是HBase集群运行所必需的关键数据,它存储在Zookeeper的"/hbase&quo…

C++学习笔记----3、设计专业的C++程序(六)---- 重用既有代码(选择库重用指导一)

当你决定使用库、框架、同事的代码、整个应用或者你自己的代码的时候,要记住选择正确的代码重用的几个指导原则。 1、理解功能与限制 要花时间去熟悉代码。理解其功能与限制还是很重要的。开始阅读文档与公开接口或API。理想情况下,有这些去理解怎么使用…

chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题

Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe,仍显示版本不匹配: 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配,则再输入: w…

使用 Python 绘制词云图的详细教程

如何使用python绘制词云图 词云图(Word Cloud)是数据可视化中常用的一种技术,通过将文字以不同的大小、颜色和方向排列,以展示文本数据中词汇的频次和重要性。对于文本分析、情感分析、关键词提取等应用,词云图都能够…

软件设计师教程(第5版)第3章 数据结构(更新中)

【数据结构】是指数据元素的集合及元素间的相互关系和构造方法。P99 元素之间的相互关系是数据的【逻辑结构】。P99 数据元素及元素之间关系的存储称为【存储结构】(或【物理结构】)。P99 数据结构按照【逻辑关系】的不同分为【线性结构】和【非线性结构】两大类。P99 【非…

计算机组成原理(4):指令系统/控制器

1 指令格式 【补充知识】 计算机语言的层级关系:机器语言 - 汇编语言 - 高级语言; ​ 机器语言用二进制来编写,用来反映硬件的语言。但是二进制编写太难了,就诞生了汇编语言,对其编程进行封装、简化; ​ …

C++ | Leetcode C++题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int ans 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;ans cur;}return ans;} };

8.Java基础概念-方法

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 什么是方法 方法是程序…

QT 与 C++实现基于[ TCP ]的聊天室界面

TCP客户端 Widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket> //客户端类 #include <QMessageBox> #include <QListWidgetItem> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …

基于YOLO V8的PCB缺陷检测识别系统(python源码+Pyqt5界面+数据集+训练代码)

数据集准备&#xff1a;收集并标注PCB缺陷的图像。模型训练&#xff1a;使用YOLO v8框架训练一个模型来识别这些缺陷。GUI开发&#xff1a;利用PyQt5创建一个用户友好的图形界面。模型部署&#xff1a;在GUI中集成训练好的模型&#xff0c;使用户能够上传PCB图像并得到缺陷检测…

数据结构-树(二叉树)-第三天

结合leetcode学习c 学习资料来源 定义 二叉树&#xff08;binary tree&#xff09;是一种非线性数据结构&#xff0c;代表“祖先”与“后代”之间的派生关系&#xff0c;体现了“一分为二”的分治逻辑。 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含…

[数据集][目标检测]停车场空位检测数据集VOC+YOLO格式7959张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7959 标注数量(xml文件个数)&#xff1a;7959 标注数量(txt文件个数)&#xff1a;7959 标注…

p9 镜像的基本命令

docker的常用命令 帮助命令 查看docker的版本 docker version2. 查看当前安装的docker的详细的信息 docker的系统信息包括镜像和容器的数量 docker info3. 查询帮助命令 image是你想要获取哪一个命令的帮助文档,一般百度或者人工智能就行所有命令的可选项都可以用这个–hel…

DN专业3D图形制作软件win/mac软件安装下载(附下载链接)

目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统&#xff1a; Mac系统&#xff1a; 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …

.NET内网实战:通过DNS查找出网主机

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 03编码实现 在红队活动中&…

Modbus 数据帧解析

Modbus 是一种通信协议&#xff0c;广泛应用于工业自动化系统中&#xff0c;用于连接电子设备。它是一种基于主从结构的通信协议&#xff0c;其中主设备可以与多个从设备通信。数据通过一系列的帧进行传输&#xff0c;每一帧包含多个字段&#xff0c;每个字段都有特定的功能。 …

SQL进阶技巧:最近有效的缺失值填充问题【last_value实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 场景:现在有一张商品入库表,包括商品id、商品成本和入库日期3个字段,由于某些原因,导致部分商品的成本缺失(为0或者没有值都是缺失),这样不利于我们计算成本。所以现在要把缺失的商品进价补充完整,补充的…

OpenCTI:开源网络威胁情报平台

OpenCTI 是一个开源平台&#xff0c;旨在帮助组织管理其网络威胁情报 (CTI) 数据和可观察数据。 该平台由 Filigran 开发&#xff0c;使用基于 STIX2 标准的知识模式构建数据。 它采用现代 Web 应用程序架构&#xff0c;配备 GraphQL API 和用户友好的前端。 OpenCTI 与 MIS…

MySQL在Windows和Ubuntu上的安装与远程连接配置

MySQL是一个广泛使用的开源关系数据库管理系统&#xff0c;适用于各种操作系统。本文将详细介绍如何在Windows和Ubuntu系统上安装MySQL&#xff0c;并配置远程连接。 1. 在Windows上安装MySQL 1.1 下载MySQL安装包 首先&#xff0c;访问MySQL官方网站&#xff08;https://de…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑模块冗余和系统状态的多...电系统可靠性的蒙特卡洛分析》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…