1.2.3计算机软件

一个完整的计算机系统由硬件和软件组成,用户使用软件,而软件运行在硬件之上,软件进一步的划分为两类:应用软件和系统软件。普通用户通常只会跟应用软件打交道。应用软件是为了解决用户的某种特定的需求而研发出来的。除了每个人都在用的这些软件之外,也有一些专业人士使用的软件,比如说设计人员使用 Photoshop,以及CAD这类的工程制图软件,这些都是我们熟悉的应用软件。应用软件直接为用户提供服务,系统软件负责管理底层的硬件资源并且向上层的这些应用软件提供服务,比如操作系统是一种最典型的系统软件,无论是抖音、qq 还是美图,在手机上运行的时候都需要得到安卓操作系统或者 ios 操作系统的支持,所以操作系统作为一种系统软件为上层的应用软件提供了服务,大多数的应用软件在开发的时候都会需要使用到数据库的功能,数据库管理系统给上层的应用软件提供了数据库相关的一些服务,因此数据库管理系统它也属于系统软件。我们身处于一个网络时代,几乎所有的应用软件都会使用到网络软件提供的一些功能,才可以通过网络来传递信息,像网卡驱动器这一类的网络软件也属于系统软件为上层的应用软件提供了服务与支持,所有的软件在开发的时候都是使用高级语言来编写的,而高级语言翻译成更低级的机器可以识别的语言,就需要语言处理程序的服务,同时当我们在制作这些软件的时候也需要调试软件的功能,调试程序属于服务程序的一种,它也是为上层的应用软件提供服务的,在编写这些软件的时候我们也会使用到一些标准的程序库,比如我们熟悉的 printf,这些标准程序库也为上层的应用软件开发提供了支持。刚才列举的这些例子都属于系统软件,不难感受到系统软件类似于软件世界里边的基建,为上层的应用软件提供了最基础的一些功能和服务。这些软件运行在计算机硬件之上,而计算机的硬件它只能识别二进制的机器语言,显然现在编写程序不可能用0101这种二进制的机器语言去直接的编写。

通常是用一些高级语言编写程序,然后再把编写的源程序去翻译成低级的机器语言,比如我们编写了一个 c 语言的程序之后通常需要经过编译和汇编这样的两步把它翻译成等价的机器语言程序,编译器或者叫编译程序完成了编译的这一步,把高级的 c 语言翻译成了与之等价的汇编语言,第二步在经过汇编器或者叫汇编程序的翻译之后,就可以把汇编语言翻译成与之等价的机器语言,汇编语言采用助记符的方式更方便于人类理解,相比之下让人类直接去阅读这种0101的二进制机器语言是很困难的,这就是三种级别的语言。我们现在编程使用的C、C++、Java、Python这些都属于高级语言,而汇编语言和机器语言都属于低级的语言。刚才我们举了C语言程序的例子经过编译和汇编这样的两步,翻译为了与之等价的机器语言程序。还有一些编程语言可以通过编译器的翻译直接把源程序翻译成机器语言程序,也就是说有的编程语言会跳过汇编语言的这个中间阶段。

还有一些解释型的语言,比如说JavaScript或者shell脚本,这类的语言在程序执行的时候通过解释程序,把这种高级语言写的代码翻译成等价的机器语言指令。解释程序和编译程序都是把高级语言直接翻译成机器语言那二者的区别是什么呢?首先编译程序是把高级语言编写的原程序全部一次性翻译成机器语言程序,然后再来执行这个机器语言程序。举一个典型的例子在 windows 电脑当中用 c语言编写的程序最终会被我们生成一个.exe 文件,那这个.exe 文件就是机器语言程序,可以直接被 cpu 识别和运行,相比之下这种解释型的语言是在程序执行的时候每执行一句程序代码,就把这一句代码,翻译成与之等价的机器语言指令,也就是说每执行一句就翻译一句。那这就意味着如果一个程序语句被多次执行那么我是不是也得多次翻译,这就会导致效率的降低。

假如现在需要把 a 这个人说的一段中文,翻译成英文给 b 听,编译程序的这种方式就有点类似于你直接把 a 说的中文用纸质的方式把它一次性全部翻译,然后交给 b ,而解释程序的这种方式有点类似于在做同声传译, a 说一句翻译一句。想象一下如果 a 在不断重复的说同一段中文那用上面这种方式你是不是只需要进行一次翻译,而如果采用同声传译的方式那无论 a 重复了多少遍这一段中文那只要他说一次你是不是还得再翻译一次,所以通常来说这种解释型的语言要比这种编译型的语言效率要更低,最后还需要补充一个概念,无论是编译器会编器还是解释器他们都是把高级语言翻译成更低级的语言,所以这三者都可以统称为翻译程序。
一个程序或者说一个软件它就是由若干的指令序列来组成的,CPU会负责执行这些指令,由CPU 这种硬件去完成每一条指令所要求的功能,最终来实现这个软件所要求的功能目标。事实上软件和硬件在逻辑功能上是等价的,同一个逻辑功能我们既可以用硬件来实现,也可以用软件的方式来实现。

