[Linux] Linux如何管理进程

标题:[Linux] Linux如何管理进程

@水墨不写bug



目录

一、如何理解管理

二、如何进行管理(先描述,后管理)

三、进程的概念


正文开始:

在《Linux操作系统入门详解》中,我们了解到了操作系统的定位和基本概念:

操作系统是一款进行软硬件管理的软件,操作系统通过管理好软硬件资源来为用户提供一个稳定,高效,安全的执行环境。

但是,操作系统是如何管理的呢?接下来我们需要对"管理"这个概念进行深入的理解。

一、如何理解管理

对于管理的,我们可以从身边的管理体系进行理解:

我们身边最典型的例子:

管理者(决策者)------校长;

执行者------辅导员

被管理者 ------ 学生

校长是如何管理学生的呢?我们在平时并没有见到校长,但是校长如何进行管理呢?

其实,校长并不需要直接对学生进行面对面管理,因为这是没有必要的。校长仅仅需要对学生的数据(学分,绩点,活动,科研等数据)进行管理即可。校长想要获得这些数据,就需要通过辅导员进行收集数据。

对应到操作系统管理软硬件资源,操作系统的位置相当于校长,驱动程序的位置相当于辅导员,软硬件资源的位置相当于学生:

管理者(决策者) ------校长 ------操作系统

执行者 ------辅导员 ------驱动程序

被管理者 ------ 学生 ------软硬件资源

操作系统想要管理好软硬件资源,就需要首先从驱动程序那里获得软硬件资源的数据,然后根据这些数据,来对底层进行管理。


总结:

管理者 管理 被管理者,并不需要直接见面,管理者只要获取被管理者的数据即可实现管理操作。

二、如何进行管理(先描述,后管理)

对于校长而言,如果数据量较小,校长还可以接受,但是一旦数据量庞大起来,校长就需要一种更高效的管理方法了。

校长可以通过编程,来首先创建一个描述学生对象的结构体,接下来通过一个顺序表来存储这些学生对象的数据,这样一来,有很多好处:

1.高效管理,我们可以通过设置多个接口函数来对这个顺序表进行管理,比如修改(Modefy)、增加(insert)、删除(erase)。

2.建模简化,通过顺序表将对学生对象的管理转化为对顺序表的管理:这样一来,我们成功的将对学生的管理工作转化为了对链表的增删差改。

校长本来需要对着一张张成绩表看,在使用了高效管理的方法之后,校长只需要调用几个函数,就可以知道绩点最高的是谁,最活跃的是谁,综合成绩最高的是谁等等。


我们对上面的这一个方法总结成一个抽象的解决问题的过程:

先描述对象

当我们遇到一个问题,首先 需要通过自定义类型**描述问题的对象信息(比如:校长管理学生需要的信息:绩点等),**这些信息一定是管理需要的关键信息,需要根据具体管理的需要来描述。这一个过程可以通过创建一个结构体对象来存储对象的信息。

再组织对象

其实描述就是提取对象的关键信息。在获得了关键信息之后,为了方便管理,我们需要对这些数据进行组织,不同的组织方式的管理特点也不同:

比如:

通过顺序表组织,快速查找修改高效,尾插尾删高效,头插头删效率低;

通过链表的组织,在两端的插入删除高效,但是查找的效率低;

通过二叉搜索树组织,查找非常高效。

其实,C++的STL就是为我们提供了一套组织数据的方式,我们在需要管理数据的时候,只需要描述对象的关键信息,然后可以直接使用STL的数据组织方式。甚至我们如果对STL的组织方式不满,我们可以自己实现自己的数据组织方式。

三、进程的概念

其实,上面这一套解决问题的方法正是操作系统管理数据的方式。在操作系统中,管理任何对象,最终都可以转化为对某种数据结构的增删差改。

在书本上,当我们查看进程的概念时,一定会看到这样的解释:

一个正在执行的程序是进程。

这样的解释是含糊不清的,其实在管理进程的时候,操作系统也会创建一个描述进程的对象,这个对象含有管理进程的关键信息(这些管理信息比如:进程编号,进程的状态,优先级等)。在Linux中,这个描述进程(PCB)的结构称为:

task struct;
task_struct-是PCB的一种:

在Linux中描述进程的结构体叫做task_struct。

task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

当我们运行一个程序的时候,操作系统做了两件事,首先是在内存中创建PCB并根据提取程序得到的关键信息初始化PCB;其次是将程序的代码和数据加载到内存中:PCB+程序的代码和数据 统称 进程。


假设现在我们的磁盘中有一个程序:mytest

当我们 ./mytest 运行程序之后,操作系统首先会在内存 中创建一个PCB,并且同从mytest中提取的关键数据初始化PCB:

同时,操作系统会将mytest的源代码和数据加载到内存中:

我们把程序的PBC(mytest的重要信息)和加载到内存中的数据和源代码 这个整体称为 "进程"。而平时我们称"运行的程序"就是进程这样的解释并没有成功解释清楚加载到内存的这一过程。


回到我们最初的标题:操作系统如何管理进程?

在实际操作系统中,进程不止存在一个,操作系统就是通过创建多个PBC并将相应的数据和代码加载到内存中来维护进程的。

假如进程之间的组织方式是双链表,那么操作系统对进程的管理就转化为了对双链表的增删查改!这就是操作系统管理进程的方式的大致方式。


完~

未经作者同意禁止转载

相关推荐
消失的旧时光-19431 分钟前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑9 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源12 分钟前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
Trouvaille ~34 分钟前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏42 分钟前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南1 小时前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
旖旎夜光1 小时前
Linux(13)(中)
linux·网络
威迪斯特2 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.2 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔2 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu