A computer is a collection of hardware that works well together, if it is told what to do. This is where code/instructions at various levels are needed to create a useful environment for the user to perform useful tasks on the computer. There are various levels of code. The areas that will be covered here are:
- Machine or Embedded Code
- Boot and Test ROMs
- Master Boot Record (MBR)
- System Utilities
- Device Drivers
- Security Software
- User Interface
Code that is stored in Read-Only Memory (ROM) that is usually attached to specific devices, like the display, that instructs the device what to do when a command is received. Because the code is integrated with the device in non-volatile memory, it is much faster and more secure from tampering. Newer versions of this type of code are starting to allow some remote reprogramming. Instead of having strictly Read-Only Memory, the newer memory allows erasure and reprogramming. The memory is still non-volatile and retains its information whether the device is powered or not. The original memories of this type were Erasable-Programmable Read-Only Memory (EPROM). The first versions of these EPROMs had to be taken out of the instrument and reprogrammed on a special machine. The new versions are usually Flash Memory where the new content can be “flashed” into the Read-Only Memory and stored until needed. Precautions must be taken to make sure that only authorized updates are allowed.
Basic Input/output System (BIOS) – this is mostly on Personal Computers based on Intel architecture. These are often running Windows, but can also run LINUX or some other Operating System. It is intended to set up the Input and Output of the computer so that control can be passed to the Master Boot Record (MBA) on the first sector of the media used for booting the system. The BIOS usually uses Flash Memory that can programmatically be altered. This makes updating easy, which can also cause problems. For instance, my son and a friend were able to get into the BIOS on one of our computers (fortunately an old one) and put a password on the BIOS access. They were not able to remember the password and then tried several techniques to fix the problem. If you make a mistake, stop and find out what is wrong and look for a solution. When you continue down a path without fully knowing where you are going, it can lead to an interesting situation. Normally, Microsoft will update the BIOS on updates, when needed. But you can also access the BIOS on your system. Look at the manufacturer’s information for how to do this. Usually it is done by pressing one of the function keys (F1 – F12) during the boot process. As a side note, flash memory used to be very expensive, far more expensive than either Read-Only Memory (ROMs) or disk or floppy drives. Now flash memory has become very inexpensive and is used in SD cards, flash sticks (thumb drives, USB drives, … etc.), and now even replacements for hard drives.
In older UNIX systems, boot ROMs were used to bring up and test the system before transferring control to the start-up Master Boot Routines in the first sector of the booting media. When product ROMs are programmed, they cannot be altered. This means that hacking remotely is impossible. The only way to change the code is to take out the old boot ROMs and put in the new ones. When I worked at Tektronix, I had the privilege of designing boot and test ROMs from scratch. Including Self-Test never had been done at Tektronix before and the company received two patents as a result of my work. For a more detail account please see my Tektronix history section. The work I did at Tektronix was unique enough that I presented a paper at the 1981 International Test Conference. The purpose of Boot ROMs was to do a minimal amount of testing and start up the system as quickly as possible, with the option of doing a more thorough test if there were some concerns about the hardware. The testing portion was used by both manufacturing and the field to isolate and repair problems.
I have published a few articles on Internal Diagnostics. The two related ones are for the following:
- IEEE/ACM International Test Conference
- Tektronix Technology Report – This one I will include two articles because the reversed the author’s pictures, so mine is on the second article.
The MBR is located on the first sector of the boot media. By agreement the BIOS or Boot ROMs transfer control to this sector, which then does further preparation for initializing and starting the kernel and file system. and transfers the control of the process to process that will boot the actual operating system. On LINUX and UNIX systems, these files are found under /boot.
All systems have products that can install or update a system either on the system itself or remotely. In a Microsoft Windows system, the local updates are started through a function key (F1 – F12) and the remote updates are run with a special tool. At Hewlett-Packard, we had a tool name Ignite-UX. This tool was usually run remotely, where an image of the complete system that was desired to be on all systems in a particular area could be stored on one system and then installed on the other systems. This was done through a tool that ran in a Motif Window on top of HP-UX.
The Kernel takes control from the MBR then enables needed drivers, schedules tasks, controlling the execution of applications, handling user input/output, and doing all this in an organized fashion. Most modern kernels do the initialization and go into a tight, interrupt-driven loop. The interrupts need to have attached priorities that determines what needs to be run next. Also, drivers and other critical code, needs to have semaphores that can flag when a particular piece of code needs to run to completion before that particular resource can be opened to other users/applications. Once initialized and running, the kernel needs to handle:
- Memory and File Management (related but separate tasks)
- Device Management
- System and Data Security (often with the help of a Security Application)
- Task/Application Scheduling and Loading/Unloading (often based on a priority scheme)
- Performance monitoring and adjusting (often with help from other tasks/applications
Teach-ITC has an interesting brief discussion on the software needed to run a system.
These are system provided packages that helps take care of the needed resources within a computer. These would include such items as memory management.
Usually added applications that control the behavior of required and added devices, like displays (or other output devices), keyboards (or other input devices), printers, and scanners.
Security Software is on most if not all systems. Many manufactures provide a version of this type of software, but there are many vendors who have suites to help protect a system. The usual suite protects against viruses, spyware, malware, and hackers. They all come with a firewall to prevent against unauthorized access. Be careful about creating any “back doors” that allow hackers to easily gain access, like a device with either no password or the default manufacturer’s password. Most companies provide all computers within the company with an integrated security application. Some internet providers, like Quest, also provide a free security suite. With new devices, like TVs and refrigerators, being “smart” devices, they are integrated into most home networks. The problem is that many of these devices have the password “password” and the user “admin” neither of which are the most secure.
These control the Input/output devices that help a user gain access to the computer, usually including the keyboard, mouse, and display. As technology improves, voice recognition is playing an important role in computer input. Most input devices have an interface to a local “intelligent” device, but the instrument they are controlling does not have to be local.
User added software that helps them get tasks completed.