计算机指令

Linux的一些基本命令-以centos为例

倖福魔咒の 提交于 2019-11-29 14:50:46
Linux简介:Linux -百度百科 centos简介:centos-百度百科 在学习Linux之前,首先要对计算机有一个基本的了解,在这方面,博主推荐一本贼好贼好的书-《穿越计算机的迷雾》,这本书“《穿越计算机的迷雾》从最基本的电学知识开始,带领读者一步一步、从无到有地制造一台能全自动工作的计算机。在这个过程中,读者可以学习到大量有趣的电学、数学和逻辑学知识,了解到它们是如何为电子计算机的产生创造条件,并促使它不断向着更快、更小、更强的方向发展。通过阅读《穿越计算机的迷雾》,读者可以很容易地理解自动计算实际上是如何发生的,而现代的计算机又是怎么工作的。以此为基础,在《穿越计算机的迷雾》的后面集中介绍了现代计算机的组成和主要功能,以及计算机核心与外部设备的接口,并对以操作系统为核心的软件进行了介绍。未经许可,不得以任何方式复制或抄袭《穿越计算机的迷雾》之部分或全部内容。”–来自豆瓣 0.操作系统的概念: 管理计算机软硬件资源的系统软件; 一:Linux的基本命令 0.man:你的专属个人管家(滑稽):Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 使用方法:man(选项)(参数) 选项 -a:在所有的man帮助手册中搜索; -f:等价于whatis指令,显示给定关键字的简短描述信息; -P:指定内容时使用分页程序; -M

网易互娱我来辣

岁酱吖の 提交于 2019-11-29 12:32:55
static的作用: 1.第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏 2.static的第二个作用是保持变量内容的持久 3.static的第三个作用是默认初始化为0 虚函数,具体怎么实现 https://blog.csdn.net/weixin_40237626/article/details/82313339 指针和引用的区别: 内存分配: 指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。 初始化: 引用在定义的时候必须进行初始化 , 并且不能够改变。 指针在定义的时候 不一定要初始化 , 并且指向的空间可变。 使用级别:有多级指针,但是没有多级引用,只能一级引用。 自增运算:指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1) 使用sizeof时: 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。 直接与间接访问: 引用访问一个变量是直接访问

详解服务器处理器基础知识

眉间皱痕 提交于 2019-11-29 05:18:54
CPU(中央处理器)是一台计算机的运算核心和控制核心。 CPU主要功能是解释计算机指令以及处理计算机软件中的数据。 CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。 CPU的运作原理可分为四个阶段: 提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。 CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。 CPU的主要性能参数包括: 主频,倍频,外频。 CPU的主频也叫时钟频率,CPU 主频为 CPU 的额定工作频率,当内核数目和缓存大小一样时,主频越高的CPU性能越好。 通常,主频越高CPU处理数据的速度就越快, CPU的主频=外频×倍频系数。 为什么会有外频和倍频的区分呢? 这个是和CPU的发展有关的。 简单说来,就是CPU发展太快,而其他硬件无法达到同样频率来交互,于是CPU进行妥协,将外频作为和主板其他部件之间通讯的频率,而工作频率靠倍频来调节提升。 CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed)。 通常所说的某某CPU是多少MHz的,而这个多少兆赫就是“CPU的主频”。 外频是CPU的基准频率,单位是MHz。 CPU的外频决定着整块主板的运行速度。 倍频系数是指CPU主频与外频之间的相对比例关系。 一般情况下,同代(同针脚)的CPU

JVM学习笔记——字节码指令

 ̄綄美尐妖づ 提交于 2019-11-29 03:25:50
JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作。另外,通过不同的组合亦产生了各种字符。同样,可以通过不同的组合产生不同的机器指令。在不同的时代,不同的厂商,机器指令组成的集合是不同的。但毕竟CPU是底层基础硬件,指令集通常以扩展兼容的方式向前不断演进。而机器码是离CPU指令集最近的编码,是CPU可以直接解读的指令,因此机器码肯定是与底层硬件系统耦合的。 问题:如果某个程序员因为不同的硬件平台需要编写多套代码,这是十分令人崩溃的。Java的使命就是一次编写、到处执行。在不同的操作系统、不同硬件平台上,均可以不用修改代码即可顺畅地执行。 如何实现JAVA跨平台? 计算机工程领域的任何问题都可以通过增加一个中间层来解决。因此,中间码应运而生,即"字节码"(Bytecode)。Java所有的指令有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称为字节码(Bytecode)。在代码的执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖;JVM也可以将字节码编译执行,如果是 热点代码,会通过JIT动态地编译为机器码,提高执行效率。 字节码指令 为了方便记忆,JVM在字节码上也和汇编语言改进机器语言借助助记符来高效记忆的方法一样,设计了一套操作码助记符,使用特殊单词来标记这些数字。如ICONST

