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

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。 封装该方法&#xff0c…...

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的情况。因为这个问题我也是鼓捣了好久,上网查了许多资料才最终解决&#xf…...

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)是表达过去发生的动作、状态或事实的核心时态。这一时态都扮演着不可或缺的角色,本篇文章将全面讲解一般过去时的定义、结构、用法以及常见的动词变化,通过例句和详细的解释帮你理解这一时态。 文章…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键&#xff…...