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

news/2024/5/21 22:51:30/文章来源:https://blog.csdn.net/m0_63033419/article/details/127995792

文章目录

  • 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.luyixian.cn/news_show_36521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的鲜花店商城平台【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86427660 摘要 在互联网不断发展的时代之下,鲜花软件可以为鲜花企业带来更多的发展机会,让企业可以挖掘到更多的潜在用户,同时结合企业的优势就能够为用户…

Swin Transformer目标检测实验——环境配置的步骤和避坑

Swin Transformer1. 网上基础教程(带视频讲解)2. 配置虚拟环境时遇到的一些问题(按操作顺序排列)1. 网上基础教程(带视频讲解) 大家是不是都从b站来的呀,先给你们基础环境的配置和搭配的视频教…

黑马点评--Redis消息队列

Redis消息队列 Redis消息队列实现异步秒杀 消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Br…

【附源码】计算机毕业设计JAVA疫情下的居民管理系统

【附源码】计算机毕业设计JAVA疫情下的居民管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA…

蒙泰转债上市价格预测

蒙泰转债基本信息转债名称:蒙泰转债,评级:A,发行规模:3.0亿元。正股名称:蒙泰高新,今日收盘价:31.3,转股价格:26.15。当前转股价值 转债面值 / 转股价格 * 正…

有没有把语音转为文字的软件?这几个转换软件你值得收藏

我们在日常的工作和生活中,应该经常会遇到需要将音频转换成文字的情况吧。相信大部分的小伙伴都会选择直接使用转换软件进行音频转文字的操作,但在使用的过程中就会发现,有些软件会在使用次数、音频时长上面有所限制,导致我们会转…

《从零开始:机器学习的数学原理和算法实践》chap1

《从零开始:机器学习的数学原理和算法实践》chap1 学习笔记 文章目录《从零开始:机器学习的数学原理和算法实践》chap1 学习笔记chap1 补基础:不怕学不懂微积分1.1 深入理解导数的本质直观理解复合函数求导1.2 理解多元函数偏导1.3 理解微积分…

【附源码】计算机毕业设计JAVA疫情下智慧社区系统

【附源码】计算机毕业设计JAVA疫情下智慧社区系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA …

CorelDRAW2023最新版矢量设计软件

CorelDRAW2023最新版是我比较用的比较好的一款软件,因为其作为一款优秀的矢量设计软件,兼具功能和性能,它是由Corel公司出品的矢量设计工具,被广泛应用于排版印刷、矢量图形编辑、网页设计等行业。CDR软件的优势在于:易…

studio3T import a SQL Database to Mongodb(从mysql中导入数据到mongodb)

具体参考studio3T官方文档:Import a SQL Database to MongoDB in 5 Steps | Studio 3T 1、打开SQL Migration-->选择SQL to MongoDB Migration 2、创建源数据库的连接(本文源数据库是mysql) 3、选择目标数据库 默认选择当前连接的数据库…

深度学习入门(6)误差反向传播基础---计算图与链式法则

在我的第三篇博文《深度学习入门(3)神经网络参数梯度的计算方式》中详细介绍了通过微分方式计算神经网络权重参数的梯度。但是数值微分的方式计算梯度效率较低。后续博文会介绍另外一种更加高效的梯度计算方式---误差的反向传播。 这篇文章介绍的是误差…

新知实验室 腾讯云实时音视频 RTC WEB端初识

这里写目录标题前言初识产品产品介绍基础功能高级功能扩展功能快速上手位置创建源码下载源码文档写入密钥使用调试区域前言 当前时代是信息行业飞速发展的时代,万物都在朝物联网方向转化。而人作为一个意识体,也正在通过互联网,认识一个全新…

Design Compiler工具学习笔记(6)

目录 引言 知识储备 实际操作 设计源码 仿真源码 VCS执行仿真 DC 综合 引言 本篇继续学习 DC的基本使用。本篇主要学习 DC 综合之后的效果分析,重点在时序分析。 前文链接: Design Compiler工具学习笔记(1) Design Comp…

cubeIDE开发, stm32的OLED点亮及字符显示设计(基于SPI通信)

一、SPI 通信技术 显示屏(LCD、OLED)接口一般有I2C、SPI、UART、RGB、LVDS、MIPI、EDP和DP等。一般3.5寸以下的小尺寸LCD屏,显示数据量比较少,普遍采用低速串口,如I2C、SPI、UART。SPI(Serial Peripheral I…

css-实现卡牌的发牌和翻转动画

场景描述: 打开抽卡界面,卡牌出现并发牌至固定的位置,此时展示的是卡牌的背面;用户点击卡牌时,卡牌进行翻转,并展示卡牌内容,或者发牌后自动进行翻转和展示。 本实例在页面挂载后自动播放动画&…

systemd 252 如预期的锁定了 Linux 引导过程

导读今天给大家介绍一下systemd 252锁定 Linux 引导过程systemd 252 如预期的锁定了 Linux 引导过程 之前,我们 报道 过,systemd 创始人发文指出 Linux 引导过程不安全,并提出采用加密签名的统一内核镜像(UKI)&#x…

linux搭建git服务器,windows客户端配置git

Linux服务器配置之Git服务器搭建步骤: 一、配置环境 1、服务器:CentOS 8.2(64位) Git (version 2.27.0) 2、客户端:Windows 10 (64位) Git(version 2.38.…

Actipro Windows Forms Controls 22.1.3 注册版

Actipro Windows Forms Controls 窗体控件 一组用于构建漂亮的 Windows 窗体桌面应用程序的 UI 控件 语法编辑器 语法高亮代码编辑器控件和解析套件。 为您自己的应用程序带来类似于 Visual Studio 的强大代码编辑体验,以及流行代码编辑器中的所有高级功能。大多数流…

C#程序采用AOT发布,真的可以避免被反编译?

上次跟大家分享过,C#程序反编译与篡改代码的教程《C#程序发布时,一定要好好的保护,不然你会后悔的!》,根据这个教程,我们都知道C#程序,发布后必须进行加密混淆,不然就是相当于源码直…

Redis基础命令(set类型)交集并集差集

目录 概述: 特征: Set常见命令: 1.Sadd key number..:向set中添加一个或多个元素 2.Srem key number...:移除set中指定的元素 3.Scard key:返回set中元素的个数 4.Sismember key member:判断一个元素…