计算机组成原理学习笔记

计算机发展历史 1946-1957,电子管计算机,1957-1964,晶体管计算机,1964-1980,集成电路计算机,1980-至今,超大规模集成电路计算机 电子管计算机:二战时期,英国为了破译德国的无线电密文,而发明了电子管计算机,最出名的电子管计算机莫过于埃尼阿克(ENIAC),埃尼阿克是美国军方为了计算弹道而诞生的,埃尼阿克长30多米,高2.4米,宽6米,拥有18000多个电子管,70000个电阻,10000个电容,1500个续电,6000多个开关,运行耗电150千瓦,重30吨,占地1500平方英寸(140平方米),造价48万美元,运算速度每秒5000次 电子管计算机特点:集成度低,占空间大,功耗高,操作复杂(更换程序需要接线) 晶体管计算机:诞生原因是因为贝尔实验室发明晶体管,1956年诺贝尔物理奖授予贝尔实验室发明晶体管的科学家,第一台晶体管计算机TX-0诞生于MIT的林肯实验室,当时的最强晶体管计算机PDP-1具备4k内存,每秒可执行20万条指令,具备512x512显示器(也是世界第一个显示器,也因为这个计算机携带了显示器的原因,而诞生了世界第一款电子游戏,太空战争) 晶体管计算机特点:对于电子管计算机来说,集成度高,空间占据小,功耗比电子管低,运行速度快 集成电路计算机:诞生原因是因为德州仪器的工程师发明了集成电路(IC),操作系统也因为集成电路计算机的出现而诞生,当时为了解决IBM的2款集成电路计算机(7094和1401)所编写的程序无法相互兼容,IBM而推出了System/360(操作系统雏形) 超大规模集成电路计算机:芯片集成超大规模的集成电路 微型计算机发展历史:因为集成电路计算机的诞生,计算机逐渐从庞然大物变成小型,乃至微型,1971到1973年,500khz频率的微型计算机(8位),1973到1978年,高于1mhz的微型计算机(8位),1978到1985年,500mhz的微型计算机(16位),1985到2000年,高于1ghz的微型计算机(32位),2000年到至今,高于2ghz的微型计算机(64位) 摩尔定律:当价格不变的情况下,集成电路的性能,会每18至24个月提升一倍 后来因为集成电路太密集,热损耗也越来越高,无法解决,摩尔定律也因此失效 因为摩尔定律的失效,单核已到瓶颈,转而搞多核CPU,2005年,英特尔发布了奔腾系列的双核CPU,AMD也发布了速龙系列的双核CPU,2006年,英特尔发布酷睿四核CPU,至今AMD的服务器级霄龙处理器CPU可以高达64核,而且基准频率(单核频率)可以达到2Ghz以上 计算机的分类 超级计算机:功能最强,运算最快,存储容量最大的计算机,用于天气预报,海洋监测,生物制药,科学计算,航天等等需要超大运算的领域,衡量超级计算机的单位是TFlop/s(每秒一万亿次浮点计算) 著名的超级计算机有Summit,神威太湖之光,天河一号,天河二号,Sierra 天河二号位于广州大学城的中山大学校区的国家超级计算机广州中心 大型计算机:又被称为大型机,大型机面向大型商业公司,维护成本高,硬件不易扩展,IBM占据大型机的大片市场,IBM为IOE中的I(计算机提供商) 迷你计算机(服务器):目前已替代大型机,为企业主要计算顶梁柱 工作站:高端微型计算机,面向需要强性能的专业工作者(例如图形,视频) 微型计算机(个人计算机):又分为台式计算机,笔记本计算机,一体化计算机 计算机体系和结构 冯诺依曼体系:将指令和数据一起存储的计算机设计概念结构,使用通用电路设计,而不是使用专用电路,将指令存储,再将指令编译成通用电路可理解的程序 冯诺依曼体系要求具备存储器,控制器,运算器,输入/输出设备 冯诺依曼体系要求能将程序和数据发送给计算机(输入),能长期存储程序,数据,计算过程,计算结果的功能(存储器),具备算术,逻辑处理和数据传送等数据处理功能(运算器和控制器),并且能将处理结果反馈给用户(输出) 冯诺依曼瓶颈:CPU和存储器速率之间无法调和,导致CPU空转等待数据传输 现代计算机都是基于冯诺依曼体系的(解决冯诺依曼瓶颈),存储器和运算器,以及控制器整合在一起(就是CPU),CPU内部的存储器更高速(寄存器) 计算机层次和编程语言 程序编译和程序解析(计算机无法理解人类语言),需要进行语言(高级语言对低级语言)的转换 高级语言生成低级语言的过程叫程序编译,而生成的工具叫编译器 常见的编译型语言有C,C++,Golang 高级语言作为输入,低级语言接收输入,从而达到高转低的目的,这个过程叫程序解析,而这个低级语言接收的工具叫解析器,解析器必须是用低级语言编写的 常见的解析型语言有Python,PHP java是编译+解析语言,因为它会将源程序编译成JVM字节码,JVM虚拟机再将JVM字节码再解析成机器码,java的跨平台就是因为JVM虚拟机解析器 计算机的层次:硬件逻辑层,微程序机器层,传统机器层,操作系统层,汇编语言层,高级语言层,应用层 硬件逻辑层:由门电路和触发器等逻辑电路组成 微程序机器层:由微指令组成的微程序直接交给硬件执行 传统机器层:CPU指令集,不同架构CPU使用不同的CPU指令集 这3层都为机器硬件层,一个指令就是一个微程序,也是一组微指令 操作系统层:向上提供操作界面,向下对应指令系统,管理硬件(例如分配内存空间) 汇编语言层:汇编语言可以直接编译成机器语言,完成翻译的工具叫汇编器 高级语言层:高级语言 应用层:应用软件 计算机的计算单位 容量单位 在物理层次,用高低电平来记录信息(低电平为0,高电平为1,一个0/1的位被叫为bit(比特位)) 1字节(Byte)等于8bit 1Kb(千字位)等于1024字节(Byte) 1mb(兆字节)等于1025kb(千字节) 1Gb(吉字节)等于1024mb(兆字节) 1tb(太字节)等于1024gb(吉字节) 1pb(拍字节)等于1024tb(太字节) 1eb(艾字节)等于1024pb(拍字节) 1024是2的10次方 对于硬盘制造商来说,使用10进制,也就是硬盘制造商认为1000G才是1tb 因此实质硬盘容量为购买标注的容量(例如240G)乘以1000的3次方,再除于1024的3次方,得到的数就是实质硬盘的容量 原因是硬盘制造商为了记录硬盘的扇区,使用人类可理解的10进制,而不是2进制 速度单位 网络速度 网络传输数据的单位为Mbps 因此100M宽带就是指100Mbit/s,每秒传输100Mbps 100Mbit换算字节就是100/8,也就是12.5MB,因此100m宽带峰值每秒可以传输12.5mb CPU速度(CPU的时钟频率,Hz) Hz是每秒中的周期性变动重复次数的计量 例如 3.30 GHz的CPU,就是3.3*1000^3Hz,也就是每秒可以达到33亿次的高低电平变化 计算机的字符和编码集 字符编码集的历史 ASCII码:ASCII码包含95个可打印字符和33个不可打印的字符(例如控制字符),用7个bits表示一个ASCII码(95+33就是128,也就是2的7次方) 因为ASCII码无法满足需求(例如π),而推出了Extended ASCII码,由原来的7个bits变成8个bits,也就是支持256个字符...

