事物的价值 获取链接 Facebook X Pinterest 电子邮件 其他应用 五月 25, 2017 大部分的人性是这样评判事物价值的: 1,看它耗费了自己多少能量:时间,金钱,精力。如果没有付出,那它是钻石,也无所谓;如果付出了巨大成本,那它是垃圾,也能找出它的闪光点和价值以安慰自己没有白白付出。 2,看它有多少人抢,都是什么人在抢。如果没人理睬,即便是钻石,也不屑一顾;如果大家都在抢,即便是垃圾,也要美美的鉴赏一番。 3,看事情发展严重到什么程度,如果你给他们防患于未然,未必有人感谢你;倘若你任其发展等到他病入膏肓再出手相救,他必感激涕零。 获取链接 Facebook X Pinterest 电子邮件 其他应用 评论
mips 精确异常和延时槽 四月 16, 2014 一、非精确异常 在多发射乱序执行的流水线 CPU 上,从指令进入流水线到异常事件的发生,期间要经过若干流水级,此时 PC 的值已指向其后的某条指令,在实现非精确异常的 CPU 上就把此时的 PC 值作为引起异常指令的所在(为了表达的方便,记为 eptr)。 简单地说 就是 eptr 的指向,并非真正的引起异常的指令之所在,而是其后面的某条指令所在。 二、精确异常 简单地说就是 eptr 的指向就是真正引起异常的指令之所在 而实现精确异常的 CPU,则在最后指令提交时 (commit) 按指令流的顺序提交,异常的产生也在该指令提交时,这样就能精确计算出引起异常的指令相对于当前 PC 的偏移,从而保证精确异常。 也就是说当异常产生时,之前的预备工作(即取指,译码,当然PC随之增长)便被废弃。CPU从异常中返回时,再重新做读取和译码的工作。 总之,不管是何类异常,eptr 之前的所有指令都会被执行完成 (commit之后),eptr 之后的指令不会被执行。 三、mips 延迟槽 引入延时槽主要目的就是提高流水线的效率,分为以下两种: 1、分支延时槽 分支延迟槽 (Branch delay slot),简单地说就是位于分支指令后面的一条指令,不管分支发生与否其总是被执行,而且通过下面的图可以看出位于分支延迟槽中的指令先于目标指令提交 (commit即执行)。 ....... ....... jal 48 <---- 48 代表跳转的目标地址 jal会置ra寄存器的值 nop / li a1, 4 <---- 这地方就是一个延迟槽 ....... <----- ra 寄存器的值变为这个地方的地址 ....... 进一步理解: 流水线中,分支指令执行时因为确定下一条指令的目标地址(紧随其后 or 跳转目标处?)一般要到第 2 步以后,在目标确定前流水线的取指级是不能工作的,即整个流水线就“浪费”(阻塞)了一个时间片,为了利用这个时间片,在体系结构的层面上规定跳转指令后面的一个时间片为分支延迟槽(branch delay slot)。位于分支延迟槽中的指令总是被执行,与分支发生与否没有关系。这样就有效利用了一个时间片,消除了流水线的一个“气泡”。 如下图所示,当我们把延时槽的指令去掉以后,你会发现我们浪费了一个时钟周期。(还需要注意一点就是通过ALU一... 阅读全文
libvirt event 处理 四月 16, 2014 一、初始化时的函数栈 virNetSocketAddIOCallback()(当然这是以virNetSocket类型的数据结构为例,所谓virNetSocket类型的数据结构是指这类数据结构都是以virNetSocket开头,表现为virNetSocket*形式,例如:virNetSocketPtr) virEventAddHandle() addHandleImpl() <==================> virEventPollAddHandle()(通过virEventRegisterImpl函数来实现对应) 在virEventPollAddHandle()函数中将数据填充到eventLoop.handles[]数组中,下面我们就关注怎么用eventLoop.handles[]数组的。 备注: virNetServerNew 用来建立virNetServerPtr数据结构的同时(这数据结构用来描述remote模式下的server),还调用virEventRegisterDefaultImpl()函数,virEventRegisterDefaultImpl()函数调用virEventRegisterImpl函数来填充addHandleImpl()。 二、event的处理 main() (daemon/libvirtd.c) virNetServerRun() virEventRunDefaultImpl() (在一个while循环中,循环的判断条件是 !srv->quit,srv->quit默认是0,表示server一直在运行,当收到一些信号是该变量才会变成1,表示server退出了,循环也跟着退出) virEventPollRunOnce() 在virEventPollRunOnce()函数中,调用poll函数,来循环struct pollfd* fds(表示fd的数组),fds的初始化函数是virEventPollMakePollFDs(),在该函数中用eventLoop.handles[]数组来初始化fds。 当poll监视的fds数组中有事件发生,poll退出,返回值>0,virEventPollRunOnce()继续,其接着调用virEventPo... 阅读全文
802.11协议用到的简写 四月 16, 2014 ACK (acknowledgment) 应答 AID (association identifier) 关联识别码 AP (accss point) 访问点 ATIM (announceent traffic indication message) 广播传输指示消息 BSA (basic service area) 基本服务区 BSS (basic service set) 基本服务集 BSSID (basic service set identification) 基本服务集识别码 CCA (clera channel assessment) 干净信道评价 CCK (complemenetary code keying) 补码键控 CF (contention free) 无竞争 CFP (contention-free period) 无竞争期 CID (connection identifier) 连接标识符 CP (contention period) 竞争期 CRC (cyclic redundancy code) 循环冗余码 CS (carrier serse) 载波侦听 CTS (clear to send) 允许发送 CW (contention window) 竞争窗口 DA (destination address) 目的地址 DBPSK (differential binary phase shift keying) 差分二进制相移键控 DCE (data communication equipment) 数据通信设备 DCF (distributed coordination function) 分布式协调功能 DCLA (direct current level adjustment) 直接电平调整 DIFS (distributed (coordination function)interframe space) 分布式(协调功能)帧间间隔 DLL (data link layer) 数据链路层 DP (desensitization) 减敏现象 DQPSK (differential quadrature phase shift keying) 差分正交相移键控 DS (ditribution system) 分发系统 DS... 阅读全文
评论
发表评论