- To hide the complex hardware interactions from the user, and to manage resources like memory and processor time to programs
- Processor time - how long each program can spend running instructions, memory to allocate what memory is available to each program, input/output devices to avoid conflicts, and managing secondary storage for storing permanent information such as logs
- Processor time => Processor managment, memory => memory managment, i/o => hardware, secondary storage => i/o managment
- An embedded system is a computer which is designed to perform one task and one task only, and not function as general purpose as an entire computer. Consider, a router
- An embedded system is designed for one task and is not designed to be reprogrammed
- A virtual machine is a method of recreating or reimplementing a computer ontop of a computer. A virtual machine can either host an entire operting system, or it can host a programming language by interpreting code and running it based on a limited instruction set. The purpose of a virtual machine in this instance is to abstract the quirks of each operating system, such as kernel behaviour, with a generic implemention which covers each operating system. For instance, the Java virtual machine can run on Windows, OS X, Linux and the many flavours of the Berkeley Software Distribution
- An API would be used by a programmer when they would like to interface with the system or other programming libraries. For instance, opening a socket on a Linux system, would use the system call listen() in assosiation of other calls such as open()
- A CLI is a RIPL, it is recursive because it will always repeat unless an exception or error occours, interactive because the user is has to interact by typing in order to do anything, and it is a print loop because it shows the response
- An example would be the user running the command "ls" in a bourne shell or it's children, where the user enters the command "ls", it should return with a list of files in the current directory
- An example in irb, which is a interactive ruby print loop, running 'puts "Hello"' would output the string "Hello" to standard output
- GUI's are event driven because the program must wait for the user to interact with a control so it knows what to