计算机指令

深入浅出计算机组成原理学习笔记:理解虚拟机-你在云上拿到的计算机是什么样的?(第34讲)

萝らか妹 提交于 2019-11-28 03:51:54
上世纪60年代,计算机还是异常昂贵的设备,实际的计算机使用需求要面临两个挑战。 第一,计算机特别昂贵,我们要尽可能地让计算机忙起来,一直不断地去处理一些计算任务。 第二,很多工程师想要用上计算机,但是没有能力自己花钱买一台,所以呢,我们要让很多人可以共用一台计算机。 一、缘起分时系统 为了应对这两个问题,分时系统的计算机就应运而生了。 无论是个人用户,还是一个小公司或者小机构,你都不需要花大价钱自己去买一台电脑。你只需要买一个输入输出的终端,就好像一套鼠标、键盘、显示器这样的设备, 然后通过电话线,连到放在大公司机房里面的计算机就好了。这台计算机,会自动给程序或任务分配计算时间。你只需要为你花费的“计算时间”和使用的电话线路付费就可以了 比方说,比尔·盖茨中学时候用的学校的计算机,就是GE的分时系统。 二、从“黑色星期五”到公有云 1、美国的感恩节的黑色星期五、网络星期一和国内的双十一一样 现代公有云上的系统级虚拟机能够快速发展,其实和分时系统的设计思路是一脉相承的,这其实就是来自于电商巨头亚马逊大量富余的计算能力。 和国内有“双十一”一样,美国会有感恩节的“黑色星期五(Black Friday)”和“网络星期一(CyberMonday)”,这样一年一度的大型电商促销活动。几天的活动期间, 会有大量的用户进入亚马逊这样的网站,看商品、下订单、买东西。这个时候

深入浅出计算机组成原理学习笔记:理解内存(下)-解析TLB和内存保护(第41讲)

倾然丶 夕夏残阳落幕 提交于 2019-11-28 03:51:27
一、引子 性能问题 机器指令里面的内存地址都是虚拟内存地址。程序里面的每一个进程,都有一个属于自己的虚拟内存地址空间。我们可以通过地址转换来获得最终的实际物理地址。 我们每一个指令都存放在内存里面,每一条数据都存放在内存里面。因此,“地址转换”是一个非常高频的动作, “地址转换”的性能就变得至关重要了。这就是我们今天要讲的 第一个问题,也就是 性能问题 安全问题 因为我们的指令、数据都存放在内存里面,这里就会遇到我们今天要谈的 第二个问题,也就是 内存安全问题。如果被人修改了内存里面的内容, 我们的CPU就可能会去执行我们计划之外的指令。这个指令可能是破坏我们服务器里面的数据,也可能是被人获取到服务器里面的敏感信息。 二、加速地址转换:TLB 1、多级页表存在的问题 多级页表虽然节约了我们的存储空间,但是却带来了时间上的开销,变成了一个“以时间换空间”的策略。原本我们进行一次地址转换,只需要访问一次内存就能找到物理页号, 算出物理内存地址。但是用了4级页表,我们就需要访问4次内存,才能找到物理页号。 2、“加个缓存”的办法呢? 程序所需要使用的指令,都顺序存放在虚拟内存里面。我们执行的指令,也是一条条顺序执行下去的。也就是说,我们对于指令地址的访问, 存在前面几讲所说的“空间局部性”和“时间局部性”,而需要访问的数据也是一样的。 我们连续执行了5条指令。因为内存地址都是连续的

深入浅出计算机组成原理学习笔记:CISC和RISC-为什么手机芯片都是ARM?(第29讲)

久未见 提交于 2019-11-28 03:50:58
一、引子 我在第5讲讲计算机指令的时候,给你看过MIPS体系结构计算机的机器指令格式。MIPS的指令都是固定的32位长度,如果要用一个打孔卡来表示,并不复杂。 第6讲的时候,我带你编译了一些简单的C语言程序,看了x86体系结构下的汇编代码。眼尖的话,你应该能发现,每一条机器码的长度是不一样的。 而CPU的指令集里的机器码是固定长度还是可变长度,也就是 复杂指令集(Complex Instruction SetComputing,简称CISC)和 精简指令集(Reduced Instruction Set Computing,简称RISC)这两种风格的指令集一个最重要的差别。那今天我们就来看复杂指令集和精简指令集之间的对比、差异以及历史纠葛。 二、CISC VS RISC:历史的车轮不总是向前的 1、人月神话 在计算机历史的早期,其实没有什么CISC和RISC之分。或者说,所有的CPU其实都是CISC。 虽然冯·诺依曼高屋建瓴地提出了存储程序型计算机的基础架构,但是实际的计算机设计和制造还是严格受硬件层面的限制。当时的计算机很慢,存储空间也很小。 《人月神话》这本软件工程界的名著,讲的是花了好几年设计IBM 360这台计算机的经验。IBM 360的最低配置,每秒只能运行34500条指令,只有8K的内 存。为了让计算机能够做尽量多的工作,每一个字节乃至每一个比特都特别重要。 所以

