一边用cpu在cpu中跟踪指令后读取它,这样边写边读会不会出问题

CPU主频比FPGA快,但为啥FPGA才可以加速?-可编程逻辑-与非网
的主频高达几个GHz,的速率往往在几百兆。但是,往往我们会说FPGA会给CPU进行加速。
虽然CPU主频很高,但其是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期;而FPGA可以通过编程重组电路,直接生成专用电路,加上电路并行性,可能做这个特定运算只需要一个时钟周期。
假设我们用FPGA完整的实现了CPU,然后再跑软件的话,的确比CPU慢。问题是FPGA不会那么干,它会直指问题本质,解决问题。
即使我们用FPGA实现一个CPU,也是为了做一些芯片验证或者说需要一些需要CPU和FPGA需要紧密结合的场景,这种场景现在也逐步由的FPGA实现了。
举个具体的例子,比如有两个数组,其中有256个32位数,我们现在要把它们对应相加变成一个数组,用CPU写最快大概是这样子的:
r[0] = a[0] + b[0];
r[1] = a[1] + b[1];
r[255] = a[255] + b[255];
当然也可能会这么写(在分支预测准确,指令缓存不大的情况下可能更快):
for (int i = 0; i & 255; i++)
r[i] = a[i] + b[i];
CPU指令流水线
根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。
I486拥有五级流水线。分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。某个指令可以在流水线的任何一级。
流水线的数量不可能无限制增加,流水线的加速也有很多风险。即使流水线可以无限制增加,不管CPU的流水线又多少条,每个指令执行都必须顺序执行。对速率的提升也是有限的。
对于上图中的流水线有一个明显的缺陷。对于下面的指令代码,它们的功能是将两个变量的内容进行交换。
第二条xor指令需要第一条xor指令计算的结果a,但是直到第一条指令执行完成才会写回。所以流水线的其他指令就会在当前流水级等待直到第一条指令的执行和写回阶段完成。第二条指令会等待第一条指令完成才能进入流水线下一级,同样第三条指令也要等待第二条指令完成。
这个现象被称为流水线阻塞或者流水线气泡。
对FPGA来说,也可以用上面相同的写法,不同在于:
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
对于此次收购,赛灵思的解读是赛灵思从FPGA器件向自适应计算加速平台提供商演变的战略,就是要加速从云到端应用上FPGA 加速技术的部署,经深鉴科技优化的神经网络剪枝技术运行在赛灵思FPGA 器件上,可实现突破性的性能和行业最佳的能效,这是赛灵思新CEO继ACAP三月的发布会后,提升机器学习研发能力,推进战略发展的重大一步。
发表于: 09:12:24
中国CPU制造商Hygon刚刚针对数据中心市场推出了一款高性能的x86 CPU,名为Dhyana。
发表于: 16:02:27
我第一次见深鉴科技的团队是在安创空间的大赛上,这个团队非常年轻,团队的成员姚颂、单羿、汪玉、韩松等一水的清华系,非常吸引人眼球,都说投资人看创业团队就是看创始人,这个团队果然不负众望,拿下了那一届创业大赛的第一名,后来就顺风顺水地站上了媒体的风口浪尖,多轮大额融资给AI创业者打了一针针鸡血。
发表于: 10:52:15
近日,彭博社发现了一个有趣的动态:越来越多证据表明,社交媒体巨头Facebook正在认真务实地开发自己的芯片。
发表于: 09:31:44
边沿触发用的很少,一般还是以下降沿触发为主。当设备完成一个数据后,会输出一个下降沿,触发处理器。而电平触发,是输出一个电平,并且会保持这个电平, 至到系统处理或者清除该中断后才会输出另外的电平。
发表于: 16:50:50
自适应和智能计算的全球领导企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX))今天宣布已经完成对深鉴科技的收购。深鉴科技是一家总部位于北京的初创企业,拥有业界领先的机器学习能力,专注于神经网络剪枝、深度压缩技术及系统级优化。
发表于: 09:48:36
传统变换器采用模拟硬件实现闭环反馈控制,获得稳定的电压和电流输出。模拟控制实时反应系统状态,响应速度较快,然而在测试技术领域和仪器产品中,模拟系统稳定性不能满足实际需要。为了获得高稳定性能,需要添加大量元器件进行环路补偿。
发表于: 16:45:13
随着互联网的发展和市场需求推动,云计算技术正在逐渐步入成熟化阶段,其使用范围越来越广,对各行各业带来了巨大的推进作用。很多人好奇云计算究竟是如何革新传统行业的,今天千锋云计算培训老师就来给大家分析一下。
发表于: 15:56:07
目前,业界很多组织正在考虑将IT资源向公有云服务中迁移,如亚马逊、微软、谷歌和其他公有云服务提供商,云计算能够带来更高的资本效率、业务敏捷性和企业可扩展性等前景使得这一举措获得企业的青睐。
发表于: 15:54:24
TON 使能=1计数,计数到设定值时(一直计数到32767),定时器位=1。使能=0复位(定时器位=0)。
发表于: 15:33:38
& 2010 - 2018 苏州灵动帧格网络科技有限公司 版权所有.
ICP经营许可证 苏B2-&CPU漏洞原理详解以及POC代码分享
首先,这个漏洞已经公布近一周时间了,看到各大媒体、公众号到处在宣传,本打算不再发布类似信息,但是发现很多媒体的报道达到了一个目的——几乎所有的CPU都有漏洞了,而且很可怕!对漏洞的描述要么晦涩难懂,要么太过专业。在知乎上看到一篇俄亥俄州立大学专门从事侧信道攻击研究人员的分析文章,比较深入也比较透彻的分析了该攻击的情况,推荐阅读(附后)。
分享几个目前可用的CPU漏洞(Meltdown、Spectre
)利用POC验证代码:
https://github.com/Eugnis/spectre-attack
https://github.com/feruxmax/meltdown
https://github.com/gkaindl/meltdown-poc
https://github.com/turbo/KPTI-PoC-Collection
其次,这两个漏洞的详细成因、原理、利用以及危害分析的比较透彻的一篇文章,文章原文:
CPU乱序执行和预测执行导致的安全问题
乱序执行(Out-of-Order Execution) [1] 和预测执行(Speculative Execution) [2] 是现代CPU为了提高性能通常采用的优化方式。乱序就是指CPU不按照程序严格规定的先后顺序执行,预测就是CPU基于先有经验预先执行了后续可能执行的代码。传统观念认为,由于CPU在运行过程中会丢弃乱序执行和预测执行所导致的不正确的运算结果,所以乱序执行和预测执行不会对程序的正确性和安全性造成任何影响。然而,最新的发现表明攻击者完全可以利用这两种CPU特性进行侧信道攻击。目前已知的Meltdown攻击和Spectre攻击就是两个典型的攻击实例 [3]。
从本质上来讲,这两种攻击都属于基于CPU缓存(cache)的侧信道攻击的范畴。这种侧信道攻击在最近十年国外的计算机安全研究领域非常流行。它们的基本假设是攻击者在目标主机上拥有一定的执行权限(比如操作系统的一个普通进程,云计算中的一个虚拟主机,或者浏览器中的一段Java代码),然后通过控制自己内存空间的数据(例如读取等等)来间接的控制CPU缓存。由于CPU缓存是攻击者和目标主机上的目标程序共享的,这种对缓存的间接控制可以被攻击者用来推测目标程序的行为。举个例子来说,如果攻击者和目标程序共享物理内存(比如同一个操作系统的两个程序往往共享同一个动态链接库),攻击者可以反复的利用CPU指令把这块内存的某个地址清除出CPU缓存(Flush阶段),然后在一定的时间间隔后读取这个地址上的内存数据并且测量读取的时间(Reload阶段)。通过这种方式,攻击者可以清楚的知道该地址是否被目标程序读取过,因为一旦目标程序读取该地址,其对应的内存会被导入CPU缓存,从而使得攻击者自己对这个地址的访问变快(由于从缓存读取要远远快于内存)。这种攻击方式被称为Flush+Reload [6]攻击。此外CPU缓存侧信道还有Evict+Time [7], Prime+Probe [8] 等攻击方式。
然而,以往的侧信道攻击针对的目标是被攻击者内存读取的模式,例如某条指令是否被执行或者某个数据是否被访问,而不能直接读取被攻击者的内存。而Meltdown攻击[4] 和Spectre攻击[5] 的目标是越权的内存读取,比如读取(dump)整个内核的内存数据。这就使得这种侧信道攻击的后果更加严重。这也是为什么这个CPU漏洞会被媒体大肆渲染。下面我们就对这两种攻击的基本形式和本质做一下介绍。
Meltdown攻击
Meltdown攻击利用现代CPU中乱序执行 (out-of-order execution)的特性,彻底攻破原本由硬件保证的内存隔离,使得一个仅仅具有普通进程权限的攻击者可以用简单的方法来读取内核内存。应该强调一点,Meltdown攻击不是针对KASLR[9]的攻击。攻击KALSR相对要简单很多,因为它的目标仅是获取内核内存的虚拟地址,而Meltdown的攻击目标是获取内核内存的内容。
Meltdown攻击的本质是利用CPU进行的安全检查和乱序执行之间的race condition,给攻击者创造一个很短的攻击窗口。乱序执行是指当CPU中的某些指令需要等待某些资源,比如内存读取时,CPU不会在当前指令停止,而是利用空闲的计算能力继续执行后续的指令。这大大地增加了计算能力的利用率,从而提升了CPU性能。在支持乱序执行的CPU上,指令的执行并不是顺序进行的。比如后面的指令可能在前面指令执行结束之前就开始执行。然而,为了保证程序的正确性,指令退休(retirement)必须是顺序进行的,而CPU的安全检查是在指令退休时才会进行。这样的结果是,在CPU对某一条指令进行安全检查之前,一部分在该指令后面的指令会由于CPU的乱序执行而被提前执行。例如,一条用户空间的指令访问内核内存会导致CPU抛出异常,然而该异常只有在这条指令退休的时候才会被CPU处理,而由于乱序执行而被提前执行的指令会被CPU丢弃。由于CPU保证程序的正确性,乱序执行本不会产生安全隐患。然而,由于乱序执行的指令对缓存的操作在这些指令被丢弃时不会被重置,攻击者就可以通过缓存侧信道的方式来获取这些乱序执行的信息,从而导致了Meltdown攻击。本质上,Spectre攻击的原理也是一样的。我们会在后面介绍。
以下是一个简化的Meltdown攻击的基本指令:
1 ; rcx = kernel address2 ; rbx = probe array3 mov al, byte [rcx]4 shl rax, 0xc5 mov rbx, qword [rbx + rax]
首先,在指令3中一个具有用户级权限的攻击者访问目标内核内存地址(存储在寄存器rcx中)。由于访问了内核地址,这一条指令将会触发异常,使得它和它之后的指令对寄存器的修改将被全部丢弃。但是在等待CPU完成执行该指令的同时,后两条指令因为乱序执行实际上已经被执行过了,并且此时的计算是根据指令3所读取到的数据所进行,并不受CPU权限限制。指令4将会把这个数据乘以4096,并在指令5中将其作为offset来对数组probe array进行访问。由于一个内存页的大小是4KB,不同的数据将会导致不同的内存页被访问并存放到CPU缓存中。此后,另一个攻击者进程就可以通过缓存侧信道攻击,来了解哪个内存页被访问过了,从而推断出被访问的内核内存数据。
具体的缓存攻击方式有Flush+Reload [6],Evict+Time [7],或者Prime+Probe [8]。在Meltdown这个场景中(数组probe array是在攻击者自己的内存空间的),比较简单而且有效的攻击方法是Flush+Reload,前面已经描述过其基本思想。简单的讲,Flush+Reload攻击首先把probe array的相对应的内存用clflush指令清除出CPU缓存,然后在执行了上述攻击代码后再逐一访问probe array的各个内存页并记录访问时间。访问时间短说明上述代码执行过程中CPU已经把对应的内存页加载到缓存中了,原因是这个内存页对应的offset正好是内核空间中rcx指向的内存内容。
总的来说,Meltdown攻击的指令由两部分组成:第一部分利用乱序执行来访问受限内存,第二部分根据所读取到的数值再编码到内存的访问,并通过缓存侧信道提取信息。攻击的关键在于,乱序执行的这两条指令必须在读取内核内存的指令退休之前,也就是权限审核之前,执行完毕。另外,由于访问受限内存会导致操作系统抛出异常,攻击者可以通过hardware transaction memory等方式抑制异常[11]或者用其他方式处理异常[4],从而反复不间断的对受限内存进行遍历访问。
Spectre攻击
Spectre攻击利用了CPU的预测执行对系统进行攻击。预测执行是另外一种CPU优化特性。在分支指令执行时,由于分支指令执行可能需要内存读取(上百个CPU周期),在分支指令执行结束之前,CPU会预测哪一个分支会被运行,提取相应的指令代码并执行,以提高CPU指令流水线的性能。CPU的预测执行是通过分支预测单元(BPU)进行的。简单的理解,BPU储存了某个分支指令最近执行过的分支跳转的结果。CPU的预测执行遇到分支指令时,会根据BPU的预测结果进行跳转。当预测执行发现预测错误时,预测执行的结果将会被丢弃,CPU的状态会被重置。然而,与乱序执行类似,预测执行对CPU缓存的影响会被保留。Spectre和Meltdown攻击在这一点上比较类似。
Spectre攻击主要分为三个阶段:
准备阶段: 在这一阶段,攻击者通过一些操作来训练CPU的BPU,以使其在运行目标代码时会进行特定的预测执行。同时,攻击者可以执行一些操作来提高预测执行发生的机率,比如把条件判断所需的数据挤出缓存,这样执行分支指令的时间会加长。另外,攻击者也可以在这一阶段做好侧信道的准备工作,比如Flush+Reload攻击中的Flush部分。
攻击阶段:攻击者利用CPU的预测执行把目标的机密数据转移到微架构侧信道中。具体的攻击方法我们下面详细描述。
机密数据提取阶段: 通过测量Flush+Reload或其他缓存攻击的方法中Reload内存时间,攻击者可以从缓存侧信道中提取出目标机密数据。这一点跟Meltdown攻击十分相似。
在攻击阶段,攻击者利用CPU的预测执行把目标的机密数据转移到微架构侧信道中。常见的分支指令包括条件分支指令和间接分支指令。所以相对的Spectre攻击也有两种不同的方式。其主要的思想是,攻击者通过控制目标程序的某个变量或者寄存器,使其读取攻击者指定的内存地址。这里攻击者指定的内存地址的内容就是攻击者试图获取的机密数据(比如用户密码)。如果目标程序中含有将这个机密数据作为内存访问的指针或者数组offset,那么攻击者就可以利用缓存侧信道来提取被访问的内存地址,进而提取目标机密数据。
攻击的危害
本质上讲Meltdown和Spectra都是基于侧信道的攻击,主要用于信息泄露,并不能对目标内存地址进行任意修改。Meltdown攻击往往用于攻击者代码由于权限的限制而不能任意读取其所在的内存地址空间的情况。比如在操作系统中内核内存会被映射到所有普通进程的地址空间,尽管普通进程可以通过虚拟地址访问所有受限内存,包括内核的地址空间,直接访问内核地址会抛出异常而终止。而Meltdown攻击可以帮助攻击者完成这样的操作。在云计算的虚拟机架构上也有类似的问题,使得虚拟机可以通过Meltdown攻击任意读取云服务器宿主机(host)虚拟机管理程序(VMM)的内存地址。而Spectra攻击则利用目标程序的特殊结构,通过系统调用或者函数调用的方式控制其中的某个变量来达到泄漏目标程序(或内核)地址空间中内存内容的目的。比如文献[5]提出了Java代码访问整个浏览器进程内存的方法。而文献[10]提出了利用内核即时编译(Just-in-time compilation)的特性进行提权攻击,正是由于即时编译出得代码具有Spectra攻击所需要的特殊结构。
Meltdown攻击所攻击的并不是软件漏洞,而是CPU设计本身的安全缺陷。所以Meltdown攻击适用广泛,后果严重。它已经被证明在2010年后发布的Intel桌面及服务器CPU架构上全部可行。实验证明个人计算机和云服务器全都会受到影响,而被成功攻破的操作系统包括Linux,MS Windows,以及包含Docker,LXC,和OpenVZ在内的container。在ARM和AMD处理器上,尽管Meltdown攻击所依赖的硬件漏洞同样被证实存在,目前尚无完整的攻击。可能的原因包括指令执行过慢,CPU的流水线(Pipeline)过短等等。相比之下,Spectre攻击需要目标程序具有特殊结构,所以受到目标软件的限制。如果目标程序不具有该特殊结构,那么Spectre攻击就很难进行。但是相对于Meltdown攻击目前仅限于Intel处理器上,Spectre攻击适用于Intel,AMD,ARM等众多处理器上。
漏洞的防御
虽然Meltdown和Spectre是CPU漏洞,短时间内很难通过CPU升级来修补漏洞。目前对Meltdown的主要防御手段是以软件完全隔离用户态和内核态来实现,虽然有分析称这样程序的性能可能会大幅下降。而Spectra的防御就更加困难,借助编译器做程序分析,添加顺序执行指令(比如lfence,cpuid)是一种可能的方案。我们也会继续跟踪重要厂商对漏洞的修补,并对这些修补方式进行测试。我们实验室也会研究和开发其他安全技术对这些攻击进行防范。
对于一般用户,只要不被执行恶意代码,比如不去访问恶意网站,就不会有不可信代码进入内存执行,就不会被Spectra和Meltdown攻击。所以个人用户还是可以利用已有的防御手段(比如恶意网站拦截)对自己进行保护。同时也应该及时关注系统软件厂商,比如操作系统厂商和浏览器厂商的补丁并且随时更新。
对于在云端,由于攻击者可以租借虚拟环境来执行攻击者想执行的任何代码,所以攻击者可以利用它们去从虚拟机用户态读宿主机的内核态以及虚拟态的关键数据,从而可以攻击其他虚拟机。所以云厂商有责任在第一时间对这些CPU漏洞进行软件修补。企业用户应该采取积极的态度配合或者推动漏洞的控制。
张殷乾:俄亥俄州立大学助理教授,主要研究方向侧信道安全和云计算安全。林志强:俄亥俄州立大学副教授,主要研究方向虚拟化安全和软件安全。
[1] https://en.wikipedia.org/wiki/Out-of-order_execution
[2] https://en.wikipedia.org/wiki/Speculative_execution
[3] https://meltdownattack.com/
[4] https://meltdownattack.com/meltdown.pdf
[5] https://spectreattack.com/spectre.pdf
[6] https://www.usenix.org/node/184416
[7] https://dl.acm.org/citation.cfm?id=2725064
[8] http://palms.ee.princeton.edu/system/files/SP_vfinal.pdf
[9] https://lwn.net/Articles/569635/
[10] https://googleprojectzero.blogspot.com/
[11] https://dl.acm.org/citation.cfm?id=2978321
该分析文章发表于知乎专栏:https://zhuanlan.zhihu.com/p/
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点计算机方面的设CPU共有16根地址线,8根数据线,并用MREQ(低电平有效)作访存控制信号,WR作读写命令信号(高电平为
计算机方面的设CPU共有16根地址线,8根数据线,并用MREQ(低电平有效)作访存控制信号,WR作读写命令信号(高电平为读,低电平为写).现有下列存储芯片:ROM(2K &8位,4K 4位,8K 8位),RAM( 1K 4位,2K 8位 ,4k 8位)以及74138译码器和其他门电路(门电路自定).试从上述规格中选出适合芯片,画出cpu和存储芯片的连接图.要求:1.最小4k地址为系统程序区,地址范围wie用户程序区2.支出选用的芯片类型及数量3.详细画出片选逻辑
不知道你有没有唐朔飞老师的计算机组成原理教材,教材上有对应的例题
我有更好的回答:
剩余:2000字
与《计算机方面的设CPU共有16根地址线,8根数据线,并用MREQ(低电平有效)作访存控制信号,WR作读写命令信号(高电平为》相关的作业问题
RAS简介 相信吗?28K 就可以跑 ERP 等应用软件.在过去这或许是件不可想象的事,但现在美创推出的中国首创远程快速应用接入方案 -- RAS 让不可能成为现实. RAS使用虚拟网络技术,结合微软的终端服务(TS)技术,它所实施的网络互联架构,在提供网络互联的同时,可以集中发布各种应用程序,包括Web应用程序,以及
1.软件产品2.环境3.软件危机4.软件维修5.空格6.各种变化7.强项和弱点 8.说服技巧9.惊险报酬10.停留11.刀口12.破图廓,海图上延伸到图框外的图形边缘
it:[计]位,比特gate:【电子学】 选通电极,门电路:具有多个输入端和一个输出端,只有当一套指定的输入端受到脉冲时才有能量flip-flop:【电子学】 触发器,双稳态多谐振荡器:一种能采用两种稳定状态中任一种的电子电路或机械装置,尤指用于储存单个信息单位的计算机电路
极少,我做过的听力得有百八十篇了,各辅导书和模考都做了,只遇到过一篇,还是属于学术对话,不是lecture,是一个教授给学生讲各种存储类型的差别,RAM、ROM之类的.具体是哪里的不记得了,很久以前做的.不用找了,至少OG、红蓝DELTA、高分120、barron 这几套最常用的练习里是不可能有了.ETS应该是没把计算
表示数据的关系,描述如何来表示分离域、数据集和/或记录之间的关系.说明:record是记录,不是集合.
逻辑思维是人对事物的思考、辨别、判断的能力,可能与先天性有关(个人观点),后天采取必要的方法是可以提高的,可以转变不同的思考方式来思考问题,可以做一些头脑 IQ 之类的题目,比如:按规律填数字、判断某一齿轮组的旋转方向等等对提高逻辑思维是很有帮助的.而逻辑学是思想层次上的东西,有两种:普通逻辑学和数理逻辑学,一般学习的
DOI简介:数字对象唯一标识符(Digital Object Unique Identifier-DOI)国外的数字文献生产商较早采用唯一标识符来标识其出版的电子文献,并形成了很多应用在不同环境下的标识符方案.例如:连续出版物及其单篇文献的标识SICI(Serial Item and Contribution Iden
中间应该是 U 吧.U 是并运算.并运算 法则 0&0=0;0&1=1;1&0=1;1&1=1 二进制,按位运算.1001 U 1011 = 1011如果是 1001ˇ 1011 则,同或运算,值为 1100规则,1ˇ 1=1,0ˇ 0=1,1ˇ 0=0,0ˇ 1=0自己去查查逻辑运算符吧.
login:登录,注册
多看论文的写作方法,看多了自然就会了
改成IDE HDD就可以了.
希望这个回答可以给你带来帮助:使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-no
"电子迁移"属于电子科学的领域,在1960年代初期才被广泛了解,是指电子的流动所导致的金属原子的迁移现象.在电流强度很高的导体上,最典型的就是集成电路内部的电路,电子的流动带给上面的金属原子一个动量(momentum),使得金属原子脱离金属表面四处流动,结果就导致金属导线表面上形成坑洞(void)或土丘(hillloc
MROM是只读存储器,全称为掩膜式只读存储器,不能编程,出厂时已经编好程序PROM可编程只读存储器,主要是只可编程一次,出厂时给出全部1,或者0(根据厂商的不同)只能通过编程一次EPROM可擦出编程只读存储器,一般只可多次编程,但是只能用红外擦除,而且擦除的次数很有限E*EPROM又叫E2PROM叫做电可擦除可编程只读
引理1中所给的约束是很严格的.考虑任何满足这样条件的星型图 K1,n-1 ,其中每个结点初始都是1.如果每个叶子均移动,那么将会有恰好n-1个结点移动.
体积:35*0.16=5.6立方分米这根木条重5.6*350=1960克
DOA的意思是,用户买了机器,开箱后就有问题,然后经蓝快的工程师鉴定后,返回IIPC(长城国际),他们修好后,再卖.
如果启用了zlib压缩和输出缓冲,你不用看进度条.关闭它在 php.ini,如果你有机会或只是进入htaccess
上面的是从百度知道哩搜的吧 小白 来看看哥给你写的 Computers are changing our life day by day. We can do many things on computers. For example, we can write articles, do office work andCPU卡读写程序(摘自网络)
卡也称,卡内的中带有、存储单元(包括随机RAM、程序ROM以及操作系统COS。装有COS的相当于一台微型计算机,不仅具有数据存储功能,同时具有命令处理和数据安全保护等功能。要了解什么是CPU卡,就必须从说起。
  IC卡是卡的简称,是镶嵌集成电路芯片的塑料卡片,其外形和尺寸都遵循国际标准(ISO)。芯片一般采用不易挥发性的存储器(ROM、E)、保护、甚至带微CPU。带有CPU的IC卡才是真正的。按照嵌入集成电路芯片的形式和芯片类型的不同IC卡大致可分为接触式,非接触式、双界面卡。CPU卡既有接触式也有非接触式的。非加密:卡内的集成电路芯片主要是EEPROM,具有数据存储功能,不具有数据处理功能和硬件加密功能。
  逻辑加密存储器卡:在非加密存储器卡的基础上增加了加密,加密逻辑电路通过校验密码方式来保护卡内的数据对于外部访问是否开放,但只是低层次的安全保护,无法防范恶意性的攻击。
  由于没有掌握关键的生产工艺,原来我国设计的CPU卡芯片一直在国外生产。这次我国自主设计、制造的CPU卡容量达到了128K。
  CPU卡可适用于金融、保险、交警、政府行业等多个领域,具有用户空间大、读取速度快、支持一卡多用等特点,并已经通过中国人民银行和国家商秘委的认证。
  1 CPU卡的特性
  1.1 定义
  触点的定义遵循ISO7816-2的规定,如图1所示。
符号说明如表1所列。
电压(Vcc)
复位信号(R)
时钟信号(CLK)
输入输出(I/O)
  表1 符号说明
  1.2 字符帧
  数据在I/O上以图2所示的字符帧方式传输。
  每个位宽是1个etu,etu = 372/f。在此处,f = 3.57 MHz。
  起始位由接收端通过对I/O周期采样获得,采样周期应小于0.2
etu。2个连续字符起始位上升沿之间的间隔时间等于(10±0.2)etu加上1个保护时间(最少2个etu)。在保护时间内,卡与终端都应处于接收模式(I/O为高电平状态)。如果卡或终端作为接收方检测出奇偶错误,则I/O被置为低电平,以向发送方表明出现错误。
  1.3 卡操作
  卡操作的步骤如下:
  ① 将卡插入终端接口设备,使两者的触点相接并激活触点;
  ② 将卡复位,建立卡与终端间的通信;
  ③ 执行操作;
  ④ 释放触点,并从接口设备取出卡片。
  以下是除第③步(执行操作)以外,各步的时序要求。
  (1)触点激活
  时序如图3所示。
  (2)卡复位
  卡利用低电平复位来完成异步复位应答,随着触点的激活,终端将进行一个冷复位并从卡获得复位应答。冷复位时序如图4所示。
  冷复位过程之后,如果收到的复位应答信号不满足标准的规定,终端将启动一个热复位并从卡获得复位响应。热复位时序如图5所示。
  在实际程序设计时,由Reset子程序实现触点激活和卡复位。
  (3)触点释放时序
  触点释放时序过程如图6所示。
  2 传输协议与卡命令处理程序
  ISO7816-4及中国金融集成电路(IC)卡规范所规定的异步半双工传输协议,是关于终端为实现传输控制和特殊控制而发出的命令的结构及其处理过程,包括了两种协议:字符传输协议(T
= 0)和块传输协议(T = 1)。本文着重讨论字符传输协议(T = 0)协议,它是IC卡推荐使用的通信协议。
  2.1 命 令
  命令包含1个连续4字节的命令头,用CLA、I、P1和P2以及1个可变长度的条件体来表示。
  命令头定义如下:
  ◇ CLA:指令类别,除"FF"外的任何值;
  ◇ INS:在指令类别中的指令码,当最低位是"0",并且高位半字节既不是"6"也不是"9"时,INS才有效;
  ◇ P1、P2完成INS的参数字节。
  条件体定义如下:
  ◇ Lc(发送数据长度)占1个字节,在命令中定义为发送数据的字节数,取值范围是1~255。
  ◇ Data为将要发送的命令数据域,字节数由Lc定义。
  ◇ Le
(接收数据长度)占1个字节,指出命令响应中预期的数据最大字节数。Le的取值范围是0~255。如果Le=0,预期数据字节的最大长度是256。
  可能的命令结构的4种情况定义如表2所列。
<font COLOR="#
CLA INS P1 P2
<font COLOR="#
CLA INS P1 P2 Le
<font COLOR="#
CLA INS P1 P2 Lc
<font COLOR="#
CLA INS P1 P2 Lc Data
  命令全部由终端应用层(TAL)初始化。它通过终端传输层(TTL)向卡发送1个由5个字节组成的命令头,并等待一个过程字节。
  2.2 过程字节
  卡收到命令后,紧接着返回一个过程字节给TTL,指明下一步该作什么,如表3所列。
过程字节值
与INS字节相同
所有余下的数据将由TTL传送或TTL将准备接收来自卡所剩的数据
TTL将提供额外工作等时间
“6X”或“9X”,除“60”之外(过程字节或状态码SW1)
TTL将等待下一个过程字节或状态码SW2
  在(1)、(2)情况中,TTL完成动作后将等待另一个过程字节。在(3)情况中,第二个过程字节或状态码(SW2)被收到后,TTL将做以下事情:
  &#9671; 如果过程字节为"61",TTL将发送一个最大长度(P3)为"XX"的得到响应命令(GET RESPSE)给卡,"XX"为SW2的值。GET RESSE命令仅适用于T = 0协议。命令报文的结构如表4所列。
“0x”,x指明通道号
“00”预期
预期数据的最大长度
  &#9671; 如果过程字节为"6C",TTL将立即重发前一个命令的命令头给卡,它的P3值用"XX"代替。"XX"是SW2的值。
  &#9671;
如果过程字节是"6X"(除"60"、"61"及"6C"之外)或"9X",与前两者TTL自己处理不同,TTL将通过命令响应返回状态码给上一层--终端应用层(TAL),由TAL处理,并等待下一个命令。
  2.3 卡命令处理程序流程图
  图 7 是卡命令处理程序,即终端与卡的信息交互过程的流程图。
  以下是说明。
  ECPU:决定卡的CLK触点上是否有CLK信号的引脚;
  ICVCC:终端与卡的Vcc触点相接触的引脚;
  ICIO: 终端与卡的I/O触点相接触的引脚;
  ICCLK:终端与卡的CLK触点相接触的引脚;
  ICRST:终端与卡的RST触点相接触的引脚。
  以下是程序中函数介绍。
  &#9671; void isr_timer1(void) inrrupt 3:1中断子程序,用于按位发送和接收数据字节;
  &#9671; void Snd(void): 发送数据子程序,由1实现;
  &#9671; void Rcv(BYTE bytenr,BYTE
*Buffer):接收数据子程序(参数含义分别是:接收数据字节数、接收数据的存放处),由定时器1实现;
  &#9671; 函数1 void Reset(BYTE *len, BYTE
*resp):复位子程序(参数含义分别是:返回复位响应数据的长度、复位响应数据);
  &#9671; 函数2 void Power_off(void):触点释放子程序;
  &#9671; 函数3 WORD CPUC_Cmd(BYTE len,BYTE* comm, BYTE *lenr, BYTE*
resp):CPU卡命令子程序(参数含义分别是:发送命令长度、发送命令、返回字节数、返回数据),函数返回状态字节SW1SW2。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 在cpu中跟踪指令后 的文章

 

随机推荐