课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
进程与线程技术的学习和应用是每一位Java程序员都应该熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,Java进程概念与实现方法分享。
什么是进程
从应用程序、资源管理和代码实现这三个角度分别来探讨
应用程序
从前面实现的极简shell的过程来看,进程像极了操作系统制作的一个盒子。这个盒子能装下一个应用程序的指令和数据,而应用程序只能在这个盒子里做一些简单的工作,盒子之外的工作就需要请示操作系统介入,并代替应用去完成相应的工作。
这种盒子操作系统可以制作很多,不同应用各自使用自己的盒子,也可以让操作系统内部使用多个盒子装入同一个应用。
应用程序由源代码编译而成,没有运行之前它是一个文件,直到它被装入内存中运行、操作数据执行相应的计算,完成相应的输入输出。从这个层面来看,进程不仅仅类似一个盒子或者容器,更像是一个具有独立功能的程序,是关于某个数据集合的一次运行活动。也就是说,运行状态的进程是动态的,是一个活动的实体。
理论上,操作系统能制造无数个叫作进程的盒子,装入无数道应用程序运行。然而理想是美好的,现实是骨干的,制造进程需要消耗系统资源,比如内存。下面我们就从资源角度继续看看进程是什么。
资源管理
在计算机中,CPU、内存、网络、各种输入、输出设备甚至文件数据都可以看成是资源,操作系统就是这些资源的管理者。
应用程序要想使用这些“资本”,就要向操作系统申请。比方说,应用程序占用了多少内存,使用了多少网络链接和通信端口,打开多少文件等,这些使用的资源通通要记录在案。记录在哪里比较合适呢?当然是代表一个应用程序的活动实体——进程之中为稳妥。
由此,我们推导出一个运行中的应用程序包含了它分配到的内存,通常包括虚拟内存的一个区域。
在这个区域里放的内容有:
可运行代码
保存该应用程序运行时中途产生的数据,比如输入、输出、调用栈、堆等
分配给该应用程序的文件描述表、数据源和数据终端
安全特性,即操作系统允许该应用程序进行的操作,比如应用程序拥有者、应用程序的权限集合
一个进程记录了一个应用运行过程中需要用到的所有资源,那操作系统到底是通过什么样的机制来实现这一点呢?
代码实现角度
在计算机的世界中,不管实现何种功能或者逻辑,先都要把功能或者逻辑进行数理化,变成一组特定意义的数据,然后把这组数据结构化、实例化,这是实现功能和逻辑的手段和方法。
回到进程的主题上,如果让你实现进程这一功能,你该怎么做呢?
先会想到,进程包含了什么。刚刚资源管理角度分析过,进程包含进程id(用于标识)、进程状态、地址空间(用于装载应用程序的代码和数据),还有堆和栈、CPU上下文(用于记录进程的执行过程)、文件描述表(用于记录进程使用了哪些资源,记住资源也可以抽象为文件)、权限、安全等信息。
现在,需要把这些信息汇总,变成一个数据结构中的各种字段,或者子数据结构。这个数据结构和许多子数据结构组合在一起,就可以代表一个进程了。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音达内三江区域学习了解。