kubernetes常用指令

痞子三分冷 提交于 2019-11-28 03:41:54
K8S 常 用 指 令 测试环境 minikube start     # 启动集群 kubectl get nodes   # 查看节点信息 hostname         # 查看计算机名 kubectl cluster-info # 查看集群信息 # 部署一个应用 kubectl run kubernetes-bootcamp \ --image=docker.io/jocatalin/kubernetes-bootcamp:v1 \ --port=8080 # 查看当前pod kubectl get pods # 将容器的端口映射到节点的端口 kubectl expose deployment/kubernetes-bootcamp \ --type="NodePort" \ --port 8080 # 查看应用被映射到节点的哪个端口 kubectl get services # 访问应用 curl host01:30463 # 查看运行副本数 kubectl get deployments # 增加3个副本 kubectl scale deployments/kubernetes-bootcamp --replicas=3 # 删除其中一个副本 kubectl scale deployments/kubernetes-bootcamp --replicas=2 #

操作系统详解

时光毁灭记忆、已成空白 提交于 2019-11-28 03:28:29
目录 一 为什么要有操作系统 二 什么是操作系统 三 操作系统与普通软件的区别 四 操作系统发展史 五、操作系统原理 1. 操作系统的资源管理技术 2. 系统调用 3. 操作系统内核 4. 处理器状态: 内核态和用户态 5. 中断(Interupt) 6. 进程 7. 处理器调度 8. 进程的交互 9. 临界区管理 10. 信号量(samaphore)和PV操作 11. 管程 12. 死锁 13. 可变分区存储管理 14. 分页存储管理 15. 分段存储管理 16. 虚拟存储管理 17. 请求段页式虚拟内存管理 18. I/O硬件原理:I/O控制方式 19. I/O软件原理 20. 缓冲技术 21. 驱动调度技术 22. 设备独立性 23. 虚拟设备 24. 文件逻辑结构 25. 文件物理结构 二、Q&A 1. 什么是操作系统?操作系统在计算机系统中的主要作用是什么? 2. 什么是多道程序设计?多道程序设计有什么特点? 3. 计算机操作系统为什么引入进程? 4. 在分时系统中,什么是响应时间?它与哪些因素有关? 5. 解释并发性与并行性 6. 试述存储管理的基本功能。 7. 何谓地址转换(重定向)?哪些方法可以实现地址转换? 8. 什么是文件的共享?介绍文件共享的分类和实现思想。 一 为什么要有操作系统 ( 两本书:现代操作系统、操作系统原理,学好python以后再去研究吧~~)

(1)——计算机硬件组成

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 03:10:30
一、CPU 功能:获取程序指令、对指令进行编码、执行。 (1)程序控制:通过执行指令来控制程序执行顺序。 (2)操作控制:一条指令需要有若干操作信号操作对应部件按指令进行操作。 (3)时间控制:对操作信号的出现时间、持续时间及出现时间顺序进行严格控制。 (4)数据处理:cpu根本任务; 组成:运算器、控制器、寄存器、内部总线; 二、运算器:接受 控制器 的命令完成计算机的各种 算术 和 逻辑运算 。 (1)算术逻辑单元(ALU):负责处理数据,实现数据的算术运算和逻辑运算。 (2)累加寄存器(AC):通用寄存器,为ALU提供一个工作区,存放运算结果。运算器至少有一个累加寄存器。 例:减法运算,先将被减数放到AC中,再从内存存储器中取出减数同AC的内容相减,并将结果放到AC中。 (3)数据缓冲寄存器(DR) 1)主要作用:作为CPU和内存、外部设备之间数据传输的中转站和操作速度上的缓冲; 2)单个累加器结构的运算器,数据缓冲器可作为操作数寄存器; 3)存放和隔离对内存存储器进行读写指令和数据; (4)状态条件寄存器(PSW):保存由算术指令、逻辑指令和测试结果建立各种条件码内容,只要分为:状态标志和控制标志; 三、控制器:控制整个CPU的工作,包括处理异常事件。 组成:指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑。 (一)指令控制逻辑——工作流程:取指令、指令译码

这18条背下来没人敢和你忽悠CPU