2022-11-01 · 1 min · Me

简单使用PWA技术

PWA,Progressive Web App(渐进式web应用),PWA技术可以将web应用具备接近原生应用的特性和用户体验,无需额外安装,支持离线缓存,消息推送等功能 PWA由Service Worker,Promise,fetch,cache Api,Notification Api等技术组成 Service Worker:服务工作线程,独立于主线程,常驻内存,代理网络请求,依赖HTTPS通信 注册Service Worker navigator.serviceWorker.register('./sw.js',{scope: '/'}).then( registration => { console.log(registration) },error => { console.error(error) } ) window.onload = function() { document.body.append('PWA!') } sw.js const cachename = 'v1' self.addEventListener('install', function (event) { console.log('install',event) // 安装新的Service Worker脚本时触发,只有Service Worker脚本不同,会认为是不同的Service Worker版本 event.waitUntil(new Promise(resolve =>{ setTimeout(resolve, 1000) // 安装新的Service Worker脚本后等待1秒后激活该脚本 })) // event.waitUntil(self.skipWaiting) // 强制停止老的Service Worker,激活启动新的Service Worker,只要有更新就激活新的 event.waitUntil(caches.open(name).then(cache =>{ cache.addAll([ '/', './1.img' ]) })) // 开启cache api缓存系统 }) self....

2022-10-28 · 1 min · Me

ECharts数据可视化图表库简单使用

ECharts是基于JavaScript的数据可视化图表库 安装 npm install echarts --save 第一个实例 import * as echarts from 'echarts' let app = echarts.init(document.getElementById('app'), null, { width: 800, height: 500 }) let data = { title: { text: '用户管理' }, tooltip:{}, legend: { data: ['用户'] }, xAxis: { data: [ 'root','admin','user1','user2','user3' ] }, yAxis: {}, series: [ { name: '用户权限', type: 'bar', data: [ 10,8,5,1,3 ] } ] } app.setOption(data) 注意:容器必须具备高度和宽度(这里的容器的id为app),要么html指定,要么在初始化时指定一个

2022-06-18 · 1 min · Me

Nuxt.js学习笔记

nuxt是一个基于vue的应用框架,用于创建服务端渲染应用,使用vite作为打包器,使用webpack作为构建工具 创建项目 yarn create nuxt-app test 需要做一些选择,例如:选择TypeScript,选择Yarn,选择UI框架等等 安装依赖 yarn 启动项目 yarn dev 构建打包 yarn build yarn start 启动测试环境 yarn test

2022-06-05 · 1 min · Me

简单使用Scoop包管理器

Scoop是windows平台下开源的命令行软件包管理器,类似于ubuntu的apt或者macOS的brew scoop仓库里面全部都是通过审核的绿色软件包(前提是不要乱用来路不明的scoop源) 允许执行本地脚本权限 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 修改Scoop安装目录(用户级) $env:SCOOP=‘D:\Software\Scoop’ [Environment]::SetEnvironmentVariable(‘SCOOP’, $env:SCOOP, ‘User’) 修改Scoop安装目录(全局) $env:SCOOP_GLOBAL=‘D:\Software\Scoop\Global’ [Environment]::SetEnvironmentVariable(‘SCOOP_GLOBAL’, $env:SCOOP_GLOBAL, ‘Machine’) 目录介绍: apps:通过scoop安装的软件存储的目录 buckets:管理软件的仓库目录(记录了哪些仓库有哪些软件) chache:软件安装包目录 persit:存储用户数据,与软件分离 shims;软链接 安装scoop iwr -useb get.scoop.sh | iex 或者 iex (new-object net.webclient).downloadstring(‘https://get.scoop.sh’) 安装软件 scoop install sudo 查看环境存在的问题 scoop checkup 将一些scoop环境必须的软件安装一下 搜索软件 scoop search git 安装软件 scoop install git 查看软件信息 scoop info git 查看已经安装的软件 scoop list 卸载软件(-p删除配置) scoop uninstall git -p 更新软件 scoop update git 更新全部已安装软件 scoop update *...

2022-05-20 · 1 min · Me