举个例子,假设用户需要计算九八五乘以六这个乘法运算,如果这个硬件它本身就设计了一些电路可以直接支持乘法运算,相应的我们就可以直接使用一条乘法指令来完成九八五乘以六这个乘法运算,这就是用纯硬件的方式,用乘法电路实现了这个功能需求。假设这个CPU没有乘法电路,同时
也不支持乘法指令,可以采取另一种软件的思路去实现九八五乘以六。比如这个硬件它只要支持加法那么我们就可以编写六条加法指令,来完成六个九八五相加的操作。六个九八五相加逻辑上功能效果也是相当于九八五乘以六,通过这个例子大家应该能够感受到什么叫软件和硬件的逻辑功能等价性。同一个功能它可以用硬件实现也可以用软件实现。用硬件实现就需要设计复杂的电路,同时这个电路的制造成本也会更高,好处也很明显,会让运算的速度提升也就是让性能变强。如果用软件实现同样的逻辑功能,可以让电路的制造成本变低但同时运算的性能肯定也会下降。
既然软件和硬件在逻辑功能上是等价的,那在设计一个计算机系统的时候,这个计算机系统它到底需要有多少种电路需要支持多少种指令呢,这个就是我们在设计计算机系统的时候需要考虑的一个问题。需要引入一个概念叫做指令集体系结构,英文缩写叫ISA,指令集体系结构规定了软件和硬件之间的界面,当我们在设计一个计算机系统的这个指令集体系结构的时候,要定义这台计算机可以支持哪些指令以及每条指令的作用是什么,每条指令的用法是什么,也就是要清晰的定义软件和硬件之间的界限,既然软件和硬件在逻辑功能上都是等价的,我们可以用两种方式来实现同样的逻辑功能,并且采用软和硬两种方式实现所带来的性能以及成本的高低都各有利弊,所以在设计计算机系统的时候二者之间的界限需要被清晰的划分和定义,既要考虑性能问题也要考虑成本问题。

