【JavaEE】操作系统与进程

作者主页:************paper jie_博客****************

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文录入于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将MySQL基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《MySQL》《C语言》《javaSE》《数据结构》等

内容分享:本期将是JavaEE的开头曲,会从操作系统与进程,CPU之间的关系拉开序幕~

目录

操作系统

操作系统在计算机系统中处在的位置

进程

什么是进程

操作系统对进程的管理

进程与CPU的关系

[进程控制快 PCB](#进程控制快 PCB)

PCB重要的属性

PCB支持进程调度的属性

内存与进程的关系

进程间通信


操作系统

操作系统它是一组管理计算机资源的软件的统称.本质上它就是软件,它负责管理硬件资源和为程序提供稳定的运行环境.一般都是由C/C++代码编写的.一般我们常见的操作系统有: Windows,Unix,Linux,IOS,Android,鸿蒙等等.

操作系统在计算机系统中处在的位置

操作系统在计算机中处在中间位置,向下管理硬件,向上为软件即应用程序提供资源.

操作系统有两个最基本的功能:

防止硬件被应用程序滥用

将底层的硬件封装起来,向程序提供统一的API让程序可以简单一致的使用硬件资源

进程

什么是进程

进程就是操作系统对应用程序的抽象. 系统上的硬件资源,好像只要程序在运行,就会被调用. 这种情况就是通过抽象了进程这么一个概念来完成的. 现在我们使用的都是多进程/多任务系统.

进程是操作系统对一个在运行的程序的抽象,我们可以将在运行的程序看做为就是一个进程.

且进程是操作系统分配资源的基本单位.

操作系统对进程的管理

操作系统一般对于进程采用的是先描述,再组织的方式.

描述:

操作系统一般都是拿C/C++写的,一般会用一个机构体将进程的实体属性描述出来.而这个描述进程的结构体就叫做PCB,这是所有操作系统对进程结构体的统称.

组织:

在描述好后,操作系统会用一个类似于双向列表的数据结构将进程组织起来.像任务管理器中的信息就是对这个链表进行遍历,将其中所有进程的信息打印出来.而要是有一个新的进程,它就会构造出一个新的PCB,将这个PCB新增在链表中. 但如果哪个程序退出了,就要将对应进程的PCB删除,且释放其使用的资源.

进程与CPU的关系

这里关于硬件资源与进程,我们可以通过PCB感知到内存,硬盘等资源,但一个进程消耗CPU的资源?这我们从PCB中是体现不出来的.

这里我们先从单核处理器讲起:

我们可以将单核CPU看成一个舞台,进程看成演员.同一时刻舞台上只能有一个演员表演.这时规定. 那但是这有好多个进程,也就是演员在等待,狼多肉少,这该怎么办呢? 这里,就引入了分时复用,也就是我们口中的并发这个概念. 也就是让每个演员表演一下,A表演一会,就换B表演,以此往复,不断循环. 这里大家可以就会想到了,你这还不是每次只能一个进程运行,怎么就是并发了呢. 这里大家不要忽略了CPU这个强大的处理数据,它一秒钟可以处理几十亿条指令呢,这就可以但短时间内CPU进行多次的任务切换,只要速度够快,在我们人眼中和同时运行也就没什么概念了.

我们现在使用的多核处理器也是这个道理:

这就等于从一个舞台变成了多个舞台,同一时刻每个舞台上都有一个演员在表演.这种就叫做并行执行. 但是上面的并发执行还是同样会发生.这就是等于并行+并发

所以我们得到一个结论: 进程在CPU中是分时复用,并发执行的~

进程控制快 PCB

计算机中要管理任何现实事物,都要将其抽象成一组有关联的数据.在操作系统中就将进程里的实体信息抽象成了一个PCB对象,就是一个结构体.操作系统在通过数据结构将PCB对象组织起来,方便管理.

PCB重要的属性

pid:

是对这个PCB进行身份标识,同一时刻的每个PCB中的PId是不同的

内存指针:

内存指针是对进程使用内存资源的描述.进程在运行的过程中,是需要消耗系统的内存资源的,而内存是不能随便使用的.内存指针就是告诉进程那些内存是可以使用的,在运行进程前,需要将这个exe可执行文件的指令和数据加载到内存中,这时就需要知道哪些内存是存放指令,哪些是存放数据.

文件描述符表:

文件描述符表是对进程使用系统硬件资源的描述.因为一个进程经常会使用系统的磁盘资源,这时就需要知道哪些是可以使用的.

PCB支持进程调度的属性

状态:

**状态就是用来描述进程当前能不能在CPU上执行.**进程在运行的过程中会有一些不同的状态, 有的就不方便在CPU上运行. 比如这个进程在等待用户输入数据的时刻,总不可能让CPU来等它吧,这就需要给它们加上状态,让操作系统知道哪些先不要在CPU台上表演,哪些可以上台表演.这里有一些常见的状态:

就绪状态: 随时准备就绪可以上台表演.CPU可以执行它

阻塞状态: 这个进程不方便在CPU上执行,这时操作系统就不能让它去CPU上执行

优先级:

优先级就是描述进程在CPU上执行的先后顺序. 多个进程总有先后执行的顺序,我们就可以通过优先级来区分他们执行的先后顺序.

记账信息:

**记账信息就是针对与CUP执行每个进程时间的统计,再根据这个统计进行调整.**这就可以确保每个进程不至于没有机会在CPU上执行了.

上下文:

**上下文就是对进程调度出CPU前的存档,对下次调度进CPU执行的读档.**这就相当于游戏中的读档和存档. 因为操作系统在调度进程CPU上是随机的, 任何进程在执行到任何一个指令时都有可能调度出CPU,这就需要保存当前的进度,在下次调度进CPU时继续当前进度执行. 读档就是在调度出CPU时将当前寄存器这些数据保存到另一个地方,再下次调度的时候再恢复回来.

保存上下文: 将当前CPU寄存器中的数据保存到内存的特定区域

恢复上下文: 去内存的特定区域将保存寄存器中的数据恢复到CPU中的寄存器中.

内存与进程的关系

操作系统对内存资源的分配是让不同进程使用的内存在不同的区域,相互独立,互不干扰.

进程间通信

如上所述,进程是操作系统进⾏资源分配的最⼩单位,这意味着各个进程互相之间是⽆法感受到对方存在的,这就是操作系统抽象出进程这⼀概念的初衷,这样便带来了进程之间互相具备"隔离性'',但现代的应⽤,要完成⼀个复杂的业务需求,往往⽆法通过⼀个进程独⽴完成,总是需要进程和进程进⾏配合地达到应⽤的⽬的,如此,进程之间就需要有进⾏"信息交换"的需求。

进程间通信就是操作系统会提供一些公共的区间(所有的进程都可以访问到),让多个进程可以进行交换数据.

目前,常用的进程通信机制有以下几种:

管道, 共享内存, 文件, 网络, 信号.

这里,在Java中,我们用的最多的就是文件和网络. 而网络可以同一个主机间不同进程通信,也可以不同主机间不同进程通信.


相关推荐
Full Stack Developme5 分钟前
java.nio 包详解
java·python·nio
零千叶21 分钟前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝30 分钟前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li37149089035 分钟前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠38 分钟前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget1 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x1 小时前
C++----多态
java·jvm·c++
Brookty2 小时前
【算法】前缀和
java·学习·算法·前缀和·动态规划
少许极端2 小时前
算法奇妙屋(七)-字符串操作
java·开发语言·数据结构·算法·字符串操作
懒羊羊不懒@2 小时前
Java基础语法—字面量、变量详解、存储数据原理
java·开发语言