今天给伙伴们分享一下Linux 进程介绍,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、进程概念讲解
Linux是一种开源的操作系统,它的核心思想是基于冯诺依曼体系结构。是一款基于Unix操作系统的开源软件,它的核心是由Linus Torvalds在1991年开发的。Linux的出现,让计算机操作系统的世界发生了翻天覆地的变化。它的出现,让计算机操作系统变得更加稳定、安全、高效,并且更加适合服务器和嵌入式设备等领域的应用。在Linux的发展历程中,冯诺依曼体系结构的特点也起到了重要的作用。
二、冯诺依曼体系结构(了解)
-
冯诺依曼体系结构是计算机体系结构的一种,它是由冯·诺依曼在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、进程的生命周期
-
父进程复制自己的地址空间(fork [fɔ:k] 分叉)创建一个新的(子)进程结构。
-
每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。
-
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 接着上次的地方继续执行。
如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。