java EE初阶 — 计算机工作原理

news2025/8/12 0:08:26

文章目录

  • 1.操作系统
  • 2.操作系统的定位
  • 3.进程
    • 3.1 进程的基本了解
    • 3.2 操作系统内核是如何管理软件资源的
    • 3.3 PCB里描述了进程的哪些特征
      • 3.3.1 三个较为简单的特征
      • 3.3.2 进程的调度属性
  • 4.内存管理

1.操作系统

操作系统是一个搞管理的软件。

  • 对上要给软件提供稳定的运行环境。
  • 对下要管理硬件设备。

计算机操作系统:

  • Windows(最熟悉的)
  • Linux(程序猿必会的),特别适合进行开发和部署
  • Mac(苹果电脑系统)

手机操作系统:

  • Android(本质上也是Linux)
  • IOS(和Mac同宗同源)

2.操作系统的定位


驱动程序、操作系统内核、系统调用加在一起就组成了操作系统。

  1. 硬件设备就是像鼠标。键盘这样看得见,摸得着的。
    比如我们的笔记本打开后盖后,看到的就都是硬件设备

  2. 驱动程序是硬件设备的一种,硬件厂商在开发硬件的同时会提供驱动。
    电脑装了对应的驱动,才能让系统正确的识别硬件设备。

  3. 操作系统内核是操作系统的核心功能,对上,对下进行管理。

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

  5. 应用程序 - 我们学的 java 就是在应用程序这一层。

3.进程

3.1 进程的基本了解

一个跑起来的程序就是进程,如果没有跑起来就不是进程!!!



idea64.exe文件此时还没有运行,它就不是一个进程,但它是一个应用程序

Ctrl + Shift + Esc 启动任务管理器


在任务管理器中看到的就都是进程。

总结就是:跑起来的叫进程,没跑起来的叫应用程序


进程(process) 也叫做任务(task)


每一个进程都对应这一些资源


MB 表示的是ByteMb 表示的是Bit
磁盘和网络组成了IO,衡量IO的时候就会用到带宽这个词表示。

总结

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


job术语:

job 比进程更加抽象,进程可以说job的一种具体实现,job也不一定全是进程。


句柄(handler)术语:

系统中包含很多的软件资源(进程就是一种软件资源)。
写代码时就需要用到一些软件资源。
软件资源是在操作系统内核里,在应用程序的代码中,不方便直接操作。


句柄就好比一个遥控器。(简单的整数/编号)

通过系统调用借助这个句柄就可以操作软件资源了。
借助遥控器就可以操作电视了。

3.2 操作系统内核是如何管理软件资源的

进程是一个重要的软件资源,是由操作系统内核负责管理的!!!

操作系统是通过 描述 + 组织 来对软件资源进行管理的。


描述:使用结构体(C语言的结构体)来描述进程属性.

用来描述进程的这个结构体 叫做 PCB(进程控制块),并不是硬件的PCB板。


组织:通过多个双向链表来把多个 PCB 给串到一起。(并不是一个单纯的双向链表)

创建进程本质上就是创建了一个 PCB 这样的结构体对象,把它插入到链表中。
销毁进程本质上就是把链表上的 PCB 结点删除了。
任务管理器查看到进程列表,本质上就是遍历这个PCB链表。

3.3 PCB里描述了进程的哪些特征

3.3.1 三个较为简单的特征

1、PID 进程的身份表示符(唯一的数字)



2、内存指针,指向了说自己的内存是哪些。


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

第2点和第3点描述了了进程持有了哪些资源。


资源分配的问题:

硬件资源、内存、硬盘、网卡都好分配,但是 CPU 不好分配。

我们是希望进程可以 “同时运行” “分时复用” 的。
这就提出了并行并发的概念


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


并发:微观上,同一时刻,一个核心只能运行一个进程,但是可以对进程快速的切换。

比如, CPU 这个核心上先运行一下QQ音乐、再运行一下画图板。
只要切换的速度快,还上人感知不到。

就像是电灯闪烁的频率太快了,人眼会觉得电灯是常亮的。


内核负责处理的应用程序,程序猿感知不到。
因此往往把并行和并发统称为并发!!!

3.3.2 进程的调度属性

1、进程的状态(较重要的)

  • 就绪状态:进程随时准备好了去CPU上执行(随叫随到)。
  • 运行状态:进程正在和 CPU 在一起。
  • 阻塞状态:短时间内无法到 CPU 上执行。
    比如说进程正在进行密集的 IO 操作,读写数据。


2、优先级

进程是有优先级的!!!

有的进程先执行,有的进程后执行。操作系统进行调度并不是一碗水端平的

比如,紧急的事情要先去做,不是很着急的事情往后面排排。