这个小节当中我们认识了计算机软件,计算机软件可以分为系统软件和应用软件两类,并且介绍了三个级别的语言,分别是高级语言、汇编语言和机器语言,为了把更高级的语言翻译成更低级的机器可以识别的语言,我们通常需要编译器、汇编器或者解释器的帮助,这三者都可以统称为翻译程序,都是把更高级的语言翻译成更低级的语言。这些概念可能在选择题当中进行考察,这个小节的最后也介绍了软件和硬件在逻辑功能上是具有等价性的,同一个功能我们既可以用硬件实现,也可以用软件实现,用硬件的方式实现性能高成本也更高,用软件的方式去实现性能更差成本也会更低。为了综合的考虑到性能和成本的平衡,在设计一个计算机系统的时候需要考虑到这个计算机系统的指令集体系结构,也就是要清晰的界定,这台计算机的硬件和软件之间的界限。需要设计出这台计算机可以支持哪些指令,每条指令的作用是什么,以及每条指令的用法是什么。
相关文章:
1.2.3计算机软件
一个完整的计算机系统由硬件和软件组成,用户使用软件,而软件运行在硬件之上,软件进一步的划分为两类:应用软件和系统软件。普通用户通常只会跟应用软件打交道。应用软件是为了解决用户的某种特定的需求而研发出来的。除了每个人都…...
二、uni-forms
避坑指南:uni-forms表单在uni-app中的实践经验-CSDN博客...
Android13开机向导
文章目录 前言需求-场景第三方资料说明需求思路按照平台 思路 从配置上去 feature换个思路,去feature。SimMissingActivity 判断跳过逻辑SetupWizardUtils 判断SIM 、 hasSystemFeature FEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManage…...
软件测试丨Appium 源码分析与定制
在本文中,我们将深入Appium的源码,探索它的底层架构、定制化使用方法和给软件测试带来的优势。我们将详细介绍这些技术如何解决实际问题,并与大家分享一些实用的案例,以帮助读者更好地理解和应用这一技术。 Appium简介 什么是App…...
1.网络知识-IP与子网掩码的关系及计算实例
IP与子网掩码 说实话,之前没有注意过,今天我打开自己的办公地电脑,看到我的网络配置如下: 我看到我的子网掩码是255.255.254.0,我就奇怪了,我经常见到的子网掩码都是255.255.255.0啊?难道公司配…...
Android中Gradle常用配置
前言 本文记录了一些常用的gradle配置,基本上都是平时开发中可能会使用到的,如果有新内容会不定时更新,附官网 1.依赖库版本写法 不推荐写法: dependencies {compile com.example.code.abc:def:2. // 不推荐的写法 }这样写虽然可…...
Linux操作系统3-文件与IO操作2(文件描述符fd与文件重定向)
上篇文章:Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)-CSDN博客 本篇代码Gitee仓库:myLerningCode 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:文件描述符fd与文件重定向 目录 一. 文件描述…...
k8s调度策略
调度策略 binpack(装箱策略) Binpacking策略(又称装箱问题)是一种优化算法,用于将物品有效地放入容器(或“箱子”)中,使得所使用的容器数量最少,Kubernetes等集群管理系…...
uniapp中父组件传参到子组件页面渲染不生效问题处理实战记录
上篇文件介绍了,父组件数据更新正常但是页面渲染不生效的问题,详情可以看下:uniapp中父组件数组更新后与页面渲染数组不一致实战记录 本文在此基础上由于新增需求衍生出新的问题.本文只记录一下解决思路. 下面说下新增需求方便理解场景: 商品信息设置中添加抽奖概率设置…...
螺丝螺帽缺陷检测识别数据集,支持yolo,coco,voc三种格式的标记,一共3081张图片
螺丝螺帽缺陷检测识别数据集,支持yolo,coco,voc三种格式的标记,一共3081张图片 3081总图像数 数据集分割 训练组90% 2781图片 有效集7% 220图片 测试集3% 80图片 预处理…...
一个简单带颜色的Map
越简单 越实用。越少设计,越易懂。 需求背景: 创建方法,声明一个hashset, 元素为 {“#DE3200”, “#FA8C00”, “#027B00”, “#27B600”, “#5EB600”} 。 对应的key为 key1 、key2、key3、key4、key5。 封装该方法,…...
kubeadm安装K8s集群之基础环境配置
系列文章目录 1.kubeadm安装K8s集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx 3.kubeadm安装K8s集群之master节点加入 4.kubeadm安装K8s集群之worker1节点加入 kubeadm安装K8s集群基础环境配置 1.首先确保所有机器可以通信,然后配置主机host…...
前端实现在线预览excel文件
在前端开发中,经常会遇到需要在线预览各种文件的需求。本文将介绍如何使用前端技术实现在线预览 Excel 文件的功能。 一、基于微软office服务的excel预览 获取要预览的 Excel 文件的 URL(例如存储在 OneDrive 或 SharePoint 上的文件)。 使…...
关于idea-Java-servlet-Tomcat-Web开发中出现404NOT FOUND问题的解决
在做web项目时,第一次使用servlet开发链接前端和后端的操作,果不其然,遇到了诸多问题,而遇到最多的就是运行项目打开页面时出现404NOT FOUND的情况。因为这个问题我也是鼓捣了好久,上网查了许多资料才最终解决…...
SCRM私域流量管理工具助力企业微信电商转型升级
内容概要 在当今数字化时代,SCRM(社交客户关系管理)私域流量管理工具正逐渐成为企业转型的重要助力。尤其是在电商领域,企业微信的兴起为许多公司打开了新的销售渠道,通过SCRM系统的高效整合,企业能够更加…...
三相异步电动机为什么能够旋转?
三相异步电动机,作为一种广泛应用于工业、农业及其他领域的电动机,其工作原理的理解对于工程技术人员以及相关从业者来说至关重要。 一、三相异步电动机的基本结构 三相异步电动机主要由定子、转子和机壳组成。定子是电动机的静止部分,包含…...
优化移动端H5:常见问题与解决方案
移动端H5开发中的“坑”与解决方案 本文介绍了开发中遇到的几个关于移动端H5开发中的小问题,以及解决的方法。 一、iOS滑动不流畅问题 在iOS设备上,H5页面的滑动效果有时会出现不流畅的情况,特别是在页面高度超过一屏时。这通常是由于iOS的…...
TM1不藏私系列——#10. TM1快速运算的秘密武器-Feeder
与其他BI产品对比,TM1的快速运算能力一骑绝尘。 但是在多维度的数据组合下,TM1是依据什么进行运算的呢? 今天将和大家一同了解TM1快速运算的秘密武器-Feeder。 上期我们提到通过配置维度中的元素权重,可以在合并层级加总计算。除…...
【Python】【Conda 】Conda vs venv:Python开发者的虚拟环境选择指南
目录 引言一、概述1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、安装与设置2.1 安装 Conda 虚拟环境2.2 安装 Python venv 虚拟环境 三、依赖管理3.1 Conda 依赖管理3.2 Python venv 依赖管理 四、适用场景五、性能与资源占用5.1 Conda 性能与资源占用5.2 Python venv 性能…...
【从0学英语】06.时态 - 一般过去时
一般过去时(Past Simple Tense)是表达过去发生的动作、状态或事实的核心时态。这一时态都扮演着不可或缺的角色,本篇文章将全面讲解一般过去时的定义、结构、用法以及常见的动词变化,通过例句和详细的解释帮你理解这一时态。 文章…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
