当前位置:首页 > 计算机
  • 上门修电脑早已过时,远程电脑维修开启新时代

    上门修电脑早已过时,远程电脑维修开启新时代

    我是一名电脑维修工,早在几年前我就在三线老家租了一间铺面做着简单的电脑维修工作,有时客户也不多,很多情况下还需要到处跑,辛苦不说每月还只赚着微薄的几千块收入。 但是不曾想到,乘着时代的快车,这几年生意做的风生水起,看似只是一个小小维修工,但我现在已经早早月入过万,客户也早从普通用户发展到了企业公司,身边人都在问我究竟是做什么才能赚到这么多,其实在我看来,就是“选择比努力更重要”。 这一切要归功于我找到上海贝锐科技研发的一款叫“向日葵远控”的软件,主打远程控制(Windows、Linux、Mac、iOS,Android涵盖所有操作系统),知道了有这么好的东西无异于对我的工作是极大的帮助,操作也十分便利。 只要将控制端APP安装到自己的手机端、或电脑端上,然后让你的客户也同步下载一个被控端,接下来就可以在你的控制端上看到对方的设备并进行操作了,是不是非常简单粗暴? 就是这两个图标了 软件在官网上可以下载到,而且完全免费,真是好福利! 下载完成后,只需要让对方给你一串识别码,你就可以链接到对方咯!就是这么方便! 一键连接对方电脑 说下在我试用的过程中,完全没有任何卡顿的情况,不会断开链接等不稳定情况发生,而且所有你需要用到的功能都能有,包括桌面控制、桌面观看、摄像看查看、远程CMD,功能十分完善全面。 因为对于我们这些做电脑维修的人来说,安全性也是非常重要的,由于客户对于这块要求也特别高,所以我还特别研究过这家公司,贝锐科技早在2006年就成立了,发展了那么多年产品已经很成熟,总部在上海,其次广州还有一家分公司,并且拿过非常多的荣誉奖项,这让我无比信任。 如今有了它,我通过朋友介绍等等,接触到了更大的企业客户,让我从原来一天三五个用户群体,发展到了三五十个群体,收入也在逐步稳增,怎一个开心了得! 它打破了原来地理、和空间的局限性,而且节省了时间,效率更高,不需要走访客户,就能完成维修工作,这真正是让我感受到互联网的无限可能! 如果你也是一名和电脑相关的技术人员,我强烈建议你们也一起用起来,时代在变化,市场保持学习的心态,未来才能有更好的可能!

    时间:2021-04-07 关键词: 计算机 电脑维修 远程控制

  • 硬核操作系统讲解

    1 冯诺伊曼体系 1.1 冯诺伊曼体系简介 现代计算机之父冯诺伊曼最先提出程序存储的思想,并成功将其运用在计算机的设计之中,该思想约定了用二进制进行计算和存储,还定义计算机基本结构为 5 个部分,分别是中央处理器(CPU)、内存、输入设备、输出设备、总线。 存储器:代码跟数据在RAM跟ROM中是线性存储, 数据存储的单位是一个二进制位。最小的存储单位是字节。 总线:总线是用于 CPU 和内存以及其他设备之间的通信,总线主要有三种: 地址总线:用于指定 CPU 将要操作的内存地址。 数据总线:用于读写内存的数据。 控制总线:用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后响应,这时也需要控制总线。 输入/输出设备:输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。比如键盘按键时需要和 CPU 进行交互,这时就需要用到控制总线。 CPU:中央处理器,类比人脑,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU用寄存器存储计算时所需数据,寄存器一般有三种: 通用寄存器:用来存放需要进行运算的数据,比如需进行加法运算的两个数据。 程序计数器:用来存储 CPU 要执行下一条指令所在的内存地址。 指令寄存器:用来存放程序计数器指向的指令本身。 在冯诺伊曼体系下电脑指令执行的过程: CPU读取程序计数器获得指令内存地址,CPU控制单元操作地址总线从内存地址拿到数据,数据通过数据总线到达CPU被存入指令寄存器。 CPU分析指令寄存器中的指令,如果是计算类型的指令交给逻辑运算单元,如果是存储类型的指令交给控制单元执行。 CPU 执行完指令后程序计数器的值通过自增指向下个指令,比如32位CPU会自增4。 自增后开始顺序执行下一条指令,不断循环执行直到程序结束。 CPU位宽:32位CPU一次可操作计算4个字节,64位CPU一次可操作计算8个字节,这个是硬件级别的。平常我们说的32位或64位操作系统指的是软件级别的,指的是程序中指令多少位。 线路位宽:CPU操作指令数据通过高低电压变化进行数据传输,传输时候可以串行传输,也可以并行传输,多少个并行等于多少个位宽。 1.2 CPU 简介 Central Processing Unit 中央处理器,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。 CPU CPU核心:一般一个CPU会有多个CPU核心,平常说的多核是指在一枚处理器中集成两个或多个完整的计算引擎。核跟CPU的关系是:核属于CPU的一部分。 寄存器:最靠近CPU对存储单元,32位CPU寄存器可存储4字节,64位寄存器可存储8字节。寄存器访问速度一般是半个CPU时钟周期,属于纳秒级别, L1缓存:每个CPU核心都有,用来缓存数据跟指令,访问空间大小一般在32~256KB,访问速度一般是2~4个CPU时钟周期。 int socket(int domain, int type, int protocal) 上面是socket编程的核心函数,可以指定IPV4或IPV6类型,TCP或UDP类型。比如TCP协议通信的 socket 编程模型如下: Socket编程 服务端和客户端初始化socket,得到文件描述符。 服务端调用bind,将绑定在 IP 地址和端口。 服务端调用listen,进行监听。 服务端调用accept,等待客户端连接。 客户端调用connect,向服务器端的地址和端口发起连接请求。 服务端accept返回用于传输的socket的文件描述符。 客户端调用write写入数据,服务端调用read读取数据。 客户端断开连接时,会调用close,那么服务端read读取数据的时候,就会读取到了EOF,待处理完数据后,服务端调用 close,表示连接关闭。 服务端调用accept时,连接成功会返回一个已完成连接的socket,后续用来传输数据。服务端有俩socket,一个叫作监听socket,一个叫作已完成连接socket。 成功连接建立之后双方开始通过 read 和 write 函数来读写数据。 UDP传输 UDP比较简单,属于类似广播性质的传输,不需要维护连接。但也需要 bind,每次通信时调用 sendto 和 recvfrom 都要传入目标主机的 IP 地址和端口。 3.7 多线程编程 既然多进程开销过大,那平常我们经常使用到的就是多线程编程了。期间可能涉及到内存模型、JMM、Volatile、临界区等等。这些在Java并发编程专栏有讲。 4 文件管理 4.1 VFS 虚拟文件系统 文件系统在操作系统中主要负责将文件数据信息存储到磁盘中,起到持久化文件的作用。文件系统的基本组成单元就是文件,文件组成方式不同就会形成不同的文件系统。 文件系统有很多种而不同的文件系统应用到操作系统后需要提供统一的对外接口,此时用到了一个设计理念没有什么是加一层解决不了的,在用户层跟不同的文件系统之间加入一个虚拟文件系统层Virtual File System。 虚拟文件系统层定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解 VFS 提供的统一接口即可。 虚拟文件系统 日常的文件系统一般有如下三种: 磁盘文件系统:就是我们常见的EXT 2/3/4系列。 内存文件系统:数据没存储到磁盘,占用内存数据,比如/sys、/proc。进程中的一些数据映射到/proc中了。 网络文件系统:常见的网盘挂载NFS等,通过访问其他主机数据实现。 4.2 文件组成 以Linux系统为例,在Linux系统中一切皆文件,Linux文件系统会为每个文件分配索引节点 inode跟目录项directory entry来记录文件内容跟目录层次结构。 4.2.1 inode 要理解inode要从文件储存说起。文件存储在硬盘上,硬盘的最小存储单位叫做扇区。每个扇区储存512字节。操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,一般一次性连续读取8个扇区(4KB)来当做一块,这种由多个扇区组成的块,是文件存取的最小单位。 文件数据都储存在块中,我们还必须找到一个地方储存文件的元信息,比如inode编号、文件大小、创建时间、修改时间、磁盘位置、访问权限等。几乎除了文件名以为的所有文件元数据信息都存储在一个叫叫索引节点inode的地方。可通过stat 文件名查看 inode 信息 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件,用户可通过ls -i查看每个文件对应编号。对于系统来说文件名只是inode号码便于识别的别称或者绰号。特殊名字的文件不好删除时可以尝试用inode号删除,移动跟重命名不会导致文件inode变化,当用户尝试根据文件名打开文件时,实际上系统内部将这个过程分成三步: 系统找到这个文件名对应的inode号码。 通过inode号码,获取inode信息,进行权限验证等操作。 根据inode信息,找到文件数据所在的block,读出数据。 需注意 inode也会消耗硬盘空间,硬盘格式化后会被分成超级块、索引节点区和数据块区三个区域: 超级块区:用来存储文件系统的详细信息,比如块大小,块个数等信息。一般文件系统挂载后就会将数据信息同步到内存。 索引节点区:用来存储索引节点 inode  table。每个inode一般为128字节或256字节,一般每1KB或2KB数据就需设置一个inode。一般为了加速查询会把索引数据缓存到内存。 数据块区:真正存储磁盘数据的地方。 buf = mmap(file, len); write(sockfd, buf, len); 5.2.4.3 sendfile Linux 内核版本 2.1版本提供了函数 sendfile()。

    时间:2021-03-17 关键词: 操作系统 冯诺伊曼体系 计算机

  • 图解 | 你管这破玩意叫计算机?

    我和小宇早恋了,我们家住隔壁。 一、编码与电路——信号的转换 晚上父母会把手机没收,但我们还想继续聊天,又不敢发出声音,于是我们想到了这个办法... 我们把所有的中文都用灯泡的亮灭组合来表示,同时约定好每隔一秒读取一次灯泡的状态并记录下来,这是我们的暗号。 我:亮亮灭灭亮 喜:灭亮亮灭灭 欢:亮灭亮灭亮 你:亮亮亮灭灭 这样,我们虽然没有了手机,依然可以日以继日地聊天,虽然效率很低,但依然很快乐。 我和小宇就这样在不经意间,将语言转换成为了灯泡的亮灭组合,这个过程叫做编码。 二、门电路——信号的关联 我和小宇就这样一直秘密保持着通话,直到上了大学,父母再也管不了我们用手机了。 但这么多年的小灯泡通话,使我们总觉得事情没那么简单,于是我们开始了一些新的探索。 我们增加了一个开关。此时当两个开关同时闭合时,灯泡才会亮。 这样两个开关与灯泡之间,不再是之前简单的对应关系了,而是有了逻辑。 开关的断开与闭合分别对应着电路的断开与连通。而小灯泡的不亮与亮,也分别对应着电路的断开与连通。那这两者就可以统一,不再依赖于具体的实物表现了。 还有,开关的连通与断开,是主动的。而小灯泡的连通与断开,是被动的,是结果。 我们把开关这里的连通与断开称为输入端,把灯泡的连通与断开称为输出端,并且将整个电路都封装在一个图形里,可以得到如下抽象: 我们决定把这种电路叫做门电路, 上面这个叫与门。 为了今后更为抽象的探索,我们将电路连通表示为数字 1,电路断开表示为数字 0。 我们将这种表示方式称为二进制。 输入 A 输入 B 输出 0 0 0 0 1 0 1 0 0 1 1 1 慢慢地,我们发现了越来越多的玩法。 上面这种电路,我把他抽象成如下门电路形状,叫做或门。 之后便一发不可收拾,我和小宇设计了越来越多的门电路,我们发现,只要是我们能想到的逻辑关系,都可以设计成对应的门电路。 三、加法器——信号的计算 十进制数可以转换成二进制数,而二进制数又可以对应到门电路的输入端与输出端。 于是我和小宇有了一个大胆的想法,能不能设计一个计算加法的电路呢? 我们首先从最简单的一位二进制数相加开始: 0+0=0;0+1=1;1+0=1;1+1=10 变成一张表格如下 加数 A 加数 B 加和输出 进位输出 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 即我们需要设计出一种电路,可以达到表中的输入与输出效果。 经过不懈努力,终于发现这个电路可以由异或门和与门两个门电路组成。 这个装置实现了二进制的一位加法,但它并不完美,因为只考虑了这两个数的进位输出,但没有考虑上一位的进位,所以只能叫半加器。 如果将前一个进位考虑进来,只需再多一个半加器,并且拼接一个或门即可。 此时我们已经建立好了一个完美的一位加法器,并自豪地称之为全加器。 全加器做出来之后,无论多少位的加法器就都可以做出来了,只需将全加器逐个拼起来即可。我们尝试做一个八位加法器。 OK,大功告成,有了加法器,理论上就可以实现任何的数学运算了。 因为我们知道乘法可以转换成加法,除法可以转换成减法,而减法又可以转换成补码的加法。现在我们可以自豪地称这个部件为,算术逻辑单元 ALU。 四、时钟——信号的震荡 我和小宇都非常高兴,终于用电路的方式实现了计算功能。 但慢慢的觉得没什么意思了,于是我们又突发奇想,设计了如下诡异的电路。 当闭合开关 A 时,整个电路联通,开关 B 将会被吸下来,整个电路断开,电磁铁失去磁性,开关 B 又会弹上去,此时电路又联通,开关 B 又被吸下来。 就这样,开关 B 不断地快速地在开和闭之间循环进行,而我们始终没有去干预这个电路,因此该电路有了自反馈的特性。 由于开关 B 的来回震荡,我们将这种电路称为振荡器,由于它可以产生不断变化的电信号,就像时钟一样不停且规律地跑着,我们将这个装置又称为时钟。它所产生的交替的电信号称为时钟信号。 五、RAM——保存信号 虽然有了加法器,但是输入的数字从哪里来?能不能先保存在某个地方呢? 我和小宇经过多次实验,发明了一个非常复杂的电路: 如果输入端为 1,改变"某控制端"信号(信号由 0 变化到 1 这个瞬间),则输出端变为 1,之后输出端仍然保持(存储)着刚刚的 1。 如果输入端为 0,改变"某控制端"信号,则输出端变为 0,之后输出端仍然保持(存储)着刚刚的 0。 如果想不明白也没关系,只要记住这个电路的设计,实现了一位的存储功能!我们叫它 1 位锁存器。 然后我们把多个锁存器组合起来,再加上一些 3-8 译码器,8-1 选择器等电路,就可以实现一个能保存 8 位二进制的存储器,并且可以随机地读写它, 我们把它叫做 RAM,简称为内存。 这个组件通过再次组合,可以形成 N × M 的 RAM 阵列。比如我们可以表示一个 1024 * 8 的 RAM 阵列。 这表示存储容量为 1024 个单位,每个单位占 8 位。 为了更方便地表示,我们规定 1024 = 1K,8 位 = 1 字节(8 bit = 1 byte),那么我们就可以说,这个 RAM 的存储容量为 1K 个单位,每个单位占 1B。或者说,地址空间为 1K,存储容量是 1KB。 此时这个 RAM 模块已经近乎完美了,我们甚至可以单独对其进行使用,将数据存入某个地址,将某个地址中的数据读出。 怎么方便人操作呢?只需要将地址输入、数据输入、写操作端分别接入一个控制面板,由开关来控制这些信号的输入是 1 还是 0 即可,然后再将数据输出接入一些灯泡方便观察,这样一个单独的可以手动操作的存储装置,就搞定啦。(下图中有彩蛋~) 有了可读写的内存,我们就可以事先把几个数字存储内存中了,接下来,我们能否让算术逻辑单元 ALU 自动地读取这个数字,进行加法运算呢? 六、程序——自动化 我们先引入一个新的组件,10 位计数器,这里的 Clk 就接入我们在第四部分讲的时钟信号,Clr 是清零端,具体效果下面动图一目了然。 计数器的输出就是 0,1,2,3,4,5,可以当作内存中的地址。 我们把这个计数器,以及上面讲的 ALU 与 RAM 全部连在一起,尝试实现一个可以累积求和的装置。 我们想计算的是 1+2+3+4+5+6+7,   这个自动化的计算器是这么运行的 1、用控制面板在 RAM 的地址 0~6 处存上 1~7 这几个数字的,在上一节已经实现了。 2、当计数器的值是 0 时,数据 1 被输出到加法器进行计算,此时加法器 A=1,B=0,计算结果为 1,但记住锁存器存储的是上一次的加法器输出 0,这次的计算结果要等下一次锁存器遇到上升沿信号。 3、当计数器的值是 1 时, 数据 2 被输入到加法器,此时锁存器存储了上一次的计算结果 1,并将这个 1 输出给小灯泡,并同时回传到加法器的B,所以此时加法器 A=2,B=1,计算结果为 3 4、当计数器的值是 3 时,以此类推,请看下图 我们将累加求和这个过程自动化了!之后如果想计算累加和,只需要用控制面板事先在内存里存好数据就可以了!是不是很方便? 七、程序指令 我们还想要更多的自动化! 现在这个装置,只能无脑地将 RAM 中的数据从头到尾一直累加下去,无法选择加哪个不加哪个,也无法选择什么时候停止。 比如我们 RAM 中的数据是这样的。 地址(16 进制) 数据(10进制) 0x00 ... 0x01 10 0x02 ... 0x03 20 0x04 30 0x05 ... ... ... 我们只想让 RAM 蓝色地址处的数据进行累加,其他地方的数据忽略,并且到 RAM 0x05 处就停止,该怎么做呢? 我们可以再增加一个 RAM,这个 RAM 里存放的数据,表示"指令"的含义! 我们先发明三种指令。 add :把 RAM 这个位置处的值进行累加 nop :忽略此处的值(也就是什么都不做) halt :停止(禁止计数器的值加一) 那么要想达到上述功能,相应的这个指令 RAM 中的数据应该是这样的。 注意:下面指令 RAM 的地址和上面数据 RAM 的地址之间有一一对应关系! 地址 (16 进制) 指令RAM的值 指令含义 0x00 nop 什么都不做 0x01 add 累加 0x02 nop 什么都不做 0x03 add 累加 0x04 add 累加 0x05 halt 停止 ... ... ... 我们需要引入一个控制单元,放在如下位置。 遇到 nop 指令(0x00),那输出就将锁存器的 W 位禁止,不允许锁存器写操作,这样累加结果就不会录入。 再比如遇到输入为 halt 指令(0x05),就将计数器的 EN 位禁止,不允许计数器 +1,这样就达到了停止的效果。 此时再让时钟信号震荡起来,就可以达到有选择地求和过程,并且在指定位置悬停。那现在我们就让时钟信号震动起来,看看这个过程吧。(此处只留关键组件) 这个控制单元该怎么实现呢?我们知道,只要给出输入,给出输出,任何组件都可以造出来。本文就不再展开了。 有了三个指令,我们知道了通过指令这种方式,配合各种复杂的控制器,即可实现将所有操作统统自动化。 接下来我们需要做的,就是设计控制器,以及约定好一大堆指令,使得通过这一大堆指令的排列组合,可以实现任何自动化的计算操作。 我们将设计好的一大堆指令 称作指令集 我们将指令排列组合后可以实现的功能 称作程序 我们将指令的排列组合这个过程 称作编程 我们将排列组合这些指令的人 称作程序员 而我们将承载这一切的装置,叫做什么呢? 没错,这个破玩意,就是 计 算 机

    时间:2021-03-09 关键词: 编码 二进制 计算机

  • 计算机的工作原理:RAM系列-八位寄存器

    前面说过的是1位寄存器,我们可以很容易扩展到8位,数据输入端i是相互独立的,“写”信号s并在一起,对8位信号输入统一控制: 也就是说,当s=1时,o=i;当s=0时,o处于保持状态。 8bit=1byte,可以把上面电路抽象成: 我们知道,每一位都有0和1两个状态,对于8位锁存器,有2^8=256个状态。 前面我们已经搞定如何控制将8位数据“写入”,那如何控制数据的“读出”呢?——很简单,再增加一个“使能器”: 组成很简单,8个与门,当e=1时,o=i;e=0时,o=0;可以抽象成: s相当于“写”的使能端,e相当于“读”的使能端。放在一起就是一个8位寄存器了,抽象如下: 其中R表示register。顾名思义,存储器的作用就是存储信息,并且能通过使能端控制信息的写入和读出。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-02 关键词: 工作原理 寄存器 计算机

  • 计算机的工作原理:RAM系列-触发器

    计算机是什么呢?——简而言之,可以看成是一个“自动干活的设备”。说起来并不复杂,我们一一拆解一下这句话。首先“设备”很好理解,不用多解释。“干活”也好理解,就是要能实现一定的功能。“自动”是啥意义呢?——就是在初始人为干预结束后,设备能自动运行,也就是说,机器能自己存储并执行某种预设的“指令”。按照这个理解,我们基本就可以得到计算机的组成了:负责干活的设备和负责存储的设备。我们把前者叫做CPU,后者叫做RAM。当然还需要一些辅助设备将这两个东西连接起来,简要模型如下: 前面说了,RAM的作用是存储数据,我们知道,要存储信息,至少要有两个状态,且都必须是稳定的,我们把这样的器件称为双稳态器。最简单的双稳态器组成非常简单——两个非门串联反馈在一起,如下图所示: 经过简单分析这个电路,很容易发现:上图中红色部分信号既可以是高电平,也可以是低电平!也就是说,原来电路上是高电平的话,就一直维持在高电平,原来低电平的话,就一直维持在低电平-----这个电路有两个稳定状态,也就是有最简单的记忆功能。 大家都知道,触发器是现代电子技术中一个非常核心的器件,其实触发器的本质就是通过两个非门串联反馈在一起的双稳态器。 但是呢,基于两个非门串联反馈在一起的双稳态器有一个缺点: 状态一旦确定了之后就不再变化了,也就是说,我们没有办法改变这个系统的记忆,因为没有控制接口。 这当然难不倒我们,我们可以自己加上,比如,可以用两个与非门来代替非门,这样就可以增加两个控制端: 当然,也可以用或非门来代替非门,感兴趣的可以自己试一下。 如果将上图的与非门翻转180°,就会变成下面的图: 有没有一种似曾相识的感觉?没错,这就是RS触发器,它有四种状态: a=1,b=1,为保持状态,也就是退化为两个非门的反馈串联; a=0,b=1或a=1,b=0,就会控制记忆和输出; a=0,b=0,o和ō 都是1,应避免出现该种状态,我们称之为非法态。(o表示输出(output),ō 表示反向输出) 有两个bug: 能够控制记忆,但是有非法状态; 整个系统不受控,一直在工作,当输入端变化时,输出端也跟着变化。 我们可以在输入端再增加两个或门,这样的话,中间这个输入引脚为1的话,电路处于保持状态,就自动屏蔽外部输入,也就是老子不干活了。只有中间这个引脚为0的时候,才工作。 这样就就解决了第二个bug,但是依然有存在非法态的可能,怎么干掉呢? 既然中间引脚解决了保持记忆的问题,那我们最后只要保证输入的两个引脚不同,就可以避免全0的情况,加个非门不就完事了?两个输入永远不会同时为0。 这就是电平型D触发器。 前面我们说了,只有当s=0时,输出才等于输入,系统才开始干活,我们更习惯s=1时干活,这样也好办,再加一个非门。同时,我们把表示a改为i,意为input。 这样显得略臃肿,我们知道: 即: 这样左上方的或门就可以变为与非门,所以有: 同时,我们又知道: 即 所以,此时: 可以进一步简化成4个与非门的形式。 这就是1位寄存器了。简写形式如下: 1位寄存器 其功能是: 当s=1时,o=i;当s=0时,o保持原来的状态。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-02 关键词: 工作原理 RAM 计算机

  • 假如计算机是中国人发明的,那么代码应该这么写……

    1、注释都不需要了,因为代码即是注释,注释即是代码。 2、进制数应该是这样的: 二进制: 阴、阳 八进制:干qián、坤kūn、震zhèn、巽xùn、坎kǎn、离lí、艮gèn、兑duì 十六进制替换为十二进制: 鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪 3、这时底层代码肯定就是…… 阴阳阴阴阴阳阴阴阴阴阳阴阴阳阳阴阳阳阴阳阳阳阳阴阳阳阴阳 ... 不过,看下面的中文代码其实也是挺头疼的,也许是我们已经习惯了英文字母: 4、学习语言,第一个输出的程序是? 你好,吃了吗?或者吃了没,世界! 然后,注释会使用以下代码: 项目发布前,一定要大师开光,灵符、朱砂都用上,保佑顺利上线无Bug。 5、Github上还有一个有意思的项目PerlYuYan,它将Perl翻译成了文言文。 PerlYuYan Github 地址是:https://github.com/audreyt/lingua-sinica-perlyuyan 先看看它的实例代码: 看完以后,是不是后悔没好好学文言文? 接下来,我们再看下它的源码,也就明白其实作者是将许多指令改成以一个个中国汉字来表示,造成了文言语法的感觉。 下面,再来看看它的五言诗句: 翻译成Perl就是: 6、最后,还有一点就是如果计算机是中国人创造的,韩国人很有可能会说最开始是他们想出来的。 END 来源:菜鸟教程(微ID:runoob) 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 树莓派Pico:仅4美元的MCU 嵌入式Linux开发板裸机程序烧写方法总结 国产16位MCU的痛点,可以用这款物美价廉产品 →点关注,不迷路← 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-02-25 关键词: 嵌入式 代码 计算机

  • 你知道无线传感器和有线传感器的不同点有哪些吗?

    你知道无线传感器和有线传感器的不同点有哪些吗?

    在当今高度发展的科学技术中,各种各样的高科技出现在我们的生活中并为我们的生活带来便利,那么您是否知道这些高科技可能包含的无线传感器和有线传感器? 传感器已成为物联网等许多领域发展的重要组成部分。它将信息传输到所需的位置,并通过计算机远程控制该过程。由于传感器是这些设备工作方式的主要焦点,因此使用正确的传感器非常重要。那么,工程师能否正确分类有线传感器和无线传感器? 有线传感器是日常生活中最常见的传感器。在许多情况下,有线传感器是最可靠的系统之一,因为它们将传感器直接连接到接收输入的设备。这意味着有线传感器也是最耐用的系统,不需要经常更换。但是,应该注意的是,有线系统需要大量空间,维护起来要复杂得多。基于传感器的设计用途,随着使用更多的传感器,此负担的大小将增加。 作为无线传感器的替代,无线传感器在基于传感器的应用中变得越来越普遍。这主要是因为它们安装便宜且易于维护。另外,应该注意,无线传感器网络可以提供更大的灵活性。这使得更容易使传感器系统适应用户的需求。无线配置消除了导线损坏。在可能存在振动,电线疲劳或高温的恶劣工作环境中,电线容易损坏。对于旋转轴测量,无线系统不需要使用滑环。此外,穿过铰链接头和连杆末端的线材也容易受到损坏。 尽管有这些好处,无线传感器仍然有一些缺点。例如,它们通常受距离限制,因为数据传输的速度取决于接收设备相对于传感器的位置。与此相比,有线传感器的数据传输时间更可预测。如果您问无线传感器和有线传感器有什么区别?当然,从产品的主要功能和用途来看,有线传感器和无线传感器用于监视特定的工作条件并提取物理或化学数据以进行监视。从这个意义上讲,无线传感器是传统传感器的扩展。 尽管无线感测系统的成本可能会有些高,但是无线系统的安装速度更快,并且总体安装成本较低(尤其是对于偏远地区)。无线系统的数据收集更便于现场诊断和实施售后解决方案。 那么,与传统的有线传感器相比,无线传感器有何优势? 1.无线传感器具有很高的灵活性,适用于需要移动但布线不方便的场合,例如起重机,移动装瓶设备,运输行业,自动引导车辆系统和单轨输送机。 2.无线传感器安全性高。随着技术的发展和新威胁的不断出现,升级安全维护的能力至关重要。新的加密策略和秘密数据传输表明,无线安全级别将超过有线系统。此外,在某些危险的极端环境中(例如,接线不便的爆破场合),无线传感器可以确保人员安全。 3.无线传感器可靠性高。无线传感器可以避免运动引起的损坏,例如长拖链引起的电线弯曲以及旋转运动引起的电缆扭曲和断裂。同时,消除了由有线网络中的连接器引起的故障因素。 4.无线传感器可以大大减轻人员的工作量。无线传感器会受到桥梁,河流,山脉和河流等地形的影响。在这些地形中不能随意构造电缆。无线传感器可以减少人工成本和工程周期。当发生故障时,无线传感器检查站将更加集中,这可以避免过去沿线巡逻的繁琐任务。 5.无线传感器的成本低。与有线传感器相比,无线传感器在安装,维护,故障诊断和升级布线成本方面具有明显的成本优势。 随着越来越多的办公室,建筑物和设备适合在现代世界中工作,在无线和有线世界之间进行选择的决定已成为最重要的问题。尽管无线传感器具有许多优点,但是有线传感器也不是全部都不理想。如何选择正确的传感器传输方法:有线和无线并不重要。选择“时间,地点和人员”传感器以接收输入很重要。以上是值得学习的无线传感器和有线传感器的详细分析。希望您在接触时能提供一些帮助。如有任何疑问,也可以与小编讨论。

    时间:2021-02-10 关键词: 无线传感器 有线传感器 计算机

  • 中国首个量子计算机操作系统发布

    中国首个量子计算机操作系统发布

    2月8日,中国首个量子计算机操作系统——“本源司南”在合肥正式发布。 该系统由合肥本源量子计算科技有限责任公司自主研发,主要特点包括多量子计算任务并行执行、量子比特自动化校准、量子计算资源统一管理等。 本源量子表示,该系统全面超越国外现有产品,能够数倍提升现有量子计算机系统的运行效率,未来将支持国产量子计算机落地。 据了解,本源量子研发团队利用量子卷积神经网络模型开发出的量子图像识别应用,可将图像识别任务转化为多个量子线路,在经过量子态数据编码之后,这些量子线路就处于排队等待运行状态。 通过“本源司南”的统一调度管理,这些量子线路在单个量子芯片上可以被并行执行,不仅大大减少了整体线路运行时间,还有效提高了量子芯片的整体利用率,使得当前有限的量子计算资源得到最大化利用。 下一步,本源量子团队将基于具备完全自主知识产权的本源量子计算机集群、本源司南量子计算机操作系统、本源量子云平台以及丰富的量子软件与应用,打造完善且开放的量子计算服务生态,与量子计算产业链企业共同实现量子计算应用的广泛应用。 根据公开资料显示,本源量子成立于2017年9月,由中国量子计算行业领军人物——中科院院士郭光灿、中科大教授郭国平领衔创立,是国内量子计算龙头企业;团队技术起源于中国量子信息领域第一个省部级重点实验室——中科大中科院量子信息重点实验室,主要以量子计算机的研发、推广和应用为核心,专注量子计算全栈开发,各种软硬件产品、技术指标国内领先,拥有各项知识产权成果四百余项。值得一提的是,2021年1月,本源量子刚刚完成数亿元A轮融资。

    时间:2021-02-10 关键词: 操作系统 量子 计算机

  • 全球最贵台式机亮相:贵到怀疑人生

    你知道全球最贵台式机是什么样的吗,没错就是Apple 1,不要谈配置,这货可是信仰的加持。 据外媒最新报道称,乔布亲手制作的Apple 1电脑在国外二手电商平台eBay上架,标价150万美元,约合人民币963万元。 Apple 1电脑发布于1976年,当时全球有200台这样的电脑出售,而这200台电脑全部都是史蒂夫·乔布斯和斯蒂夫·沃兹尼亚克亲自动手组建制作的。但是根据佳士得拍卖行的介绍,目前全球仅存50台Apple 1电脑。 从这我们也就可以看出Apple 1电脑的稀有和珍贵之处,有心收藏的苹果产品的果粉真是不应该错过,而随着它的极度稀缺性,相信价值还会进一步上升。 Apple-1被公认为个人电脑革命的先驱产品,它是第一款售前预先组装好的个人电脑产品。 很多机构收藏家都在收集与计算机历史有关的文物,个人收藏家很难在市面上买到此类文物,而且此类文物的拍卖价仍在不断上升。 2014年宝龙拍卖行在纽约市售出一台由苹果联合创始人斯蒂夫·沃兹尼亚克亲自制作的Apple-1电脑,拍卖成交价为90.5万美元。那台Apple-1也因此成为全球价格最高的计算机文物,买家是密西根州迪尔伯恩市的亨利福特博物馆。 END 来源:快科技 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 缺芯少货、华为跌落……2021年智能手机市场或将迎来大变化! 突发!中芯国际被移除美国金融市场 中国构建全球首个星地量子通信网! 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-31 关键词: 电脑 台式机 Apple 计算机

  • 口袋电脑,到底是个什么东东?

    掐指一算,电子计算机的发明问世,距今已有75年了。 1946年,世界上第一台电子计算机ENIAC正式诞生。它体重达30多吨,占地100多平方,是个庞然大物。 此后,正如大家所知道的,随着半导体工业的发展,电子计算机不断朝着高性能、小体积、低功耗的方向演进。 如今,市面上最轻薄的笔记本电脑产品,重量已经可以做到0.8kg以内。 那么问题来了,是不是电脑的重量和体积已经达到极限了呢? 答案当然是否定的啦! 今天小枣君要给大家介绍的,是一款薄到可以塞进衣服口袋的电脑产品,来自中兴通讯的uSmart W100口袋云电脑(以下简称W100)。 乍一看,W100的外型就像一个移动电源,十分小巧紧凑。它的整机尺寸为109×46×10.3 mm,和一张名片差不多大。重量方面,也只有不到100g,还不到现在主流手机的一半。 如此轻巧的重量和体积,简直颠覆了人们对传统电脑的“三观”。 W100的外壳采用了哑光金属材质,既提供了良好的质感,也方便了散热。主机典型功率只有2W,是普通笔记本电脑的1/25。机器内部无内置风扇,所以运行过程中几乎没有任何噪音。 在W100的侧面,分别设计了电源、USB和HDMI等接口。在使用时,只需要通过接口与电源、键鼠、显示器进行连接,接入网络,即可访问云端专属计算资源,作为电脑使用。 W100之所以如此轻巧,是因为它是一部云电脑终端。它本身不是一台完整的电脑,而是云办公资源(桌面)的一个访问入口。真正的CPU、内存、硬盘和显卡,都在云端。 云端为用户分配资源和创建环境,用户通过W100去访问和使用。 W100和云之间,通过VDI(Virtual Desktop Infrastructure,虚拟桌面基础架构)协议进行数据传输。如果协议开发能力不够,就无法保证各类应用能够在虚拟桌面系统上正常运行。 中兴通讯在编解码和传输协议层面进行了独有的设计和创新,采用超低带宽编码自适应技术。使用W100接入云办公系统,哪怕你的网速速率只有120Kbps、网络时延达到250ms,都能够流畅办公,获得和PC一样的使用体验。 在中兴通讯融合GPU虚拟化、分布式渲染以及桌面虚拟化技术的支持下,W100小小的身板,甚至可以当图形工作站使用,可谓是深藏不露。 毫无疑问,W100是远程办公的“神器”,主要面向的是政企行业用户市场。 近年来,随着商业活动的日益活跃,远程办公变得越来越普遍。去年新冠疫情全球大爆发,很多人都被迫居家隔离,使得远程办公的需求更加迫切。 有了W100,员工出差再也无需携带笨重的笔记本电脑,大大减轻了出行负担。 相比于传统PC和传统远程桌面,W100的最大优势体现在安全性方面。 传统PC的系统、应用、数据都是存储在本地硬盘的,容易通过USB拷贝或者网络的方式进行资料外发。而采用W100的话,本地是“零数据”,所有的数据都在企业的数据中心。 用户访问数据,需要连接到企业的专属云办公系统。在云端,企业可以结合云杀毒、行为审计、数字水印、软件管控等应用进行安全管理,确保安全无忧。 W100的第二大优势,体现在成本方面。 前面小枣君说过,W100所有的计算资源,都是云端平台分配给它的。 这些资源,可以根据用户的需求,随时进行调整。少了就加,多了就减,能够做到IT资源利用率的最大化,减少IT基础实施的成本投入。 相比之下,传统PC的资源是固定分配的。买的时候是多少,就是多少。无法根据业务的需求进行灵活增减,往往造成资源浪费,或者影响业务扩张。 W100的第三个优势,也是相比竞品最大的优势,就是智能运维。 传统PC如果出现故障,管理员需要进行现场排查。而使用W100+云电脑,管理员可以在后台管理系统提取故障报告,进行维护操作。 在此基础上,中兴通讯推出了AI智能运维。 云平台可以随时查看资源使用情况,了解用户的接入状况。通过构建特征库,引入大数据分析,中兴云电脑平台可以对群体用户进行画像,然后进行有针对性的优化。 举个例子来说,如果系统判断某一类用户使用图形处理软件较多,则会增加GPU资源,提升运算速度。如果系统判断某一地域的用户网络时延较大,则会自动切换到时延更低的路由。…… 总之,在数据的驱动下,通过引入AI,中兴通讯云电脑平台的资源调度变得更加智能,用户体验也得到了明显提升。 凭借上面所提到的技术优势,中兴通讯的云电脑解决方案已经广泛部署于金融、大中企业、运营商、教育、政府及公用事业等行业,全球累计服务用户数也已超过了30万。 未来,企业办公平台将向“数字办公空间”的方向发展,办公资源云化是必然趋势。 目前行业普遍实现的云桌面,是云化的一个阶段,而非最终结果。在桌面云化的基础上,很可能会实现应用云化。也就是说,不再有操作系统的概念,取而代之的,是“云工作台”。所有的APP(应用程序),都是基于云的,在云上运算,在云上存储。云桌面,将进化成真正的云电脑。 未来已来,让我们拭目以待! 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-30 关键词: 口袋电脑 计算机

  • 图解计算机中数据的表示形式

    https://github.com/sunshinelyz/mykit-delay PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。 数据的表示 在计算机中,所有的数据都是以二进制的形式进行表示的,也就是说,在计算机中使用0和1来表示所有的数据。而我们日常生活中的数字都是10进制的,那我们平时使用的数字如果在计算机中表示时就需要进行进制的转换。 进制转换 R进制转10进制 R进制转10进制可以使用按权展开的方法,具体的操作就是:将R进制数的每一位数值使用R^k^表示,底数是R,指数是k。其中,k与该位和小数点之间的位置有关。当这个位置位于小数据左边时,k的值是从小数点向左依次数的个数,需要注意的是:紧邻小数点的数字位置为0,接下来是1,2...依次类推。同样的,如果这个位置在小数点的右边,则紧邻小数据点位置的数字从-1开始,依次向右数为-2,-3等等,依此类推。 例如,我们给出一个二进制数字,11010101.01,转换为10进制数字为:1 x 2^7^ + 1 x 2^6^ + 0 x 2^5^ + 1 x 2^4^ + 0 x 2^3^ + 1 x 2^2^ + 0 x 2^1^ + 1 x 2^0^ + 0 x 2^-1^ + 1 x 2^-2^。 注:2^7^表示2的7次方。 再比如,我们给出一个八进制数,76128.01,转换为10进制数字为:7 x 8^4^ +6 x 8^3^ + 1 x 8^2^ + 2 x 8^1^ + 8 x 8^0^ + 0 x 8^-1^ + 1 x 8^-2^ 十进制转R进制 十进制转R进制就比较简单了,这里我们可以使用短除法。 例如,将十进制数字69转换为二进制的过程如下所示。 得出短除的结果后,我们需要将余数倒过来排列即为十进制69转换为二进制的结果,所以结果数据为:1000101。 二进制与八进制互转 二进制转八进制时,每三位二进制数表示一个八进制数。因为在八进制中,总共有8个基数,分别是0~7,逢8进1。而如果要使用二进制来表示时,0的二进制为000,7的二进制为111,所以,每三位二进制数对应一位八进制数。反过来,每一位八进制数对应三位二进制数。 具体的划分策略是,从二进制的低位开始,从低到高,也就是从右向左,每三位二进制数对应一个八进制数,不足三位的前面补0,例如,我们将二进制数:10001110转化为八进制数的过程,具体如下所示。 所以,二进制数10001110转化为八进制数的结果为216。 同理,八进制转二进制与二进制转八进制正好相反,八进制的每一位对应三位的二进制数。也就是说,将八进制数的每一位转化成三位的二进制数即可。 二进制与十六进制互转 在十六进制表示的数字中,总共有15个基数,为0~15,逢16进1。如果要将二进制数转化为十六进制数时,首先要弄清楚每位十六进制数需要多少为二进制数表示。在十六进制中,最大的基数为15,15的二进制表示为:1111,最小的基数为0,0的二进制数为0000,也就是说,十六进制的基础使用二进制表示为 0000~1111,所以,每位十六进制数需要四位二进制数表示。 从二进制数的低位开始,也就是从右侧开始,每四位二进制数对应一位十六进制数。 例如,我们需要将二进制数10001110转换为十六进制数,如下所示。 注意:在十六进制中,分别使用A,B,C,D,E,F代表10,11,12,13,14,15。 所以,二进制10001110转化为十六进制的结果为8E。 十六进制转二进制与二进制转十六进制正好相反,将十六进制的每一位转换为四位二进制数即可。 数据的码制 在计算机中,带符号的机器数可以采用原码、反码、补码和移码表示,这些编码称为码制。 原码 在原码表示中,最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值,数值0的原码有两种表示形式: 原 = 0 0000000, 原 = 1 0000000。 反码 在反码中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码是其绝对值按位取反。数值0的反码有两种表示形式: 反 = 0 0000000, 反 = 1 1111111。 补码 在补码中,最高位是符号位,0表示正号,1表示负号,正数的补码与原码和反码相同,负数的补码等于其反码的末位加1。在补码的表示中,0有唯一的补码: 补 = 0 0000000, 补 = 0 0000000。 移码 移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为 2^n-1^。 实际上,在偏移 2^n-1^的情况下,只要将补码的符号位取反就可以获得相应的移码。 码制总结 我们来看下面的表格,这里,我直接使用八位的二进制数来表示相应的数值。 码制 数值1 数值-1 1-1 原码 0000 0001 1000 0001 1000 0010 反码 0000 0001 1111 1110 1111 1111 补码 0000 0001 1111 1111 0000 0000 移码 1000 0001 0111 1111 1000 0000 通过表格我们发现: 正数的原码、反码和补码是相同的。 负数的反码是原码除符号位外,其他位分别取反; 负数的补码是其反码的末位加1。 移码是在补码的基础上符号位取反得到。 在负数的原码和补码的转换中,我们可以得出如下结论: 负数的原码转补码是在原码的基础上除符号位外,其他位取反,然后末位加1。 负数的补码转原码是在补码的基础上除符号位外,其他位取反,然后末位加1。 也就是说,负数的原码转补码和补码转原码的规则是一样的。小伙伴们可以根据表格自行验证 计算机使用补码进行加减法运算 我们再来看表格的最后一列 1-1,在计算机中,表示为1+(-1),其正确的结果应该为0。接下来,我们分别分析下使用原码、反码、补码和移码进行加减法运算的结果的正确性。 表格的第一行中,使用原码计算的结果为1000 0010,转换为10进制数为-2,1-1不等于-2,所以,使用原码进行加减法运算的结果是错误的。 在反码中,计算1-1的结果为1111 1111,显然结果不为0,所以,使用反码进行加减法运算的结果是错误的。 在补码中,计算1-1的结果为0000 0000,结果为0,所以, 使用补码进行加减法运算的结果是正确的。 在移码中,计算1-1的结果为1000 0000,结果为-0,虽然-0也等于0,但是严格意义来讲,这个结果是不正确的。 在计算机中,不会使用移码进行加减法运算,移码用于浮点数的阶码。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-25 关键词: 数据 表示形式 计算机

  • 内存随机也比顺序访问慢,带你深入理解内存IO过程

    平时大家都知道内存访问很快,今天来让我们来思考两个问题: 问题1: 内存访问一次延时到底是多少?你是否会进行大概的估算? 例如笔者的内存条的Speed显示是1066MHz,那是否可以推算出内存IO延时是1s/1066MHz=0.93ns? 这种算法大错特错。 问题2: 内存存在随机IO比顺序IO慢的问题吗?我们都知道磁盘的随机IO要比顺序IO慢的多(操作系统底层还专门实现了电梯调度算法来缓解这个问题),那么内存的随机IO会比顺序IO慢吗? 要想彻底弄明白以上两个问题,我想我们得从内存IO的物理过程中来寻找答案。 1先给你讲个图书管理员的故事 在开始介绍枯燥的内存工作原理之前。我想先给你讲一个故事,并带你去认识一个人,图书馆的管理员。 在我们的这个故事中,你是故事的主角。你有一所房子,房子里有一个仆人,他每天帮你处理各种各样的图书数据。但是北京房价太贵,所以你的这个房子很小,只能放的下64本书。你家的马路对面,就是北京图书馆(你家房子虽然小但是地段还不错),你所需要的所有的图书在那里都可以找到。图书馆有个管理员,他负责帮你把你想要的书找出来。 图1 图书管理员的故事 好接下来,故事开始进行! 场景1: 你发现你需要编号为0的书的计算结果,你的仆人穿过马路告诉了图书管理员,告诉他请帮我把第0-63本书取出来。图书管理员帮你在电脑前查得该书在二楼。于是他,花了点时间坐电梯到了二楼。等到了二楼,他又花了点时间帮你找了出来。然后你的仆人抱着64本书放到了客厅,拿起第0本书帮你处理了起来。 场景2: 你发现你需要编号为1的书的计算结果,告诉你的仆人。你的仆人直接从客厅拿出来就可以处理了,这次你等的时间最短。 场景3: 你发现需要编号为65的书,你又告诉你的仆人。你的仆人穿过马路又去找了图书管理员。图书管理员还在二楼呢,听说这次需要65-127,这次他不用再花时间找楼层了。只是花时间找书就可以了。你的仆人把65-127的书放到了客厅(以前的0-63就都扔了),并帮你开始处理起65号书来。 场景4: 你发现你需要编号为10000的书,你告诉了你的仆人。你的仆人穿过马路去图书馆,找到了管理员。这次管理员查得你需要的书是在10楼,他得花点时间坐电梯过去。去了之后,他又得花点时间帮你找出来。 这四个场景里,我觉得你一定发现了不同情形下耗时的差异。 场景1和场景4花费的时间最多。因为图书管理员需要花时间坐电梯找楼层,需要花时间在楼内找书。 场景3次之,因为图书管理员直接就在楼层内,只需要花时间在楼内找书既可 场景2最快,因为只需要仆人帮你从客厅拿过来就好,连马路都不需要过。 之所以编造这么一个例子,是因为内存的工作方式和它太像了。接下来我们进入内存的实际分析。 2内存物理结构 在《带你理解内存对齐最底层原理》中我们了解了内存颗粒的物理构造以及IO过程,今天我们再来复习一下。 内存是由chip构成。每个chip内部,是由8个bank组成的。其构造如下图: 图2 内存颗粒chip内部结构 而每一个bank是一个二维平面上的矩阵,前面文章中我们说到过。矩阵中每一个元素中都是保存了1个字节,也就是8个bit。 图3 bank内部物理结构 每当CPU向内存请求数据的时候,内存芯片总是8个bank并行一起工作。每个bank在定位到行地址后,把对应的行copy到row buffer。再根据列地址把对应的元素中的数据取出来,8个bank把数据拼接一下,一个64位宽的数据就可以返回给CPU了。 图4 一次内存IO的过程示意 根据上面几张图我们可以大致了解内存的IO过程,在这个过程中每一步操作之间都有一些延迟,让我们来继续了解这些延迟。 3内存IO延迟 在《从DDR发展到DDR4,内存核心频率指标其实基本上就没太大的进步》里我们提到内存的延迟很大程度是受核心频率制约的,你也应该记得我们提到了内存延迟一般是通过CL-tRCD-tRP-tRAS四个参数来标识的。我们今天来详细理解一下这四个参数的含义: CL(Column Address Latency):发送一个列地址到内存与数据开始响应之间的周期数 tRCD(Row Address to Column Address Delay):打开一行内存并访问其中的列所需的最小时钟周期数 tRP(Row Precharge Time):发出预充电命令与打开下一行之间所需的最小时钟周期数。 tRAS(Row Active Time):行活动命令与发出预充电命令之间所需的最小时钟周期数。也就是对下一次预充电时间进行限制。 要注意除了CL是固定周期数以外,其它的三个都是最小周期。另外上面的参数都是以时钟周期为单位的。因为现代的内存都是一个时钟周期上下沿分别各传输一次数据,所以用Speed/2就可以得出,例如笔者的机器的Speed是1066MHz,则时钟周期为533MHz。你自己的机器可以通过dmidecode命令查看: # dmidecode | grep -P -A16 "Memory Device" Memory Device ...... Speed: 1067 MHz ...... 和“图书管理员”类似,内存芯片也有类似的工作场景: 场景1: 你的进程需要内存地址0x0000为的一个字节的数据,CPU这时候向内存控制器发出请求,内存控制器进行行地址的预充电,需要等待tRP个时钟周期。再发出打开一行内存的命令,又需要等待tRCD个时钟周期。接着发送列地址,再等待CL个周期。最终将0x0000-0x0007的数据全部返回给了CPU。CPU把这些数据放入到了自己的cache里,并帮你开始对0x0000的数据进行运算。 场景2: 你的进程需要内存地址0x0003的一个字节数据,CPU发现发现它在自己的cache里存在,直接使用就好了。这个场景里其实根本就没有内存IO发生。 场景3: 你的进程需要内存地址0x0008的一个字节数据,CPU的cache并没有命中,于是向内存控制器请求。内存控制器发现行地址和上一次工作的行地址一致,这次只需要发送列地址后等待CL个周期,就可以拿到0x0008-0x0015的数据并返回给CPU了。 场景4: 你的进程需要内存地址0xf000的一个字节数据,同样CPU的cache并不命中,向内存控制器请求。内存控制器一看(内心有些许的郁闷),这次行w地址又变了,得,和场景1一样。继续等待tRP+tRCD+CL个周期后,才能够取到数据并返回。 实际的计算机的内存IO过程中还需要进行逻辑地址和物理地址的转换,这里忽略不表。 4结论其中场景1和场景4是随机IO的情况,场景2无内存IO发生,场景3是顺序IO,。通过上面的过程描述我们可以得到结论。内存也存在和磁盘一样,随机IO比顺序IO要慢的问题。如果行地址同上一次访问的不一致,则需要重新拷贝row buffer,延迟周期需要tRP+tRCD+CL。而如果是顺序IO的话(行地址不变),只需要CL个周期既可完成。 我们接着估算下内存的延时,笔者的机器上的内存参数Speed为1066MHz(通过dmidecode查得),该值除以2就是时钟周期的频率=1066/2=533Mhz。其延迟周期为7-7-7-24。 随机IO:这种状况下需要tRP+tRCD+CL个时钟周期,7+7+7=21个周期。但是还有个tRAS的限制,两次行地址预充电不得小于24。所以我们得按24来计算,24*(1s/533Mhz) = 45ns 顺序IO:这种状况下只需要CL个时钟周期 7*(1s/533Mhz)=13ns 5扩展,CPU的cache line虚拟内存概念因为对于内存来说,随机IO一次开销比顺序IO高好几倍。所以操作系统在工作的时候,会尽量让内存通过顺序IO的方式来进行。做法关键就是Cache Line。当CPU发现缓存不命中的时候,实际上从来不会向内存去请求1个字节,8个字节这种。而是一次性就要64字节,然后放到自己的Cache中存起来。 用上面的例子来看, 如果随机请求8字节:耗时是45ns 如果随机请求64字节:耗时是45+7*13 = 136ns 开销也没贵多少,因为只有第一个字节是随机IO,后面的7个字节都是顺序IO。数据是8倍,但是IO耗时只有3倍,而且取出来的数据后面大概率要用,所以计算机内部就这么搞了,通过这种方式帮你避免一些随机IO! 另外,内存也支持burst(突发传输)模式,在这种模式下可以只传入一次行列地址,就命令内存返回该内存开头的连续字节数据,比如64字节。这种模式下,只有第一次的8字节需要真正的行列访问延迟,后面的7个字节可以直接按内存的数据频率给吐出来。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-21 关键词: 内存 IO 计算机

  • 小白必读:计算机网络入门

    很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线连接起来怎么就能"通信"了呢?我可以给你讲 IO、讲中断、讲缓冲区,但这不是研究网络时该关心的问题。 第一层 首先,你要给所有的连接到交换机的设备,都起个名字。原来你们叫 ABCD,但现在需要一个更专业的,全局唯一的名字作为标识,你把这个更高端的名字称为 MAC 地址。 这样,A 在发送数据包给 B 时,只要在头部拼接一个这样结构的数据,就可以了。 B 在收到数据包后,根据头部的目标 MAC 地址信息,判断这个数据包的确是发给自己的,于是便收下。 第二层 交换机内部维护一张 MAC 地址表,记录着每一个 MAC 地址的设备,连接在其哪一个端口上。 MAC 地址 端口 bb-bb-bb-bb-bb-bb 1 cc-cc-cc-cc-cc-cc 3 aa-aa-aa-aa-aa-aa 4 dd-dd-dd-dd-dd-dd 5 你给这个通过这样传输方式而组成的小范围的网络,叫做以太网。 假如在 MAC 地址表为空时,你给 B 发送了如下数据 由于这个包从端口 4 进入的交换机,所以此时交换机就可以在 MAC地址表记录第一条数据: 交换机看目标 MAC 地址(bb-bb-bb-bb-bb-bb)在地址表中并没有映射关系,于是将此包发给了所有端口,也即发给了所有机器。 MAC:bb-bb-bb-bb-bb-bb 端口:1 但是你要注意,上面那根红色的线,最终在 MAC 地址表中可不是一条记录呀,而是要把 EFGH 这四台机器与该端口(端口6)的映射全部记录在表中。 左边的交换机 右边的交换机 MAC 地址 端口 bb-bb-bb-bb-bb-bb 1 cc-cc-cc-cc-cc-cc 1 aa-aa-aa-aa-aa-aa 1 dd-dd-dd-dd-dd-dd 1 ee-ee-ee-ee-ee-ee 2 ff-ff-ff-ff-ff-ff 3 gg-gg-gg-gg-gg-gg 4 hh-hh-hh-hh-hh-hh 6 但很遗憾,人是贪婪的动物,很快,电脑的数量就发展到几千、几万、几十万。 交换机已经无法记录如此庞大的映射关系了。 那我可不可以让那根红色的网线,接入一个新的设备,这个设备就跟电脑一样有自己独立的 MAC 地址,而且同时还能帮我把数据包做一次转发呢? 好了,现在交换机的 MAC 地址表中,只需要多出一条 MAC 地址 ABAB 与其端口的映射关系,就可以成功把数据包转交给路由器了,这条搞定。 不难想到这样一个点子,假如电脑 C 和 D 的 MAC 地址拥有共同的前缀,比如分别是 D 的 MAC 地址:FFFF-FFFF-DDDD 这样是否可行呢?答案是否定的。 00-16-EA-AE-3C-40 那如果你希望像上面那样根据目标MAC地址的特地格式来转发(FFFF-FFFF-?开头的),那你就需要要求某一子网下统统买一个厂商制造的设备,或者你就需要要求厂商在生产网络设备烧录 MAC 地址时,提前按照你规划好的子网结构来定 MAC 地址,并且日后这个网络的结构都不能轻易改变。 于是你发明了一个新的地址,给每一台机器一个 32 位的编号,如: 你觉得有些不清晰,于是把它分成四个部分,中间用点相连。 你还觉得不清晰,于是把它转换成 10 进制。 最后你给了这个地址一个响亮的名字,IP 地址。现在每一台电脑,同时有自己的 MAC 地址,又有自己的 IP 地址,只不过 IP 地址是软件层面上的,可以随时修改,MAC 地址一般是无法修改的。 那交给路由器之后,路由器又是怎么把数据包准确转发给指定设备的呢? 我们先给上面的组网方式中的每一台设备,加上自己的 IP 地址 现在两个设备之间传输,除了加上数据链路层的头部之外,还要再增加一个网络层的头部。 A ~ 路由器这段的包如下: 路由器到 C 这段的包如下: 好了,上面说的两种情况(A->B,A->C),相信细心的读者应该会有不少疑问,下面我们一个个来展开。 A 给 C 发数据包,怎么知道是否要通过路由器转发呢? 如果源 IP 与目的 IP 处于一个子网,直接将包通过交换机发出去。 好,那现在只需要解决,什么叫处于一个子网就好了。 这两个是我们人为规定的,即我们想表示,对于 192.168.0.1 来说: 那对于计算机来说,怎么表达这个意思呢?于是人们发明了子网掩码的概念 这表示,将源 IP 与目的 IP 分别同这个子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网,就这么简单。 A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0 B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0 C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0 D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0 A 如何知道,哪个设备是路由器? 上一步 A 通过是否与 C 在同一个子网内,判断出自己应该把包发给路由器,那路由器的 IP 是多少呢? 对 A 来说,A 只能直接把包发给同处于一个子网下的某个 IP 上,所以发给路由器还是发给某个电脑,对 A 来说也不关心,只要这个设备有个 IP 地址就行。 路由器如何知道C在哪里? 现在 A 要给 C 发数据包,已经可以成功发到路由器这里了,最后一个问题就是,路由器怎么知道,收到的这个数据包,该从自己的哪个端口出去,才能直接(或间接)地最终到达目的地 C 呢。 这个表就叫路由表。 不同于 MAC 地址表的是,路由表并不是一对一这种明确关系,我们下面看一个路由表的结构。 目的地址 子网掩码 下一跳 端口 192.168.0.0 255.255.255.0 0 192.168.0.254 255.255.255.255 0 192.168.1.0 255.255.255.0 1 192.168.1.254 255.255.255.255 1 这就很好理解了,路由表就表示,192.168.0.xxx 这个子网下的,都转发到 0 号端口,192.168.1.xxx 这个子网下的,都转发到 1 号端口。下一跳列还没有值,我们先不管 答案:arp 答案很简单,在网络层,我需要把 IP 地址对应的 MAC 地址找到,也就是通过某种方式,找到 192.168.0.2 对应的 MAC 地址 BBBB。 一开始的时候这个表是空的,电脑 A 为了知道电脑 B(192.168.0.2)的 MAC 地址,将会广播一条 arp 请求,B 收到请求后,带上自己的 MAC 地址给 A 一个响应。此时 A 便更新了自己的 arp 表。 好了,总结一下,到目前为止就几条规则 电脑视角: 交换机视角: 路由器视角: 如果你嗅觉足够敏锐,你应该可以感受到下面这句话: 涉及到的三张表分别是 这三张表是怎么来的 知道了以上这些,目前网络上两个节点是如何发送数据包的这个过程,就完全可以解释通了! 也就是说找来找去,最终必须能映射到一个端口号,然后从这个端口号把数据包发出去。 目的地址 下一跳 端口 192.168.0.0/24 0 192.168.0.254/32 0 192.168.1.0/24 1 192.168.1.254/32 1 192.168.2.0/24 192.168.100.5 192.168.100.0/24 2 192.168.100.4/32 2 思考一分钟... 详细过程动画描述: 详细过程文字描述: 2. A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址。 5. 数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5 7. 此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备从 1 号口把数据包送出去。 9. 交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。 更详细且精准的过程: 至此,经过物理层、数据链路层、网络层这前三层的协议,以及根据这些协议设计的各种网络设备(网线、集线器、交换机、路由器),理论上只要拥有对方的 IP 地址,就已经将地球上任意位置的两个节点连通了。 —— 全文完 ——

    时间:2021-01-15 关键词: 网络 计算机

  • 二进制原码/反码/补码详解,不懂的请看过来

    真值与机器值 真值很好理解,就是十进制的数字前面再加上正负号,这是人类可以简单识别的数字,比如 0、±16、±1084、±10.34、±100.453 等,而正数前面的+符号可以省略。机器值从字面理解就是机器(计算机)识别的值,实际上也确实是这个意思。 计算机中通过高低电平表示1或者0,这样就可以表示一个二进制的数值。一个1或者0表示的数值位称为一个bit,而计算机中存储和传输数据的最小单位是一个字节(byte)也就是8个bit,所以说计算机所有计算本质上都是基于二进制。 在计算机中,我们可以使用1个或者多个字节存储一个数,但无论是多少个字节,其大小肯定是固定的,同时其所能表示的数值的范围也是固定的。比如说对使用1个字节存储的数进行计算或者传输,那么这个数所能表示的最小值为00000000最大值为11111111,转换为十进制为0 ~ 255。那么无论对这个数做了什么计算,无论计算之后的结果为多少都不能超出这个范围,同理使用2个字节存储的数范围为0 ~ 65535。 由于很多时候一个数据需要使用2个或者2个以上的字节表示,那么这种数据无论是存储还是传输的时候都会有一个顺序的问题,也就是大小端对齐(字节序)问题。在存储时高位字节在前为大端对齐,反之为小端对齐。在数据传输时先传输高位字节为大端字节序,反之为小端字节序。目前绝大多数平台内部都是小端对齐的方式存储数据,而大多数通信协议却都是用大端字节序传输数据,所以这一点值得注意一下。 符号位与数值位 计算机中使用二进制存储传输和计算数值,但是不能只有数值,计算的时候还得有正负之分。在计算机中使用最高bit位的数值来表示正负号,这个bit位称作符号位。 计算机中符号位的值为0表示这个数为正数,符号位值为1表示这个树为负数。由于符号位表示符号所以其不表示具体的值,除开符号位剩余的bit位用来表示数值也就是数值位。比如1个字节的整数00000001,其中最高bit(最左边)位的0为符号位,表示这个数为正数,数值位为1,所以其真值为1。同理2个字节的整数00000000_0000001,其真值也是1。 原码、反码和补码 计算机只识别机器码,其实也就是二进制数,并且使用最高bit位表示符号位。那么两个真值为8和-8的8位整数,它们在计算机内部的机器值是否就分别是00001000和10001000?其实并不是,这只是8和-8的原码,而机器算计中的机器值是使用补码存储和计算的。 计算机中,正数的原码、反码和补码是一样的,所以上面那个例子中,真值为8的8位整数的机器值确实是00001000,但是-8就不是这么回事了。负数的首先将原码数值位按位取反得到反码,然后再将反码数值位加1之后则得到补码。我们来看一下-8这个例子,其原码为10001000,数值位按位取反之后的反码为11110111,然后数值位加1之后的补码为11111000。所以真值为-8的8位整数在计算机中的机器值为11111000,我们来看下面这张表: 注:int8为8bit位整数占用1byte,int16为16bit位整数占用2byte。 刚说的是原码转补码的步骤,其实补码转原码的步骤是一样的。首先正数的原码补码是一样的不需要转换,我们看负数11111000,首先将数值位按位取反得到10000111,然后再将数值位加1得到10001000。我们再来看一个8位的整数10000000,是不是发现这个数原码和补码是一样的,那么这个看起来像是“-0”的数是怎么回事呢?其实可以将这个数看成是一个特殊值,它的真实含义就是最小值。8位的这种“-0”的真值为-128,16位的这种“-0”真值为-32768。所以只需要记住100...000这种补码就是最小值就行,我们看下面的这张表: 有两对8bit位的整数4、8和4、-8,我们分别看一下他们在计算机中是怎么做加法计算的。首先看4和8的补码分别为00000100和00001000,只需要将每个bit位相加就行,结果为00001100,其真值为12。我们再来4和-8的计算,它们补码分别为00000100和11111000,然后将它们按位相加(注意符号位也要做加法)得到11111100,其原码为10000100,真值为-4。 再来看一下减法计算,比如8bit位的整数-8减去4,首先可以将4处理一下可以变为(-8) + (-4),这样是不是就又变为了加法了?-8和-4的补码分别为11111000和11111100,将它们按位相加得到补码11110100(注意这是8位的整数,超出部分发生了溢出),转换成原码为10001100,真值为-12。 再来看一下乘法,比如8bit位的整数-8乘以13,他们的补码分别为11111000和00001101。其中-8为被乘数,13为乘数,并且乘数有8个bit位,需要将被乘数按位与和位计算8次然后将结果相加,看如下分析: 被乘数的第0个bit位值为1,将被乘数乘以1然后左移0位得到:11111000; 被乘数的第1个bit位值为0,将被乘数乘以0然后左移1位得到:00000000; 被乘数的第2个bit位值为1,将被乘数乘以1然后左移2位得到;11100000; 被乘数的第3个bit位值为1,将被乘数乘以1然后左移3位得到;11000000; 被乘数的第4个bit位值为0,将被乘数乘以0然后左移4位得到;00000000; 被乘数的第5个bit位值为0,将被乘数乘以0然后左移5位得到;00000000; 被乘数的第6个bit位值为0,将被乘数乘以0然后左移6位得到;00000000; 被乘数的第7个bit位值为0,将被乘数乘以0然后左移7位得到;00000000; 由此可以得计算得到8组补码(注意上面做位移涉及到的整数溢出,只能是8个bit位),然后将它们做加法得到10011000(也存在整数溢出)转换为原码为11101000,真值为-104。 至于除法则是使用交替加减法的方式,本文只是对计算原理做一下扩展,这里不再继续深入做介绍,如果有想了解的可以自行上网查询。 通过上面的分析可以知道,使用补码可以将所有计算都转化为加法计算,这样可以让计算机底层对于整数计算变得简单,反码属于历史遗留,因为其存在±0的问题。 END 节选自《二进制小总结》 https://www.cnblogs.com/lbole/p/14260496.html 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 成功为华为“续命:中国芯片之父张汝京 一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有…… 这位“华为天才少年”,竟然要我用“充电宝”打《只狼》 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-13 关键词: 二进制 计算机

  • 强悍DIY:发烧友自制双屏笔记本

    关于双屏 Windows 设备,目前市面上已经有相关产品,但是这些产品动辄需要花费数千美元的价格,并且形式上和 MacBook 的 Touch Bar 相类似,只是那一条触控条变成了面积更大的触控屏。因此,微软自己推出的双屏设备,能够带来的新的应用场景是一个值得期待的方向。下面来看看记录了完整 DIY 过程的视频: 在微软的双屏 Surface 设备发布之前,就有 DIY 发烧友自制了一台双屏笔记本,并且想法还不错。这位发烧友从 eBay 上购买到一块显示屏、电路板等产品,然后经过简单组装,使得所买的零部件成为一块插上电源连接显示信号就能够工作的独立显示屏,接下来就是把这块独立的显示屏和笔记本组装到一起,通过 Windows 内置的投屏功能,连接上自制的显示器,实现双屏显示。 虽然这位发烧友做得事情原理简单,但是其所制造的独一款的双屏笔记本却是能够提供更多应用场景的思路。自制显示屏通过支架固定在笔记本A面,通过铰链实现翻转,两个屏幕可以同一个方向工作,也可以反向工作。 END 来源:趣无尽 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 成功为华为“续命:中国芯片之父张汝京 一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有…… 这位“华为天才少年”,竟然要我用“充电宝”打《只狼》 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-08 关键词: 笔记本 DIY 计算机

  • 原来PCIe这么简单,一定要看!

    硬盘是大家都很熟悉的设备,一路走来,从HDD到SSD,从SATA到NVMe,作为NVMe SSD的前端接口,PCIe再次进入我们的视野。作为x86体系关键的一环,PCIe标准历经PCI,PCI-X和PCIe,走过近30年时光。其中Host发现与查找设备的方式却一脉沿袭,今天我们先来聊一聊PCIe设备在一个系统中是如何发现与访问的。 首先我们来看一下在x86系统中,PCIe是什么样的一个体系架构。下图是一个PCIe的拓扑结构示例,PCIe协议支持256个Bus, 每条Bus最多支持32个Device,每个Device最多支持8个Function,所以由BDF(Bus,device,function)构成了每个PCIe设备节点的身份证号。 PCIe体系架构一般由root complex,switch,endpoint等类型的PCIe设备组成,在root complex和switch中通常会有一些embeded endpoint(这种设备对外不出PCIe接口)。这么多的设备,CPU启动后要怎么去找到并认出它们呢? Host对PCIe设备扫描是采用了深度优先算法,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。我们一般称这个过程为PCIe设备枚举。枚举过程中host通过配置读事物包来获取下游设备的信息,通过配置写事物包对下游设备进行设置。 第一步,PCI Host主桥扫描Bus 0上的设备(在一个处理器系统中,一般将Root complex中与Host Bridge相连接的PCI总线命名为PCI Bus 0),系统首先会忽略Bus 0上的embedded EP等不会挂接PCI桥的设备,主桥发现Bridge 1后,将Bridge1 下面的PCI Bus定为 Bus 1,系统将初始化Bridge 1的配置空间,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成0和1,以表明Bridge1 的上游总线是0,下游总线是1,由于还无法确定Bridge1下挂载设备的具体情况,系统先暂时将Subordinate Bus Number设为0xFF。 第二步,系统开始扫描Bus 1,将会发现Bridge 3,并发现这是一个switch设备。系统将Bridge 3下面的PCI Bus定为Bus 2,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成1和2,和上一步一样暂时把Bridge 3 的Subordinate Bus Number设为0xFF。 第三步,系统继续扫描Bus 2,将会发现Bridge 4。继续扫描,系统会发现Bridge下面挂载的NVMe SSD设备,系统将Bridge 4下面的PCI Bus定为Bus 3,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成2和3,因为Bus3下面挂的是端点设备(叶子节点),下面不会再有下游总线了,因此Bridge 4的Subordinate Bus Number的值可以确定为3。 第四步,完成Bus 3的扫描后,系统返回到Bus 2继续扫描,会发现Bridge 5。继续扫描,系统会发现下面挂载的NIC设备,系统将Bridge 5下面的PCI Bus设置为Bus 4,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成2和4,因为NIC同样是端点设备,Bridge 5的Subordinate Bus Number的值可以确定为4。 第五步,除了Bridge 4和Bridge 5以外,Bus2下面没有其他设备了,因此返回到Bridge 3,Bus 4是找到的挂载在这个Bridge下的最后一个bus号,因此将Bridge 3的Subordinate Bus Number设置为4。Bridge 3的下游设备都已经扫描完毕,继续向上返回到Bridge 1,同样将Bridge 1的Subordinate Bus Number设置为4。 第六步,系统返回到Bus0继续扫描,会发现Bridge 2,系统将Bridge 2下面的PCI Bus定为Bus 5。并将Bridge 2的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成0和5, Graphics card也是端点设备,因此Bridge 2 的Subordinate Bus Number的值可以确定为5。 至此,挂在PCIe总线上的所有设备都被扫描到,枚举过程结束,Host通过这一过程获得了一个完整的PCIe设备拓扑结构。 系统上电以后,host会自动完成上述的设备枚举过程。除一些专有系统外,普通系统只会在开机阶段进行进行设备的扫描,启动成功后(枚举过程结束),即使插入一个PCIe设备,系统也不会再去识别它。 在linux操作系统中,我们可以通过lspci –v -t命令来查询系统上电阶段扫描到的PCIe设备,执行结果会以一个树的形式列出系统中所有的pcie设备。如下图所示,其中黄色方框中的PCIe设备是北京忆芯科技公司(Bejing Starblaze Technology Co., LTD.)推出的STAR1000系列NVMe SSD主控芯片,图中显示的9d32是Starblaze在PCI-SIG组织的注册码,1000是设备系列号。 STAR1000设备的BDF也可以从上图中找出,其中bus是0x3C,device是0x00,function是0x0,BDF表示为3C:00.0,与之对应的上游端口是00:1d.0。 我们可以通过“lspci –xxx –s 3C:00.0”命令来列出该设备的PCIe详细信息(技术发烧友或数字控请关注该部分)。这些内容存储在PCIe配置空间,它们描述的是PCIe本身的特性。如下图所示(低位地址0x00在最左边),可以看到这是一个非易失性存储控制器,0x00起始地址是PCIe的Vendor ID和Device ID。Class code 0x010802表示这是一个NVMe存储设备。0x40是第一组capability的指针,如果你需要查看PCIe的特性,就需要从这个位置开始去查询,在每组特征的头字段都会给出下一组特性的起始地址。从0x40地址开始依次是power management,MSI中断,链路控制与状态,MSI-X中断等特性组。这儿特别列出了链路特征中的一个0x43字段,表示STAR1000设备是一个x4lane的链接,支持PCIe Gen3速率(8Gbps)。 当然也可以使用lspci –vvv –s 3C:00.0命令来查看设备特性,初学者看到下面的列表也就一目了然了。 Host在枚举设备的同时也会对设备进行配置,每个PCIe设备都会指定一段CPU memory访问空间,从上面的图中我们可以看到这个设备支持两段访问空间,一段的大小是1M byte,另一段的大小是256K byte,系统会分别指定它们的基地址。基地址配置完成以后,Host就可以通过地址来对PCIe memory空间进行访问了。 PCIe memory空间关联的是PCIe设备物理功能,对于STAR1000系列芯片而言,物理功能是NVMe,memory中存放的是NMVe的控制与状态信息,对于NMVe的控制以及工作状态的获取,都需要通过memory访问来实现。 下面以NVMe命令下发为例简单描述PCIe设备的memory访问。NVMe命令下发的基本操作是1)Host写doorbell寄存器,此时使用PCIe memory写请求。如下图所示,host发出一个memory write(MWr)请求,该请求经过switch到达要访问的NVMe SSD设备。 这个请求会被端点设备接收并执行2)NVMe读取命令操作。如下图所示,此时NVMe SSD作为请求者,发出一个memory read(MRd)请求,该请求经过Switch到达Host,Host作为完成者会返回一个完成事物包(CplD),将访问结果返回给NVMe SSD。 这样,一个NVMe的命令下发过程就完成了。同样,NVMe的其他操作比如各种队列操作,命令与完成,数据传输都是通过PCIe memory访问的方式进行的,此处不再详述。 通过上面的描述,相信能够帮助大家了解PCIe的设备枚举和memory空间访问。以后会继续与大家探讨PCIe的其他内容,比如PCIe的协议分层,链路建立,功耗管理等等。目前PCIe协议还正在不断的快速演进中,2017年发布的PCIe Gen4标准,每条Serdes支持的速率已经达到16Gbps,Gen5也在加速制定中,其速率会再翻一倍达到32Gbps。Starblaze会紧跟技术的发展趋势,提供速率更高,性能更好更稳定的NVMe SSD系列产品。 END 来源:人人都是极客 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 成功为华为“续命:中国芯片之父张汝京 一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有…… 这位“华为天才少年”,竟然要我用“充电宝”打《只狼》 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-07 关键词: PCIe 计算机

  • 元旦期间,整理了12道计算机网络面试题

    时间:2021-01-05 关键词: TCP 计算机

  • 2020大学生专业薪资排名一览

    声明: 部分内容来源于网络,仅供读者学术交流,版权归原作者所有。 前些日子,《2020年中国大学生就业报告》发布,报告中显示,2019届本科毕业生月入5440元,本科计算机类、高职铁道运输类专业领跑薪酬榜。 剔除通货膨胀因素的影响外,与2015届相比,五年来本科生起薪涨幅为23.6%;高职毕业生平均月收入为4295元,与2015届相比,五年来高职生起薪涨幅为15.7%。 大学毕业生升学比例持续上升。本科生国内读研比例从2015届的13.5%上升至2019届的15.2%,高职毕业生读本科的比例从2015届的4.7%上升到2019届的7.6%。 具体来说,计算机类、电子信息类、自动化类等本科专业毕业生薪资较高,2019届平均月收入分别为6858元、6145元、5899元;铁道运输类、计算机类、水上运输类等高职专业毕业生薪资较高,2019届平均月收入分别为5109元、4883元、4763元。 下面我们来看看具体排行名单↓↓↓ 月收入前10专业类 其中,本科、高职“绿牌”专业: 绿牌专业指的是失业量较小,就业率、薪资和就业满意度综合较高的专业,为需求增长型专业。行业需求增长是造就绿牌专业的主要因素,连续绿牌说明相关专业就业优势具有持续性。 本科、高职“红牌”专业: 红牌专业指的是失业量较大,就业率、薪资和就业满意度综合较低的专业。这与相关专业毕业生供需矛盾有关。红绿牌专业反映的是全国总体情况,各省区、各高校情况可能会有差别。 毕业生热门就职行业 1)本科毕业生 2019届本科毕业生就业比例最大的行业类是“教育业”(就业比例:15.9%),同时与2017届相比增幅也较高,为8.2%。具体来看,在“教育业”的就业增长主要是“民办中小学及教辅机构”(2019届就业比例:7.6%)、“公办中小学教育机构”(2019届就业比例:6.1%)的需求增长,较2017届增幅分别为20.6%、7%。 其他就业比例较大且增长较多的行业类还有建筑业(2019届就业比例:8.9%),信息传输、软件和信息技术服务业(2019届就业比例:8.9%),各类专业设计与咨询服务业(2019届就业比例:5.8%),文化、体育和娱乐业(2019届就业比例:4.6%),人才需求分别较2017届增长6%、4.7%、7.4%、18%。 2)高职毕业生 2019届高职毕业生就业比例较大的行业类是建筑业(就业比例:11.1%)、教育业(就业比例:7.8%)。与2017届相比,到“教育业”就业的高职生比例增幅也较高,为20%。具体来看,在“教育业”的就业增长主要是“教辅及培训机构”(2019届就业比例:2.9%)、“幼儿与学前教育机构”(2019届就业比例:2.5%)的需求增长,较2017届增幅分别为26.1%、19%。 其他就业比例较大且增长较多的行业类还有信息传输、软件和信息技术服务业(2019届就业比例:5.8%),居民服务、修理和其他服务业(2019届就业比例:4.7%),住宿和餐饮业(2019届就业比例:3.9%),人才需求分别较2017届增长13.7%、6.8%、21.9%。 最挣钱的行业排名 今年5月,国家统计局公布2019年城镇非私营单位和城镇私营单位分行业就业人员年平均工资数据!2018年和2019年,年平均工资最高的行业都是信息传输、软件和信息技术服务业。我们可以通过下列图表看看近两年平均工资较高的行业具体有哪些。 城镇非私营单位 分行业就业人员年平均工资 (单位:元,%)↓↓↓ 数据来源:国家统计局 城镇私营单位 分行业就业人员年平均工资 (单位:元,%) ↓↓↓ 数据来源:国家统计局 -END- | 整理文章为传播相关技术,版权归原作者所有 | | 如有侵权,请联系删除 | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-04 关键词: 电子信息 大学生 计算机

  • 2020大学生专业薪资排名一览,你到平均工资了吗?

    前些日子,《2020年中国大学生就业报告》发布,报告中显示,2019届本科毕业生月入5440元,本科计算机类、高职铁道运输类专业领跑薪酬榜。 剔除通货膨胀因素的影响外,与2015届相比,五年来本科生起薪涨幅为23.6%;高职毕业生平均月收入为4295元,与2015届相比,五年来高职生起薪涨幅为15.7%。 大学毕业生升学比例持续上升。本科生国内读研比例从2015届的13.5%上升至2019届的15.2%,高职毕业生读本科的比例从2015届的4.7%上升到2019届的7.6%。 具体来说,计算机类、电子信息类、自动化类等本科专业毕业生薪资较高,2019届平均月收入分别为6858元、6145元、5899元;铁道运输类、计算机类、水上运输类等高职专业毕业生薪资较高,2019届平均月收入分别为5109元、4883元、4763元。 下面我们来看看具体排行名单↓↓↓ 月收入前10专业类 其中,本科、高职“绿牌”专业: 绿牌专业指的是失业量较小,就业率、薪资和就业满意度综合较高的专业,为需求增长型专业。行业需求增长是造就绿牌专业的主要因素,连续绿牌说明相关专业就业优势具有持续性。 本科、高职“红牌”专业: 红牌专业指的是失业量较大,就业率、薪资和就业满意度综合较低的专业。这与相关专业毕业生供需矛盾有关。红绿牌专业反映的是全国总体情况,各省区、各高校情况可能会有差别。 毕业生热门就职行业 1)本科毕业生 2019届本科毕业生就业比例最大的行业类是“教育业”(就业比例:15.9%),同时与2017届相比增幅也较高,为8.2%。具体来看,在“教育业”的就业增长主要是“民办中小学及教辅机构”(2019届就业比例:7.6%)、“公办中小学教育机构”(2019届就业比例:6.1%)的需求增长,较2017届增幅分别为20.6%、7%。 其他就业比例较大且增长较多的行业类还有建筑业(2019届就业比例:8.9%),信息传输、软件和信息技术服务业(2019届就业比例:8.9%),各类专业设计与咨询服务业(2019届就业比例:5.8%),文化、体育和娱乐业(2019届就业比例:4.6%),人才需求分别较2017届增长6%、4.7%、7.4%、18%。 2)高职毕业生 2019届高职毕业生就业比例较大的行业类是建筑业(就业比例:11.1%)、教育业(就业比例:7.8%)。与2017届相比,到“教育业”就业的高职生比例增幅也较高,为20%。具体来看,在“教育业”的就业增长主要是“教辅及培训机构”(2019届就业比例:2.9%)、“幼儿与学前教育机构”(2019届就业比例:2.5%)的需求增长,较2017届增幅分别为26.1%、19%。 其他就业比例较大且增长较多的行业类还有信息传输、软件和信息技术服务业(2019届就业比例:5.8%),居民服务、修理和其他服务业(2019届就业比例:4.7%),住宿和餐饮业(2019届就业比例:3.9%),人才需求分别较2017届增长13.7%、6.8%、21.9%。 最挣钱的行业排名 今年5月,国家统计局公布2019年城镇非私营单位和城镇私营单位分行业就业人员年平均工资数据!2018年和2019年,年平均工资最高的行业都是信息传输、软件和信息技术服务业。我们可以通过下列图表看看近两年平均工资较高的行业具体有哪些。 城镇非私营单位 分行业就业人员年平均工资 (单位:元,%)↓↓↓ 数据来源:国家统计局  城镇私营单位 分行业就业人员年平均工资 (单位:元,%) ↓↓↓ 数据来源:国家统计局  END 来源:大鱼机器人 版权归原作者所有,如有侵权,请联系删除。 ▍ 推荐阅读 成功为华为“续命:中国芯片之父张汝京 一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有…… 这位“华为天才少年”,竟然要我用“充电宝”打《只狼》 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-01-04 关键词: 电子信息 计算机

  • 乱花渐欲迷人眼:浅谈关于分布式存储的五大“谎言”

    要说近几年存储这条街最靓的仔,莫过于分布式存储了。 自诞生以来,分布式存储就被视为存储的未来,被万众期待。然而分布式存储起步于寒门,最早应用于互联网日志、企业备份归档、开发测试等场景,追求极致成本,性能和可靠性却不敢恭维。但它还算争气,凭借多年的打怪练级,越来越多地开始承载自动驾驶研发、超高清编辑、运营商5G网络云等企业的关键业务,走上变成高富帅、赢取白富美的道路。 正所谓人红是非多,存储领域也是一样,坊间一直流传着关于分布式存储的各种流言蜚语。好事的笔者今天就来探寻一番,揭开谎言背后的真相。 谎言一:分布式存储就是软件+服务器 目测分布式存储领域有两个派系,一派是SDS(软件定义存储),一派是软硬一体。前者以vSAN、Ceph为代表,以软件厂商为主在推广。分布式存储软件+通用服务器组合,打着重定义存储市场的旗帜,颇有“有王侯将相宁有种乎”的气势;另一派是存储老牌存储玩家的产品,他们以软硬一体为主,如Isilon、HCP等。 楚河汉界已然形成,未来谁主沉浮? 谁主沉浮很难判断,不过我们不妨从产业动态窥见一斑。虽然用过的客户都诟病分布式存储软件+服务器的方式存在各种兼容性、可靠性、可维护性的问题,但笔者认为SDS这种模式会长期存在,尤其是在传统的低端领域,如备份归档、开发测试环境。而越往高端走,软硬一体越是占据主流。业界主流厂商也在持续推出软硬一体的产品: 国外,DELL&EMC的PowerScale(Isilon)、DDN的EXAScaler等产品; 国内XSKY、浪潮等Ceph系开源厂商也推出了软硬件一体产品如XScaler Express。尤其有趣的是XSKY,这可是国内Ceph系软件定义存储的旗帜啊,你品,你细品。 另一方面,笔者也注意到近些年运营商开展了大规模的分布式存储集采,有文件的有块的。以中国移动2019~2020年分布式块存储集采为例,3个标段中2个为软硬一体采购,占比超过了90%;电信集团2020年集采也放弃了分布式存储纯软件采购,首次全面转向软硬一体。从这个角度看,用户在尝试了多种采购模式之后,也开始逐步转变到软硬一体的道路上来,尤其是大型用户。 #真相#:分布式存储诞生初期主要是纯软形态,近十年来,随着分布式存储逐步进入企业市场,软硬一体的形成已经成为主流。 谎言二:分布式存储就是低价值存储 如文章开头讲到的,分布式存储早期主要用于互联网日志、企业备份归档、开发测试等场景,这些场景无疑是低价值场景,成本是第一诉求甚至唯一诉求。 然此一时彼一时,士别三日也当刮目相看。 首先是分布式存储产品能力已今非昔比,逐渐具备了承载企业高价值业务的关键能力,例如毫秒级时延、TB/s级带宽、双活/3DC业务级容灾、端到端DIF等,无论是结构化数据还是非结构化数据的承载,功能完备性的最大短板早已补齐。 其次,分布式存储已走入众多高价值关键业务,如运营商BOM业务、金融渠道类业务以及超算、油藏探测HPC等高价值业务,通过大规模应用实践来检验成色。(小道消息,某些高价值场景全闪出货价达到1000美金/TB以上啦) 看完当下还要看看未来,笔者认为未来高价值的非结构化数据场景,分布式存储的版图还会持续扩展。如自动驾驶训练、4K/8K超高清、5G日志留存等场景,对多协议访问、极致带宽、扩展性诉求强烈,分布式存储已然成为这些未来业务的首选架构。 #真相#:分布式存储早期主要用在备份归档等低价值、强成本诉求的场景,如今随着企业级能力的提升,分布式存储也逐步成为企业生产系统的承载平台,尤其是面向海量非结构数据场景,全面支撑文件资源池和HPC等高价值场景。 谎言三:开源架构是分布式存储的未来 笔者对开源从来是持开放、支持的态度,正是因为开源的存在,IT产业才能有今天的缤纷色彩;也正是因为开源,存储这个高大上的产品,才走进了更多的寻常百姓家。 但如果说存储的未来在开源,我不敢苟同。 开源分布式存储软件的出现,一定程度上降低了存储的门槛,小公司可快速包装出存储产品,带动服务器销售。但产品同质化问题是所有开源不得不面临的问题,由于架构限制,很难在不动架构的情况下,真正做出差异化竞争力。互联网类公司、部分科研机构,以及有技术情结和充足资金投入的客户可能选择开源,而对于金融、电信运营商、大企业商用HPC、政府等对可靠性、性能、安全合规有要求的企业,开源从来不是第一选择,因为数据太重要了。(听说,国内某知名银行曾经投入500人基于开源软件搭建分布式存储,投入巨大且无法达银行业务对性能、可靠性、易运维诉求,最终于2年后放弃。) 也有认为开源更自主可控的。笔者认为开源给了用户一定的自主权,但和自主可控是两个概念。据SNYK 2019 年开源安全状况报告说明,开源软件漏洞在两年时间内增加了88%,开源风险的解决强依赖于社区版本发布,不能及时规避。同时,近两年国际形势的大变化,给开放著称的开源蒙上了一层阴影。 此外,业界TOP主流分布式存储产品均是闭源架构,如PowerScale(Isilon)、Spectrum Scale、Nutanix、OceanStor Pacific、VSAN、HCP,翻看了一下三个月前发布的IDC市场份额报告,TOP5分布式存储厂商中,基于开源二次开发的厂商份额仅占18%。 #真相#:开源只是部分厂商的商业选择,分布式存储产业的主流还是非开源,并且开源并不代表更加自主可控。 谎言四:分布式存储可全面取代企业外置存储 这是一个在存储领域争论最大的问题。 正所谓长江后浪推前浪,分布式存储快速增长是不可否认的,这从各大厂商的业绩报告和分析师报告就能看出来,但想要把企业外置存储这个前浪拍死在沙滩上还是步子迈太大,不现实。 企业外置存储在相当长的一段时间内,仍然是主流。它主要面向企业传统应用如ERP/CRM/HIS等,数据量不大但对可靠性、性能有极致要求,如银行Core-Banking,从可靠性、生态层面,分布式存储都不是最佳选择。分布式存储主要面向海量数据、新兴业务场景,如HPC/EDA、大数据,这类场景以二进制文件、视频、图片等非结构化数据为主,数据量极大。所以从场景来看,二者场景是有明确区隔的,按场景并存是最好的选择。 从技术的角度,分布式存储的发力点在大规模的扩展性,基于此逐步优化性能、可靠性,让海量数据存得下、用得起;集中式存储的技术方向在于保持稳定性的基础上,利用更快的介质、更低时延的网络为核心业务提供加速,让业务更稳、效率更高。因此,从技术方向上来看,二者也是各有侧重的。 #真相#:分布式存储和企业外置存储并非取代关系,二者相辅相成、互为补充。企业外置存储主要面向结构化数据市场,分布式存储主要面对海量非结构化数据市场(高价值分布式文件、分布式对象)。 谎言五:分布式存储就是“云” IT潮流滚滚向前,每隔几年总是需要有一些新概念。 云和分布式存储一样,这些年正在大行其道、炙手可热。Cloud First、All in Cloud、Cloud Native等概念风靡业界,CIO见面不提云貌似都不好意思打招呼。早期人们也习惯把分布式存储叫做“云存储”,那么分布式存储和云是什么关系? 笔者认为,分布式存储是一种技术架构,而云是一种商业模式。分布式存储可以被用作各种云的数据底座,也可以单独成为数据底座,是配合的关系,而非替换和包含关系。 其实,从与业界公有云厂商的沟通了解到,公有云虽然近年来加强对传统IT市场的转换,但公有云数据增长更多还是来自新兴场景。以美国市场为例,近年来AWS持续快速增长,但PowerScale(Isilon)作为Dell&EMC面向非结构化数据场景的主力产品,并且近60%的销售收入来自于北美市场,依然保持以每年近20%的速度稳步增长。 从场景看,多数海量存储场景,因客户数据安全、生态、招标模式等原因,以线下采购为主,公有云为辅助。以HPC为例,云上HPC给业界提供了一种新的方式,让更多用户能享受到公有云带来的便利性。但实际上HPC主要用于创新研究,对数据安全要求高,上云是有顾虑。参考Hyperion Research报告显示,到2024年云上HPC的收入占比仅17.7%,收入占比很低。 #真相# :分布式存储是一个产品,云是一种商业模式是一种服务形式,二者不冲突,长期共存是未来。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2020-12-31 关键词: 分布式存储 计算机

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章

技术子站

更多

项目外包