Computer Architecture, Compiling C Programs, and File Permissions
I. Basic Computer Organization
A. Computer Architecture
1. CPU: load instructions from memory and executes them
a. components of a CPU
i. ALU: performs arithmetic instructions on operands in the
general registers
ii. Clock: controls the speed at which instructions are
executed. One instruction is executed per clock cycle
iii. General Registers: holds operands on which instructions
operate
iv. Instruction Register: holds next instruction to be executed
b. instructions a CPU executes
i. Memory: transfer data between memory and general registers
ii. Arithmetic: perform arithmetic operations on operands
in the general registers
iii. Control: control which instruction is next loaded into
the instruction register (e.g., if and loops)
iv. System Calls: ask the OS to perform a task (e.g., print
a value, read a value).
2. Memory: contains both the instructions for a program and the data
for a program
3. Peripherals
a. Disk
b. Screen
c. Keyboard and mouse
4. Network Interface
B. Software
1. Operating System: Coordinates the activity of the computer by
controlling the activities of the CPU, memory, and peripherals.
2. Program: A set of instructions and data that get loaded into
memory and direct the operation of the CPU.
3. Executable: A program that has been compiled into a form recognizable
by a CPU. Consists of 0s and 1s.
II. Compiling C Programs
A. gcc: compiles a file into an executable called a.out
Example: gcc hw.c
B. gcc options
1. -o filename: compiles a file into an executable named filename
2. -c : compiles a file into an object file with a .o extension.
a. The file has the same name as the original file.
b. The file cannot be executed
c. The -c option allows files to be independently compiled. If your
program consists of many different files, then when you change
one file the -c option allows you to recompile only the changed
file(s), rather than all the files in the program.
C. Linking: The act of creating an executable from a set of object files.
Linking is done by calling gcc with a list of .o files. For example:
gcc -o printme callprintme.o printme.o
1. Link Errors: If a procedure is used in one file but defined
in another file, you must include all the .o files or gcc
will give you an "undefined" procedure error. For example:
gcc -o printme callprintme.o
Undefined first referenced
symbol in file
printme callprintme.o
ld: fatal: Symbol referencing errors. No output written to printme
a. The problem is that printme is defined in printme.o but it is
not included in the call to gcc.
III. File Permissions: Control who can see your files
A. ls -l will print the file permissions for the files in a Unix directory
1. Example: -rw-r--r-- 1 plank ... 1to10.c
2. First four characters tell you what you can do
a. r means "read": you can read the file
b. w means "write": you can save the file
c. x means "execute": you can execute the file (i.e., the file
is an executable)
Example: I can read/write 1to10.c but not execute it.
3. Last three characters describe what others can do with this file.
Example: Others can r 1to10.c but not write or execute it
B. chmod: allows you to change file protections