Table of Contents
I. Software Systems and Methodology – 40%
D. Software engineering
1. Formal specifications and assertions
a. Definition: Whatever. (If you think I should put something here, email me.)
2. Verification techniques
a. Definition: Whatever. (If you think I should put something here, email me.)
3. Software development models, patterns, and tools
a. Definition: Whatever. (If you think I should put something here, email me.)
E. Systems
1. Compilers, interpreters, and run-time systems
a. Definition: Programming languages are for the convenience of the programmer, not the computer. A compiler converts the code of the programming language into either assembly language or machine code.
b. Definition: It is possible to directly execute the code of a programming language without compiling it, just use an interpreter. Think of the command line in an operating system; it is often called the command interpreter because the code is executed without compiling it first.
c. Definition: Most programs are designed to run in a specific operating system on a specific platform. When this is the case, the programmer (and compiler) do not have to worry about certain things like memory allocation and program startup – the run-time system will handle these and other general issues.
2. Operating systems, including resource management and protection/security
a. Definition: An operating system is the software that provides an environment for other programs to run in. Through various run-time systems, applications gain access to other hardware and software resources.
b. Some operating systems allow multiple users to use the computer resources at the same time (e.g. mainframes). Requiring each program to have its own memory space for each user that is executing the program is inefficient. If the program never modifies itself then we call it reentrant. Reentrant programs are more efficient because all users can use the exact same set of instructions, thereby saving memory.
c. Memory-mapped I/O is a method of communicating with I/O devices using the same bus as the main memory. The alternative to using the same bus is to have a separate bus and instruction set for devices. To access one of the devices, you may need to use registers, but often the address is still the primary concept. We often say that the memory address used to access the I/O device is the I/O port.
3. Networking, Internet, and distributed systems
a. Definition: If you connect multiple computers together, then we say they are networked. The Internet is the largest and most well known network.
b. Definition: There are certain programs that are actually running on multiple computers at the same time. I do not mean 10,000 different people playing 10,000 different games of minesweeper. I mean 10,000 computers running what amounts to one program. The best and most well known example of this is the DNS (domain name system) service used on the Internet. Thousands of computers work together to provide what amounts to one massive program called DNS. This is an example of a distributed system.
4. Databases
a. Definition: A database is a bunch of data structures in one place. We usually refer to something as a database if it organizes the data is some efficient manner and provides a way to view and update the data.
5. System analysis and development tools
a. Definition: Whatever. (If you think I should put something here, email me.)