当前位置: 首页 > 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中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...