这一生的挚爱 提交于 2019-11-28 02:38:07
http://hi.baidu.com/hieda/blog/item/eb78fd444c6e5748510ffe83.html 1.主频   主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展。像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它的运行效率相当于2G的Intel处理器。   所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号振荡的速度。在Intel的处理器产品中,我们也可以看到这样的例子:1 GHz Itanium 芯片能够表现得差不多跟2.66 GHz Xeon/Opteron一样快,或是1.5 GHz Itanium 2大约跟 4 GHz Xeon/Opteron一样快。CPU的运算速度还要看CPU的流水线的各方面的性能指标。   当然,主频和实际的运算速度是有关的,只能说主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。   2.外频  

JavaScript函数尾调用与尾递归

安稳与你 提交于 2019-11-28 01:56:33
什么是函数尾调用和尾递归 函数尾调用与尾递归的应用 一、什么是函数的尾调用和尾递归 函数尾调用就是指函数的最后一步是调用另一个函数。 1 //函数尾调用示例一 2 function foo(x){ 3 return g(x); 4 } 5 //函数尾调用示例二 6 function fun(x){ 7 if(x > 0){ 8 return g(x); 9 } 10 return y(x); 11 } 调用最后一步和最后一行代码的区别,最后一步的代码并不一定会在最后一行,比如示例二。还有下面这一种不能叫做函数尾调用: 1 // 下面这种情况不叫做函数尾调用 2 function fu(x){ 3 var y = 10 * x; 4 g(y); 5 } 为什么这种情况不叫作函数的尾调用呢?原因很简单,因为函数执行的最后一步是return指令,这个指令有两个功能,第一个功能是结束当前函数执行,第二个功能是将指令后面的数据传递出去(函数返回值)。而这个return指令不管有没有声明都会执行,没有声明的情况下返回的数据是undefined,所以上面的代码实际上是以下结构: 1 function fu(x){ 2 var y = 10 * x; 3 g(y); 4 return undefined; 5 } return指令是先关闭函数,然后再返回数据。说到这里,就会引发一个问题出来

并发编程与高并发解决方案(一):并发编程相关基础知识

人走茶凉 提交于 2019-11-28 01:49:53
并发编程与高并发解决方案(一):并发编程相关基础知识 【原文链接】 www.ronglexie.top 目录 基本概念 CPU多级缓存 CPU多级缓存-缓存一致性协议(MESI) MESI协议中的状态 MESI状态转换图 CPU多级缓存-乱序执行优化 Java内存模型(JMM) JVM对Java内存模型的实现 硬件内存架构 Java内存模型和硬件架构之间的桥接 共享对象的可见性 竞争现象 支撑Java内存模型的基础原理 指令重排序 数据依赖性 as-if-serial语义 内存屏障(Memory Barrier) happens-before原则 Java内存模型中线程和主内存的抽象关系 Java内存模型中同步的操作与规则 同步操作 同步规则 并发的优势与风险 基本概念 并发(Concurrency):并发是指同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时”存在“的,每个线程都处理执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器上,因此可以同时运行。 高并发(High Concurrency):高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 CPU多级缓存 CPU多级缓存配置(演变): 数据的读取和存储都经过高速缓存

CLR基础

自作多情 提交于 2019-11-28 00:36:06
读《CLR via C# 》之后感觉对.net 的理解有了一个飞跃(虽然大部分内容还要慢慢消化和吸收),对CLR,JIT编译器,垃圾回收,多线程使用,和锁等概念都有了更深的认识。我从四月末开始看,直到八月初才看完,有几节跳过了,像WinRT 觉得过时了就没看,毕竟Microsoft 目前大力推广.net core。能让我坚持看完的原因很大一部分是作者 Jeffrey 的文字平易近人,描述细腻,让人感觉作者确实是想把毕生所学倾囊相授。就像译者周靖在结尾评价的那样:"字里行间,全是殷勤叮嘱。无浮夸之文字,倾心血而写就"。 以后我将逐步整理看完此书的习得,也是对书中难理解的地方做一下回顾。 第一篇 CLR 基础 1 将源代码编译成托管模块 公共语言运行时(Common Language Runtime ,CLR) 是一个可由多种编程语言使用的“运行时”。CLR的核心功能(比如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。 只要编译器是面向CLR的,可以用任何语言编译出托管模块。 托管模块 是标准的32位Microsoft Windows 可移植执行体(PE32)文件,或者是标准的64位Windows可移植执行体(PE32+)文件,它们都需要CLR才能执行。 元数据: 每个托管模块都包含元数据表,主要有两种表:一种表描述源代码种定义的类型和成员