Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。
0. 进程概念
在初学阶段,我们对进程这个词仅在书上看见过,大多不太理解这个究竟是什么意思?
回顾我们之前所讲,如何去管理一件事物:先描述再组织.同样的 操作系统想要对进程进行管理也是要先去描述这个进程再去组织才能完成管理.
所以要管理进程,描述并组织这两步必不可少.
1. 描述进程
我们打开windows下的任务管理器.可以发现有很多的任务.
这些任务我们可以粗略的把他认为是一个个进程.例如:我现在运行了edge,typora …等进程
根据之前所介绍的冯诺依曼体系结构来看,他们都是被加载到了内存当中,我们才可以使用.
所以我们先简单的对进程进行一个定义:一个加载到内存中的程序,叫做进程
那么如何描述他呢?
通过一个叫 PCB (process control block)的结构体来描述.在Linux中其名为Task_Struct(文末附有源码)
操作系统的工作流程是这样的:(省略了部分细节,之后详谈)
先将磁盘中的可执行程序移动到内存中,再为其分配一个PCB用指针指向该可执行程序,这一整块内容,我们统称为进程;
所以现在进程是由什么组成的也就是怎么描述进程的概念有了:进程=PCB+用户数据(代码段以及可执行程序等)
我们在Linux中看看是不是这样的呢?
打开我们的服务器,创建一份名为process.cpp的C++文件.
#include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { while(1) { printf("i am a process\n"); sleep(1); } }
将其用gcc进行编译
gcc -o proce process.cpp
之后将其运行,此时屏幕上会出书 i am a process的字样表示程序成功启动
现在我们用如下命令可以查看其进程属性
`ps -ajx | head -1 && ps -ajx | grep proce`
可以看到其具有几个属性:
PPID: 父进程进程号
PID: 当前进程进程号
STAT: 当前进程状态
我们可以进入/proc这个目录来查看当前系统中运行的进程.
这是我服务器上所运行的进程号
我们可以看到刚刚我们创建的进程号为1846149的进程在这里也有属于自己的文件夹.
我们进去看看有什么属性?
当前情况下,我们只需要了解
-
exe存储的是我们可执行程序的路径.也可以理解为一个指针指向对应的路径
-
cwd是当前工作目录.在很多时候我们在一个程序中直接写文件名,系统在处理的时候会自动将cwd拼接在文件名前,这样就在当前路径中完成了自己想要的操作.
2. 组织进程
现在我们已经完成了描述进程这一工作:任何程序在加入到内存前,形成真正的进程时,操作系统需要先创建描述其属性的结构体对象
那Linux具体是如何组织进程的呢?最基本的方式为采用双向链表进行组织文章来源:https://www.toymoban.com/news/detail-730172.html
文章来源地址https://www.toymoban.com/news/detail-730172.html
到了这里,关于【LInux】进程概念II -- 描述进程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!