关于对计算机发展史、冯诺依曼体系、CPU基本工作流程以及关于编程语言的简单认识

news2024/12/22 20:57:58

关于计算机发展史:

关于计算机发展史,大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。

公元前2500年,算盘已经出现;

1694 年,德国博物学家 戈特弗里德·莱布尼兹建造了“步进计算器”。 关于步进计算机,就是利用了巧妙的机械结构,包含了一连串的可以转动的齿轮,每个齿轮10个齿,表示0-9的数字,当一个齿轮转满一圈后旁边的齿轮的会转一圈,这样就可以做加法,相反,反向转就可以做减法。同时,乘法和除法也是可以的,就是将加法和减法转换成连续的加减法而已。

1822年,英国科学家查尔斯·巴贝奇设计了"差分机"模型;1991年,才被现代科学家根据手稿建造完成。利用差分原理,它能提高乘法速度和改进对数表等数字表的精确度。

1890 年,美国科学家为了解决人口普查中的计算问题,发明了“打孔卡片制表机”。

1943年,英国制造了第一个大规模使用“真空管”的计算机 —— 巨人一号,用于破解纳粹通信密码,这一成功直接促成了著名的“诺曼底登陆”。

1945年,第一台电子通用计算机在“宾夕法尼亚大学"完成建造。这就不得不提到我们的两位祖师爷,图灵和冯诺依曼两位大佬,关于通用型计算机,其愿景是图灵提出,其设计实现是冯诺依曼完成。

......

关于冯诺依曼体系:

CPU是计算机最核心的部分,进行算术运算和逻辑判断。关于CPU最重要的指标,就是“主频”2.9GHz,其描述了CPU的运算速度,可以近似的视为每秒钟能够执行29亿条指令。

其中输入设备,包含了键盘、鼠标、麦克风、摄像头等等。

其中输出设备,包含显示器、音响等等。

关于CPU基本工作流程:

关于加减乘除运算:借助于二极管等设备的特殊物理性质,可以构建一些门电路:与门、或门、非门。输入1或者0这样的电信号,通过这几个门电路且根据相同为0相异为1这样的规则来计算出与或非的值。两个比特位相加就构成了半加器,三个比特位相加就构成了全加器,半加器和全加器就构成了加法器,就可以针对两个二进制的数字进行运算了。有加法器,可以算加法,也可以算减法(补码),同时也可以算乘法(连续相加)和除法(连续相减)。

CPU工作流程:

CPU 眼中只有指令,没有其他的概念。cpu从内存读取一条指令并放在寄存器中,然后寄存器中的指令经过译码,译成这条指令是哪种操作和操作数,然后CPU通过寻址操作从内存中读取操作数到寄存器中,暂时保存起来。运算单元通过指令中的操作码,对寄存器中的数进行操作。最后修改指令计数器,决定下一条指令的地址。cpu再重复以上步骤,处于内存代码段的指令被逐个的执行,直到程序结束为止。

关于编程语言

世界上的编程语言种类繁多,大概可以分为三个大类:

1.机器语言

是二进制指令,CPU能够识别这种指令。

2.汇编语言

通过简单的单词作为助记符,代替二进制指令。每一个机器指令,都对应到一条汇编语言。厂商在设计CPU之初就设计好了“指令集”,CPU能够支持哪些指令以及这些指令要怎么工作。不同的CPU有不同的架构体系,所支持的“指令集”也是不一样的。即使是同类架构,不同的版本,指令集也是不一样的,这就导致了汇编语言不一样。所以,在学习汇编语言的时候,一定要针对具体哪个架构下的汇编语言。

3.高级语言

高级语言有很多,比如C、C++、C#、Java、JavaScript、PHP、Python.....。C++是在C的基础上做了改进,所以多了两个加号,C++是追求极致性能的。C#又是在C++的基础上做了改进,所以又多了两个加号,C#和SQL Server都是微软搞的,前期微软为了搞捆绑销售,C#和SQL Server都只支持Windows,后来觉醒了,也能够支持跨平台了,但是已经晚了,目前的市场份额基本已经被占完了。Java和JavaScript(JS)并没有任何联系,在JavaScript诞生之初,Java是当时最火的语言,为了蹭一波热度,才有了这个名字。其中PHP在2000年代初,是网站开发最好的选择,当初号称自己是世界上最好的编程语言(梗)。下面重点介绍一下Java的前世今生:

