【JavaEE】初识操作系统,吃透进程

news2024/9/29 13:32:02

✨哈喽,进来的小伙伴们,你们好耶!

🛰️🛰️系列专栏:【JavaEE】

✈️✈️本篇内容:初始操作系统,进程的概念

🚀🚀代码存放仓库gitee:JavaEE初阶代码存放!

⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,星夜启程!

目录

一、操作系统

1、概念

2、操作系统的定位

二、什么是进程

2、进程的描述与组织

3、PCB中描述进程的特征

4、进程调度的相关属性

3、上下文

4、记账信息

三、内存管理

1、虚拟地址空间

2、进程的内存分配


 嗨嗨嗨,小伙伴们,那么最近呢是有段时间没有更新博客了,原因就是博主由于学校最近在组织学生回家,加上之前在准备全国大学生大数据分析技能大赛,然后对于博客就落下啦,那么昨天博主也是刚刚到家,就马上整理最近的学习内容,准备开始继续更新博客啦,再次感谢小伙伴们的不断支持!

比赛成绩已出,拿了二等奖,还是有点可惜的……不过也不错啦!

eb9d847e7f21428c9d0b74f66eb0c32a.png

 好了,那么废话不多说,直接进入正题。今天我们要学习的内容就是操作系统,进程的相关概念,提起精神,要开始学习啦!

一、操作系统

1、概念

什么是操作系统呢?简单来说,操作系统就是一款管理硬件设备的软件。

对上:要给软件提供稳定的运行环境。

对下:要管理相关的硬件设备。

总结:操作系统就是硬件、软件、用户之间进行交互的媒介!

常见操作系统:windows、Linux、mac、Android、iOS。

1、那么在这些操作系统中,我们最熟悉的应该是Windows系统,因为我相信大家平时使用的电脑都是装的Windows系统,也是最常用的操作系统。

2、Linux是程序猿必须掌握的一款操作系统,特别适合进行开发和部署。

3、Mac苹果电脑使用的操作系统,对新手来说不太友好,编程初学者还是建议上手Windows。

4、Android本质上来说也是Linux。

2、操作系统的定位

简单画图展示一下:

5a92a2cc9e854c3aa000b790aebcbefe.png

 1、系统调用

可以想象为->操作系统给应用程序提供的API。
比如有个程序想操作一下硬件设备,就需要先通过系统调用,把操作命令告诉给系统内核,内核调用驱动程序,进一步的操作硬件设备。

2、操作系统内核

操作系统的核心功能(管理,对上,对下)

3、驱动程序

应用厂商在开发硬件设备时会提供驱动,电脑装了相应的驱动,才能让电脑识别对应的硬件设备。

4、硬件设备

简单来说就是你撬开你的电脑后盖壳,看到的都是硬件设备。

二、什么是进程