3、上下文

操作系统在进行进程切换的时候,就需要把进程执行的 “中间状态” 记录下来,保存好。

下次再执行这个进程的时候,就可以恢复到上次运行的状态,然后继续往下执行。

比如,玩游戏时的 存档 和 读档 。


上下文本质上就是存档的内容。

进程的上下文,就是 CPU 中各个寄存器的值。

寄存器是 CPU 内置的存储数据的模块
保存的就是程序运行过程中的中间结果。

保存上下文,就是把这些 CPU 寄存器的值,记录保存到内存(PCB)中。
恢复上下文,就是把内存中的这些寄存器的值恢复回去。


4、记账信息

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

4.内存管理

内存是一个虚拟的地址空间

程序中所获取到的内存地址,并非是真实的物理内存的地址。
而是经过了一层抽象,虚拟出来的地址。

物理内存地址是什么?

内存就像是我们的宿舍楼一样。

有个大走廊,走廊上有很多房间,每个房间就是一个宿舍。
每个房间还有一个编号,通过编号就可以定位到房间的位置。
房间编号就是“地址”。

内存(物理上是个内存条)可以存很多数据。
内存就可以想象成是一个大走廊,
走廊非常长,有很多房间,每个房间大小1Byte。
每个房间还有个编号,从0开始依次累加。
这个内存编号,就是“地址”。
这个地址也就认为“物理地址”。


内存有一个了不起的特性,随机访问(闪现):

访问内存上的任意地址数据,速度都极快,时间上也差不多。

正是这个特点,造就了数据取下标操作是 O(1)


这就是一个内存条。



程序并不能直接获取到物理内存的地址。


进程1的范围是 0x1010~0x1FFF
进程2的范围是 0x3000~0x8FFF

如果代码不小心出bug了,就可能导致访问的内存越界了。

比如,进程1出现了bug,进程1的指针变量指向了0x3000,这也就造成了进程2页出现bug了。
明明是进程1的bug,却把进程2也搞坏了。


解决办法:

针对进程使用的内存空间,进行 “隔离” ,引入了虚拟地空间!!!

此时代码例不在直接使用真实的物理地址,而是使用虚拟地址。

操作系统专门的硬件设备负责进行虚拟地址到物理地址的转换。


一旦进程1反生bug访问越界了,指针变成了 0x3000
当走到硬件设备时,由于硬件设备只能通过 0x1010 到 0x1FFF 之间的地址。
因此,此时进程1无法通过硬件设备到达物理内存。也就无法导致没有错误的进程2产生bug了。


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


总之就是哪里有bug 哪里崩溃,其他位置不受影响!!!


进行隔离是解决进程之间相互影响的问题,但是又引来了新的问题:

有些时候,进程之间确是是需要一些数据的交互的(相互配合)。

如果完全隔离了就无法实现数据的交互了。

此时可以在隔离性的基础上。开个小口子。
通过这个小口子来实现一个 “公共空间” 借助这个公共空间来进行数据的交互即可。


这里的公共空间的有很多的体现形式,后面会主要提到两种方式:基于文件基于网络

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

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

相关文章

Java面向对象之——继承

文章目录前言一、继承机制二、继承的语法三、父类成员访问🍑1、子类中访问父类的成员变量🍑2、子类中访问父类的成员方法四、super关键字五、子类构造方法六、super和this七、继承关系下的代码执行顺序八、访问限定修饰符protected九、Java继承方式十、f…

C#界面里Control.ImeMode 属性的使用

C#界面里Control.ImeMode 属性的使用 Control.ImeMode 属性是获取或设置控件的输入法编辑器 (IME) 模式。 输入法是一种特殊的程序,可以通过某种方式进行激活。 输入法程序总是在别的程序上面,因此它的运行是一种特殊的状态,所以需要特别处理。 因为电脑当时为了输入26个字…

第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题

文章目录A.Oops, Its Yesterday Twice MoreM.Windblume FestivalC.Klee in Solitary ConfinementH.CrystalflyD.Paimon Sorting补题链接:https://codeforces.com/gym/103470 A.Oops, It’s Yesterday Twice More Oops, It’s Yesterday Twice More Input file: st…

2020-RKT

2020-RKT:Relation-Aware Self-Attention for Knowledge Tracing 有代码:https://github.com/shalini1194/RKT 摘要 学生在解决练习的过程中获得技能,每一次这样的互动都对学生解决未来练习的能力有明显的影响。 这种影响表现为:1)互动中涉…

Transformer13~目标检测算法汇总