Java诞生之初是用来做嵌入式开发的,做一款智能面包机,但是因为种种缘故没能成功。

然后就是搞了网页开发,开发动态网页,实现用户和网页之间的动态操作。那么这个时候JS也就诞生了,为了蹭热度起名JavaScript。后来Java遭到微软封杀,是因为微软在当时搞了一个浏览器IE,在当时是最强的浏览器。为了扶持自家的编程语言VBScript,就封杀Java,且IE和Windows进行捆绑销售的。但是VBScript没有能够成长起来,JS渔翁得利了,一跃成为前端开发最主流的选择了,一直到30年后的今天,JS又快被微软终结了,微软的TypeScript逐渐在取代JS了,终将蹭着被蹭啊!但是Java并没有被打倒,把重点放到了后段开发和嵌入式开发(手机程序)。在当时,诺基亚和摩托诺拉这些功能机也能够安装第三方程序,但是嵌入式开发(手机程序)这个方向好景不长,直到2007年乔布斯发布了苹果手机,移动互联网的时代开始了,诺基亚和摩托诺拉这些传统厂商很快就凉了,Java在这个方向也就凉了。在后端开发这个方向,当时也不只只有Java,还有PHP、ASP(微软)、Python等等,当时这些语言也逐渐显示出疲态了,因为做一些简单的网站还比较好,但是网站越来越复杂,且当时都是把界面和业务逻辑混合到一起写的,所以就越来越力不从心了。随着时间的推移,开始重新布局了,在移动端方面,安卓上面的原生开发应用的语言选择了Java,很快安卓就成为了世界上第一大操作系统。这安卓赚钱的阶段还有一个小插曲,当时oracle已经把Java收购了,因此oracle看人家赚钱了,就控告谷歌,索要天价版权费,后面谷歌败诉,但是谷歌已经在搞下一代移动端操作以及搭载新一代编程语言,后面发展如何就拭目以待了。Java在后端重新发力了,随着Spring社区的崛起,给Java后端开发注入了新鲜的血液,一跃成为后端开发最主流的语言之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Djiango实现用户管理增删改成功能实战

1.0定义 前后端不分离模式 前后端分离是指前端页面看到的效果都是由后端控制,即后端渲染HTML页面,前端与后端的耦合度比较高 前后端分离模式 后端仅返回前端所需要的数据,不在渲染HTML页面,不在控制前端的效果,至…

八、kubernetes1.25应用升级、回滚

1、概述 用户希望应用程序始终可用,而开发人员则需要每天多次部署它们的新版本。在 Kubernetes 中,这些是通过滚动更新(Rolling Updates)完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deploym…

Sentinel流控

Sentinel 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.sentinel特性 Sentinel 具有以下特征: 丰富的应用场景: Sentinel 承接了…

最优化方法——最小二乘法与梯度下降法

目录 系列文章目录 一、问题 二、实验思路综述 1.实验工具及算法 2.实验数据 3.实验目标 4.实验步骤 三、最小二乘问题引入 1.最小二乘问题样例 2.最小二乘问题解决方案及数学模型化 3.相关线性代数知识导入 3.1 梯度 3.2 矩阵的逆 3.3 QR分解 四、最小二乘法 …

用 ChatGPT 运行 Python

最近,我一直在阅读一些关于ChatGPT的有趣文章。在一篇文章中,有人发明了一种新的语言,并让ChatGPT运行它。在另一篇文章中,有人在ChatGPT中运行一个虚拟机。后者启发我提出了下面这个问题。你能在ChatGPT中运行一个交互式Python会…

【docker常用命令】

一、帮助启动类命令 (1)启动docker systemctl start docker(2)停止docker systemctl stop docker(3)重启docker systemctl restart docker(4)查看docker状态 systemctl status…

【数据预处理】基于Pandas的数据预处理技术【california_housing加州房价数据集】_后9个任务

