经常强加于智能卡微控制器软件的一个需求是它的某些部分要么完整地运行要么完全不运行。不可分割的并完全满足这一需求的进程,因而被称为“原子进程”(atomic processes)。它们经常出现在和EEPROM写人有关的程序中。
原子进程是基于当EEPROM写人操作发生时要保证所涉及的数据不会只写人一部分的概念。这是有可能发生的,例如,用户在错误的时刻从终端取出卡或电源突然失效。由于智能卡中没有任何电能缓存器,在这种情况下,卡中的软件将立即彻底丧失做任何事的能力。
特别是在智能卡中具有电子钱包时,保证文件项目在所有情况下都完整而正确是根本的,这也许是致命的。例如,若是卡被突然从终端中抽出,钱包中的余额未能完全改变到其新状态。在记录文件中的项目也必须总是完整的,由于智能卡的硬件不支持原子进程,所以必须用软件实现它们。此方法在原理上不是新的,长久以来它们已经用于数据库和硬盘驱动。这里叙述用在智能卡操作系统的基本过程的一个方法,这种差错恢复过程对外部世界是透明的,因而对任何已经存在的应用不需要有任何改变。
为了说明这个方法是如何工作的,让我们假定指定为某特定文件的数据都经智能卡的接口送给了它。例如,这是UPDATE BINARY命令的典型的进程。在阅读以下叙述时,参看图5。26来了解此专门之进程。
操作系统在EEPROM中的部分,设置了一个足够大的缓存器以接受所有必要的数据,此缓存器有一状态标记,它也被存在EEPROM之中,标记的状态可被或是设置成“缓存器内容有效”或是“缓存器内容无效”。除缓存器外,还必须有用于目标地址和现行缓存数据大小的适当的存储量。
工作进程如下:第1步,按目标地址存放的数据,例如在一文件中,都按照规定的数据的实际地址和长度被拷贝到缓存器。其次,缓存器标记被设置成“缓存器内容有效”。在下面的步骤中,操作系统把新数据拷贝到所期望的地址,然后改变缓存器标记为“缓存器内容无效”。只要操作系统被启动,它就在发送ATR之前查询缓存器标记,如果缓存器标记被设置为“缓存器内容有效”,则将缓存器的内容按所存地址和大小信息自动写入规定的存储区域。
图1 在智能卡操作系统中原子进程的可能实现的举例(这一过程可以级联起来用于对多个数据的并行处理)
这种机制就这样保证了在所有情况下文件中的数据均有效。如果在程序执行的过程中,某程序在任何时刻被取消,在智能卡EEPROM中的数据总是可以被恢复。例如,如果持卡人在以上步骤3时把卡从终端中抽出,其间新数据正在向EEPROM中写入,则新数据将仅有一部分出现在文件中。当卡在后继的会话期中再次被加电时,操作系统注意到在缓冲器中的是有效数据并把它们拷贝到适当的位置。这样就恢复了文件的原有状态,而所有在EEPROM的文件中的条目都是连贯的,做这一校正的时间是在ATR的各个字节之间的初始等待时间,这种方法能很容易地扩充到允许多个数据元存储在缓存器中而不仅仅是一个,这样允许对几个不同文件或数据元的写访问的实施要么是完整的要么一点也未进行。
刚刚叙述的方法有两个严重的缺点。其中个是在所有EEPROM中,缓存器将具有沉重的写入/擦除负载。由于EEPROM中任何给定区域的写入/擦除循环次序都是有限的,这个重要的缓存器就有极大可能是EEPROM中个开始发生写错误的部分,这种错误表明智能卡已不再能使用,因为数据的完整性不再是确实的。这一问题可由使用循环结构的缓存器而变得不那么严峻,因为同一区域不是每次都要写人。遗憾地是这迫使缓存器占用较大的存储量。这种原子进程的实现的第2个缺点是由于在写访问时对缓存器的强制性访问增加了程序的执行时间。在坏情况下,这种过程的文件访问要比直接向EEPROM的文件写人占用三倍的时间长。于是,通常不是对全部EEPROM访问都要去缓存器,只有对某些文件或数据元的写访问才进行,这可由在每个文件的头标中的一项属性来予以规定。
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。