进程
1.概念:
顾名思义,即正在运行中的程序;就是操作系统对运行中的程序的描述信息---PCB(Process Control Block)(进程控制块),在Linux下,PCB是一个具体的结构体——task_struct;
2.进程创建:
通过fork()函数来创建:该函数是通过复制调用父进程的PCB来实现子进程的创建。
通过其返回值来对父子进程进行分流:
在父进程中:返回值>0,返回的是子进程创建成功的pid,-1则表示创建失败
在子进程中:返回值==0。
3.程序地址空间:
物理内存中程序地址空间的分布如下:
但是程序并不是直接被存储在物理内存中的,而是通过页表建立起虚拟地址空间与物理内存之间的映射;
(1)可以提高内存的利用率
(2)保证了进程的独立性
映射规则如下:
将虚拟地址中的虚页号取出,在页表中找对应的物理页号,将其与页内偏移拼接就是最终在物理内存中的物理地址。
每个进程都有自己的虚拟地址空间与对应的页表。
4.僵尸进程:
(1)子进程先于父进程退出
(2)父进程压根不知道子进程已经退出了,因此操作系统不会轻易释放子进程的资源(已经死亡了,还占用着资源)
注意:僵尸进程是无法杀死的,因为没有办法杀死一个已经死了的进程。
kill -9 也不能杀死僵尸进程,(但可以通过杀死其父进程来间接的释放子进程的资源)