Настоящее изобретение относится к способу надежной записи указателя для кольцевой памяти, а также к такой кольцевой памяти, имеющей ячейку хранения указателей, и к карточке со встроенной микросхемой (чип-карте), имеющей подобную кольцевую память.
Циклическая память, называемая также кольцевой памятью, содержимое которой можно назвать циклическим файлом или иным аналогичным понятием, может быть выполнена в виде виртуальной памяти или в виде аппаратного (физического) запоминающего устройства. Кольцевая память представляет собой прежде всего типичную форму организации электрически стираемого программируемого постоянного запоминающего устройства (ЭСППЗУ), к которому главным образом относится как настоящее изобретение, так и описание примеров его осуществления, хотя в целом изобретение может найти применение для любых типов кольцевой памяти.
Кольцевая память имеет заданное количество ячеек, при этом содержащийся в этой кольцевой памяти циклический файл имеет целый ряд записей данных, каждая из которых хранится в одной ячейке. Записи данных записываются в кольцевую память циклически одна за другой, при этом новой записью данных каждый раз перезаписывается наиболее старая из сохраненных в такой памяти записей данных. Если ячейки кольцевой памяти пронумеровать последовательно цифрами 1, 2, ..., n, то ячейка под номером "1" циклически следует за ячейкой под номером "n". При этом ячейка памяти, в которой находится текущая или наиболее новая запись данных, адресуется указателем (пойнтером). По мере последовательной записи записей данных содержащийся в указателе номер (т.е. адрес) ячейки памяти каждый раз циклически увеличивается на единицу.
Для пояснения проблемы, на решение которой направлено настоящее изобретение, ниже более подробно рассмотрен процесс записи новой записи данных в заданную ячейку, выполненной в виде ЭСППЗУ кольцевой памяти. Подобные ЭСППЗУ используются, в частности, в чип-картах, и поэтому описанная ниже проблематика относится главным образом к чип-картам.
Для записи новой записи данных в заданную ячейку памяти, прежде всего в ячейку, в которой находится наиболее старая из хранящихся в кольцевой памяти запись данных, сначала необходимо стереть содержимое этой заданной ячейки, чтобы в нее можно было записать новые данные. Обычно с этой целью последовательно сначала увеличивают значение указателя на единицу, а затем записывают новую запись данных. Если же такой процесс записи прерывается по какой-либо причине, например в результате нарушения электроснабжения, то информация, содержащаяся в этой новой записи данных, а также информация, содержащаяся в указателе, могут быть потеряны, при этом потеря указателя может иметь даже более нежелательные последствия, поскольку в этом случае будет отсутствовать информация о той ячейке, в которой должна быть сохранена следующая запись данных. Еще одна проблема, связанная с содержащейся в указателе информацией, состоит в возможном искажении этой информации, например в процессе обновления указателя.
Из уровня техники известен целый ряд решений, направленных на исключение такого рода ошибок в кольцевой памяти. Так, например, в FR-А 2699704 описан способ обновления хранящихся в ЭСППЗУ данных, предусматривающий сохранение для каждой отдельной записи данных многоразрядного флага. При необходимости записать на место "старой" записи данных новую запись данных сначала эта старая запись вместе с ее флагом стираются. Затем на место этой старой записи данных записывается новая запись данных, а относящемуся к ней флагу присваивается значение, указывающее на происходящее в данный момент обновление данных. После этого флаг записи данных, которая до этого момента была текущей записью данных, устанавливается на значение "старый", а указывающий на происходящее в данный момент обновление флаг новой записи данных устанавливается на значение "текущий". Такой способ является трудоемким и требует большого объема памяти. Если же в процессе изменения значения флага после сохранения новой записи данных произойдет сбой в работе, то невозможно будет определить текущую запись данных, т.е. установится неопределенное состояние.
Из ЕР-А 0398545 известна кольцевая память, в которой для каждой записи данных предусмотрен состоящий из одного бита флаг. В процессе записи в кольцевую память нового блока данных по окончании собственно процесса записи данных новая запись данных маркируется идентифицирующим текущую запись данных флагом, например флагом со значением "1". После этого значение флага, относящегося к записи данных, которая до этого момента была текущей записью данных, изменяется с "1" на "0". Таким образом, на этой промежуточной стадии одновременно два флага имеют значение "1". Подобную дилемму, связанную с неопределенностью флага-указателя текущей записи данных, пытаются решить путем задания определенных правил, согласно которым из нескольких флагов со значением "1" за достоверный флаг принимается флаг со значением "верхний". Поскольку флаги длиной один бит в любом случае особо подвержены ошибкам записи, в процессе обновления такого флага-указателя легко может произойти искажение его значения.
Из DE-А 19650993 известна кольцевая память, у которой предусмотрена дополнительная ячейка, наличие которой невозможно определить извне по отношению к ее интерфейсу. В процессе записи данных в такую память всегда перезаписывается наиболее старая из хранящихся в ней запись данных, после чего указатель обновляется таким образом, чтобы он указывал на новую запись данных. В этом случае при возникновении сбоя теряется только информация, содержащаяся в наиболее старой записи данных, что, однако, невозможно обнаружить извне интерфейса. В этой системе памяти также не исключена возможность искажения содержащейся в самом указателе информации в результате возникновения ошибок при записи этого указателя.
Исходя из вышеизложенного, в основу настоящего изобретения была положена задача разработать способ надежной записи указателя. Еще одна задача изобретения состояла в том, чтобы разработать кольцевую память с надежной записью указателя.
Указанная задача решается в способе записи указателя содержащихся в отдельных ячейках кольцевой памяти записей данных. Решение этой задачи в соответствии с изобретением достигается тем, что дополнительно к первому, т.е. единственному, указателю записывают второй указатель, являющийся избыточным по отношению к первому указателю, и каждый из указанных первого и второго указателей дополняют контрольным числом. При этом процесс определения, соответственно проверки текущего указателя включает следующие операции:
а) на основании контрольного числа проверяют первый указатель,
б) при корректности первого указателя его сравнивают со вторым указателем,
в) при наличии выявленного на стадии б) несоответствия между обоими указателями копируют первый указатель с получением нового второго указателя,
г) при некорректности первого указателя на основании контрольного числа проверяют второй указатель и
д) при установлении на стадии г) корректности второго указателя на место первого указателя перезаписывают значение указателя.
Благодаря записи контрольного числа указателя процесс коррекции сводится лишь к одной единственной операции записи, т.е. к копированию корректного указателя на место некорректного.
Согласно наиболее предпочтительному варианту первый и второй, избыточный, указатель записывают отдельно один от другого, прежде всего дифференцированно во времени, чтобы при возможном возникновении сбоя в процессе записи обоих указателей по меньшей мере один из них содержал корректную информацию.
Обновлять указатель предпочтительно на первой стадии с одновременным формированием относящегося к первому указателю контрольного числа. После сравнения этого первого, нового указателя со вторым указателем второй указатель при необходимости создают в виде копии первого указателя.
При возникновении сбоя в процессе записи первого и второго указателя, например при нарушении электроснабжения в процессе записи информации в ЭСППЗУ, возможно, например, возникновение ситуации, при которой первый указатель будет уже обновлен, а второй указатель будет еще иметь старое значение. В зависимости от момента возникновения сбоя и типа возникшей ошибки в такой ситуации можно либо на основании второго указателя восстановить исходную информацию первого указателя, либо дополнительно обновить второй указатель, приведя его в соответствие с первым указателем.
Использование дополнительного, избыточного указателя обеспечивает надежную защиту содержащихся в указателях данных от их искажения прежде всего в том случае, когда запись каждого из указателей происходит раздельно в разные моменты времени. Помимо этого такой подход позволяет в любой ситуации восстановить требуемое содержимое указателей, что имеет особое значение прежде всего при возникновении сбоев в электроснабжении в момент обновления указателей. Относящееся к каждому указателю контрольное число предпочтительно представляет собой дополнение кода, отражающего номер соответствующей ячейки памяти. Таким образом, указатель содержит информацию об адресе или номере текущей ячейки памяти, а контрольное число получают путем формирования дополнения.
Согласно одному из конкретных вариантов осуществления изобретения указатель имеет длину два байта, при этом первый байт (8 бит) содержит код ячейки памяти, выраженный двумя числами в шестнадцатеричной системе счисления, а второй байт указателя содержит соответствующий дополнительный код, также представленный в шестнадцатеричной системе счисления.
Преимущество предлагаемого в изобретении решения состоит в обеспечении многократной избыточности, позволяющей в любой момент обнаружить и скорректировать ошибки. При этом создается возможность восстановить содержимое указателя прежде всего при возникновении такого сбоя, как нарушение электроснабжения.
Предлагаемый в изобретении способ, требующий лишь незначительного дополнительного необходимого для его осуществления объема памяти для записи второго указателя и контрольных чисел, а также требующий выполнения дополнительного цикла записи для сохранения этого второго указателя, позволяет практически полностью исключить потерю данных.
Объектом изобретения является также кольцевая память для осуществления предлагаемого в изобретении способа записи указателя. Такая кольцевая память имеет заданное количество ячеек, в каждой из которых содержится по одной записи данных, и ячейку для хранения указателя, в которую записывается указатель, указывающий на ту ячейку памяти, в которой содержится текущая запись данных. В соответствии с предлагаемым способом ячейка для хранения указателя содержит первую ячейку для хранения первого указателя, включая его контрольное число, и вторую ячейку для хранения второго указателя, избыточного по отношению к первому указателю, включая контрольное число второго указателя.
Описанные выше преимущества предлагаемых в изобретении способа и кольцевой памяти наиболее предпочтительно использовать в чип-карте, в памяти которой практически всегда содержатся важные данные, требующие особой защиты.
Наряду с рассмотренными выше мерами предпочтительно далее расширить циклическую память на одну ячейку, наличие которой, однако, невозможно установить извне, т.е. через интерфейс кольцевой памяти. В этом случае каждая из вновь записываемых записей данных будет записываться на место соответствующей наиболее старой записи данных, и поэтому при возникновения сбоя будет происходить лишь потеря такой наиболее старой записи данных, что, однако, с внешней стороны будет незаметно, поскольку извне для записи доступно только заданное количество ячеек памяти, в число которых указанная дополнительная ячейка не входит.
Ниже изобретение более подробно рассмотрено на примере некоторых вариантов его осуществления со ссылкой на прилагаемые чертежи, на которых показано
на фиг.1 - схематичное изображение ячейки кольцевой памяти, предназначенной для сохранения первого и второго указателей,
на фиг.2 - схематичное изображение кольцевой памяти, имеющей заданное количество ячеек, при этом на чертеже показаны три стадии процесса записи новой записи данных, в каждом случае в сочетании с указанием содержимого ячейки памяти, содержащей первый и второй указатели,
на фиг.3 - блок-схема, поясняющая процесс обновления первого и второго указателей с контролем их четности,
на фиг.4 - три последовательных стадии процесса записи первого и второго указателей.
Рассмотренные ниже варианты осуществления изобретения относятся прежде всего к ЭСППЗУ с кольцевой организацией памяти. Для записи в такую кольцевую память новой записи данных в ЭСППЗУ известным образом подаются электрические сигналы, позволяющие изменять состояние адресуемой указателем ячейки памяти. Однако изобретение может найти применение и в отношении других типов кольцевой памяти, в том числе и виртуальной кольцевой памяти.
На фиг.2 слева показана кольцевая память 10 с проставленным сверху индексом I, который указывает на первую стадию процесса записи.
Кольцевая память 10 имеет n ячеек памяти R1, R2, R3, ..., Rn. В каждой из этих ячеек памяти хранится по одной записи данных, каждая из которых обозначена на фиг.2 в соответствии с нумерацией ячеек памяти как D№1, D№2, ..., D№n. Указатель (пойнтер) Р указывает на текущую, последнюю из сохраненных в процессе циклической записи данных запись данных, которой в рассматриваемом варианте на стадии I согласно фиг.2 является запись данных D№2, помещенная в ячейку памяти R2.
Под кольцевой памятью 10 слева на фиг.2 схематично показан указатель Р. Этот указатель Р содержит первый указатель, сохраненный в первой ячейке RР1 для хранения указателей, а также избыточный по отношению к этому первому указателю второй указатель, сохраненный в другой ячейке RР2 для хранения указателей.
Первый указатель состоит из собственно ссылочного элемента, имеющего вид кода адреса ячейки памяти и обозначенного в данном случае как Р1. Другим элементом первого указателя является элемент Р1*, который в качестве контрольного значения является дополнением для Р1. Второй указатель представляет собой копию первого указателя и также состоит из элемента Р2, являющегося кодом адреса ячейки памяти и элемента Р2*, являющегося дополнением для элемента Р2.
В данном случае адрес ячейки памяти представлен в виде двухразрядного шестнадцатеричного числа. Р1 имеет значение "02", а его дополнение имеет значение "FD" (дополнениями для шестнадцатеричных чисел 0, 1, 2, 3, ... 9, А, В, С, D и F являются числа F, Е, D, 3, 2, 1 и 0 соответственно). На фиг.1 схематично показана побайтовая организация указателя Р в обеих ячейках RР1 и RР1 для хранения указателей. В первой ячейке RР1 этой памяти содержатся оба байта b1 и b2, где байт b1 является дополнением байта b2, и наоборот. Во второй ячейке RР2 для хранения указателей содержатся два байта b3 и b4, где b3 является дополнением байта b4, и наоборот.
Ниже на примере трех показанных на фиг.2 стадий I, II, III поясняется процесс записи новой записи данных на место наиболее старой записи данных. Слева на фиг.2 показан указатель Р, указывающий на ячейку R2, в которой содержится запись данных D№2. Поскольку кольцевая память 10 имеет циклическую структуру или организацию, по определению наиболее старая запись данных содержится в непосредственно следующей ячейке R3. Поэтому на место еще хранящейся в этой ячейке записи данных D№3 должна быть записана новая запись данных. С этой целью сначала стирается содержимое ячейки R3, а затем в эту ячейку записывается новая запись данных D'№3, как это показано в середине фиг.2 индексом II. По завершении процесса записи новой записи данных D'№3 происходит обновление указателя Р, который в этом случае будет указывать на текущую наиболее новую запись данных D'№3, что показано слева на фиг.2 под индексом III.
В нижней правой части фиг.2 показано содержимое обеих ячеек памяти, в которых сохранены первый и второй указатели. Как показано на этом чертеже, первый указатель (Р1=03; Р1*=FC) указывает на третью ячейку R3 кольцевой памяти.
Для пояснения характерных особенностей рассматриваемого варианта осуществления изобретения показанная справа на фиг.2 кольцевая память обозначена позицией 10'. В соответствии с этим особым вариантом осуществления изобретения кольцевая память 10' увеличена по сравнению с остальными показанными на фиг.2 вариантами кольцевой памяти на одну ячейку, т.е. общее количество ячеек этой памяти составляет R(n+1). Однако если рассматривать подобную структуру памяти 10' извне относительно ее интерфейса, эта кольцевая память 10' имеет, как и ранее, n ячеек памяти. Как показано в правой части на фиг.2, в используемой для записи непосредственно следующей записи данных ячейке памяти, т.е. в ячейке R4, содержится выполняющая функцию буфера записи запись данных, наиболее старая запись данных, которая недоступна для считывания извне относительно кольцевой памяти. В процессе записи, рассмотренном выше, в эту ячейку памяти записывается новая запись данных. Поэтому при появлении сбоя теряются только эти избыточные данные, являющиеся наиболее старыми данными.
Как показано далее на фиг.2, в нижней части которой представлены расположенные рядом друг с другом указатели, каждый из которых состоит из первого указателя Р1, Р1* и второго указателя Р2, Р2*, обновление указателя происходит только после успешного завершения процесса записи новой записи данных, которой в средней части на фиг.2 является запись данных D'№3.
Если в процессе записи, т.е. при обновлении указателя, происходит сбой, в частности в результате нарушения электроснабжения, то существует возможность по выбору восстановить либо старый, либо новый указатель. Сказанное схематично проиллюстрировано на фиг.4.
На фиг.4 одна под другой показаны три стадии, необходимые для полного обновления указателя. На стадии "1" указатель находится в старом (исходном) состоянии. На стадии "2" содержащийся в первом указателе Р1, Р1* номер ячейки памяти уже увеличен на единицу, т.е. его элементы имеют значения "03" и "FC" соответственно. На этой стадии второй указатель все еще содержит старые значения. После этого на третьей стадии "3" значения элементов данных первого указателя Р1, Р1* копируются в ячейку памяти, предназначенную для второго указателя.
При возникновении сбоя на стадии "2" на основании значений первого указателя Р1, Р2* можно получить второй указатель в качестве нового второго указателя. В другом варианте на основании значений второго указателя Р2, Р2* можно восстановить прежнее значение первого указателя.
На фиг.3 показана блок-схема, поясняющая способ определения текущего значения указателя и проверки его правильности (достоверности). Этот процесс определения/проверки выполняется на шаге S1.
На следующем шаге S2 определяется, соответствует ли значение указателя Р1 его контрольному значению, которым в данном случае является его дополнительный код Р1*. При совпадении указанных значений на следующем шаге S3 первый и второй указатели сравниваются между собой. Если в результате такой проверки окажется, что один указатель не соответствует другому, то на следующем шаге S4 первый указатель полностью копируется на место второго указателя.
На следующем за этим шагом S4 шаге S5 циклическому указателю, используемому для фактической адресации соответствующей ячейки памяти, присваивается значение Р1. Аналогичная процедура выполняется и в том случае, если при сравнении на шаге S3 будет установлено соответствие между обоими указателями Р1 и Р2.
Если в результате сравнения на шаге S2 будет выявлена ошибка четности, то осуществляется переход к шагу S6, на котором выполняется аналогичная проверка четности для второго указателя. Если второй указатель Р2, Р2* удовлетворяет критерию проверки на четность, то на следующем шаге S7 происходит коррекция первого указателя путем копирования на его место значения Р2 второго указателя вместе с контрольным числом Р2*. После этого для адресации соответствующей ячейки памяти указателю также присваивается значение Р1.
Если же на шаге S6 будет выявлена некорректность значения и второго указателя Р2, то на следующем шаге S8 запускается стандартная программа обработки ошибок.
Описанный выше способ определения и проверки корректности значений первого и второго указателей, каждый из которых содержит в качестве контрольного числа дополнительный или обратный код, используется для схематично показанной на фиг.2 кольцевой памяти 10 предпочтительно в виде ЭСППЗУ в чип-картах.
Изобретение относится к кольцевой памяти. Техническим результатом является разработка способа и кольцевой памяти для надежной записи указателя. Для этого в ячейку памяти, содержащую наиболее старую запись данных, записывают новую запись данных и затем обновляют указатель, при этом этот указатель имеет первый указатель (P1, P1*) и второй указатель (Р2, Р2*), являющийся избыточным по отношению к первому указателю, каждый из этих указателей имеет контрольное число в виде дополнительного или обратного кода самого этого указателя. 2 н. и 6 з.п. ф-лы, 4 ил.
а) на основании контрольного числа (P1*) проверяют первый указатель (P1) (S2),
б) при корректности первого указателя (P1) его сравнивают со вторым указателем (S3),
в) при наличии выявленного на стадии б) несоответствия между обоими указателями копируют первый указатель с получением нового второго указателя,
г) при некорректности первого указателя (P1) на основании контрольного числа (Р2*) проверяют второй указатель (Р2) (S6) и
д) при установлении на стадии г) корректности второго указателя на место первого указателя (P1, P1*) перезаписывают значение указателя (Р2, Р2*) (S7).
DE 19650993 A1, 28.05.1998.US 5758330 A, 26.05.1998.EP 0353435 A2, 07.02.1990.US 4566106 A, 21.01.1986.RU 2037215 C1, 06.09.1995. |
Авторы
Даты
2006-02-10—Публикация
2000-05-04—Подача