多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[toc] ## 一 什么是进程 进程:运行中的程序,是计算机中资源分配的最小单位 ## 二 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 ## 三 并发与并行 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务 一 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发 二 并行:同时运行,只有具备多个cpu才能实现并行 ## 四 进程的创建 对于通用系统,需要有系统运行过程中创建或撤销进程的能力,主要分为4中形式创建新的进程 1. 系统初始化 2. 一个进程在运行过程中开启了子进程 3. 用户的交互式请求,而创建一个新进程 4. 一个批处理作业的初始化 无论哪一种,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的: ### 子进程创建在UNIX和windows的区别 1. 相同的是: 进程创建后,父进程和子进程有各自不同的地址空间(**多道技术要求物理层面实现进程之间内存的隔离**),任何一个进程的在其地址空间中的修改都不会影响到另外一个进程。 2. 不同的是: 在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的。 ## 六 进程的终止 1. 正常退出 自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess 2. 出错退出 自愿,python a.py中a.py不存在 3. 严重错误 非自愿,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常,try...except... 4. 被其他进程杀死 非自愿,如kill -9 ## 七 进程的层次结构 无论UNIX还是windows,进程只有一个父进程,不同的是: 1. 在UNIX中所有的进程 都是以init进程为根,组成树形结构。父子进程共同组成一个进程组,这样,当从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员。 2. 在windows中 没有进程层次的概念,所有的进程都是地位相同的,唯一类似于进程层次的暗示,是在创建进程时,父进程得到一个特别的令牌(**称为句柄**),该句柄可以用来控制子进程,但是父进程有权把该句柄传给其他子进程,这样就没有层次了。 ## 八 进程的状态 进程的三种状态 ![](https://images2017.cnblogs.com/blog/827651/201801/827651-20180110201327535-1120359184.png) ## 九 进程并发的实现 中断一个正在运行的进程时,把此时进程运行的所有状态保存下来,然后就切换去执行其他进程,当再次轮到该进程执行时,获取之前保存的状态后继续执行 须保存的信息: 程序计数器、堆栈指针、内存分配状况、所有打开文件的状态、帐号和调度信息,以及其他在进程由运行态转为就绪态或阻塞态时的一些信息,从而保证该进程在再次启动时,就像从未被中断过一样。