当前位置: 首页 > news >正文

[Java EE] 计算机工作原理与操作系统简明概要

1. 计算机工作原理

1.1 生活中常见的计算机

计算机分为通用计算机和专用计算机,计算机并不单单指的是电脑,还有我们平时使用的手机,ipad,智能手表等终端设备都是计算机.还有我们用户不常见的计算机,比如服务器. 还有许多嵌入式设备(针对特定场景定制的"专用计算机"),都是计算机.

服务器
智能手表

1.2 冯诺依曼体系

现代的大多数计算机都遵守冯诺依曼体系结构.
在这里插入图片描述
简述上述过程就是:输入设备为存储器(内存和外存)输入数据,存储器向CPU发号施令,提醒CPU处理数据,CPU则会把存储设备中的数据读取过来,进行一系列处理,再放入存储设备中.之后通过存储设备输出到输出设备中.
下面我们介绍各个部件的主要功能:

  • CPU中央处理器: 主要进行二进制算数运算和逻辑判断.
  • 存储器: 分为内存和外存,用于存储数据(使用二进制方式存储)
  • 输入设备: 给计算机发号施令的设备.
  • 输出设备: 计算机向用户汇报结果的设备.
    针对存储空间:
    硬盘>内存>>CPU
    针对数据访问速度:
    CPU>>内存>硬盘

1.3 CPU指标与核心

我们可以把CPU看做一个打工人:

  1. CPU的两个指标:
    • CPU占用率:
      描述CPU干活时间栈总时间的比例.我们可以通过任务管理器来看到它.比如CPU上班上8个小时,干4个小时的活,CPU占用率为50%.

在这里插入图片描述

  • CPU频率:
    1秒钟,CPU处理或者执行了多少个指令.

在这里插入图片描述
2. 多核CPU
我们如今在市面上见到的计算机大多数都不是单核CPU,一个CPU中存在多个核心.
我们经常说的CPU几核,这指的是物理核心,CPU多少线程,指的是逻辑核心.下面我们以intel5-13500HX芯片来举例:
在这里插入图片描述
引入多核CPU的目的:
引入多核CPU的核心,本质上就相当于==“干活的人多了”==,只不过把这些人集中在了一个房间中,这就可以让任务的完成更高效.我们以后编程的核心就是:如何把多个任务拆分成多个部分交给不同的核心来完成."多线程"编程就是针对任务分配来考虑的软件编程,避免一核有难,多核围观的尴尬.这便是我们以后要研究的重点.
3. CPU的不同架构类型

  • x86架构类型(如Intel,AMD生产的芯片大多数是x86CPU)
  • arm架构类型(如Apple A17仿生芯片,骁龙888等用于移动设备的芯片大多数都是armCPU)
  • x86的优点就是性能较高,但功耗较高,而arm恰恰相反.

1.4 指令

所谓指令,即指导CPU进行工作的命令,主要有操作码+被操作数组成。
其中操作码⽤来表⽰要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等.
冯诺依曼体系结构规定:
一个程序,指令和数据要在储存器中保存,CPU如果需要执行,都需要自动从存储器中去取指令和数据.即指令要先加载到内存中,才可以被CPU读取并执行.
eg:一个Java程序 -->.java -->编译 --> .class字节码文件 -->jvm -->到达内存 --> 翻译 -->CPU识别.

计算机中CPU的指令识别也有一定的规则,所以我们引入了指令表:
在这里插入图片描述
每个CPU被设计出来之后,都会提供这样一个指令表.这个指令表中的opcode对应的是内存数据中的操作码.就是告诉CPU要怎么做的二进制指令.操作的地址或寄存器就是告诉CPU从哪里取出被操作数(数据)并存储到哪里.

1.5 CPU的基本工作流程(重点)

  1. 读指令
    把内存中的指令数据读取到CPU的寄存器中
  2. 解析指令
    CPU通过指令表来解析当前指令要求它干啥
  3. 执行指令

