草庐IT

计算机组成原理-概述篇

兔子队列 2023-11-05 原文

目录

计算机发展简史

网络三定律(IT界三大定律)

计算机分类

计算机的体系和结构

计算机的层次与编程语言

计算机的速度单位

计算机的字符与编码集


计算机发展简史

计算机发展的四个阶段

  • 第一个阶段:电子管计算机
  • 第二次世界大战是电子管计算机产生的催化剂,英国为了解密德国海军的密文,美国为了计算炮弹轨道
  • 特点:1.集成度小,空间占用大;2.功耗高,运行速度慢;3.操作复杂,更换程序需要接线(需要几人一起操作,无显示器)
  • 第二个阶段:晶体管计算机
  • 贝尔实验室的三个科学家发明了晶体管
  • 全世界第一台晶体管计算机是TX-0,来自MIT(麻省理工)林肯实验室;
  • 世界上第一个商用小型计算机是PDP-1;史蒂芬.罗素在PDP-1上开发出史上第一个电脑游戏-空间战争
  • 特点:1.集成度相对较高,空间占用相对小;2.功耗相对较低,运行速度较快;3.操作相对简单,交互更加方便(可一人操作,能配备显示器)
  • 第三个阶段:集成电路计算机
  • 集成电路发明者为德州仪器工程师杰克·基尔比(基于锗的集成电路)(1958年发明)和罗伯特·诺伊斯(基于硅的集成电路)(1959年发明)。它在电路中用字母IC表示
  • 这个装置揭开二十世纪信息革命的序幕,同时宣告信息化时代来临
  • System/360是IBM推出的划时代的大型电脑,这一系列是世界上首个指令集可兼容计算机。
  • 第四个阶段:超大规模集成电路计算机
  • 特点:1.一个芯片集成了上百万的晶体管2.速度更快,体积更小,价格更低,更能被大众接受3.用途丰富
  • 第五个阶段:未来计算机
  • 生物计算机
  • 特点:1.体积小,效率高;
  • 2.不易损坏,生物级别的自动修复
  • 3.不受信号干扰,无热损耗
  • 量子计算机
  • 微型计算机发展历史
  • 微型计算机一般由第三阶段开始
  • 网络三定律(IT界三大定律)

  • 1.摩尔定律2.吉尔德定律3.麦特卡夫定律
  • 摩尔定律:集成电路的性能,每18-24个月就会提示一倍(已经慢慢失效)由英特尔创始人之一戈登.摩尔提出
  • 吉尔德定律:又称胜利者浪费定律,由乔治·吉尔德提出,最为成功的商业运作模式是价格最低的资源将会被尽可能的消耗,以此来保存最昂贵的资源
  • 核心:在未来25年,主干网的带宽每6个月增长一倍,12个月增长两倍,并预言将来上网会免费
  • 麦特卡夫定律:由以太网发明人鲍勃.麦特卡夫提出,核心为:网络价值同网络用户数量的平方成正比
  • 计算机分类

  • 超级计算机
  • 标记它们运算速度的单位是TFlop/s
  • 1TFlop/s=每秒一万亿次浮点计算
  • 大型计算机
  • 又称大型机,大型主机
  • 在大型计算机市场领域,IBM占据着很大的份额
  • 在大型计算机中进行编程的语言:COBOL
  • IBM Z9:使用Linux红帽系统,是NASA最后一台大型机
  • 去IOE行动:I为IBM,提供服务器;O为Oracle,提供数据库和软件;E为EMC,提供存储设备
  • 去IOE由阿里巴巴在2008年提出,原因:1.高维护费2.不够灵活;促使了2009年阿里云的诞生
  • 迷你计算机(服务器)也称小型机
  • 去IOE行动就是把大型机替换成普通服务器
  • 普通服务器已经代替了传统的大型机,成为大规模企业计算的中枢
  • 工作站
  • 高端的通用微型计算机,提供比个人计算机更好性能;外观类似于台式机
  • 微型计算机
  • 又称个人计算机,是世界上最普通的一类计算机,分为台式机,笔记本电脑,一体机
  • 计算机的体系和结构

  • 冯诺依曼体系
  • 定义:将程序指令和数据一起存储的计算机设计概念结构
  • 早期计算机仅含固定用途程序,改变程序得更改结构,重新设计电路----->这样就非常麻烦
  • 所以冯诺依曼就产生一个方法,即把程序存储起来,并设计通用电路,也就是存储程序指令,设计通用电路。这就是冯诺依曼体系的核心
  • 由冯诺依曼体系指导的计算机有5个主件:
  • 必须有一个存储器,一个控制器,一个运算器,有输出设备和输入设备
  • 现代计算机都是冯诺依曼机
  • 冯诺依曼机
  • 1.能够把需要的程序和数据送至计算机(通过输入输出设备实现)
  • 2.能够长期记忆程序、数据、中间结果及最终运算结果的能力(通过存储器实现)
  • 3.能够具备算术,逻辑运算和数据传送等数据加工处理能力(通过运算器和控制器实现)
  • 4.能够按照要求将处理结果输出给用户
  • 将CPU和存储器分开,会造成冯诺依曼瓶颈
  • 计算机的层次与编程语言

  • 假设计算机高级语言是L1,计算机执行的指令是L0. 程序编译过程生成新的L0程序,解释过程不生成新的L0程序
  • 程序编译是L1通过编译器生成L0,再让计算机加以执行;解释过程由L0编写的解释器去解释L1程序
  • 程序编译类语言如C/C++,Object-C,Golang;程序解释类语言如Python,Php,js;
  • 既能编译又能解释的语言有Java,C#
  • 如果用程序来划分计算机系统的话,我们大致可以把它划分为7个程序分别为:
  • 硬件逻辑层,微程序机器层,传统机器层,这3个属于实际机器类;
  • 操作系统层,汇编语言层,高级语言层,应用层,这4个属于虚拟机器类,其中应用层又属于应用软件,其余3个属于系统软件
  • 硬件逻辑层主要由门,触发器等逻辑电路组成,属于电子工程领域
  • 微程序机器层,编程语言是微指令集,由微指令所组成的微程序直接交由硬件执行
  • 传统机器层,编程语言是CPU指令集(机器指令),编程语言和硬件是直接相关的,不同架构的CPU使用不同的CPU指令集
  • 一条机器指令对应一个微程序
  • 一个微程序对应一组微指令
  • 操作系统层,操作系统一方面向上提供了简易的操作界面,同时向下对接指令系统,管理硬件资源,操作系统层是在软件和硬件之间的适配层
  • 汇编语言层,编程语言是汇编语言,汇编语言可以翻译成可直接执行的机器语言,完成翻译的过程的程序就是汇编器
  • 计算机的速度单位

  • 容量单位
  • 在物理层面,用高低电平记录信息(高表1,低表0)
  • 理论上只认识0/1两种状态(0/1称为bit(比特位))
  • 字节:
  • 1Byte=8bits(其余都是1024的进制)
  • 为啥网上购买的移动硬盘500G,格式化之后就只剩465G了?
  • 这是由于硬盘商一般用10进位标记容量,用1000进位而不是1024进位
  • 速度单位
  • 网络速度
  • 为什么电信拉的100M光纤,测试峰值速度只有12M每秒?
  • 由于网络常用单位为Mbps
  • 100M/s=100Mbps=100Mbit/s
  • 100Mbit/s=(100/8)MB/s=12.5MB/s
  • CPU速度
  • CPU的速度一般体现为CPU的时钟频率
  • CPU的时钟频率的单位一般是赫兹(Hz)
  • 主流CPU的时钟频率都在2GHz以上
  • Hz其实就是秒分之一,它是每秒中的周期性变动重复次数的计量
  • 2GHz=2*1000^3Hz=每秒20亿次
  • 计算机的字符与编码集

  • 字符编码集的历史
  • ASCII码
  • 使用7个bits就可以完全表示ASCII码
  • 包含95个可打印字符
  • 33个不可打印字符(包括控制字符)
  • 33+95=128=2的7次方
  • 扩展ASCII码
  • 开始ASCII码很多应用或者国家中的符合都无法表示(其中包括数学符合÷ π等等)
  • 第一次对ASCII码进行扩充,由7bits变为8bits(256个字符)
  • 字符编码集的国际化
  • 各国国家语言体系不一样,有不以有限字符组合的语言(例:中文)
  • 中文编码集GB2312
  • 一共收录了7445个字符(其中包括6763个汉字和682个其它符号)
  • 中文编码集GBK
  • 向下兼容GB2312,向上支持国际ISO标准
  • 收录了21003个汉字,支持全部中日韩汉字
  • 兼容全球的字符集Unicode
  • 也称统一码,万国码,单一码
  • Unicode定义了世界通用的符合集,使用UTF-*实现了编码
  • UTF-8以字节为单位对Unicode进行编码
  • Windows系统默认使用GBK编码
  • 编程推荐使用UTF-8编码

有关计算机组成原理-概述篇的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  4. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  5. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  6. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  7. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

  8. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

  9. ruby - 如何计算自 Ruby 中给定日期以来的周数? - 2

    目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks

  10. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

随机推荐