本章的第一个概念是计算机系统(computer system)。
计算机系统包括读取并执行程序的 中央处理单元(CPU,
保存程序和数据的存储器以及将芯片转换为实用系统的 其他子系统。
这些子系统会使CPU与显示器、打印机、Internet等外部设备之间的通信变得更加容易。
计算机的性能既取决于CPU;也取决于其他子系统。如果不能高效进行数据传输,
仅仅提高CPU的性能是毫无意义的。
Figure :
Figure :
可编程计算机接收两种类型的输入: 它将要处理的 数据,
以及准确描述要如何处理输入数据的程序。
程序 不过是计算机所执行的完成给定任务的 操作序列。
Figure :
计算机从存储器中读出指令并执行这些指令(即完成或执行指令定义的动作)。
执行指令时,可能要从存储器中读出数据,对数据进行操作,将数据写回存储器。
寄存器是CPU内部用来存放数据的存储单元。时钟提供了脉冲流,
所有内部操作都在 时钟脉冲 的触发下进行。时钟频率是决定计算机速度的一个因素
Figure :
CPU先读取一条指令;在CPU分析或解码指令;从存储器中读出这条指令所需的所有数据。
###计算机指令
尽管计算机能够执行上百种不同指令,但下面的6条 基本指令 可以将所有计算机指令进行分类:
体系结构: 描述了一些与计算机组成方式有关的内容;因为不同的用户会从完全不同的角度看待计算机。
寄存器
计算机体系结构通常被认为是程序员视角中的计算机
计算机 组成表示其体系结构的具体实现
机器码 汇编语言 高级语言
计算机上执行的代码表示为二进制1和0组成的串,被称作机器码(machine code)。
每种计算机都只能执行一种特定的机器码。
人类可读的机器码(例如 ADD R0 ,Time)叫作汇编语言。
能够在类型完全不同的计算机上运行,与底层计算机体系结构几乎没有关系的代码叫作高级语言
(比如C或Java)。在执行之前,高级语言程序必须首先被编译为计算机的本地机器码。
体系结构与组成是不能完全分离的。例如;微处理器内的32位寄存器可以按照
与16位计算机相同的方式实现,如使用16位数据总线,以16位为单位传输数据,
功能单元也是16位的。如果程序员指示计算机将寄存器A中的32位数据复制到寄存器B中,
他将要执行一个32位操作,但16位计算机将执行两个16位操作,
这对程序员来说是完全不可见的。
按照这个例子,我们可以说一台计算机的体系结构是32位的,但它的组成却是16位的。
指令集体系结构包括: 数据类型(每个字的位数以及各个位的含义),
用来保存临时结果的寄存器,指令的类型和格式,以及寻址方式
(表示数据在存储器中存放位置的方法)。
不同层次的程序员看到的计算机是不一样的。汇编语言程序员看到的计算机与C或Java
等高级语言程序员看到的有很大的区别。
即使都是高级语言程序员,C程序员所看到的也与Prolog或LISP程序员看到的有很大的不同。
微代码(Microcode)与微处理器无关。微代码定义了一组基本操作(微指令),
通过执行这些操作可以解释执行机器码。ADD P,Q,R是一条典型的机器指令,
而微指令可能像“将数据从寄存器X移到总线Y上”那么简单。
如何定义微指令是芯片设计者的职责。
Figure :
最先进的计算机使用了最新的制造技术。
Figure :
时钟
时钟是用于生成 连续 的 间隔固定 的电脉冲流。
之所以被称作时钟,是因为可用这些电脉冲来计时或确定计算机内所有事件的顺序
时钟可用它的 重复速率 或 频率 来定义。
时钟也可以用 时钟脉冲的宽度 或 持续时间 来定义,即频率的倒数
事件由时钟信号触发的数字电路被称作同步的,因为它们由时钟信号来同步。
计算机的发展历史丰富而复杂,远比许多人想象得久远。
人类是会计算的生物。
穴居人发明数学也许不是为了在湿冷的天气里玩数独游戏,而是为了丈量土地、建造房屋和报税。
罗马人将鹅卵石放在小托盘上表示数字。后来,他们沿着线滑动鹅卵石辅助进行加法或减法,从而完成计算。
中亚的一些商店,那里的人们用算盘快速地进行计算。
这些设备都不能称作现代意义上的计算机,因为它们都是不可编程的。
可编程这个概念产生于 工业革命 时期,出于工业化控制的需要。
机电( electromechanical)指那些有 活动件 但却 由电控制 的零件。
到20世纪70年代,Intel公司和摩托罗拉公司都发布了8位微处理器。
第一台可用的微机Altair 8800是由MITS公司于1975年推向市场的。
基于Intel的技术和微软的操作系统软件,IBM 在20世纪80年代推出了个人电脑(PC机)。
由于它的开放式体系结构,PC机在第三方软、硬件开发者中流行起来。
Intel将8080微处理器扩展为包括16位80286(1982年)和32位80386(1985年),
以及含有64位数据总线的Pentium(1990年)。
“摩尔定律”一词是卡沃·米德(Carver Mead)于1975年根据戈登·摩尔(GordonMoore)
所 观察 到集成电路的集成度 每两年 翻一番的现象而创造的。
摩尔定律当然是一个 经验性 的观测结果,但在过去的40年里,
技术的进步的确导致芯片内晶体管数量呈指数式增长。这一增长还伴随着集成电路速度的相应提升。
集成电路内晶体管数量的增加还导致体系结构复杂度的急剧增加以及一些极其聪明的性能提升方法的出现。
RISC(精简指令集)与CISC(复杂指令集)
计算是无所不在的。
多媒体处理能力是现代计算机(包括普适的和传统的个人计算机)的一个重要特征。
多媒体处理(处理和存储音频/视频数据)需要很大的存储容量以及完成大量简单
重复操作的实时处理声音样本和图像像素的能力。
Figure :
求最大游程,即 同一个数字连续出现的最大次数
如果我们从数串的左边开始逐个检查数字,在任何一个位置,我们都会得到以下两个结果之一:
Figure :
算法的一些符号
算法
尽管这个问题相对简单,它却含有解决任一问题所需的全部元素
Figure :
下图描述了程序怎样找出保存在一个 假想存储器 中的数串的最大序列长度。
必须强调的是,这个程序是概念上的而不是实际的,因为真正的计算机指令比其更加基础。
这幅图叫作 存储器映射,它展示了信息在存储器中的存放位置。
它是存储器的一幅快照,因为它表示存储器在某个特定时刻的状态。
存储器映射也包含程序使用的变量和数字串。
存储程序计算机会将指令、变量和常量全部保存在同一个存储器内。
Figure :
寄存器传输语言(RTL): 描述性的语言,不能被执行
RTL符号 | 描述 |
---|
存储系统
存储程序计算机的基本操作
执行指令
在这台机器上执行一条指令需要至少两次访存。
存储程序计算机的一种直观合理的指令格式可以用下面的形式表示
operation Address1 ,Address2 ,Address3
Figure :
指令的4个字段、cpu、存储器和指令执行方式之间关系: 解释执行指令
Figure :
指令格式如下
Operation Address1, Address2
实际的计算机中,一般都 不允许同一条指令中使用两个存储地址;
大多数计算机规定一个地址是存储器地址,另一个地址是寄存器。
指令格式如下
operation address
操作结果将一直保存在寄存器中,直到另一条指令将它送入存储器。
Figure :
CPU变成计算机系统的存储系统和总线系统。存储器被视作一个巨大的通过 地址访问的数组。
例如,如果用数组M表示存储器,那么它的第i个元素可以表示为M[i];
存储器非常重要,因为它的大小(即存储容量)决定了程序能够存储的数据量,
它的速度(访问时间)决定了程序的数据处理速率。
程序体积不断增加,程序所使用的数据总量增加得更快。
计算机技术正在飞速进步,而存储技术从某些方面来说却严重地滞后了。
处理器速度的增加速率远远超过了存储器的。
由于CPU与存储器的性能之间的差距不断加大,设计者们试图通过在使用数据之前将它们
从存储器中取出来消除相对慢速的存储器的影响,以 隐藏等待时间(也叫作 延迟)
上图给出了经典的存储层次图,展示了计算机中存储部件的类型、速度(访问时间)
以及它们在PC机中的典型容量。
总线 将计算机的 两个或多个 功能单元连接在一起并允许它们相互交换数据;
总线还将计算机与外设连接在一起
没有总线的情况
有公共总线情况
总线相关术语
多总线系统: 包括片内总线、功能单元间(如CPU和存储器间)的总线以及总线间的总线。
Figure :
文章浏览阅读871次,点赞11次,收藏3次。*单片机设计介绍, 基于51单片机冰箱温度控制器设计。_基于51单片机的智能冰箱控制系统设计
文章浏览阅读4.8k次。一、sftp服务器进入root模式(下面的操作默认都是在root用户下)#安装openssh-serverapt-get install -y openssh-server创建sftp的组和用户#创建sftp-users组groupadd sftp-users#创建sftp用户目录alicemkdir /home/alice#创建sftp用户alice,并且绑定其主目..._ubuntu sftp服务器查看用户和密码
文章浏览阅读5.9k次,点赞9次,收藏16次。解决了在simulink中使用s-function遇到的报错:State derivatives returned by S-function 'demo' in 'test/S-Function' during flag=1 call must be a real vector of length 2 _state derivatives returned by s-function 'pmsm' in 'ipmsm/ipmsm/s-function1
文章浏览阅读3.1k次。1. 打开配置文件Mac 如下图2. 在文件内部添加这段文字,就可以了:"update_check":false _mac sublime text 取消更新提示
文章浏览阅读548次,点赞10次,收藏6次。Linux系统下DNS配置指南_linux 服务器修改网络dns
文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。
文章浏览阅读6.6k次,点赞10次,收藏82次。在刚开始学Android开发时,下载好了Android studio,但是不知道如何下手,现在就通过一个简单的小项目熟悉如何使用这个软件进行Android开发。前提:下载好Android studio并配置好相关环境。首先介绍一下Android开发过程中需要修改的三类文件:位于java包下的各类activity文件:实现了用户与软件的交互,主要为java代码实现。位于res包下的.xml文件:在layout包里的为布局文件,即Android界面显示的视图,而drawable里则放置了某个控件的_android studio简单项目
文章浏览阅读3.5k次。一、Bootstrap 弹出框弹出框控件类似于提示框,它在鼠标点击到元素后显示,与提示框不同的是它可以显示更多的内容。注意: 弹出框要写在 jQuery 的初始化代码里: 然后在指定的元素上调用 popover() 方法。1.1 基本弹出框通过向元素添加 data-toggle=“popover” 来来创建弹出框。title 属性的内容为弹出框的标题,data-content 属性..._bootstrap 弹出框
文章浏览阅读226次,点赞2次,收藏3次。本项目设计了一款可以触摸控制的天气显示器。主要由Wemos D1 Mini Pro和TFT显示屏组成,利用Wemos D1 Mini Pro作为设备的主控芯片,发出Wi-Fi信号并接收相应指令,通过调用API将接收到的信息传输到TFT显示屏,TFT显示屏将接收到的信息显示出来。该天气显示器实现对所在地区当前的时间与日期;当日的天气信息,如温度、压力、湿度、降雨量;七天的未来预测等功能的显示。设计采用Wemos D1 Mini Pro,利用API将实时获取的天气信息,通过TFT显示屏显示出来。_arduino wemos d1 mini
文章浏览阅读653次。public void initDiffDisplay() { try { DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays = displayManager.getDisplays(); if (presentationDi._android service 检测是否双屏
文章浏览阅读530次,点赞23次,收藏10次。springboot+mybatisplus+mysql 用户端 uniapp(vue语法)管理后台 vue+elementUi。后台服务 springboot+mybatisplus+mysql。一、我们技术使用JAVA后台服务 前后端分离。管理后台 vue+elementUi。用户端 uniapp(vue语法)适配小程序+H5+公众号。私信客服获取演示地址。私信客服获取演示地址。
文章浏览阅读3.3k次,点赞3次,收藏5次。# -*- coding: UTF-8 -*-year = int(input("输入一个年份:"))if year % 100 == 0: if year % 400 == 0: print('%d年是闰年' % year) else: print('%d年不是闰年' % year)else: if year % 4 == 0: print('%d年是闰年' % year) else: print('%d_判断闰年的python程序直接输入一个代表年份的正整数