Linux 进程介绍

今天给伙伴们分享一下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 接着上次的地方继续执行。

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘嫣慕曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值