文章目录一.需求分析二.需求解决2.1 对第一个特征(收入中位数)排序后画散点图2.2 对第一个特征(收入中位数)画分位数图并分析2.3 【选做】对所有特征画分位数图并进行分析2.4 使用线性回归方法拟合第一个特征(收入中位…

基于c# asp.net电子病历管理系统的设计与实现

摘 要 网络的广泛应用给生活带来了十分的便利。所以把电子病历管理与现在网络相结合,利用net语言建设电子病历管理系统,实现电子病历管理的信息化。则对于进一步提高医院的发展,丰富电子病历管理经验能起到不少的促进作用。 电子病历管理系统…

AbstractQueueSynchronizer

AbstractQueueSynchronizer AbstractQueueSynchronizer 是基于 FIFO线程等待队列 的一个同步器开发框架。 这篇文章首先介绍同步器概念,然后介绍AQS的结构原理 什么是Synchronizer(同步器) 并发环境下,Synchronizer用于实现线…

Windows和Mac系统实现本地部署WebPageTest工具

在项目开发或者测试的过程中,由于没有上线,我们在公网上无法访问我们的网站,但同时我们又需要查看浏览器性能,这样我们就需要在本地部署WebPageTest工具以协助进行性能测试 具体实现步骤: Windows系统: …

FFT求多项式乘积

之前在b站上看到了一些介绍FFT的视频 《快速傅里叶变换(FFT)——有史以来最巧妙的算法?》 《这个算法改变了世界》 于是打算写一篇记录一下qwq(本博客中的截图基本上来源于第一个视频) Fast Fourier Transform 是一种能在O(nlogn)O(nlogn)…

企业营销数字化转型:如何转型、如何选品、如何用好?

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点2023年,如何科学制定年度规划?《底层逻辑》高清配图清华大学256页PPT元宇宙研究报告.pdf(附下载链接)…

【LeetCode】1759. 统计同构子字符串的数目

统计同构子字符串的数目 题目描述 给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 109 7 取余 后的结果。 同构字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串…

自定义报表-FineReport JS实现隐藏Tab页

1. 概述 1.1 问题描述 在实际项目中,使用决策报表的时候,有时会用到在决策报表参数面板获取报表控件的值,那么该如何实现呢? 1.2 实现思路 使用 JS 获取报表主体的控件值: _g().getWidgetByName("area").…

【金猿人物展】数睿数据创始人兼CEO穆鸿:大数据价值创造关键在于应用普惠...

‍穆鸿本文由数睿数据创始人兼CEO穆鸿撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业事情还得从我2022年这一年经历的一些事情谈起,由于工作的原因,我要经常往返…

Python量化交易04——基于机器学习的交易策略

参考书目:深入浅出Python量化交易实战 学量化肯定要用的上机器学习这种强大的预测技术。本次使用机器学习构建一些简单的预测进行量化交易,使用Python进行回测。 获取数据 import pandas as pd import tushare as ts import numpy as npfrom sklearn.neighbors imp…

线程池设计与实现C

线程池实现 结构设计 先上图: 参数 线程池: 包含一个执行队列、一个任务队列mutex用来在多个线程取任务时锁任务队列,cond用来在任务队列为空时锁任务队列 如线程A锁了任务队列,去取任务时,又发现任务队列为空&…

【C++求解数学题】大圆圈里面三角形个数相等

本文介绍的问题是一道来自于二年级(上)数学的练习题。 问题 在下图中画8个Δ\DeltaΔ,使每个大圆圈里都有4个Δ\DeltaΔ. 示例: 每个大圆圈里面均有4个Δ\DeltaΔ. 方法 按照“变量-范围-条件”的三段式穷举法解题框架,对…

分布式系列之聊聊Nginx实现原理

Nginx作为开源的轻量级的HTTP服务器,广泛应用于分布式应用架构中。本文简要介绍了Nginx的特点及使用场景、Nginx的进程模型和请求处理流程,并结合不同场景进行配置,对Nginx的架构和实现原理有个初步的了解。 1、Nginx是什么 Nginx&#xff0…

Echarts之甘特图type: ‘custom‘参数详解

甘特图 const groupData XEUtils.groupBy(data, "eqpName"); //分组后的数据 const yAxisData Object.keys(groupData); const seriesData Object.keys(groupData).map((item, index) > {let arr [];groupData[item].forEach((GItem) > {arr.push([index,f…