大连开发区做网站的公司,怎么做网站演示,广告优化师的职业规划,织梦建公司网站目录
一.进程切换
1.进程特性
2.进程切换 1.进程切换的现象
2.如何实现 3.现实例子
2.环境变量
一.基本概念
二.常见环境变量
三.查询常见环境变量的方法
四.和环境变量相关的命令 五.环境变量表的组织方式
六.使用系统调用接口方式查询环境变量
1.getenv 2.反思
…目录
一.进程切换
1.进程特性
2.进程切换 1.进程切换的现象
2.如何实现 3.现实例子
2.环境变量
一.基本概念
二.常见环境变量
三.查询常见环境变量的方法
四.和环境变量相关的命令 五.环境变量表的组织方式
六.使用系统调用接口方式查询环境变量
1.getenv 2.反思
七.通过代码的方式获取环境变量 1.通过命令行参数
2.通过getenv函数
3.通过第三变量environ获取
八.环境变量通常具有全局属性
总结 进程属于Linux操作系统非常重要的一部分建议大家在熟练掌握Linux进程相关概念的基础上再观看本篇博客 一.进程切换
1.进程特性 竞争性: 系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的。为了高 效完成任务更合理竞争相关资源便具有了优先级;独立性: 多进程运行需要独享各种资源多进程运行期间互不干扰;但同时为了保证进程之间的独立性也需要花费大量的资源。并行: 多个进程在多个CPU下分别同时进行运行这称之为并行;并发: 多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进称之为并发. 2.进程切换 1.进程切换的现象 大家在使用电脑时可能会几个软件同时运行。日常使用的电脑大部分都是单核的即同一时间仅执行一个进程。那为什么在电脑上可以同时打开多个软件呢这就跟进程切换有关了。 2.如何实现 (1) 一个CPU里面存在一套硬件寄存器寄存器分为用户可见的寄存器用户不可见的寄存器。 (2) 计算机调度某个进程时CPU 会把这个进程的 PCB 地址加载到某个寄存器也就是说CPU内有寄存器可以只找到进程的PCB地址。 (3) CPU里有一个 eip 寄存器PC指针指向当前执行指令的下一条指令的地址。 (4) 当进程在运行的时候一定会产生非常多的临时数据这些临时数据只属于当前进程虽然CPU内部只有一套寄存器硬件但是寄存器里面保存的数据是属于当前进程的寄存器硬件和寄存器内的数据是两码事。 (5) 进程在调度的时候占有CPU但是却不是一直占有到进程结束进程都有自己的时间片因为时间片的存在进程会出现没有被执行完就被拿下去的情况。 (6) 在进程重新被CPU调度的时候CPU必须知道上一次这个进程运行到哪当进程被换下去的时候进程的运行信息会被存在操作系统里面以便下次CPU重新调度时进程能够正常运行这叫做进程的上下文保护。当进程被CPU重新调度上来时首先要做的第一件事情就是读取操作系统中进程运行的相关数据这叫做进程的上下文恢复。 3.现实例子
有一名同学大一下学期相应国家号召决定去当兵。然后他找到自己的辅导员老师和老师讲了自己的决定然后老师就找到了他的关于他的档案和学期末的考试情况然后打印成了两份一份留到学校另一份然这位同学拿走。等到当兵结束后这位同学拿着自己的档案回到了学校学校通过比对是这两份档案证实这位同学就是这些学校的学生然后这位同学回到校园继续他的大学生活。 这位同学当兵走的时候拿走的档案就是自己的属性等信息。拿走食材为了能够更好的回来。学校就相当于CPU档案就相当于寄存器内的数据。 2.环境变量
一.基本概念 1.环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。如我们在编写C/C代码的时候在链接的时候从来不知道我们所连接的动静态链接库的位置在哪但是招样可以链接成功生成可执行程序原因就是相关环境变量帮助我们的编译器进行查找。 2.环境变量还有其他的特殊用处还有在操作系统中通常具有全局特性。 环境变量的存在是为了满足操作系统在不同应用场景下的需求在操作系统中创建的一部分全局变量。 二.常见环境变量 1.PATH:指定命令搜索路径。 2.HOME:指定用户的主工作目录即用户登录到Linux系统时默认的目录。 3.SHELL:当前的shell,通常/bin/bash。 三.查询常见环境变量的方法 创建一个hello.c
#includestdio.h
int main()
{printf(hello world\n);
} 大家有没有想过为什么我运行自己生成的可执行程序都要使用 ./来说明是在当前路径下查找这个可自行程序但是我们用系统命令如ls,就不用指是当前路径呢 这是因为在系统中有一个名为PATH的环境变量这个环境的作用就是保存命令搜索的路径。我们自己定义的环境变量由于没有PATH里的路径内如果不手动添加路径bash就会因为没有找到这个可执行程序而报错。 但是这种对环境变量修改是一次性的。退出然后再次登录时系统会再次加载环境变量。 四.和环境变量相关的命令 1.echo $变量名查询某个环境变量如:echo $PATH查询PATH环境的内容。 2.env:显示操作系统内所有的环境变量。 2.export设置一个新的环境变量。 4.unset清除环境变量。 5.set:显示本地定义的shell变量和环境变量。 1.显示所有的环境变量env 2.环境变量具有全局性被所有进程所共享如果不想让其他进程看到可以设置本地环境变量 3.如果设置的本地环境变量不想使用了可以用unset清理掉。 4. export某个环境变量可以把这个环境变量导入环境变量集退出重新登录这个环境变量依旧存在。 五.环境变量表的组织方式
环境变量表是以指针数组的形式存储的。 六.使用系统调用接口方式查询环境变量
1.getenv
函数原型: char *getenv(const char *name); name参数是要获取值的环境变量的名称。 该函数包含在#includestdlib.h里。 函数作用 getenv函数的作用是在当前进程的环境变量中查找指定名称的环境变量并返回其值的指针。如果找到了对应的环境变量则返回指向其值的指针如果未找到则返回NULL。 使用实例
#includestdio.h
#includestdlib.h
#includestring.h
int main()
{char*usergetenv(USER);printf(%s\n,user);
} 所以我们还可以根据这个函数做一些权限认证的工作。 #includestdio.h
#includestdlib.h
#includestring.h
int main()
{const char* user getenv(USER);const char* name root;if (strcmp(name, user) 0){printf(hello world);printf(hello world);printf(hello world);printf(hello world);printf(hello world);printf(hello world);printf(hello world);}else{printf(权限不足);}
} 上面这段代码只有用root的身份才能去执行否则就会权限不足。 2.反思 我们都知道root是超级管理员当我们做某些操作没有权限时我们通常会用sudo命令提高一下权限那么sudo的本质是什么呢 学到现在我认为sudo的本质就是让USER内的用户名称变为root用户。只有这样在做认证工作时就会得到通过操作就会的到处执行。 七.通过代码的方式获取环境变量 1.通过命令行参数
请大家先看这篇文章关于main函数参数那点事
所以我们可以通过命令行参数的形式获取环境变量
代码如下
#includestdio.h
#includestdlib.h
int main(int argc,char *argv[],char *env[])
{int i 0;while (env[i] ! nullptr){printf(%d:%s, i, env[i]);}
}
2.通过getenv函数
#includestdio.h
#includestdlib.h
int main()
{ printf(%s,getenv(USER);
}
3.通过第三变量environ获取 首先这个变量是系统给我们准备好的无论我们是否使用这个变量都是存在的。 代码
#include stdio.h
#include stdlib.h
#include string.h
int main()
{extern char **environ;int i 0;while (*(environ i)){printf(%d:%s\n, i, *(environ i));i;}
} 八.环境变量通常具有全局属性 环境变量通常具有全局属性可以被子进程所继承。如果我们想定义一些不会被子进程所继承的变量建议定义本地变量。 来看上面这段命令当前路径下存在一个名为my.out的可执行程序。对其用ls命令。ls作为系统命令是有默认搜索路径的存放在PATH变量中。但是系统为什么知道在那个路径下找my.out这个文件呢
其实在系统中有一个PWD环境变量这个环境变量存放当前所在路径的位置然后在这个路径下查找这个指定的文件。
总结
进程切换
系统中存在很多的进程这些进程都是按照时间片来回切换的只是切换的时间非常短造成了一个进程一直在运行的假象。
环境变量
环境变量是系统用来面对各种情况而建立的一些全局变量我们创建的进程会继承父进程bash的环境变量来完成身份认证路径选择工作。查询环境变量可以通过参数列表、函数getenv、第三方变量environ获得除了系统给我们定义的环境变量外我们也可以定义一些本地变量有必要的话也可以将本地变量export成环境变量。
写在最后
因作者水平有限难免会出现错误阅读过程中请大家指正