JavaEE初阶——关于进程

 

此篇文章和大家一起分享关于操作系统对进程的调度

目录

1.操作系统

操作系统的构成

2.进程

2.1进程的概念

2.2管理

2.3pcb

(1)pid

(2)内存指针

​编辑

(3)文件描述符

(4)进程调度信息

并行执行

并发执行

pcb中支持进程调度的属性

谢谢您的访问!!期待您的关注!!


1.操作系统

我们知道,在一台计算机中,有内存、硬盘等硬件资源,而我们的操作系统就是软件层面的了

实际上软件就是许多指令的集合,就是一些数据,但是可以让计算机按照对应的规则去执行

而操作系统是一个非常复杂的软件,设计的指令代码量是千万级别的

对于我们常见的操作系统,比如win10,win11,Linus(主要是给程序员使用),macOS(苹果电脑),Android ,IOS,以及其他特定领域的操作系统

不同的操作系统,是不同的厂商给特定的领域提供的,但是实际上核心大同小异

操作系统的初心实际上是为了搞管理 ,就是为了使得一台计算机上的所有硬件资源能够配合好,并给所有软件资源提供良好稳定的运行环境

操作系统的构成

操作系统 = 内核 + 配套的应用程序

首先内核是操作系统中最核心的一部分,我们前面说到的管理,就是在操作系统内核里面完成的,而配套的应用程序往往需要靠操作系统内核提供一些功能作为支撑

假设

System.out.println("hello world");

 我们运行这一段简单的代码,实际上就可以当成应用程序,这里就需要操作显示器,但是显示器是一个硬件资源,并不能直接由程序操作,就需要这个程序告诉操作系统,"我要操作显示器",那么操作系统就会完成对应的功能

而"告诉操作系统"这个方法,是因为操作系统会给程序提供了一系列的API,有的API是操作显示器,有的是操作网卡,有的是响应鼠标键盘的...而上述打印的过程就是程序调用了java内置的标准库方法,这个方法本质就是调用操作系统里面提供"操作显示器"的API.这个系统调用就称为"System call",调用对应API后,就会进入到操作系统内核,内核再通过显示器的驱动程序,在显示器上就能绘制出对应内容

而驱动程序是必不可少的,操作系统需要通过硬件资源对应的驱动程序来操作硬件.硬件是非常多的,同一种硬件,不同的厂商,生产出来的硬件细节都会有所不同,操作系统也不知道具体操作的是哪个硬件,就需要商家通过驱动程序,告诉操作系统这个硬件对应的特点和使用详情


2.进程

前提说明:为了方便理解,此处一个进程里面只包含一个线程,等后续更新线程专题,会有所不同

2.1进程的概念

所谓进程,可以理解成:当一个运行起来应用程序,在操作系统就会有一个对应的进程

进程是操作系统分配给执行程序的一块内存空间,当一个程序被执行的时候,操作系统为它创建进程中就会包括存储程序的代码.数据以及执行状态等.

我们在我们的电脑任务管理器上也可以看到当前电脑上的进程:

这上面就显示了这些进程都占用了哪些系统资源,占用了多少...想要让一个程序运行起来,需要给他分配的系统资源包括但不限于内存,cpu,硬盘,网络带宽...

因此:进程也可以认为是系统进行资源分配的基本单位

2.2管理

进程多了,就要考虑管理.对于管理这件事情,操作系统采取的方法就是"先描述再组织"

所谓先描述,就是通过一些结构体(因为操作系统大部分底层都都是c / c++实现的) / 类把一个进程的核心信息抽象出来,并进行表示;而组织是通过一定的数据结构将这样的多个结构体 / 类的对象进行串起来,方便进行增删改查

2.3pcb

我们在上述管理中谈到的结构体,在操作系统中通常使用被称为pcb这样的结构体来描述进程的,

所谓pcb就是进程控制块(Process control block),但是实际上落到具体的操作系统上名称会有所不同,就比如Linus上的pcb叫做task_struct

而组织就是操作系统会把这样多个pcb用链表结构组织起来(实际上不能简单认为是链表,而是多个链表综合在一起的,这里只是简称).因此,我们通过任务管理器查看进程列表就是在遍历链表的每个节点,并且获取显示出对应的信息,创建新的进程,新的进程会创建出新的pcb,并添加到上述的链表中销毁某个进程,就要把链表上对应的pcb节点删除

在pcb中,我们重点了解以下属性:

(1)pid

就是进程的id / 身份标识

(2)内存指针