深入浅出计算机组成原理:Superscalar和VLIW-如何让CPU的吞吐率超过1?(第26讲)

不想你离开。 提交于 2019-11-29 03:10:51
一、引子 到今天为止,专栏已经过半了。过去的20多讲里,我给你讲的内容,很多都是围绕着怎么提升CPU的性能这个问题展开的。我们先回顾一下第4讲,不知道你是否还记得这个公式: 程序的CPU执行时间 = 指令数 × CPI × Clock Cycle Time 这个公式里,有一个叫CPI的指标。我们知道,CPI的倒数,又叫作IPC(Instruction Per Clock),也就是一个时钟周期里面能够执行的指令数,代表了CPU的吞吐率。那么,这个指标,放在我们前面几节反复优化流 水线架构的CPU里,能达到多少呢? 答案是,最佳情况下,IPC也只能到1。因为无论做了哪些流水线层面的优化,即使做到了指令执行层面的乱 这说明,无论指令后续能优化得多好,一个时钟周期也只能执行完这样一条指令,CPI只能是1。但是,我们现在用的Intel CPU或者ARM的CPU,一般的CPI都能做到2以上,这是怎么做到的呢? 今天,我们就一起来看看,现代CPU都使用了什么 “黑科技”。 二、多发射与超标量:同一实践执行的两条指令 1、整数和浮点数计算的电路,在CPU层面也是分开的 之前讲CPU的硬件组成的时候,我们把所有算术和逻辑运算都抽象出来,变成了一个ALU这样的“黑盒子”。你应该还记得第13讲到第16讲,关于加法器、乘法器、乃至浮点数计算的部分,其实整数的计算和 浮点数的计算过程差异还是不小的。实际上

深入浅出计算机组成原理:冒险和预测(四)-今天下雨了,明天还会下雨么?(第24讲)

让人想犯罪 __ 提交于 2019-11-29 01:47:32
一、引子 1、取指令(IF)和指令译码(ID)的阶段,是不需要停顿的 过去三讲,我主要为你介绍了结构冒险和数据冒险,以及增加资源、流水线停顿、操作数前推、乱序执行,这些解决各种“冒险”的技术方案。 在结构冒险和数据冒险中,你会发现,所有的流水线停顿操作都要从 指令执行阶 段开始。流水线的前两个阶段,也就是取指令(IF)和指令译码(ID)的阶段,是不需要停顿的。CPU 会在流水线里面直接去取下一条指令,然后进行译码。 2、一旦遇到 if…else 这样的条件分支,或者 for/while 循环就会不成立 取指令和指令译码不会需要遇到任何停顿,这是基于一个假设。这个假设就是,所有的指令代码都是顺序加载执行的。不过这个假设,在执行的代码中,一旦遇到 if…else 这样的条件分支, 或者 for/while 循环,就会不成立。 我们先来回顾一下,第6讲里讲的cmp比较指令、jmp和jle这样的条件跳转指令。可以看到,在jmp指令发生的时候,CPU可能会跳转去执行其他指令。jmp后的那一条指令是否应该顺序加载执行, 在流水线里面进行取指令的时候,我们没法知道。要等jmp指令执行完成,去更新了PC寄存器之后,我们才能知道,是否执行下一条指令,还是跳转到另外一个内存地址,去取别的指令 3、如何解决停顿 这种为了确保能取到正确的指令,而不得不进行等待延迟的情况,就是今天我们要讲的 控制冒险

计算机基础知识

独自空忆成欢 提交于 2019-11-29 00:57:54
一、为何要学习计算机基础? 好多人觉得自己有点基础就都想着直接敲代码,觉得基础知识很容易,很简单,就不怎么用心去学。然而,我觉得基础知识很重要。就像盖一栋楼房一样,你先要打好地基,再去盖房。       Python是一门编程语言,即通俗一点说就是语言。    我们都知道世界上有很多种语言,比如:汉语,英语,阿拉伯语等等众多的语言。要想用这些语言去和人沟通,如果你想和英国人说话,你必须得会英语吧。而我们的计算机也有它自己的语言,你要想让计算机帮助我们做事情,你就需要和它沟通吧。那你就得懂得计算机语言吧,也就是编程。当然计算机也有很多语言,比如:C,Java,PHP,Python,C#等。所以我们就先从学习基础知识开始。也有人说学习基础理论知识很枯燥,但是,那还是得学。你要把它当成自己的兴趣,一点一点的去投入它,相信你会是很棒的。    程序用编程语言来写程序,最终开发的结果就是一个软件。就像大家都知道的QQ,腾讯视频,酷狗音乐等一系列软件。这些软件要想运行必须得有系统控制它吧。当然,有人会问:为什么要用操作系统呢?当然,很久以前的那些程序员确实是在没有操作环境下,编程语言是操作硬件来编写的。你可能觉得没问题,但是其实问题很严重。如果一直像以前那样会严重影响效率的。操作系统是出现在硬件之上的,是用来控制硬件的。所以,我们开发时只需要调用操作系统为我们提供的简单的接口就可以了。  