都到了13了 ~~ 还是基于这个的么办法 自从VIT横空出世以来,Transformer在CV界掀起了一场革新,各个上下游任务都得到了长足的进步,然后盘点一下基于Transformer的端到端目标检测算法! 原始Tranformer检测器 DETR(ECCV…

神经网络架构

神经网络架构 首先我们来看一张图,左边的是生物上的神经网络,右边的是数学版的神经网络 下面我们介绍在深度学习中神经网络的基本架构 整体架构包括层次结构,神经元,全连接,非线性四个部分 我们将针对这四个部分来进…

章节4 Linux操作系统基础知识

4.1-Linux系统结构 Linux系统结构 内核Shell文件系统应用程序 Linux操作系统内核 管理进程管理内存管理驱动管理文件和网络 … Linux Shell 接收用户的命令,经过转换,交给内核去执行 cat —> open() read() 简化操作安全 Linux Shell工具&am…

【docker学习记录】docker安装mysql、redis

目录 docker安装mysql docker安装redis docker安装mysql 1.下载镜像文件 $ sudo docker pull mysql:8.0.31 下载完成后查看一下镜像:sudo docker images 2.创建实例并启动 //mysql版本5 sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var…

uniapp的安装与基础

解释 由dcloud 公司开发的 多端融合框架 1次开发 多端运行 竞品:apiCloud ,appCan ,Codova 技术架构 Vue语法小程序的api Hybrid混合开发端 App端 - HTML - nvue(原生view) - native.js(js原生沟通的桥梁) - weex …

目前是大专学历如何快速提升到本科学历?学历提升有哪几种形式呢?

目前是大专学历如何快速提升到本科学历?学历提升有哪几种形式呢? 如今想要晋升和加薪,很多除了工作能力分级,另一个是文凭,许多企业和机构基本上是基于文凭来决定基本工资,所以想得到更好的待遇&#xff0c…

深度强化学习+金融投资的应用入门

原创文章第114篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 今天的核心工作是把强化学习环境整合进我们的AI量化平台中。 网上很多代码都把数据获取和预处理,都整合到强化学习的环境里,对于总体量化平台而言&am…

python搭建沙箱环境

python搭建沙箱环境 文章目录python搭建沙箱环境一,下载virtualenv模块1.1 在线状态的下载1.2 离线状态的下载二,创建沙箱环境(虚拟环境)三,激活以及退出沙箱环境一,下载virtualenv模块 1.1 在线状态的下载…

JAVA异常

目录JAVA异常1.初识异常2.异常的处理2.1 捕获异常的基本语法2.2 捕获异常2.3 finally的使用2.4 异常的执行流程2.5 抛出异常3.JAVA异常体系4.自定义异常类JAVA异常 1.初识异常 异常指的就是程序在 运行时 出现错误时通知调用者的一种机制. 我们在编写代码的过程中,遇到过许多…

模态贡献量在汽车NVH分析中的案例应用

作者 | 蓝枫 导读:模态贡献量分析是基于结构模态的频响分析,一般被用来分析诊断低频振动问题,如方向盘抖动、地板抖动以及整车振动等的低频NVH问题,也可以诊断中频问题,如NTF优化问题,但NTF优化一般用GPA…

[附源码]java毕业设计疫情背景下叮当买菜管理系统

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

171-178-Hadoop-源码

171-Hadoop-源码: 以了解有印象,动手debug为主。大致流程和思想。 RPC 通信原理解析 1)需求: 模拟 RPC 的客户端、服务端、通信协议三者如何工作的 https://gitee.com/HaoZhouRS/bigdata-study-code/tree/master/big-data-stud…

视频转换软件哪个好?万兴优转-支持超过1000种格式转换和输出

想必大家都知道,视频的格式分为很多种,而且不同设备能够播放的视频格式也各不相同,就比如PC端和mac端,其就有很大的不兼容问题。在日常工作中,我们往往将一个视频发给了对方,但对方却因为设备的差异而无法直…

023.二叉树的最近公共祖先

题目链接: 236. 二叉树的最近公共祖先 大概思路: 题目要求: 给定一个二叉树, 找到该树中两个指定节点q,p的最近公共祖先x。(q、p一定存在且值不同) 最近公共祖先: 两个节点共同的祖先&…

为什么浏览器控制台(Console)运行JavaScript代码有时会出现“undefined”?

为什么浏览器控制台(Console)运行JavaScript代码有时会出现“undefined”? 浏览器“控制台”(console)使用简介 about:blank是打开浏览器空白页的命令——内置在浏览器中的命令,可以打开浏览器空白页&…

SpringAMQP WorkQueue消息队列模型的理解与使用

原理分析 Work Queue,故名思意,工作队列,互相配合工作。适用于消息密集型消息队列的场景,如下图所示,queue中存在着大量的消息,而消费者有续配合工作,消息队列有阅后即焚的特点,所以…