Java 进程调度

进程是操作系统管理应用程序的基本单位,是程序的一次执行过程。操作系统通过进程控制块(PCB)来描述和控制进程,包括进程状态、优先级、上下文等信息。进程调度确保CPU资源的有效利用,而虚拟地址空间则提供了内存的隔离,保证每个进程只能访问自己的内存,增加了系统的稳定性。此外,进程间通信允许不同进程协同工作。操作系统通过内存管理单元(MMU)确保进程不会越界访问,防止对其他进程造成影响。
摘要由CSDN通过智能技术生成

    要了解进程的概念,需要知道什么是操作系统。操作系统是一组做计算机资源管理的软件。主要有两个基本的功能:对下,要管理各种硬件设备;对上,要给各种软件提供稳定的运行环境。操作系统需要管理很多的东西,比如内存管理,文件管理,设备管理,进程管理等。那么,什么是进程?

进程

    每一个应用程序都是运行于现代操作系统之上的,操作系统提供了一种抽象,叫做进程。进程是操作系统对一个正在运行的程序的一种抽象,换句话来说,可以把进程看作成勋的一次运行过程,可以在任务管理器中查看。

    上述图片显示了部分进程。比如照片,是一个能跑起来的模板,运行的过程被加载在内存中。同时,要和.exe的可执行文件区分开。

    像这些可执行文件,是静态的,躺在硬盘上的文件。 一个可执行文件,是“静态”的,当我们双击运行的时候,操作系统就会把这些可执行文件的关键信息 加载到内存中,开始运行里面的代码,这个时候,这个可执行文件,就变成了一个进程。所以,一个计算机硬盘上可能躺着很多可执行文件,同一时刻,可能只有一部分在运行(变成了进程)。

    为了安排这么多的进程,操作系统对这些进程进行管理,称为进程管理。进程管理是操作系统内核的功能,使用C语言实现。

    进程管理需要先对这个进程描述,使用一个结构体或者类,把这个东西有什么特征,表示出来。表示出来后再组织,使用一个数据结构,把很多个这样的对象/结构体给整理到一起。为了描述控制进程的运行,系统中存放进程的管理和控制的数据结构称为进程控制块(PCB)。

    进程控制块是用来描述进程的当前状态,本身特性的数据结构,是进程中组成的最关键部分。一般包括:程序ID、内存指针、文件描述符表等。

    操作系统把一些必要的数据加载到内存中,这些必要数据有些事运行的指令(代码),有些是运行时依赖的数据(全局变量)。内存指针描述了该进程中哪些部分是指令,哪些部分是数据。

    文件描述符表表示当前进程都打开了哪些文件,每一次打开一个文件,都会在进程的文件描述符表给这个文件分配一个表项,使用顺序表实现,每一个元素代表一个打开的文件,对应数组下标是文件描述符。

    进程是操作系统中“资源分配”的基本单位。进程中还有一些比较关键的属性,用来实现进程的调度。

进程的调度

    为什么需要进程的调度呢,是为了充分利用CPU,实现计算机低速IO与高速处理的互补。

    进程的调度包括进程的优先级、进程的状态、进程的记账信息和进程的上下文。

    进程的优先级就是在告诉操作系统在安排时间表的时候,先安排谁,后安排谁。

    进程的状态有很多,比较典型的,第一个,就绪状态,整个进程是准备就绪的,可以随时上CPU执行。第二个,阻塞状态,进程在等待某个任务完成后,才能上CPU,完成之前是没法继续执行的。

    进程的记账信息就是在告诉操作系统,在安排时间表的时候,需要考虑一些历史的记录,操作系统在安排进程的时候,会记录每一个进程以往在CPU上执行的时间,如果发现某一个进程安排太少,就会适当调整策略。在CPU上的执行时间不一定是以时间为单位,也可能是以执行的指令数为单位。

    进程的上下文,对于进程来说,具体的就是CPU里面一堆寄存器里面的值。上下文在进程被切出CPU的时候,把寄存器的状态保存在PCB里面。下次该进程回到CPU上,就会把PCB上下文读取出来,恢复到寄存器中。进程在调度的时候,可能执行了某个操作,执行了一半,就被调度走了,过一段时间,进程回来的时候,从上次执行的位置继续往下执行。相当于游戏中的存档和读档。

进程的虚拟地址空间

    进程需要使用一些系统的资源,比如内存资源。

    我们期望每一个进程都只用自己的内存,不要互相干扰。在C语言中有一个操作叫指针的解引用,解引用的时候需要保证这个指针里面包含的地址,都是合法的内存地址,这个过程需要程序员自己来保证,但是也不排除指针指歪的情况。如果出现这个情况,很容易就直接把别的进程给搞挂了,让整个操作系统都不稳定。所以,操作系统引入了“虚拟地址空间”,让每一个进程都只能访问自己的地址空间,相互之间不会有影响。如果指针指错,操作系统也会及时发现,不会影响其他的进程。

    进程操作指针指向内存的时候需要经过MMU映射,当p成了野指针的时候,MMU就会知道挡墙访问的是一个有问题的地址,就会向操作系统报错,操作系统就会让进程终止运行。

    因为有虚拟地址空间,进程就有一个特性:隔离性。一个进程的运行一般不会影响另一个进程。每一个进程都有一个虚拟地址空间,但是它们大多数时候不会在同一时间执行。就算在同一时间执行了,但是这些进程不是同时把所有的虚拟地址空间的内存给用上。也就是说,实际上,使用的内存只有一小部分。有的时候,确实是好几个进程同时吃很多的真是内存,要么需要进行优化,要么换更大的内存。

   进程引进了隔离性,让系统更稳定,但是多个进程之间进行配合,就麻烦了。所以操作系统又引入了“进程间通信”,在隔离的前提下,开了个口子,让多个进程能够相互通信。在进程和进程之间搞一个公共资源,多个进程之间通过公共资源来进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值