Java并发编程的艺术(二)——重排序

本秂侑毒 提交于 2019-11-29 00:50:42
当我们写一个单线程程序时,总以为计算机会一行行地运行代码,然而事实并非如此。 什么是重排序? 重排序指的是编译器、处理器在不改变程序执行结果的前提下,重新排列指令的执行顺序,以达到最佳的运行效率。 重排序分类 重排序分为:编译器重排序 和 处理器重排序。 数据依赖 编译器和处理器并不会随意的改变指令的执行顺序,因为有些指令之间是有依赖关系的,若改变了他们的执行顺序,就会出现错误的结果。 因此,编译器和处理器只会对没有依赖关系的指令进行重排序。 数据依赖 :若相邻的两条指令访问同一个变量,并且其中有一条指令执行写操作,那么这样的两条指令之间存在数据依赖。对于有数据依赖关系的指令,不会发生重排序。 数据依赖关系总结一下为以下三种情况: 指令 示例 读后写 a=b;b=1; 写后写 a=1;a=2; 写后读 a=1;b=a; as-if-serial 在单线程开发中,程序员不需要知道指令是如何重排序的,只要简单地认为指令是按照顺序依次执行的即可。这就是as-if-serial的语义,即:貌似是串行的。 来源: https://blog.csdn.net/uu_uuu/article/details/100166505

深入浅出计算机组成原理:冒险和预测(三):CPU里的“线程池”(第24讲)

北战南征 提交于 2019-11-29 00:38:24
一 、引子 过去两讲,我为你讲解了通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。对于结构冒险,由于限制来自于同一时钟周期不同的指令, 要访问相同的硬件资源,解决方案是增加资源。对于数据冒险,由于限制来自于数据之间的各种依赖,我们可以提前把数据转发到下一个指令。 但是即便综合运用这三种技术,我们仍然会遇到不得不停下整个流水线,等待前面的指令完成的情况,也就是采用流水线停顿的解决方案。比如说,上一讲里最后给你的例子, 即使我们进行了操作数前推,因为第二条条加法指令依赖于第一条指令从内存中获取的数据,我们还是要插入一次NOP的操作。 那我们能不能让后面没有数据依赖的指令,在前面指令停顿的时候先执行呢? 答案当然是可以的。毕竟,流水线停顿的时候,对应的电路闲着也是闲着。那我们完全可以先完成后面指令的执行阶段。 二、填上空闲的NOP:上菜的顺序不必是点菜的顺序 之前我为你讲解的,无论是流水线停顿,还是操作数前推,归根到底,只要前面指令的特定阶段还没有执行完成,后面的指令就会被“阻塞”住。 但是这个“阻塞”很多时候是没有必要的。因为尽管你的代码生成的指令是顺序的,但是如果后面的指令不需要依赖前面指令的执行结果,完全可以不必等待前面的指令运算完成。 比如说,下面这三行代码。 计算里面的 x ,却要等待 a 和 d 都计算完成,实在没啥必要。所以我们完全可以在 d

单片机期末复习

安稳与你 提交于 2019-11-28 23:34:57
一、硬件结构 1.1部分引脚说明 RST:复位引脚,两个机器周期的高电平后复位 ALE:锁存低八位地址 EA:高电平时,访问内部程序存储器(ROM) P0:双向IO口、分时复用-低八位地址,数据总线 P1:双向IO口 P2:双向IO口,访问外部存储器时,提供高八位地址总线 P3:双向IO口,有第二功能 1.2存储器 物理上分为:4 个空间 即片内ROM、 、 片外ROM(程序存储器) 片内RAM、 、 片外RAM(数据存储器) 逻辑上分为: : 3 个空间 , 程序内存(ROM) ( 片内 、 外 ) 统一编址 MOVC 数据存储器 ( 片内) ) MOV 数据存储器(片外) MOVX 1.2.1程序存储器(ROM 作用:存储用户程序和表格常数 特殊单元: 0000H:复位后从这里开始执行程序 中断单元: 外中断0 (INT0 ) 0003H 定时器0 (T0 ) 000BH 外中断1 (INT1 ) 0013H 定时器1 (T1 ) 001BH 串行口(UART ) 0023H 1.2.2内部数据存储器(RAM 通用工作寄存器组 00~1FH共32个,四组通用寄存器,即(四组R0~R7) 可以使用RS1(PSW.4)RS0(PSW.3)来切换寄存器区 RS1 RS0 寄存器区 内存地址 00 0区 00-07H 01 1区 08-0FH 10 2区 10-17H 11 3区 18