程序与进程

一:程序与进程概念

程序:程序就是放在硬盘中的文件,是为了实现特定任务的一系列指令的有序集合。
进程:
从用户角度:
进程就是加载到内存上了,是程序的一次动态执行过程。(因为时钟中断、分时系统的技术,cpu可以在没有执行完当前进程的情况下,执行其他进程)。

从操作系统角度:
1.进程是系统分配cpu、内存、时间片等系统资源的基本单位。
2.也是系统分配资源的最小单位。
3.每个进程有自己独立的地址空间和运行状态。

二:PCB

1.什么叫PCB
进程是程序的一次动态执行过程,那么操作系统就需要有对应的数据结构来保存进程的一系列信息,Linux就用结构体来表示。这个结构体就叫做PCB(process control block), 操作系统内有一个PCB链表,用来表示所有进程的相关信息。
2.PCB中应该有什么
进程标识符、上下文、进程状态、优先级、进程入口地址等。

三:程序与进程的区别

1.程序就i是一个文件,所以程序是静态的,而进程是动态的。
2.程序就存在硬盘,而进程是加载到内存中,所以程序生命周期相对永久,进程的生命周期相对短暂。
3.进程有PCB。
4.程序可以对应多个进程,而进程只能对应一个程序。

四:进程的虚拟地址空间

这里写图片描述
1.c语言打出来的地址不是物理地址,一定是虚拟地址。
2. 虚拟地址必须要能转换成物理地址。
3. 每个进程都有一个虚拟地址空间。

虚拟地址空间在Linux内核中也是一个结构体
这里写图片描述

五:进程的状态

经典三态:就绪态、等待态、运行态。之间的转换关系如下图:
这里写图片描述
Linux七态:用户运行态、运行态、可中断睡眠(s)、不可中断睡眠(D)、就绪态、暂停态、僵尸状态。转换关系如下图:
这里写图片描述

查看进程状态:

ps -ef
ps -al

改变进程状态:
killall 进程名 杀死进程
这里写图片描述
test是while(1),永远不会自己退出的进程

kill -l 显示信号信息(1-31为普通信号)

六:进程标识符(PID)

每个进程都有自己独一无二的进程标识符。
0:操作系统内核使用
1:被0号进程创建的一个用户进程
自己创建的进程,进程ID的取值范围为2~pid_max(每台电脑都不同)
在Linux下,下面的命令用来查看最大PID:

cat /proc/sys/kernel/pid_max

这里写图片描述

七:进程优先级

(1)PRI表示进程优先级,值越小越快被执行。
(2)NI就是nice值,表示进程可被执行的优先级的修正数值。
(3)加入nice值后,PRI(new) = PRI(old) + nice
(4)所以调整进程优先级,在Linux下,就是调整进程nice值。
NI 范围 -20 – 19(值越小,优先级越高)

       调整进程优先级:(1)nice -n(优先级)   ./a.out
       (2)程序运行过程中   renice   n  -p  进程ID (renice -p 7565 -5)
                            (3)程序运行过程中   top
                shift >向下翻 
                shift <向上翻
                                                                   r 输入进程ID   输入nice值

八:环境变量

1.本地变量:子程序不能继承
定义:name=张三(不能有空格)
echo $变量名:查看变量

2.环境变量:export name(变量名) 将本地变量导成环境变量,环境变量可以被子程序继承,但是不能被父进程使用。环境变量具有全局特性。

常见环境变量:

PATH:指定命令的搜索路径。
HOME:当前用户的主工作目录。(家目录),人不同,$HOME值不同(等于~)
HISTSIZE:历史记录的命令总数。
SHELL:SHELL是所有外壳程序统称,bash是具体的某一个。用来记录当前bash种类
unset name(变量名) 删除变量

3.env 显示系统所有环境变量
set $name:除了输出环境变量,还有本地变量

猜你喜欢

转载自blog.csdn.net/virgofarm/article/details/80190943