在上一篇文章中我把第四十章的学生信息库的一个查询功能改成了带网络的,当然是有些问题的,在大家的评论里呢,也被说了if...else用的太多了,所以呢这次我小改了一下,同时呢把其他功能也实现了一下,当然里面只是简单的实现,里面呢什么保护数据完整性啊,输入数据判断啊这些基本是没有的,如果大家有兴趣看看同时想把它在完善下可以私信回复"带网络的学生信息库"获取。

接下来我们来讲下在linux下怎么来创建一个进程。

在这之前我们先来简单了解下进程:

进程我们一般认为是具有一定功能的关于一个数据集合的一次运行活动,是处于活动状态的计算机程序。

进程在期生存周期内一般会有哪几种状态呢:

1、 运行态:进程占用CPU,正在运行;

2、 就绪态:进程本身具备运行条件,等待CPU;

3、 等待态:等待除CPU之外的其他资源或条件,不能运行。

进程就在这3种状态之间相互转化。

接下来我们来了解下进程识别号、真实用户识别号、真实组识别号、有效用户识别号、有效组识别号:

这个有点复杂,我就举个例子,有个用户A运行程序X产生一个进程P,用户A的识别号为10,组识别号为1,程序X的所有者用户识别号为100,组识别号为2,当前set_user_ID位为1,set_group_ID为0,那么进程P的真实用户识别号为10,有效用户识别号为100,真实组识别号与有效组识别号都为1,有效用户/组识别号常用来判断读/写文件的优先权限。




linux 进程的RES占用不断增大_linux 进程的RES占用不断增大


那么linux中进程怎么调度呢?

linux系统中,进程有两种运行模式:用户模式和系统模式。

用户模式的权限比系统模式下的小很多,对于一般的进程,都是部分时间运行于用户模式,部分时间运行于系统模式。进程通过系统调用在这两种模式之间切换;

当系统调用发生时,进程将由用户模式切换到系统模式继续执行;

当系统调用返回时,进程将由系统模式切换回用户模式。

在linux中,进程不能被抢占,只要能够运行他们就不会被停止。当进程必须等待某个系统事件时,他才决定释放出CPU。进程常因为执行系统调用需要等待。由于处于等待状态的进程还可能占用CPU时间,所以linux采用了预加载调度策略,在此策略中,每个进程只允许运行很短的时间(200ms),当这个时间用完之后,系统将选择另一个进程来运行,原来的进程必须等待一段时间以继续运行,这段时间称为时间片。

可运行进程是一个只等待CPU资源的进程,linux基于优先级的简单调度算法来选择下一个运行进程,当选定新进程后,系统必须将当前进程的状态处理器中的寄存器以及上下文状态保存到task_struct结构中,同时他将重新设置新进程的状态并将系统控制权交给此进程。为了将CPU时间合理的分配给系统中每个可执行进程,调度管理器必须将这些时间信息也保存在task_struct结构中。