Introduction to computation, hardware and UNIX
A theoretical machine that performs actions on an infinite tape. These actions
- Can be determined by the value of the symbols on the tape.
- Include at least: reading/writing of the tape symbols, printing symbols.
In the above context the first introduces the "configuration" parameters, and the second introduces the "behaviour" at a given "configuration". The group of all the configurations and their transitions is called the state transition table, and if drawn as a diagram, it is called the state transition diagram.
Some examples follow. In the format STATE, READ, DO, GO (P means Print, * means anything).
A machine that writes 0s:
s1, *, P0, s1
A machine that writes 0s and 1s:
s1, *, P0, s2 s2, *, P1, s1
A tape negator (means it does 100100110001 -> 011011001110):
s1, 1, P0, s3 s2, 0, P1, s3 s3, *, R, s1||s2
(means s1 OR s2, since it depends on the next symbol)
Universal Turing Machines
We said that since these state transition tables, can be written on the tape, we could create a machine that has 2 tapes; from one we read the instruction (program code) and on the other one we execute it. therefore we have a Turing machine that can 'run' other machines. The Turing machine, that can run all possible other machines, is called a Universal Turing Machine.
Understanding the relation to modern computers
To have a "computer" we need at least a CPU and some kind of memory. Then the relation is straightforward. Code running on the CPU is the state transition table, which accounts for the "behaviour" of the system. Memory takes the place of the infinite tape, which determines (by what it contains) the "configuration" of the system.
In this context what can an operating system be? Well, it is EVERYTHING between this previous image of a "computer" and what you experience in everyday life. This means, it is up to the operating system to introduce and implement the way that you control the machine. It is what connects your idea of a FILE object named myfile that you can myfile.open(), myfile.read(), myfile.delete(), myfile.write(). But as you can imagine, for this to be implemented we need to connect two pretty different things:
- The code that says: What IS a file? Where does it live? What can I do on it?
- The code that does: SIGNAL: HARD DISK ACESS AT *0xD474, READ 0xF BYTES.
And this mess is just for simple files ;)
Well the UNIX engineers (most notably Ken Thompson, Dennis Ritchie, Bill Joy) understood, that in order to bring such a diverse pair close, they needed Abstraction by Interfaces. This is actually a DESIGN PATTERN found not only in computer programs, but in nature also (Societies, Simple Machinery, onions?). So they designed UNIX to be a Multi-User, Multi-Tasking, Structured Operating System.
- Multi-User means that by introducing the notion of different users you bring security into play (remember the non-secure-windows example).
- Multi-tasking means that you simulate the parallel execution of stuff(TM) therefore keeping users(TM) happy! ;) For example, you can watch a movie while reading your e-mail, although on a single-processor system only one operation is performed at a cycle (well more or less...).
- Structured means it gets easy to operate on it, since the way it is structured provides extra information about it.
The Unix Filesystem
The UNIX filesystem controls the way that information in files and directories is stored on disk and other forms of secondary storage. It controls which users can access what items and how. The filesystem is therefore one of the most basic tools for enforcing security on your system.
Information stored in the UNIX filesystem is arranged as a tree structure
of directories and files. The tree is constructed from directories and
subdirectories within a single directory, which is called the root.
Each directory, in turn, can contain other directories or entries such as
files, pointers (symbolic links) to other parts of the filesystem,
logical names that represent devices (such as /dev/tty),
and many other types.
Remember! Everything in UNIX is a file, so you can do pretty cool things...
(like reading thermal data from a sensor device (an external thermometer)
by using the cat command (which just prints a file)
on the device file that represents the thermometer
(let's say it is /dev/sensor2).
Then we would do
cat /dev/sensor2 and the command would print the
temperature as reported by the thermometer, in a human readable format).
Some programs to get you started (with examples)
ls: List contents of directory
% ls -al % ls -alh % ls -al /bsd
man: Prints manual of other commands
% man ls % man ssh % man man
cd: Change directory
% cd /etc % cd /home/user # which is also cd ~, or just cd
pwd: Print working directory
% cd /var % pwd /var
cp: Copy a file
% cp myfile newfilecopy % cp -r mydir/ mynewdir/
rm: Remove a file
% rm oldstupidfile % rm -rf oldstupiddirectory/
ps: View system processes
% ps -ax # view all processes % ps -xU luser # only luser's procs
more: Read a file
% more mytext # view mytext, press space for next page
grep: Search for something somewhere
% grep Password secretfile # find if secretfile contains the word Password
su: Become super-user (or another user)
% su # need to enter root password % su - userA # become userA