Unit - 1
Introduction to System Programming
System programming involves designing and writing computer programs that allow the computer hardware to interface with the programmer and the user, leading to the effective execution of application software on the computer system. Typical system programs include the operating system and firmware, programming tools such as compilers, assemblers, I/O routines, interpreters, scheduler, loaders and linkers as well as the runtime libraries of the computer programming languages.
System programming is a collection of programs that support a computer's activities. This program allows the user to concentrate on an application or a problem that needs to be solved. System programs (such as compilers, loaders, macro processors, and operating systems) were created to better adapt computers to their users' needs.
Component of System Software:
System software is a type of computer program that is designed to run a computer’s hardware and application programs. If we think of the computer system as a layered model, the system software is the interface between the hardware and user applications.
Components are:
● Text editors
● Loaders
● Assemblers
● Macro processors
● Compilers
● Debuggers
● Machine Structure
● Machine language and Assembly Language.
Assembler:
Assembler is a computer program which is used to translate a program written in Assembly Language into machine language. The translated program is called an object program. Assembler checks each instruction for its correctness and generates diagnostic messages, if there are mistakes in the program.
Various steps of assembling are:
- Input source program in Assembly Language through an input device.
- Use Assembler to produce object programs in machine language. 3. Execute the program.
Associate in the Nursing of the meeting application which may be a remotely the worm that interprets pc of the code packages inscribed therein of the programming language into the computing device language, code and instructions that might also be lifeless by using a laptop
Loaders:
A loader is the part of an operating system that is responsible for loading programs and libraries. It is one of the essential stages in the process of starting a program, as it places programs into memory and prepares them for execution. Loading a program involves reading the contents of the executable file containing the program instructions into memory, and then carrying out other required preparatory tasks to prepare the executable for running. Once loading is complete, the operating system starts the program by passing control to the loaded program code.
Loader is Associate with the nursing software program utility that will copies the programs on the fine-tuned disk to principal recollection (RAM).
In integration loader supplementally supersedes bodily addresses with logical addresses.
Macro Processor:
A macro processor is a program that copies a stream of text from one place to another, making a systematic set of replacements as it does so. Macro processors are often embedded in other programs, such as assemblers and compilers. Sometimes they are standalone programs that can be used to process any kind of text.
A macro is that of a rule or sample that designates that alternatively an actual input sequence ought to be mapped to a supersession of the output sequence in step with that of an outlined procedure.
Compiler:
A compiler is a program that translates a program written in HLL to executable machine language. The process of transferring HLL source program in to object code is a lengthy and complex process as compared to assembling. Compilers have diagnostic capabilities and prompt the programmer with appropriate error message while compiling a HLL program. The corrections are to be incorporated in the program, whenever needed, and the program has to be recompiled. The process is repeated until the program is mistake free and translated to an object code. Thus the job of a compiler includes the following:
- To translate HLL source programs to machine codes.
- To trace variables in the program
- To include linkage for subroutines.
- To allocate memory for storage of program and variables.
- To generate error messages, if there are errors in the program.
Formal system
A formal system consists of a language based on a symbol alphabet, as well as (axioms and) inference procedures that identify some of the language's strings as theorems.
A formal system is an abstract framework that follows a set of rules to derive theorems from axioms. The logical calculus of the formal system is made up of these principles that are used to derive theorems from axioms. An "axiomatic system" is essentially what a formal system is.
David Hilbert recommended using such a framework as the foundation for mathematical knowledge in 1921. A formal system can be thought of as a well-defined abstract thought system.
Operating system
Software is the Associate in Nursing interface between utilizer and hardware.
The operating system is as follows:
● A group of programs that assist you in using the computer.
● Acts as a smart assistant, controlling the flow of data between various components and applications.
● Manages program, data, and process usage, storage, and access. The OS performs a variety of tasks.
Key takeaway:
System programming involves designing and writing computer programs that allow the computer hardware to interface with the programmer and the user, leading to the effective execution of application software on the computer system.
A programming language is a computer language used to connect with computers by programmers (developers). It's a series of instructions written in any language (C, C++, Java, Python) to accomplish a given goal.
Programming languages are mostly used to create desktop apps, websites, and mobile apps.
Types of programming language
1. Low-level programming language
Low-level language is a computer language that is machine-dependent (0s and 1s). Without the use of a compiler or interpreter, the processor runs low-level programmes directly, allowing applications written in low-level languages to run very quickly.
Low-level language is further broken down into two categories:
● Machine Language
Low-level programming languages, such as machine language, are a sort of low-level programming language. It's also known as object code or machine code. Because machine language is generally displayed in binary or hexadecimal (base 16) form, it is easier to interpret. Because computers understand machine language programmes directly, there is no need for a translator to convert the programmes.
Machine language has the advantage of allowing the programmer to execute programmes faster than high-level programming languages.
● Assembly Language
Assembly language (ASM) is another low-level programming language created for specific processors. It is a symbolic and human-understandable representation of the collection of instructions. It converts assembly language to machine language using an assembler.
Assembly language has the advantage of requiring less memory and less time to run a programme.
2. High-level programming language
HLL is a high-level programming language that is used to create user-friendly software and websites. This programming language necessitates the use of a compiler or interpreter to convert the code to machine language (execute the program).
A high-level language's main advantage is that it is simple to read, write, and maintain.
Python, Java, JavaScript, PHP, C#, C++, Objective C, Cobol, Perl, Pascal, LISP, FORTRAN, and Swift are examples of high-level programming languages.
A high-level language is further broken down into three sections:
● Procedural Oriented programming language
The procedure call idea is used in the Procedural Oriented Programming (POP) language, which is derived from structured programming. It breaks down a programme into discrete steps known as routines or functions.
A software programmer uses a procedural oriented programming language to develop a programme that can be completed using a programming editor such as IDE, Adobe Dreamweaver, or Microsoft Visual Studio.
The POP language has the advantage of allowing programmers to easily track programme flow and allowing code to be reused in different areas of the programme.
Example: C, FORTRAN, Basic, Pascal, etc.
● Object-Oriented Programming language
Object-Oriented Programming (OOP) is a programming language that is built on objects. Programs are broken down into little chunks called objects in this programming language. It is used to implement real-world entities in the programme, such as inheritance, polymorphism, abstraction, and so on, in order to make it reusable, efficient, and simple to use.
The fundamental benefit of object-oriented programming is that it is quicker and easier to implement, maintain, alter, and debug.
Example: C++, Java, Python, C#, etc.
● Natural language
Human languages such as English, Russian, German, and Japanese contain natural language. Machines use it to comprehend, manipulate, and interpret human language. Developers utilize it to do tasks like translation, automatic summarization, Named Entity Recognition (NER), relationship extraction, and topic segmentation, among others.
Natural language's key benefit is that it allows users to ask questions about any subject and receive a quick response in seconds.
3. Middle-level programming language
A middle-level programming language is in between a low-level and a high-level programming language. It's also known as a pseudo-language and an intermediate programming language.
The advantages of a middle-level programming language are that it supports high-level programming features, is a user-friendly language, and is closely related to machine and human language.
Languages such as C and C++ are one example.
Key takeaway
A programming language is a computer language used to connect with computers by programmers (developers). It's a series of instructions written in any language (C, C++, Java, Python) to accomplish a given goal.
On April 7, 1964, the System/360 architecture was unveiled, along with the first six versions. New models at both ends of the performance spectrum brought architectural improvements throughout the next few years to satisfy specific cost and performance goals. Despite being a member of the System/360 family, the Model 20 was incompatible. At the upper end of the performance range, it supplied only 37 of 143 commands, had 8 instead of 16 general registers, and differed in other ways. Models 91, 95, and 195 included some deviations to enable highly overlapped designs by delaying programme interruptions and allowing the result of the division operation in the low-order bit position to be wrong by one bit.
A variety of extensions for real-time applications were also included with the Model 44. However, none of these unique features were carried over to succeeding models. The time-sharing features introduced on Model 67 were not carried over to succeeding models in the same form, although they were the forerunners of virtual storage on the System/370.
The 128-bit floating-point format, which included instructions for rounding to the next smaller format, was introduced in 1968 as part of the Model 85's extended-precision floating-point facility. Model 85 also abolished the initial System/360 requirement that unprivileged instructions' storage operands be aligned on boundaries equal to a multiple of the operand length, and introduced some of the I/O extensions that eventually become part of System/370 on the 2880 Block Multiplexer Channel.
The architecture was renamed System/370 when the next set of improvements was announced in June 1970, with the launch of Models 155 and 165. Six general-purpose instructions (move long, shift decimal, etc.), a time-of-day clock (with a period of 143 years and a resolution of 1 |xs), and control registers (to act as an extension of the programme status word (PSW)) were the key architectural modifications.
With the launches of Models 158 and 168 in August 1972, virtual storage, the single feature that most distinguishes System/370, was launched. It incorporates channel indirect data addressing and dynamic address translation.
The CPU timer, clock comparator, program-event recorder (for software debugging), and the new PSW format and interruption controls associated with extended-control (EC) mode were all added at this time. In February 1973, the conditional-swapping and PSW-key-handling Instructions, as well as multiprocessing (CPU identification, programme set table prefix, and signal-processor instruction), were added.
Extensions of the System/370 architecture branched off into two different directions after the closure of the future-systems project in the mid-1970s, as more extensions to the original System/370 design were also being developed. System/370 was extended in 1978 with the arrival of the 3033 to improve MVS performance and availability (low-address protection, the invalidate page-table instruction, etc.). In 1979, a feature was added to 3033 multiprocessing systems that allowed users to switch channels across CPUs. The dual-address-space capability, which includes a 16-bit address-space number, was installed in 1981, enhancing the virtual storage architecture on the 3033 and 308X machines.
Fig 1: Evolution of system 360/370
The requirements for system facilities in terms of architecture The MVS operating system was used exclusively on high-end machines. In March 1983, the Sysfem/370 Extended Architecture (370-XA) Principles of Operation were released, and the architecture was first made accessible on the 308X computers in the 370-XA mode. The main new architectural features introduced at this time were 31-bit addressing, which allowed addressing of up to 2 Gbytes of real and virtual storage, and the channel subsystem, which, among other things, removed the channel-CPU affinity and allowed dynamic selection of one of a multitude of paths to an I/O device.
It also added tracing and protection of virtual storage using pages rather than segments (segment protection was introduced in System/370 on the 308X), as well as removing some functions that had been superseded: the original BC-mode of the PSW (note that both modes had been available for two generations), the interval timer (it had been maintained concurrently with the new timing facilities for two generations), 2-Kbyte pages and protection blocks (370-XA introduced 4-Kbyte protection blocks), and the interval time (only 4-Kbyte pages and 1-Mbyte segments are offered in 370-XA).
The S/360's instructions are two, four, or six bytes long, with the opcode stored in byte 0. The following are the different types of instructions:
● R.R. (two bytes). In most circumstances, byte 1 represents two 4-bit register numbers; however, in rare cases, such as SVC, byte 1 specifies a single 8-bit immediate field.
● RS RS RS RS (four bytes). Bytes 1 and 2 define two register numbers, whereas bytes 3 and 4 define a base and displacement.
● RX (reverse) (four bytes). Bytes 0-3 specify a register number or a modifier; bits 4-7 specify the number of the general register to be used as an index; bytes 2-3 specify a base and displacement.
● SI (four bytes). Bytes 1 and 2 define an immediate field, while bytes 3 and 4 define a base and displacement.
● SS (six bytes). Bytes 1-2 and 4-5 each indicate a base and displacement, while byte 1 specifies two 4-bit length fields or one 8-bit length field. The length fields are encoded as length-1.
Because instructions must be on a two-byte boundary in memory, the instruction address's low-order bit is always 0.
Characters, integers, decimal integers, and hexadecimal floating point numbers are all defined by the S/360 architecture. Character and integer instructions are required, however the Decimal and Floating-point arithmetic capabilities include decimal and floating-point instructions.
● 8-bit bytes are used to hold characters.
● Two's complement binary halfword or fullword values are used to store integers.
● Packed decimal numbers are stored as an odd number of decimal digits followed by a 4-bit sign in 1 to 16 8-bit bytes. Hexadecimal A, C, E, and F have positive sign values, while B and D have negative sign values. The PACK and UNPK instructions do not test for correctness, hence hexadecimal A-F digit values and sign values of 0-9 are invalid.
● 1 to 16 8-bit bytes containing a zone in bits 0-3 and a digit in bits 4-7 are used to store zoned decimal values. The rightmost byte's zone is read as a sign.
● On older devices, floating point numbers are only saved as full word or doubleword values. Extended precision floating point integers are likewise stored as quadwords on the 360/85[9] and 360/195. Bit 0 is a sign in all three formats, while bits 0-7 are characteristics (exponent, biassed by 64). A hexadecimal fraction is 8-31 (8-63) bits. The low order doubleword has its own sign and characteristic, which are disregarded on input and generated on output for increased precision.
Software development is a set of procedures for programmers to follow in order to construct computer applications. The phases of the software development life cycle are made up of this procedure. In the IT business, understanding the software development approach opens up a world of possibilities.
The process through which programmers create computer programmes is known as software development. The Software Development Life Cycle (SDLC) is a method for developing products that meet technical specifications and user needs. It consists of numerous phases.
The SDLC establishes an international standard that software developers can utilize to create and improve their systems. It provides a well-defined structure for development teams to follow in the creation, maintenance, and design of high-quality software. The goal of the IT software development process is to create high-quality solutions on schedule and within budget.
Key steps in the software development process
In the software development life cycle, there are six primary steps:
Needs identification
Needs identification is a stage of the process that involves market research and brainstorming. A company must conduct thorough market research before developing software to determine the product's viability. Developers must determine what functions and services the programme should offer in order for its intended users to get the most out of it and find it necessary and valuable. There are several ways to get this information, including feedback from potential and existing customers and surveys.
The product's strengths, flaws, and prospects must also be discussed by the IT teams and other divisions within the firm. Software development methods begin only when the product meets all of the criteria for success.
Requirement analysis
The second phase of the software development life cycle is requirement analysis. Stakeholders agree on the proposed product's technical and user criteria and specifications in order to fulfill its objectives. To create a quality product, this phase includes a clear definition of each component, the scope, development activities, and testing conditions.
Developers, users, testers, project managers, and quality assurance are all involved in the requirement analysis step. This is also the stage at which programmers decide whether to use a waterfall or V model for software development. The output of this step is documented in a Software Requirement Specification document, which teams can refer to at any time during project implementation.
Design
The third stage of the software development process is design. Architects and developers write advanced technical specifications in this section in order to create software that meets the criteria. Risk levels, team composition, suitable technology, time, budget, project limits, approach, and architectural design will all be discussed by stakeholders.
The product's architectural design, components, communication, front-end representation, and user flows are all specified in the Design Specification Document (DSD). This step serves as a template for developers and testers, lowering the likelihood of defects and delays in the final product.
Development and implementation
The formulation and implementation of design parameters is the next step. Developers write code based on the product specs and needs that were agreed upon earlier in the process. Front-end developers design interfaces and back-ends in accordance with company policies and rules, while database administrators enter important data into the database. The programmers also put each other's code to the test and review.
Developers deploy the product to an environment in the implementation stage once the coding is finished. This enables them to test a pilot version of the application to ensure that it meets the performance criteria.
Testing
Before releasing the software to users, the testing phase inspects it for defects and ensures its functionality. Expert testers check the product's functions at this step to ensure it meets the requirements outlined in the requirements analysis document.
Exploratory testing is used by testers to assess the performance of specific software components if they have prior knowledge with the software or if they have a test script. They send out alerts to developers when there are bugs in the code. If the faults are confirmed, the developers fix the programme, and the testers continue the procedure until the software is bug-free and behaves as expected.
Deployment and maintenance
The developers can release the programme to clients after it is defect-free. After the production version of a software is released, the IT software development company forms a maintenance team to handle any difficulties that customers may have while using the product. If the problem is minor, maintenance can be done as a hotfix, but major software problems necessitate an update.
Key takeaway
Software development is a set of procedures for programmers to follow in order to construct computer applications. The phases of the software development life cycle are made up of this procedure. In the IT business, understanding the software development approach opens up a world of possibilities.
Using software development to differentiate brands and obtain a competitive advantage necessitates knowledge of the methodologies and technologies that can speed up the deployment, quality, and efficacy of software.
Low code:
"Products and/or cloud services for application development that use visual, declarative methodologies instead of programming and are available to clients at low- or no-cost in terms of money and training," according to Forrester. In a nutshell, it's a development method that eliminates the necessity for coding and allows non-coders or citizen developers to create or assist in the creation of apps easily and at lower cost.
Blockchain:
Blockchain is a secure, digitally linked ledger that reduces the cost and vulnerability that parties like as banks, regulatory organizations, and other intermediaries bring to the table. It helps organizations transform by releasing money, speeding up operations, cutting transaction costs, and more. For software developers, blockchain presents a huge potential. To transform how organizations run, developers are using distributed ledgers and open source Hyperledger (link lives outside of ibm.com) technology.
Cloud-native development:
Cloud-native development is a method of creating apps that take advantage of cloud settings. A cloud-native programme is made up of microservices, which are small, reusable components that may be used in any cloud environment. These microservices are commonly bundled in containers and serve as building blocks. Cloud-native apps can take advantage of cloud environments to boost application performance, flexibility, and extensibility thanks to this architecture.
Cloud-based development:
Software development companies, like IT companies, are looking to the cloud to better resource management and save expenses. In this approach, the cloud can be used as an integrated development environment (IDE) or development Platform as a Service that is quick, versatile, and cost-effective (PaaS). Coding, design, integration, testing, and other development operations can all be done in a cloud-based development environment. They can also offer access to APIs, microservices, DevOps and other development tools, services and expertise.
Artificial intelligence:
Artificial intelligence (AI) allows software to mimic human decision-making and learning. Developers and businesses can use neural networks, machine learning, natural language processing, and cognitive capabilities to create products and services that disrupt markets and put them ahead of the competition. IBM Watson provides application programming interfaces (APIs) that allow developers to connect to and utilize artificial intelligence capabilities as part of their applications. You can also utilize IBM Watson to check for ambiguity, unclear actors, compound or negative requirements, missing units or tolerances, incomplete requirements, and unspecific numbers in your product requirements.
Analytics:
By 2020, there will be almost 700,000 job openings for data scientists, data developers, and data engineers. The demand demonstrates how important it is for businesses to obtain insight and value from the data deluge. As a result, software makers are including advanced analytics features into their products. Cloud-based services and APIs make it easier to manage data exploration, automate predictive analytics, and generate dashboards that provide fresh insights and help you make better decisions.
Mobile
Creating mobile apps with deep linkages to data that improve and elevate user experiences is a vital competence for software developers. "Deeply integrating digital/mobile customer data has a strong effect on how customers interact with brands," according to Forrester.
Model Based Systems Engineering (MBSE):
Early prototype, simulation, and analysis of software designs are performed using software modeling languages in MBSE for early validation. MBSE's building designs assist you in analyzing and elaborating project requirements so that you can proceed quickly from design to implementation.
Fig 2: Software hierarchy
System software - system software controls for processing activities and make sure that resources and the power of the computer are used in the most efficient manner. The major purpose of system software is to control the execution of program and help in the development of software.
Function of system software
- Supports the development of other application software.
- Support the execution of other applications software.
- Monitors the effective use of of various hardware resources such as CPU, memory, Peripherals etc.
- Communicates with and controls the operation of peripheral devices, such as printer, disk, tape etc.
Types of system software
System software can be classified into three categories
- Operating system
- Language processor
- Utility software
● Operating system - an operating system is a series of programs which organizes and controls a computer. an operating system is a master control program that runs the computer and at as a scheduler. it controls the flow of signals from the CPU to various part of the computer.
Some tasks are as follows
- Operating system control the hardware such as keyboards, the printer and the screen.
- Operating system perform job scheduling and monitoring.
- Operating system control the processes that store data on disk and take data from disk.
- Controls the operation of application software.
- Organise the hard and floppy disk, so they can store data.
● Language processor or language translator - a translator is a program which convert statement written in one language into statement in another language.
Assembler - an assembler is a program that convert program written in assembly language in equivalent machine code so that computer can understand and execute it.
Compiler - Compiler translate whole high level language source code into to a machine code. This object code is loaded into memory after linking process and is executed.
Interpreter - interpreter translate one statement at a time of the High level language source program into a machine code. This object code is loaded into memory and it is executed later on next statement it is read and is translated and executed.
● Utility software - it is a set of program that support the operating system by providing the additional services that the operating system does not provide. There are many task which are performed by utility programs some are hard disc backup, disk Optimisation, File recovery, safe formatting and resource editing. utility software is also known as service program aur utility routine. It is specially designed to help in managing and tune the computer hardware, operating system or application software, and perform a single task or a small range of task. Some important utilities are disk defragmenter, irus scanner/ antivirus, disk compression, file management tools, file manager etc.
Application Software: Application software products are created to meet a specific need in a specific setting. Application software encompasses many of the software programs produced in the computer lab. Typical applications include word processing, medical software, database, educational software etc. Applications are almost always independent programs from the operating system.
Customized or general-purpose application software is usable.
● Customized Application software: The software which is developed to meet all the requirements of a specific user or organization. For example software prepared to automate the result process of any institute is an application software.
● General Application software: The software which is developed by keeping all the general requirements in mind for carrying out a specific task. These are software which are developed by a group of people. For eg. Word processing software, Electronic spreadsheet etc.
The most commonly used packages are -
Word processor - a word processor manager text based documents. It allows the user to enter, edit, view, to store and retrieve the next material. this text material may be letter, reports or book etc. word processor vary from simple to the complex. an advanced word processor must contain all the features needed for entering, editing and formatting the text as well as support macros to simplify complex or routine task. it also includes facility for spell checking, dictionary etc. Microsoft Word and what perfect are example of fully featured word processor.
Spreadsheet - the spreadsheet or worksheet consists of rows and columns of cells. the row is usually identified by number and columns by letters. each cell can hold a numeric value, text label for a formula that produce values contained in the other cells. chart can be created and database related operation could be performed. MS Excel is example of spreadsheet software.
Graphics software - a graphic software enables us to use a computer system for creating, editing, storing and viewing, printing, designing, drawing, pictures, graphs and anything else what can be drawn in the traditional manner.
Personal assistant software - a personal assistant software allow us to use personal computers for storing and retrieving our awesome information, planning and managing our schedules, contact financial and inventory of important items.
Key takeaway:
System software controls for processing activities and make sure that resources and the power of the computer are used in the most efficient manner.
Application software products are created to meet a specific need in a specific setting.
An operating system is a series of programs which organizes and controls a computer.
Any of several languages for expressing a set of explicit instructions for a digital computer is referred to as a computer programming language. When represented in the computer manufacturer-specific numerical form known as machine language, such instructions can be executed directly, following a simple replacement procedure when expressed in a similar assembly language, or after translation from some "higher-level" language. Despite the fact that there are numerous computer languages, only a few are extensively utilized.
Machine and assembly languages are "low-level," requiring a programmer to manage all of a computer's unique data storage and operation capabilities explicitly. High-level languages, on the other hand, free a programmer from such concerns and give a notation that is easier for programmers to write and read.
Machine language
A machine language is a set of numeric codes that describe the operations that a specific computer can perform directly. The codes are binary digits ("bits") that are commonly translated from and to hexadecimal (base 16) for human viewing and alteration. Some bits are used to indicate operations, such as addition, and others are used to represent operands, or the location of the next instruction in machine language instructions. Machine language is difficult to understand and write because its codes differ from computer to computer and do not match ordinary mathematical notation or human language.
Example of machine language for the text “Hello World”.
01001000 0110101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100.
Advantages
Machine language has the advantage of allowing the programmer to execute programmes faster than high-level programming languages.
Assembly language
Assembly language is one level above machine language. It employs short mnemonic codes for instructions and allows the programmer to name data-holding memory sections. For an instruction that adds two numbers, one may write "add pay, total" instead of "0110101100101000."
Assembly is written in a way that allows it to be easily translated into machine language. Assembly language does not allow more sophisticated techniques of arranging complicated information, despite the fact that blocks of data can be referred to by name rather than by their machine addresses. Assembly language, like machine language, necessitates a thorough understanding of internal computer architecture. When such details are important, such as when programming a computer to communicate with peripheral devices, it is useful (printers, scanners, storage devices, and so forth).
Advantages
Assembly language has the advantage of requiring less memory and less time to run a programme.
Key takeaway
Any of several languages for expressing a set of explicit instructions for a digital computer is referred to as a computer programming language.
Machine and assembly languages are "low-level," requiring a programmer to manage all of a computer's unique data storage and operation capabilities explicitly.
References:
- John Donovan, “Systems Programming”, McGraw Hill, ISBN 978-0--07-460482-3
- Dhamdhere D., "Systems Programming and Operating Systems", McGraw Hill, ISBN 0 - 07 - 463579 – 4
- Leland Beck, “System Software: An Introduction to Systems Programming”, Pearson
- John R. Levine, Tony Mason, Doug Brown, “Lex & Yacc”, 1st Edition, O’REILLY, ISBN 81-7366-062-X