In re Knowlton

500 F.2d 566, 183 U.S.P.Q. (BNA) 33, 1974 CCPA LEXIS 130
CourtCourt of Customs and Patent Appeals
DecidedAugust 15, 1974
DocketPatent Appeal No. 9106
StatusPublished
Cited by2 cases

This text of 500 F.2d 566 (In re Knowlton) is published on Counsel Stack Legal Research, covering Court of Customs and Patent Appeals primary law. Counsel Stack provides free access to over 12 million legal documents including statutes, case law, regulations, and constitutions.

Bluebook
In re Knowlton, 500 F.2d 566, 183 U.S.P.Q. (BNA) 33, 1974 CCPA LEXIS 130 (ccpa 1974).

Opinions

BALDWIN, Judge.

This appeal is from the decision of the Patent Office Board of Appeals, adhered to on reconsideration, affirming the examiner’s rejection of claims 1-8, all the claims in appellant’s application.1

The Invention

Appellant’s invention relates to a system and method for detecting programming errors or “bugs” in programs for electronic data processors or computers. The application states:

Many modern computers utilize a stored program. In order to make the program available to the computer at its interval operating speed, the program is stored in the internal memory of the computer, often in the same memory as the data to be processed is stored. Such a stored program computer is particularly liable to certain types of programming errors, such as addressing errors.
One addressing error which is particularly difficult to locate and correct is a data fetch in which the wrong storage location is addressed. Whatever is stored in that location is treated as the desired data, and processing continues, compounding the error by many subsequent stages of processing. The exact point at which the original error occurs is often very difficult to locate and correct.
Similarly, a transfer of control might be effected to an undesired memory location. Processing will normally continue, in spite of the error, and many incorrect processing sequences are executed before an impasse arises. Again, it is often difficult to locate the exact source and nature of the error.
In accordance with the present invention, the above and similar types of programming errors are detected by executing the same program at least twice. For each execution, the component subprogram parts of the program are stored in the computer memory in different sequences. Since transfers and data fetches then take place to and from completely different memory addresses, a comparison of the memory location contents for the different cases will immediately indicate addressing errors.
The invention can most advantageously be used in modern data processors of the type using multiple central processors and multiple memories. In this case, the program can be loaded in normal and in scrambled order in the different memories, or different portions of the same memory, and a separate central processor can be used to execute each program sequence. Provisions can then be made to compare the instructions executed and the data retrieved in real time, as [568]*568they are executed or retrieved. The processing sequence can therefore be terminated immediately upon the occurrence of an error, and subsequent erroneous processing can be avoided. The same effect can be obtained with a single processor by alternately executing program steps from the two differently stored versions of the program, and comparing results after the execution of each pair.
The application contains simplified block diagrams (Figs. 1 and 3) of single and multiprocessor computers and descriptions thereof, which are suitable for use with appellant’s error detection system and method.
The application also contains the following figures and descriptions thereof which relate to the procedures for storing a program in the computer in a normal and “scrambled” order:
In FIG. 2A, for example, there is shown a graphical or schematic representation of what might be considered the normal or natural order of the program. As can be seen in FIG. 2A, the program is divided into subsections, 30, 31, 32, 33, 34, 35, and 36. These subdivisions may be entirely natural divisions of the programs, representing different subroutines, for example, or may be entirely arbitrary subdivisions, taking care to avoid breaks in the range of a “skip” type of instruction, in transfer vectors and in the range of “relative-to-current-address” types of instructions. The entry point for each subdivision is then given a location symbol (“A”, “B”, “DATA 1”, etc.) and a transfer instruction inserted at the end of each subdivision, directing transfer to the next succeeding subdivision. These successions, of course, are logical, and need not be physical. The rules for such subdividing are sufficiently simple that they could be built into an assembler or compiler and thus be done automatically. The successive vertical positions of the subdivisions, of course, represent successive physical locations in the internal memory of the computer.
In accordance with the invention, at least one scrambled version of the program is also prepared for use with the arrangement of FIG. 1. One such scrambled version of the program mapping of FIG. 2A is shown in FIG. 2B. In FIG. 2B, the logically similar program subdivisions are labeled with the same reference numerals, but primed in FIG. 2B. Thus, the second program subdivision in FIG 2B is subdivision 32', corresponding to the [569]*569third subdivision 32 in FIG. 2A. Not only are the program instructions (30, 31 and 32) subdivided and scrambled (30', 31' and 32'), but the data blocks (33, 34 and 35) are likewise subdivided and scrambled (33', 34', and 35'). Moreover, instruction subdivisions and data subdivisions may be intermingled. The single instruction block 36 (a single transfer instruction) remains the first block in each version, however, to insure the beginning of execution at the logical beginning of the program.
The scrambled order shown in FIG. 2B is only one of many possible scrambled orders. Any other order is equally suitable provided only that a substantial degree of actual scrambling is involved. One simple scrambling technique which can be easily implemented automatically in an assembler or compiler is a simple reversal of order of the subdivisions. Other simple scrambling rules can likewise be easily implemented to take place automatically.

Claims 1, 4, and 5 are exemplary:

1. An error detection system for computers comprising

a memory having a first portion storing a first sequence of program instructions and data items and having a second portion storing a second sequence of program instructions and data items,
said second sequence being substantially identical to said first sequence except for the ordering of the respective sequences of said instructions,
means for executing said program instructions from each of said sequences, and
means for comparing intermediate results of said executions, (paragraphing ours).

4. The method of detecting programming errors in a computer program comprising the steps of

(1) mapping said program into storage in at least two substantially different sequential orders,
(2) executing both said substantially different sequential orders for said program, and
(3) comparing intermediate results of step (2) for mismatches.

5. Apparatus for detecting programming errors in a computer program comprising

(1) means for mapping said program into storage in at least two substantially different sequential orders,
(2) means for executing both said substantially different sequential orders of said program, and

Free access — add to your briefcase to read the full text and ask questions with AI

Related

Rasmusson v. Smithkline Beecham Corporation
413 F.3d 1318 (Federal Circuit, 2005)
United States v. Byars
505 F.2d 734 (Fifth Circuit, 1974)

Cite This Page — Counsel Stack

Bluebook (online)
500 F.2d 566, 183 U.S.P.Q. (BNA) 33, 1974 CCPA LEXIS 130, Counsel Stack Legal Research, https://law.counselstack.com/opinion/in-re-knowlton-ccpa-1974.