注:寄存器是CPU用来保存数据的地方,一般有A,B,PC,IR四个,其中IR用来读取内存中的指令,PC用来读取内存中的地址.IR可通过PC提供的内存地址来从内存中取出指令来解析.,AB寄存器都是用来存储数据的.
下面来用图来形象地表示上述过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
总结:

  • CPU中的PC寄存器,是决定要执行那条指令的关键
  • 指令是有动作+操作对象组成的.
  • CPU眼中只有指令,没有其他概念.

2. 操作系统

操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系
列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。它们可以让计算机按照一定的规则进行执行,并管理好这个计算机上所有的硬件与软件资源,这是操作系统诞生的初心.
操作系统: 这个家没我都得散.

2.1 操作系统的定位

在这里插入图片描述
注:上述操作系统,可以看做操作系统内核.

那么操作系统是如何完成一个功能的呢?操作系统内核为应用程序提供了API,应用程序通过调用操作系统内核的API,来告诉操作系统内核这个进程并创建,之后操作系统内核通过与中央处理器的驱动程序,来在处理器中完成调用指令与数据.

这么说来有些抽象,我们通过银行柜台取钱的例子来解释:

  1. 应用程序相当于一个来取钱的人
  2. API相当于存折
  3. 取钱的人(应用程序)把存折(API)递给银行柜台的员工(操作系统),之后柜台员工(操作系统)从保险柜(处理器)中把钱取出来递给取钱的人(应用程序).

2.2 进程与任务

注意:下面谈到的进程都是只包含一个线程的进程
进程是操作系统对⼀个正在运⾏的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运⾏过程;同时,在操作系统内部,进程⼜是操作系统进⾏资源分配的基本单位
系统资源分配情况可通过系统资源管理器来查看:
在这里插入图片描述
但是上述的操作系统中的进程又非常多,我们就要考虑如何管理的问题了.

  1. 操作系统通过进程控制块抽象(PCB Process Control Block)来描述一个进程,PCB其实就是java中的一个类,操作系统底层的一个结构体成员.
  2. 操作系统通过一定的数据结构来把这些PCB有序地组织起来,如线性表(一般是链表),搜索树.方便增删查改.

那么这个结构体变量中有包含哪些信息呢:

  1. pid: 进程的id标识符.

  2. 内存指针: 这是一组指针组,告诉OS,该进程的指令位于内存中的地址以及进程依赖数据的地址.

  3. 文件描述符表: 一个进程在运行的时候要操作的文件,PCB会通过顺序表的数据结构来记录当前进程都打开了哪些文件.

  4. 支持进程调度的属性:
    要想解释明白这个属性,我们要先解释什么是进程调度:

    假设有100个进程,CPU虽然有多个核心,假设为16个,只能同时处理16个进程,这16个进程是完全同时执行,我们把他称为并行,但是如果想要执行100个,显然全部并行是远远不够的,这是CPU就会把总执行时间切为若干个小段,在这一小段的时间中,对进程频繁切换,我们称为并发执行.只不过时间非常短,人类感觉不到切换.
    所以,进程的调度从微观上来讲分为两种:1. 并行: 在时间上完全同时执行. 2. 并发: 在时间上串行,但是在宏观上也是同时执行.
    所以上述调度从宏观上来谈,统称并发.

    之后我们再来谈PCB中的第四个属性:

    1. 状态: 进程分为两种状态:就绪状态和阻塞状态.就绪状态就是随叫随到,阻塞状态的进程指令与数据暂时无法再CPU上执行.
    2. 优先级: 那个进程优先级高,就优先调用哪个进程.
    3. 上下文: 进程在CPU执行中,会产生许多的中间结果,进程在切换出CPU前,就需要把中间结果保存到PCB的上下文中,我们称为存档,下次进程回到CPU上时,就要把之前的存档回复回来,我们称为读档.
    4. 记账信息: OS要避免某个进程一直吃不到资源,所以就要进行统计,给分配的比较少的进程多分配一点.

    举例:渣女小故事
    一个女生同时被3个男生追:
    A男生:有钱多金
    B男生:颜值高,长得帅
    C男生: 开心果,会给女生提供情绪价值( 舔狗 )
    A男生比较有钱多金,所以经常出差,在平时,他可以随叫随到,是就绪状态,但是在他出差的时候,就不会随叫随到,进入阻塞状态
    C男生可以提供精神食粮,其实就是会舔,女生认为精神上的安慰更实在,所以C的优先级会更高,C分配的时间就会相对较多
    有一天,A男生的妈妈过生日,C男生打算去海边玩,然后女生就打算对男生A说,我买了一条红围巾,打算对C说,我买了一身性感的泳衣,由于小姐姐泡的男人太多了,看错A和C男生法的信息了,一不小心把A和C给整叉了,这就尴尬了.(C:你去海滩戴围巾??? , A:你给我妈妈买了一身性感的泳衣???)可见上下文的重要性.
    哎呀~~,把咱们的B小朋友给掉了,给咱们B小朋友多分配一点时间吧,所以记账信息也会起到一定的作用.
    在这里插入图片描述

