【摘要】之前写了一篇详细的关于进程的博客,觉得有些繁琐,于是我今天重新把里面的重要知识点总结在这里,很简短但是很好懂,希望可以对你们有所帮助,上一篇的链接也给你们放在这里吧。https://blog.csdn.net/zb1593496558/article/details/80643381
关于运行状态
- 进程的运行状态有很多种,但是常见的有R运行状态,S睡眠状态,D磁盘休眠状态(不可中断睡眠)T停止状态,暂停的进程可以通过发送SIGCONT信号继续运行。X死亡状态:一个返回状态,不会在任务列表里看到这个状态
关于僵尸进程
- 僵尸进程就是子进程在死亡之后,父进程没有及时的回收子进程的状态信息,导致子进程的PCB一直处于维护状态,占用着资源,有的僵尸进程是一个短暂的僵尸进程,但是有的进程可能一直都是僵尸进程,所以会一直占用资源,因此要避免产生僵尸进程
关于孤儿进程
- 和僵尸进程不同的是,孤儿进程是由于父进程先退出,然后子进程后退出,这个时候子进程的返回状态无法让父进程知道,那么子进程只能将自己的状态托管给1号init进程,由一号进程来进行回收
关于进程优先级
- CPU资源分配的先后书序,就是进程的优先级。优先级高的进程有优先执行权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能。系统可以通过把占用资源少的进程先执行,耗费资源的进程后执行,从而就可以提高性能。还可以让不重要的进程后执行。
关于nice值
- nice值虽然和优先值不一样,但是它的改变会改变进程优先级,并且nice值小的优先级较高,nice值大的优先级较低。
其他的一些概念
- 竞争性:当系统数目众多,而CPU资源只有少量,甚至一个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
- 独立性:多个进程运行时,都是独立的,独享各种资源,互不干扰
- 并行:多个进程在多个CPU下分别,同时进行运行
- 并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进。这其实是时间片的轮转,在我们看来进程好像都在运行,其实同一时间只有一个进程在运行,不过时间很短,我们看不出来。
关于环境变量
- 环境变量是指在操作系统中用来指定操作系统运行环境的一些参数
- 我们需要环境变量来记录运行时的环境状态数据
关于上下文切换
- 所谓上下文,其实就是进程在进行时间片轮转时需要保留的各种数据,包括进程运行状态,环境变量,数据段和文件,文件属性等等。由于进程都是独享资源的,因此每次进行上下文切换时耗费时间很大,而线程会好很多,因为线程中很多资源都是共享的。上下文的保存是为了方便下一次时间片再次轮转到这个进程时可以顺利执行。
关于进程地址空间
- 首先我们所说的地址空间都是虚拟地址空间
- 我们每个人的机器中的虚拟空间都是不一样的,为了保持一致那就统一为4G吧。
- 进程要运行,就需要把可执行文件从磁盘加载到内存中,也就是虚拟地址空间。
- 在每个进程看来,操作系统分配给它们的地址空间都是4G,实际上也是这样的。
- 但是,由于很少有进程能够占用内存超过1G,因此,同一段地址空间中会有多个进程运行也不会互相影响。
- 虚拟地址都是分段的,我们只需要把每个进程之间的地址空间用指针指向就可以互相分割。
- 虚拟地址和物理地址之间是通过页表和MMU维护的,这样做是为了保证数据的安全性。
关于进程调度队列
- 进程调度队列用来解决进程运行时时间片切换问题,这是相对于并发情况而言的。
- 操作系统会根据进程优先级以及启动的先后顺序综合起来将每一个准备好的进程放在调度队列中等待资源分配
- 调度队列本质上是一个数组,里面存放着各种进程的信息。
- 以队列的方式进行资源分配,当上一个进程运行时间结束,那就释放空间并将资源给队列的第一个进程,如此反复。
总结一下:进程的概念都是比较基础的,我们一定要掌握啊,这是学习系统编程的基础。我还写了关于网络编程的其它博客,欢迎阅读啊,最好,如果文章有什么纰漏之处,欢迎各位指正,拜谢。