A VLSI Architecture for Enhancing Software Reliability Kanad Ghose Iowa State University
Total Page:16
File Type:pdf, Size:1020Kb
Iowa State University Capstones, Theses and Retrospective Theses and Dissertations Dissertations 1988 A VLSI architecture for enhancing software reliability Kanad Ghose Iowa State University Follow this and additional works at: https://lib.dr.iastate.edu/rtd Part of the Computer Sciences Commons Recommended Citation Ghose, Kanad, "A VLSI architecture for enhancing software reliability " (1988). Retrospective Theses and Dissertations. 9345. https://lib.dr.iastate.edu/rtd/9345 This Dissertation is brought to you for free and open access by the Iowa State University Capstones, Theses and Dissertations at Iowa State University Digital Repository. It has been accepted for inclusion in Retrospective Theses and Dissertations by an authorized administrator of Iowa State University Digital Repository. For more information, please contact [email protected]. INFORMATION TO USERS The most advanced technology has been used to photo graph and reproduce this manuscript from the microfilm master. UMI films the original text directly from the copy submitted. Thus, some dissertation copies are in typewriter face, while others may be from a computer printer. In the unlikely event that the author did not send UMI a complete manuscript and there are missing pages, these will be noted. Also, if unauthorized copyrighted material had to be removed, a note will indicate the deletion. Oversize materials (e.g., maps, drawings, charts) are re produced by sectioning the original, beginning at the upper left-hand comer and continuing from left to right in equal sections with small overlaps. Each oversize page is available as one exposure on a standard 35 mm slide or as a 17" x 23" black and white photographic print for an additional charge. Photographs included in the original manuscript have been reproduced xerographically in this copy. 35 mm slides or 6" X 9" black and white photographic prints are available for any photographs or illustrations appearing in this copy for an additional charge. Contact UMI directly to order. Accessing the UMIWorld's Information since 1938 300 Nortti Zeeb Road, Ann Arbor, Ml 48106-1346 USA Order Number 8826305 A VLSI architecture for enhancing software reliability Ghose, Kanad, Ph.D. Iowa State University, 1988 Copyright ©1988 by Ghose, Kanad. All rights reserved. UMI 300N.ZeebRd. Ann Arbor, MI 48106 A VLSI architecture for enhancing software reliability by Kanad Ghose A Dissertation Submitted to the Graduate Faculty in Partial Fulfillment of the Requirements for the Degree of DOCTOR OF PHILOSOPHY Major: Computer Science Approved: Members of the Committee: Signature was redacted for privacy. In Charge of Major Work Signature was redacted for privacy. Signature was redacted for privacy. for the Major Department Signature was redacted for privacy. For (Me flr^ouate College Iowa State University Ames, Iowa 1988 Copyright @ Kanad Ghose, 1988. All rights reserved. TABLE OF CONTENTS Page 1. INTRODUCTION 1 2. CAPABILITY-BASED ADDRESSING 25 3. MAJOR DESIGN DECISIONS 38 4. THE CAPABILITY MECHANISM AND RELATED INSTRUCTIONS 55 5. OTHER ASPECTS OF THE ARCHITECTURE 139 6. ASSESSMENT AND CONCLUSIONS 178 7. REFERENCES 199 8. ACKNOWLEDGEMENTS 205 9. APPENDIX I: SELECTED MICRO PROGRAMS 207 10. APPENDIX n: ABBREVIATIONS AND GLOSSARY 227 1 1. INTRODUCTION The purpose of this dissertation is to propose an architecture which will be instrumental in enhancing the quality of software by incorporating mechanisms for efficiently detecting a wide variety of run-time errors and by providing efficient support for linguistic constructs and system functions that promote software reliability. The proposed architecture is thus one way of combadng the so-called software crisis. In this chapter, we first describe the software crisis and identify the major factor behind this crisis. We then describe the linguistic con structs and system functions available for enhancing the quality of software and then proceed on to criticize the support provided, or the lack of support, for such constructs and functions in traditional and innovative architectures. In doing so, we point out some major shortcom ings in the traditional and innovative architectures that limit or discourage the use of these linguistic constructs and systems ftmctions. These shortcomings in existing architectures pro vide the motivations for designing the architecture proposed in this dissertation. We conclude this chapter by describing the objectives of this dissertation and its organization. 1.1 The Software Crisis Despite advances in programming language design and programming methodologies, software quality assurance continues to be a critical issue [1], [30]. Software is error-prone and likely to be unreliable, thus requiring maintenance over die course of its useful lifetime. Maintenance, in this respect, refers to correcting problems in the original design and 2 specification of the software as bugs are discovered. It also subsumes the act of upgrading the software in order to meet evolving requirements. Today, a significant fraction, typically 75% to 80% [1], of the cost of a software system is for maintaining it. To compound this problem, the software components of a typical system have become increasingly sophisticated and complex during recent years. In clear contrast to this, the cost of hardware components and their failure rates have drastically fallen with the advent of VLSI technology. As a result, the cost of the software components of a typical computer system have dominated the cost of the hardware components. Currently, two-thirds to three-fourths of the cost of a com puter system is for its software components [1], [30]. This phenomenon has been referred to as the software crisis [30]. The unreliability of software is therefore a major contributor to the software crisis. This software crisis is undesirable for economic and other practical reasons. One obvi ous way of resolving the software crisis is to provide mechanisms that will enhance the relia bility of software. 1. 2 Techniques for Enhancing Software Reliability In this section, we take a detailed look at the techniques employed in traditional systems for enhancing software reliabili^. We group these techniques and mechanisms into the fol lowing categories: 1. Avoidance techniques, representing mechanisms and strategies employed at program design time, for reducing errors in the program. 3 2. Static analysis, representing techniques and mechanisms applied to the program before it is run, for detecting some potential errors in the program. 3. Dynamic techniques, which are invoked during program execution for detecting and handling potential errors in the program. This category also includes the facilities for program tracing and high-level run-time error reporting. In the following sections, we look at specific techniques/mechanisms in each of these three groups. 1. 2.1 The avoidance techniques The techniques for avoiding programming errors enforce a programming discipline, . either (i) explicitly through appropriate linguistic constructs and/or other mechanisms or (ii) implicitly as good programming style. The enforcement of a programming discipline is expected to reduce programming errors. The important linguistic constructs for enforcing a programming discipline in imperative style programming languages are as follows: a) Use of strong typing in the language. In a strongly-typed language errors related to implicit type conversions (either static or run-time) are absent b) Use of type abstraction. Many programming languages, such as Pascal, Ada (U. S. Department of Defense [63]), Modula (Wirth [65]), incorporate facilities for construct ing new types out of already-existing or already-defined types, thus providing a facility for type abstraction. The type abstraction facility lets a programmer define a type tiiat is more appropriate for a particular application. Two common type constructors found 4 in all of the languages mentioned above include the subrange constructor and the enumerated type constructor. The subrange constructor lets the programmer define a type in which values are restricted to a contiguous subrange of values for an already- existing or already-defined type. As an example, in Pascal one can define the following type type int_subrange = 21..200; This defines a new type 'int_subrange', whose corresponding values are a subrange of integer values, between 21 and 200, both inclusive. Typical usage of variables of this type would be as loop counters, array indices, etc. The enumerated type constructor provides a facility for enumerating all possible values corresponding to a type. Again, as a Pascal example, one can define the following: type enum_type = (a,b,cd,ef) This defines a new type 'enum_type', whose corresponding variables are restricted to the values a, b, cd, and ef only. The use of subrange and enumerated types guarantee consistency in data values of these types by signaling occurrences of forbidden values. In some cases, enumerated types also improves program readability. c) Use of control abstraction. Many modem programming languages employ control con structs with a higher abstraction level, that lead to well-structured programs. The con trol flow constructs of Pascal, (excluding to go to) serves as a particularly good exam ple of this philosophy — each control construct is of a sufficiently high-level and features one well-defined entry point and one well-defined exit point. d) Use of Abstract Data Types. The mechanism of data abstraction, as found in languages like