相关文章:

[Java EE] 计算机工作原理与操作系统简明概要

1. 计算机工作原理 1.1 生活中常见的计算机 计算机分为通用计算机和专用计算机,计算机并不单单指的是电脑,还有我们平时使用的手机,ipad,智能手表等终端设备都是计算机.还有我们用户不常见的计算机,比如服务器. 还有许多嵌入式设备(针对特定场景定制的"专用计算机"…...

【尚硅谷】Git与GitLab的企业实战 学习笔记

目录 第1章 Git概述 1. 何为版本控制 2. 为什么需要版本控制 3. 版本控制工具 4. Git简史 5. Git工作机制 6. Git和代码托管中心 第2章 Git安装 第3章 Git常用命令 1. 设置用户签名 1.1 基本语法 1.2 案例实操 2. 初始化本地库 2.1 基本语法 2.2 案例实操 3. 查…...

如何在MobaXterm上使用rz命令

1、首先输入命令和想下载的文件,如下图: 2、按住ctrl鼠标右键,选择如下选项: 上传命令是rz,选择Receive...... 下载命令是sz,选择Send...... 3、我这里是要把Linux上的文件下载到我的本地window磁盘&…...

【计算机考研】408网课汇总+资源分享

408王道的视频就比较通俗易懂 王道的教材非常契合408的大纲,是专门为408大纲而编写的,而教材是方方面面都讲解的透彻。 建议王道为主,网络搜索为辅! 王道中讲解不清楚,看不懂的知识点,可以尝试在网络上进…...

如何在OceanBase v4.2 中快速生成随机数据

在使用传统数据库如 MySQL 和 Oracle 时,由于缺乏多样化的随机数据生成方案,或者实现成本过高,构造随机数据的开发成本受到了影响。OceanBase在老版本中虽然有相应的解决方案,但语法复杂和性能较差等问题仍然存在。 现在&#xf…...

nvm node.js的安装

说明:部分但不全面的记录 因为过程中没有截图,仅用于自己的学习与总结 过程中借鉴的优秀博客 可以参考 1,npm install 或者npm init vuelatest报错 2,了解后 发现是nvm使用的版本较低,于是涉及nvm卸载 重新下载最新版本的nvm 2…...

【Docker】安装Redis、Nginx

1、安装redis mkdir -p /docker/redis mkdir -p /docker/redis/data touch /docker/redis/redis.conf touch /docker/redis/redis.bash编辑配置文件 vim /docker/redis/redis.conf # Redis配置文件# Redis默认不是以守护进程的方式运行,可以通过该配置项修改&…...

RK3568 UBUNTU修改网卡名称

​​​​​​RK3568 UBUNTU系统有两个网卡,ETH0和ETH1,于设备机壳丝印ETH1、ETH2无法对应,于是百度了一下相关的修改办法,有修改设备树的等等,挑了一个最简单,验证通过 #第1步,将原网卡关闭ip …...

【华为OD机试C++】统计字符

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码描述 输入一行字符,分别统计出包含英文字母、空格、数字和其它…...

百货商场用户画像描绘and价值分析(下)

目录 内容概述数据说明技术点主要内容4 会员用户画像和特征字段创造4.1 构建会员用户基本特征标签4.2 会员用户词云分析 5 会员用户细分和营销方案制定5.1 会员用户的聚类分析及可视化5.2 对会员用户进行精细划分并分析不同群体带来的价值差异 内容概述 本项目内容主要是基于P…...

spring-cloud微服务gateway

核心部分:routes(路由), predicates(断言),filters(过滤器) id:可以理解为是这组配置的一个id值,请保证他的唯一的,可以设置为和服务名一致 uri:可以理解为是通过条件匹配之后需要路由到&…...

【python】在pycharm创建一个新的项目

双击打开pycharm,选择create new project 选择create,后进入项目 右键项目根目录,选择new一个新的python file 随意命名一下 输入p 然后后面就会出现智能补全提示,此时轻敲一下tab,代码就写好了,非常的方便 右键执行一下代码,下面两个直接运行和debug运行都是可以的 小结 …...

java小作业(9)----用函数实现斐波那契数列(第二遍)

代码&#xff1a; public class Main {public static void main(String[] args) {int n 20; // 你可以更改这个值来计算和输出前n个斐波那契数for (int i 0; i < n; i) {System.out.print(fibonacci(i) " ");}}public static int fibonacci(int n) {if (n <…...

部署项目的时候的一些错误

项目打jar包&#xff0c;找不到资源&#xff0c;连接不上数据库 项目打包后无法运行 直接在idea运行可以 解决方法&#xff1a;pom文件中增加&#xff08;配置文件如果是yml&#xff0c;写yml&#xff09; <resources><resource><directory>src/main/java&…...

1044: 顺序栈基本操作的实现

解法&#xff1a; #include<iostream> #include<stack> using namespace std; int main() {int n, a, k;stack<int> sk;cin >> n;while (n--) {cin >> a;sk.push(a);}cin >> k;while (k--) {sk.pop();}if (!sk.empty()) {cout << s…...

微信小程序(总结)

1、wx.createSelectorQuery 在微信小程序中&#xff0c;wx.createSelectorQuery 是用于创建一个 SelectorQuery 对象的方法&#xff0c;而 this.createSelectorQuery 是在组件中获取元素的方法。 使用 wx.createSelectorQuery 创建的 SelectorQuery 对象可以用于获取页面中的…...

C#医学实验室/检验信息管理系统(LIS系统)源码

目录 检验系统的总体目标 LIS主要包括以下功能&#xff1a; LIS是集&#xff1a;申请、采样、核收、计费、检验、审核、发布、质控、耗材控制等检验科工作为一体的信息管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c;系统保存检验信息的工具&a…...

Linux驱动编程-module_platform_driver注册platform_driver

使用platform总线驱动模式编写Linux驱动时&#xff0c;需要注册platform_driver&#xff08;用于跟.dts文件的platform_device匹配&#xff09;。下面介绍2种常用注册platform_driver方法&#xff1a; 1、module_init()、module_exit() /* 定义平台drv&#xff0c;通过.name来…...

论文解读 --- 《针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测》

开篇 今天我们继续来解读安全行业优秀论文&#xff0c;通过学习他人的智慧成果&#xff0c;可以不断丰富我们的安全视野&#xff0c;使用它山之石来破解自身的难题。 这次要解读的论文为《Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for…...

在Spring Boot实战中碰到的拦截器与过滤器是什么?

在Spring Boot实战中&#xff0c;拦截器&#xff08;Interceptors&#xff09;和过滤器&#xff08;Filters&#xff09;是两个常用的概念&#xff0c;它们用于在应用程序中实现一些通用的逻辑&#xff0c;如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...