程序运行的时候,需要消耗一定的硬件资源,而内存就是一个非常重要的资源.一个程序在运行的时候,,就会将对应的数据 / 指令加载到内存里面

而内存指针就是一组指针,用来告诉操作系统,这个程序要运行的指令以及依赖的数据都存放在内存的哪些地方

具体如下图所示:

(3)文件描述符

一个进程运行的时候,会操作一些文件,而文件操作符就是通过顺序表这样的结构,记录下当前进程都打开了哪些文件 

(4)进程调度信息

我们在任务1管理器中能看到

当前运行了上百个进程 

我们知道现代的cpu是多核心cpu,一个进程在一个cpu核心上运行,但是cpu的核心数量跟进程相比也是远远不足的

这时候,就要通过进程调度来负责了

并行执行

在上面提过,一个进程在一个cou核心上面运行

此时在同一时间,就能有16个进程同时运行(完全是同时),这就是并行执行

并发执行

一个核心虽然在同一时刻只能执行一个进程,但是在不同时刻是可以执行不同进程的

cpu会把总的执行时间,切换成若干个小的片段,每个片段执行一个进程,这样的每个片段称为"时间片",由于时间片比较短,cpu切换进程的速度极快,人感知不到,站在人的角度,就是这若干个进程在同时执行(其实本质上不是同时)

这样,即使是在单核cpu的年代,也可以通过并发来实现同时运行多个程序的效果

注意:并行,是指在微观上也是同时执行

但是并发是指在宏观上是同时执行,但是在微观上面是串行执行

这两者都是在操作系统内核部分管理好了,编写应用程序的时候无法干预,普通用户也无法感知到

因此,往往就把并行和并发统称为"并发",把编写解决并发问题的程序,称为并发编程

pcb中支持进程调度的属性

(1)状态

状态有:就绪状态和阻塞状态

处于就绪状态就是随叫随到,但是处于阻塞状态的进程,无法在cpu上执行,往往一个进程在等待IO操作的时候就会进入阻塞状态(scanner.next等操作)

(2)优先级

进程在竞争 CPU 时间时的相对重要性。不同的进程可以有不同的优先级,进程调度算法会参考进程的优先级来决定下一个执行的进程,在分配资源的时候就存在资源倾斜

(3)上下文

进程在cpu执行过程中,也会产生很多的"中间结果",在进程切换出cpu之前,就需要把这些中间结果(cpu的各种寄存器中的值)保存到pcb的上下文里面(从寄存器到内存)

下次这个进程回到cpu上执行的时候,就需要先把之前的存档恢复回来(内存->寄存器),在其中就有一个pc程序计数器,记录执行到哪一条指令了,下次执行就是沿着上次执行到的地方继续执行

(4)记账信息

操作系统也是要避免某个进程一直吃不到cpu资源,就会进行类似的统计,给吃的cpu少的进程,适当地多分配点


谢谢您的访问!!期待您的关注!!

  • 40
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于JavaEE开发,Eclipse是一个非常流行的集成开发环境(IDE)。它为JavaEE开发者提供了丰富的功能和工具,使他们能够更轻松地构建和管理JavaEE应用程序。 在Eclipse中进行JavaEE开发,您可以使用Eclipse的JavaEE插件(通常称为Eclipse Enterprise Edition for JavaEE),它包含了一系列用于JavaEE开发的工具和模块。这些工具包括Servlet容器、JSP编辑器、EJB开发工具、数据库连接工具等等。 使用Eclipse进行JavaEE开发的步骤如下: 1. 安装Eclipse:您可以从Eclipse官方网站下载适合您操作系统的Eclipse版本,并按照安装指南进行安装。 2. 安装JavaEE插件:在Eclipse中,通过插件安装向导安装JavaEE插件。您可以在Eclipse的市场中搜索并安装适合您版本的JavaEE插件。 3. 创建JavaEE项目:在Eclipse中,可以通过菜单或快捷键创建新的JavaEE项目。选择适当的项目类型(如Dynamic Web Project、EJB Project等),并按照向导进行项目配置。 4. 开发和调试代码:在Eclipse中,您可以使用内置的编辑器编写JavaEE代码,使用调试器进行调试,并利用各种工具和视图来构建和测试您的应用程序。 5. 部署和运行应用程序:完成代码的开发和调试后,您可以将您的JavaEE应用程序部署到适当的服务器上,并启动服务器以运行您的应用程序。 当然,这只是一个简要的介绍。对于JavaEE开发,Eclipse还提供了许多其他功能和工具,如代码自动完成、版本控制、构建工具集成等等。 希望这能帮助到您!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值