今天开一个进程的话题.这个话题其实很早就想讲了,但是一直没开,主要是因为进程是一个知识体系,而不是单一的知识点,涉及的知识太多了,很难通过单一的方式讲解到位.所以这个话题我会分几篇文章来讲,这是第一篇文章,写到哪里算哪里吧.
认识操作系统
要想把进程搞明白,首先要对操作系统有一个基本上认识.因为线程最后一定是要被操作系统管理起来的,但操作系统就是个更大的话题了,所以我在这里讲的只是很少的一部分,用来和后面进程部分的知识形成体系.
1. 什么是操作系统?为什么要有操作系统?
从面向对象的角度理解,操作系统是软硬件资源的管理者.
如果从面向过程的角度理解的话,操作系统是一个基本程序的集合.人类并不擅长和硬件打交道,对于现存的人类来说,很少有人能直接和主板,电源,CPU,内存,这样的硬件打交道.但是我想现在应该没人能否认互联网时代对于个人的重要性.所以就有了操作系统,操作系统相当于是计算机硬件和人类个体之间的一种媒介,对下把硬件资源做好管理工作,对上为人类提供一个便于使用的交互逻辑.从而使拥抱互联网的成本大大降低.
2.怎么理解管理?
我在前面提到了很多次"管理".但管理是个很抽象的内容.那管理总得有管理的方法和表现形式吧.
操作系统本身是一个庞然大物,需要管理的东西太多太多了.举个例子,如果我们使用的是Windows系统,那我我们电脑里会存在一个叫做文件资源管理器的软件,打开之后我们就可以通过ui界面的方式来对我们电脑上存在的文件或是目录进行读写.那么既然要管理,就一定会存在管理者(操作系统),被管理者(资源)和管理方法(数据结构).
1.那么我们想要对一种资源进行管理,我们首先需要能够辨别这种资源.具体在操作系统的实现中就表现为类型,这就是我们辨别对象是否属于被管理者的一把尺子,这是管理的基础.
2. 在已经可以描述被管理资源的前提下,我们还需要把这些资源给组织起来,就像我们不管是电话簿,还是QQ或者微信都会存在好友列表,这样才方便我们使用,对于操作系统来说这里的列表就是数据结构,对于不同的管理项目使用合适的数据结构,这样才能保证管理的高效.有了上面两点我们可以提炼一下管理的哲学,先描述再组织,描述就是管理中的世界观,组织就是方法论.
什么是进程?
终于要来到进程的学习了,但前面的部分非常重要,希望各位可以认真看完,从标题就能看出来,什么是进程,其实就是操作系统对进程进行描述的一个过程.
进程其实完全可以从字面意思理解,就是一个进行中的程序.但我们前面也说了,对于操作系统来说,我们需要一个类型来描述进程.在操作系统的内核中用来描述进程的类型为PCB
.而对于Linux来说,这个类型是task_struct
.
总结一下,从用户层面的角度理解进程就是一个进行中的程序,而在内核层面的理解中进程被描述为PCB,其中Linux特化的PCB叫做task_struct.
进程中有什么?
有了前面的铺垫,进程中有什么这个问题我们可以转化为PCB中有什么,task_struct里面有什么.
- 标识符(PID):用来把进程和其他进程做区分,是描述本进程的唯一标志.
- 状态:描述进程的任务状态,退出状态,退出信号等.
- 优先级:描述本进程区别于其他进程调度的优先级.
- 程序计数器:程序下一条指令的地址.
- 内存指针:包括程序代码和相关数据的指针,以及和其他进程共享内存块的指针.
- 上下文数据:因为进程调度过程中会出现本进程没有执行完毕就要切换其他进程调度的情况,所以我们需要对执行的位置进行记录.这体现了进程动态调度的特性.
- IO状态信息:进程运行过程中会对外设进行读写操作,IO状态信息用来表示读写请求和执行状态.
- …
组织进程
进程在Linux操作系统内核中都以task_struct链表的形式储存.
这次就先写到这里了,后面的内容展开太多了就计划留到下一篇了.