Linux下进程的总结(2)

程的优先级

由于每个进程的任务所要消耗的资源量不同。所以要对进程进行分级制度。

为什么要有进程的优先级?

计算机只有一个cpu,采用了分时机制,让每个程序在cpu上运行很短的时间。这个时间非常短,人的感知无法仔细的观察到。切换时间片的时候,有的进程需要紧急处理,有的进程可以放一放。有的程序交互性强,如果不及时作出反应,那么人就会感觉计算机产生卡顿。进程的使用环境各有不同所以要求计算机的优先级使用要不同,优先级决定cou的优先使用权。让重要的进程先跑,显然是合理的。

Linux下的优先级

使用ps -l 命令可以查看各进程的优先级。

在这里插入图片描述

如图可以观察到,UID是这个进程执行者的身份。PID是进程的ID,PPID代表着其父进程的ID。PRI代表着这个程序优先级顺序,它的值越小代表着越要优先执行。NI代表着nice值。

PRI对进程的优先级管理。

在Linux下对优先级更改是通过nice值进行更改。

nice值的正负代表影响着 PRI。其更新公式如下:

PRI(新) = PRI(旧) + nice

调整NI值可以对优先级进行更改。

首先创建一个死循环程序,方便演示。

在这里插入图片描述

扫描二维码关注公众号,回复: 4030106 查看本文章

调整已存在的进程的prn就使用 renice -5 -p -3398
在这里插入图片描述
在这里插入图片描述
如果在开始执行进程钱指定nice值就使用 nice -n -5 ./loop

通过top修改已存在的进程
在这里插入图片描述
进入top后按住r进行修改。

其他进程特性

竞争性: 多个进程抢占一个cpu的资源。抢占内存资源。

独立:一个进程的终止或者崩溃不会对其他的程序造成影响。

多线程:多个进程同时进行,根据时间片的划分进行活动。

并发:多个进程切换调度运行。由于cpu的限制,每个进程只在cpu上运行很小一段时间。总体上多个进程同时前进。

环境变量

什么是环境变量?

环境变量定义了操作系统的相关运行环境和运行功能的变量。就像在使用c语言的#include<stido.h>,不用引入库的地址,依旧可以找到库在哪里。再比如使用java之前必须配置环境变量,不告诉系统java在哪里那么就无法利用java语法进行编译。

Linux下环境变量在哪里查看?

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
extern char ** environ;
int i;

for( i = 0; environ[i] != NULL; i++)
{
printf("env: %s \n",environ[i]);
}
return 0;
}

通过创建外部变量 extern char**verison 可以查看

#include<stdio.h>
#include<unistd.h>

int main( int argc, char *argv[], char *env[])

/* the thrid number is env */

{
 int i = 0;
for(  i = 0; env[i] != NULL; i++)
{
printf("env:[%s] \n",env[i]);
}
return 0;
}

通过使用main函数的参数来查看环境变量。

也可以直接输入shell命令 env查看环境变量。

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
printf("%s\n",getenv("PATH"));
return 0 ;
}

通过getenv(“变量名字”),可以访问特定的变量。

虚拟地址和物理地址

在代码段中的存储数据变量如何访问的呢?

我们知道在C语言有指针,指针指向的地址难道是物理地址吗?不是,是一个虚拟地址。真实的物理地址是不会划分给一个小程序的,毕竟内存是非常紧要的资源。如果不合理分配好,就会造成资源泄露。

插入图片

地址是内存区域的编号。这是一个虚假的地址。指向一个虚拟的地址空间。虚拟地址空间是对内存区域的描述。在linux里 它是一个结构体,

typedef struct 
{
	max size;
	code start;
	code end
	data start
	data end
	stack start
} MM_struct

MM_struct 最大的内存大小叫做MaxSize。
在这里插入图片描述
存在一个页表程序。这个程序记录了虚拟地址和物理地址的关系。并且具有访问控制功能。页表记录了要访问的地址属性。

在这里插入图片描述
fork()函数让一个进程,衍生出一个子进程。子进程复制父进程代码段,但是会开辟新的内存空间。这个内存空间开辟后,会再次创建新的存储空间,当然也会创建新的页表

pcb内部还有一个内存指针 ,它指向一个虚拟内存地址空间 ,叫做MM_struct,描述出虚拟的地址空间。

猜你喜欢

转载自blog.csdn.net/H_Strong/article/details/83067258
今日推荐