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)是表达过去发生的动作、状态或事实的核心时态。这一时态都扮演着不可或缺的角色,本篇文章将全面讲解一般过去时的定义、结构、用法以及常见的动词变化,通过例句和详细的解释帮你理解这一时态。 文章…...
Qwen3-ASR-1.7B实战案例:多语言+22种方言自动识别Web界面操作指南
Qwen3-ASR-1.7B实战案例:多语言22种方言自动识别Web界面操作指南 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支…...
使用Prometheus监控Qwen3-TTS服务的关键指标
使用Prometheus监控Qwen3-TTS服务的关键指标 1. 引言 语音合成服务在生产环境中运行时,监控是确保稳定性和性能的关键环节。Qwen3-TTS-12Hz-1.7B-Base作为高质量的语音合成模型,需要实时掌握其运行状态、性能指标和潜在问题。通过Prometheus监控体系&a…...
OpenClaw配置可视化:QwQ-32B模型参数调优Web界面开发
OpenClaw配置可视化:QwQ-32B模型参数调优Web界面开发 1. 为什么需要模型参数可视化调优 在本地部署OpenClaw对接QwQ-32B模型的过程中,我发现一个痛点问题:每次调整模型参数都需要手动修改配置文件或通过命令行传递参数。这对于需要频繁测试…...
Ansible实战:5分钟搞定NFS服务自动化部署(附完整配置模板)
Ansible自动化部署NFS服务:从零到生产级配置实战 在分布式架构和微服务盛行的时代,NFS(网络文件系统)作为经典的共享存储解决方案,依然是许多企业基础架构中不可或缺的一环。本文将带您深入探索如何利用Ansible这一自动…...
CTFShow _Web应用安全与防护 第二章WP
1.一句话木马变形看到了php代码解释器,那么就可以输入一些php代码,看看是否有什么过滤,先输入一个 phpinfo();成功返回了php相关信息,那么可以尝试一些命令注入system(ls);成功返回了当前目录下的文件,看到了flag文件&…...
从CUDA到MUSA(四):GPU架构揭秘——从Warp到Occupancy
引言:从代码到硬件的深层理解 在前三篇博客中,我们完成了GPU编程的"入门三部曲":理解异构计算的设计哲学、编写第一个向量加法程序、掌握多维线程组织与数据映射。至此,你已经能够写出正确的GPU程序。 但正确只是起点。…...
UG CAM加工二次开发,型腔铣CAVITY_MILL设置 切削参数-刀路方向 向内、向外API方法
/*这里operTag为一个工序操作,可以是已经创建好的操作,也可以是新创建的操作*/ tag_t operTag;//设置切削刀路方向:向内-向外 UF_PARAM_set_int_value (operTag, UF_PARAM_CUT_FOLLOW_PROGRESSION, UF_PARAM_cut_follow_progression_inward)…...
力扣Hot100系列21(Java)——[多维动态规划]总结(不同路径,最小路径和,最长回文子串,最长公共子序列, 编辑距离)
文章目录前言一、不同路径1.题目2.代码3.例子二、最小路径和1.题目2.代码3.例子三、最长回文子串1.题目2.代码3.例子四、最长公共子序列1.题目2.代码3.例子五、 编辑距离1.题目2.代码3.例子前言 本文记录力扣Hot100里面关于多维动态规划的五道题,包括常见解法和一些…...
847-便捷视频剪切-视频片段删除合并工具V1.0
对单个视频文件进行剪辑操作,删除视频中的1个片段或多个片段,删除多个片段后自动合并未删除的视频片段,生成的视频为标准H264编码格式的mp4格式视频。 核心功能 视频播放与预览:拖入视频播放预览区间标记:可视化标记需…...
大疆司空平台接入实战:OpenAPI无权限异常排查
前言 调用大疆司空 2 OpenAPI 接口时,很多开发者都会遇到 403 无权限异常 这个问题。本文基于实际项目排错经验,整理了完整的排查步骤,帮助你快速定位并解决问题。 403 错误是大疆 OpenAPI 开发中最常见的问题之一,据统计&#…...