1、什么是进程 /任务( Process/Task
 
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;
简单来说就是 一个跑起来的程序就是一个进程,没跑起来就不算进程!
这里我们可以同时按住键盘上的 Ctrl+alt+delete 就可以打开任务管理器查看进程。
80b871f013e0402dbd679ab568b19d1b.png

 那么在这张图里,红色箭头所指向的就是一些进程,比如wps,idea等等。那么看向右边,我们发现会有磁盘和网络两个栏,这就是我们所说的IO,那么影响IO快慢就会用到带宽这个词,每个进程都对应了一些资源,同时进程也是操作系统进行资源分配的基本单位。

2、进程的描述与组织

那么进程可以认为是“描述”+“组织”。

描述: 使用结构体(C语言的结构体) 来描述进程属性。
操作系统基本上都是 C/C++ 来写的。
用来描述进程的这个结构体这是一个结构体,不是硬件“PCB 板,这里起了个特殊的名字,叫做 PCB (进程控制块)。
组织: 通过双向链表,来把多个 PCB 给串到一起 (并不是一个单纯的双向链表)。
创建一个进程本质上就是创建一个 PCB 这样的结构体对象,把它插入到链表中销毁一个进程,本质上就是把链表上的 PCB 节点删除掉,任务管理器查看到进程列表,本质上就是遍历这个 PCB 链表。

3、PCB中描述进程的特征

1.pid 进程的身份标识符.(唯一的数字)
2.内存指针 指向了说自己的内存是哪些描述了进程持有了哪些硬件资源。

3.文件描述符表硬盘上的文件等其他资源。

这三条都是描述了进程持有哪些硬件资源。

那么相对来说,硬件资源,硬盘,网卡都好分,就是CPU资源不好分,假如进程有几百个,CPU呢?一个?答案不是,现在我们用的电脑基本都是多核CPU,就拿博主的电脑来说:

我们打开搜索框输入"任务管理器":

452df22076044a1a9982ced7b42bbff8.png

可以看到我的电脑是有八个CPU,但实际上还是不够用的,简单来说就是馒头少,人多!那么这里我们就将要介绍进程调度的相关属性,看看如何来解决这个问题。

4、进程调度的相关属性

1、进程的状态
就绪状态: 随叫随到 进程随时准备好了去 CPU 上执行。

运行状态: 正在和我在一起的。
阻塞状态: 想象成出差了,短时间内无法到 CPU 上执行了。比如 进程 在进行密集的 IO 操作,读写数据。

注:很多操作系统不会明确区分就绪和运行。

2、优先级
意思就是先给谁发馒头,后给谁发馒头.给谁多发点, 给谁少发点。
进程也是有优先级的,操作系统进行调度并不是平均分配的。

那么这里就要谈到并行,并发的概念。

并行:
微观上同一时刻,两个核心上的进程,就是同时执行的。

并发:

同一时刻,一个核心上只能运行一个进程.但是它能够对进程快速的进行切换.并发应用程序(程序猿)感知不到。只要切换速度足够快(2.4GHz, 每秒运行 24亿条指令),宏观上人感知不到。人看起来就感觉好像是这几个进程在同时运行。
比如 CPU 这个核心上,先运行一下 WPS,再运行一下 画图板, 再运行一下浏览器等。
因此往往也把并行和并发,统称为并发!!!
以后除非显式声明,否则谈到并发,就是指并行 + 并发。

3、上下文

操作系统在进行进程切换的时候,就需要把进程执行的"中间状态"记录下来,保存好。
下次这个进程再上 CPU 上运行的时候 就可以恢复上次的状态,以便于继续往下执行。

比如我们以前打游戏,打到某一关,这个时候你应该去吃饭了,那么下一次你就希望继续你上次的关卡,从上次没打完的关卡继续打。
简单好理解为:存档,读档"
上下文 本质上 就是你存档的内容。
进程的上下文,就是 CPU 中的各个寄存器的值。
CPU 内置的存储数据的模块。
保存的就是程序运行过程中的中间结果。
保存上下文,就是把这些 CPU 寄存器的值,记录保存到 内存中。

恢复上下文,就是把内存中的这些寄存器值恢复到PCB中。

4、记账信息

即操作系统会统计每个进程在 cpu 上占用的时间和执行的指令数目根据这个来决定下一阶段如何调度。

刚才谈到馒头不够吃,我们可以理解为每次分配给某个人1/100的馒头,馒头大小不均匀,那么下一次再分配给这个人的时候,我们就需要根据上次分到的馒头多少来决定这一次给他分配多少馒头。

OK,那么说到这里PCB的几个基本重要属性博主就已经介绍完毕了,要知道PCB中的属性是非常之多的,博主不可能一一介绍,上述的都是很重要的属性,希望大家可以认真体会理解!

三、内存管理

1、虚拟地址空间

对于内存,相信咋们学计算机的同学都已经很熟悉了,不能说非常精通,那也是绰绰有余丫。

那么实际上呢,我们平时所说的内存其实是虚拟内存,即虚拟地址空间。
程序中所获取到的内存地址,并非是真实的物理内存的地址.而是经过了一层抽象,虚拟出来的地址。

那么啥是内存呢?内存可以理解为内存条,上面可以存放很多的数据。

例如现在的酒店:我们在住酒店的时候,拿一层的房间来说,我们拿到对应房间的房卡,就可以住到我们对应的房间,那么房间一般是分布在一条大走廊的两侧,有很多的房间,每个房间都有自己对应的房间号,比如108,这个编号我们也称之为地址(物理地址)。那么根据每个房间号,就可以找到对应的旅客,这是不是体现出内存具有随机访问的特性!于是就有了数组取下标的时间复杂化度O(1)。

给大家看一下内存条的模样:

84411cbd7f7540d6a6cd705112933db1.jpeg

我们可以发现内存条上面有很多的黑块块,这些黑块块叫做内存颗粒,内部是一系列的门电路,构成了很多的数据存储单元;中间有个卡槽,是为了插内存条的时候防插反设计。

2、进程的内存分配

假如我们给进程1和进程2分配相应的内存空间:

c9ba220214774c3c8f4da733a5aa3075.png

 那么这里我们可以想象一下,假如代码正常,运行不会出bug,那么进程就相安无事,但是如果如果代码不小心出 bug 了就可能导致 访问的 内存 就越界了。
不小心的指针变量,变成了 0x8000
明明是进程1 的 bug,却把进程 2 给搞坏了,很可能就会你写个程序,一运行,你的 chrome崩溃了.或者你的画图板溃了……

那么如何解决内存空间分配的问题呢?哎,正如开头所说,引入了虚拟地址空间。

即代码里不再直接使用真实的物理地址了。而是使用虚拟的地址由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换。

看下图所示:

0269950740f844e39e4fa78cbe5d0913.png

 即操作系统内核发现当前这里的地址超出进程1 的访问范围了。此时就直接会向进程反馈一个错误(具体来说是发送一个 SIGN SEGEMENT FAULT 信号,引起进程的崩溃)

简单来说就是:谁出了 bug,谁崩溃其他进程不受影响了!

那么虚拟地址空间目的就是为了避免进程之间相互产生影响!

那么有点人就会问了,有时候确实需要进程之间的交互怎么办呢?很简单,搞一个"公共空间",比如我们点外卖,外卖小哥说外卖到了,我说放在楼下桌子上,然后我再去拿,这样不就很好的解决了二者的接触。

OK,那么今天的知识分享就到这里了,下篇我们会更新多线程的概念,进程?线程?多线程?他俩啥关系?期待后续!

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于AM437x Linux+qt开发笔记(2)

第一部分,触摸屏 命令 lsinput (有些系统不移植)查看系统input实践 命令ox -d /dev/input/event1 或hexdump -d /dev/input/event1 (从上图看,event0没有接的触屏) ,点击屏幕如下 命令 ls /dev/input -al , 查看input设备的触摸屏软连接。 命令cat /etc/udev/ru…

编码与测试

文章目录一、编码1、概念2、如何选择程序设计语言3、程序设计风格(1)源程序文档化(2) 数据说明(3)语句构造(4)输入输出(5)程序效率编码时提高程序运行效率的主要规则二、软件测试基础…

【爬坑之路一】windows系统下更新升级node版本【亲测有效】

前言 一定要看到最后!!! 项目开发中,需要升级 node 版本。本着不想卸载 node 再重新安装的原则,因为node 的环境配置以及各种相关配置有些繁琐,所以就想着使用 命令的方式进行升级。 在网上找了一些升级 n…

C#详解:程序域、程序集、模块、Type、反射

总结: ">>>":代表包含 进程>>>应用程序域AppDomain>>>程序集Assembly>>>模块Module>>>类型Type>>>成员(方法、属性等) 1、程序集Assembly 如图,假设一个解决方…

ARM 自己动手安装交叉编译工具链

一、Windows中装软件的特点 Windows中装软件使用安装包,安装包解压后有2种情况: 一种是一个安装文件(.exe .msi),双击进行安装,下一步直到安装完毕。安装完毕后会在桌面上生成快捷方式,我们平…

(附源码)ssm招聘网站 毕业设计 250858

SSM招聘网站 摘 要 招聘网站采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员、用户、企业三部分,管理员管理主要功能包括:首页、站点管理(轮播图、公告栏)用户管理(管理员、应聘用户、企业用户…

重点| 系统集成项目管理工程师考前50个知识点(2)

本文章总结了系统集成项目管理工程师考试背记50个知识点!!! 帮助大家更好的复习,希望能对大家有所帮助 比较长,放了部分,需要可私信!! 11、项目目标包括成果性目标和约束性目标。项…

直播倒计时,PyTorch Conference 2022 今晚开启

内容一览:PyTorch Conference 2022 即将在美国南部城市新奥尔良举办。本次会议将带来技术讲座、项目演示及最佳案例分享。 本文首发自微信公众号:PyTorch 开发者社区 关键词:PyTorch 深度学习 机器学习 PyTorch Conference 2022 今晚开启 自…

360crawlergo结合xray被动扫描

360crawlergo结合xray被动扫描 360crawlergo结合xray被动扫描安装配置 360crawlergo结合xray被动扫描 安装 Xray https://github.com/chaitin/xraycrawlergo_x_XRAY https://github.com/timwhitez/crawlergo_x_XRAYcrawlergo https://github.com/0Kee-Team/crawlergo 更多的…

高等数值计算方法学习笔记第7章【非线性方程组求根】

高等数值计算方法学习笔记第7章【非线性方程组求根】一、方程求根与二分法(第五次课)二、不动点迭代法及其收敛性1.不动点迭代与不动点迭代法(一个例题)2.不动点的存在性与迭代法的收敛性(两个定理,两例题&…

计算机网络——常考的面试题

什么是TCP/IP? TCP建立连接为什么要三次握手?断开连接为什么要四次挥手? SSL/TSL握手过程? 1、网络分层模型 OSI:全称叫Open System Interconnection (开放式系统互联),是国际标准化组织ISO制定的理论模…

【软件测试】面试老约不到?软件测试简历项目经验怎么写?论项目经验的重要性......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 随着就业竞争越来越…

(五)共享模型之管程【wait notify 】

一、wait notify 1. 小故事 - 为什么需要 wait 2. 原理之 wait / notify (1)Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态。 (2)BLOCKED 和WAITING 的线程都处于阻塞状…

[附源码]计算机毕业设计springboot线上社区管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

全力护航!广西移动圆满完成区运会通信保障任务

11月23日晚,广西壮族自治区第十五届运动会在贵港市体育中心闭幕。作为区域主导通信运营商,广西移动贵港分公司充分发挥5G网络技术优势,与贵港市政府、区运会组委会紧密合作,全力以赴为运动会提供了先进、高效的通信服务保障。 广西…

PAT (甲级) 2022年秋季考试 c++ 满分题解

PAT (甲级) 2022年秋季考试 c 满分题解 7-1 Balloon Popping 分数 20 原题 算法标签 模拟 枚举 思路 枚举数组元素, 判断每个元素覆盖气球数, 记录最多可覆盖气球数及最多可覆盖气球数开始下标, 则最小开始值为最后可覆盖气球位置减高度H 代码 #…

matlab如何滤除低频尖峰脉冲

有时,数据会出现不必要的瞬态或尖峰。可以用中值过滤消除它们。 最近我们被客户要求撰写关于信号滤除脉冲数据的研究报告,包括一些图形和统计输出。 在存在60 Hz电源线噪声的情况下,考虑模拟仪器输入端的开环电压。采样率为1 kHz。 fs …

基于Python pygame简易版斗兽棋小游戏源代码

基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼>狗>猫>鼠>象 2.同类棋子先行者吃掉对方 3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他…

Jmeter常用函数用法详解

Jmeter函数官网帮助手册:https://jmeter.apache.org/usermanual/functions.html#__BeanShell 1.__intSum:计算两个或多个整数值的和 参数是否必传第一个int值是第二个int值是第n个int值否变量名否 eg: ${__intSum(1,2)} //return 123 ${__intSum(1,2,3)} //return …

(8)点云数据处理学习——ICP registration(迭代最近点)

1、主要参考 (1)官方介绍地址 ICP registration — Open3D 0.16.0 documentation 2、介绍 2.1 原理 (1)关于ICP registration 本教程演示ICP(迭代最近点)配准算法。多年来,它一直是研究和工业中几何配准的支柱。输…