Topics
- General
- Three sides of the OS (HW, API, UI)
- Obtaining services (libraries, OS, BIOS, HW)
- Real mode memory map (IVT, BDA, VRAM, ROM BIOS)
- Boot Loaders
- Power-up process
- Structure of a boot sector
- Boot sector signature 55AAh
- BIOS Parameter Block
- Interrupts
- Hardware interrupts (HW devices)
- Software interrupts (OS/BIOS services)
- Programmable Interrupt Controller (master and slave)
- Interrupt Vector Table (at 0000:0000)
- Interrupt Service Routines
- IRQ number vs. int number
- What happens in response to an interrupt
- Disabling and enabling interrupts (cli / sti)
- Critical sections
- Setting your own ISR
- End of Interrupt command (20h to port 20h)
- Timers
- Different kinds of timers (PIT CHN0, PIT CHN2, TSC, RTC)
- Programmable Interval Timer
- Crystal Oscillator and the magic number 1193182
- Three channels of the PIT and their purpose
- Timer tick interrupt (hardware, IRQ 0, int 8, 18.2 times/sec)
- Timer tick interrupt responsibilities
- User-defined timer tick interrupt (software, int 1Ch, 18.2 times/sec)
- Timer tick count in BDA (0040:006Ch)
- Determining time of day by the tick count
- Programming the PIT (ports 61h, 43h, 40h, 41h, 42h)
- Speaker
- Input Devices
- Keyboard Food Chain
- Keyboard data in BDA (head, tail, queue, start, end)
- Keyboard Controller access (port 64h, 60h)
- Scancodes vs. ASCII codes
- Make codes vs. break codes
- Writing a keyboard ISR
- Disks and File Systems
- Heads, cylinders (tracks), records (sectors)
- DOS sectors and clusters
- FAT file system structure
- Directory entry, attributes, date, time
- File Allocation Table structure
- C Programming
- Arrays, pointers, structures, functions
- Binary operations (and, or, xor, negate, shift)
- Logical operations (and, or, not)
- Command-line arguments
- Environment variables
- Console input and output
- Pre-processor directives
- Time functions
- Linux programming
- System call interface
- System calls for file access (open, close, read, write)
- Device files
- Sleep functions
- Linux kernel modules
- Basic idea of kernel modules
- Kernel / User space separation
- Structure of a basic kernel module
- Structure of a device driver
- Servicing user-space programs
- Direct hardware access
- Libraries
- Static
- Shared
- Dynamic
- dl interface
- Socket Programming
- IP addresses and ports
- Server vs. client program structure
- Active vs. passive connections
- Sending and receiving data
- Other
- Writing directly to video memory
- Floating point instructions
- String instructions
- Protected Mode vs. Real Mode
- Parallel Port Programming
- Combining C and Assembly
Alex Fedosov
2002-05-06