Liunx操作-Record12—进程相关的概念与环境变量相关的内容

目录

进程相关的概念

进程与程序的区别

单道和多道程序设计

进程的状态转化

MMU的作用

进程控制块PCB

环境变量

常见环境变量

PATH

SHELL

TERM

LANG

HOME

环境变量的用处


进程相关的概念

进程与程序的区别

要想理解进程的概念,就需要先区分清楚,什么是程序,什么是进程,那什么是程序呢?简单来说,程序就是编译好的可执行二进制文件,这种叫程序;那什么又叫做进程呢?大白话解释,就是将前面的程序运行起来,就叫进程,即运行着的程序,对比来看的话,可以发现,程序是死的,而进程是活的。从程序员角度看,进程就是运行着的一系列程序的过程。从系统角度看,进程就算系统给分配的资源(CPU和内存,正常下载下来的程序是不占用内存的,只是占用磁盘空间,只有当运行的时候,才会占用)的一个基本单位。这也凸显了程序与进程的一个区别:

  • 程序占用磁盘,不占用系统资源
  • 内存占用系统资源
  • 一个程序对应多个进程,一个进程对应一个程序
  • 程序没有生命周期,进程有生命周期

单道和多道程序设计

单道程序(非常早期的)是同时只能运行一个程序,如果运行着一个程序的时候,其他程序就需要等着,需要排队;多道程序(目前常用的)是可以同时运行多个程序,而且,互相不影响,比如,在电脑运行中,可以同时开着浏览器,开着着音乐播放器,登陆着qq进行操作,那是怎么解决的呢?通过时间片的方式来使多个程序同时运行,就是CPU扫描完一个程序,去扫描另一个程序,不断的循环运行每个程序(在不同的进程上进行快速的切换),由于CPU的速度非常快,是纳秒级别的,所以,给使用者的感觉是可以同时运行。

进程的状态转化

进程的状态分为:运行,挂起,就绪,终止四个状态。

MMU的作用

  • 虚拟内存和物理内存的映射(如下图所示,存入的变量表明上是存入"0x001000"所对应的内存空间,但这个编号实际上是MMU虚拟出来的,其对应的真实物理位置是"0x0800",存入的变量实际是存入到了物理对应的编号中,但中间以虚拟的作为桥梁来操作,这就是所谓的虚拟内存是物理的内存的映射)
  • 修改内存访问级别(设置不同用户的权限)

补充:用户空间映射到物理内存是独立的(这样保证安全性,要不然任何一个进程都可以更改另外一个进程的数据;但是,在内核中是不一样的,内核中,是映射到同一块内存中的,并不是独立的,为内核去开的物理内存是一起的)。

进程控制块PCB

进程控制块是task struct结构体,

环境变量

环境在虚拟内存的地址空间的位置是在接近3G那块,可以通过"env"的命令,能查看到所有的环境变量,

如果想具体看某一个环境变量:"echo $常见环境变量名"

比如想查看家目录下的环境变量,可以通过输入"echo $HOME"指令来进行查看,

常见环境变量

PATH

可执行文件的搜索路径。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然而通常我们执行当前目录下的程序a.out却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里面包含了ls命令所在的目录/bin,却不包含a.out所在的目录。PATH环境变量的值可以包括多个目录,用:号隔开。在Shell中用echo命令可以查看这个环境变量的值:

$ echo $PATH

SHELL

显示当前shell,它的值通常是/bin/bash。 

TERM

当前终端类型,在图形界面终端下它的值通常是xterm,终端类型决定了一些程序的输出显示方式,比如图形界面终端可以显示汉字,而字符终端一般不行。

LANG

语言和locale,决定了字符编码以及时间、货币等信息的显示格式。

HOME

当前用户主目录的路径,很多程序需要在目录下保存配置文件,使得每个用户在运行该程序时都有自己的一套配置。

环境变量的用处

比如说你工作的时候在一台机器上写代码,所写的程序需要完成读取配置文件的操作,而一般配置文件都是放在根目录下的etc目录下的,但是,一般对于一个用户路径下的进程,所读的配置文件应该放在用户路径下的etc路径下的(比如,设置大inn的用户名为yangx,那么所创建的路径为:"/home/yangx/etc"),如果放在根目录下的etc目录下,改起来会很不方便,也没必要。

当程序读取的时候执行"open('/home/yangx/etc/hello.conf')",就可以进行调用了,再接着看,一般我们将编写程序的机器称为"开发机",当开发完成后,将成熟的代码移植到产品(称为"生产机")上进行运行,这个时候,就会发现犯愁了,再开发机中,我所去调用的配置文件的时候,所用的是基于开发机的绝对路径,那么,当代码移植到生产机上来的时候,还用之前的绝对路径就会发现对不上号了,因为在开发机中,路径信息都变了。

这个时候,就凸显了环境变量的重要性了,一般是在生产机器的配置文件中,将对应的目录路径不同的地方进行替换和更改,就可以使用了。如下:原来的路径设置为"/home/ithaima/etc",移植之后为:"/home/itcast/etc",那么,通过更改环境变量,将前者的"/home/ithaima"更换为"/home/itcast"就可以了。

这个操作可以通过一个函数来实现:

//获取环境变量
char *getenv(const char *name);   

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值