Signals
- Signals are one of the oldest facilities of Inter Process Communication.
- Signals are used to inform the processes about the events.
- signals will be sent via the following function (by the Kernel)
int send_sig_info(int sig, struct siginfo *info, struct task_struct *);
sig – refers the signal number
info – refers the sender
t – refers to the tasks (the kernel may send signals to many processes)
Booting the System
There are many bootloaders available for linux, the common ones being the LILO and the GRUB loader
LILO – LInux LOader
GRUB – GRand unified Bootloader
The steps while booting the kernel (only relevant steps are given)
- Entry point at start which is available at arch/x86/boot/setup.S (This is responsible for initializing the hardware (assembler code)
- Once the hardware is initialized, the process is switched to protected mode by setting a bit word in the machine status word.
- Next the assembler instruction, jmpi 0×100000 _KERNEL_CS, jumps to the start address of the 32 bit code of the actual operating system kernel and continues from startup_32 and in the file arch/x86/kernel/head.S . More sections of the hardwares are initialized here like Memory Management unit (Page tables), the Co processor, and the environment (stack, environment,etc)
- The first C function start_kernel() from init/main.c is called
- the following list the assembly linkage of the start_kernel function
asmlinkage void __init start_kernel(void)
{
char * command_line;
printk(linux_banner); //print kernel, the banner
setup_arch(&command_line);//architecture dependent codes relevant to x86
trap_init();
init_IRQ(); //hardware interrupt initialization
sched_init(); //initialize the schedules
time_init();
softirq_init(); //soft interrupts
console_init();//initialize the console
init_modules();//initialize the modules (device drivers)
…..}
- the init is called (will be searched in /sbin/init or /etc/init or /bin/init). if the init is not available, then a shell (/bin/bash) will be opened for debugging
Hardware interrupts (IRQ)
Interrupts are used to allow the hardware to communicate with the operating system, there are two problems while writing interrupt routine,
- firstly, The interrupt routines should serve the hardware as quickly as possible
- secondly, large amount is to be handled by the interrupt routine
This can be solved by the following mechanisms
- disabling all the software interrupts while servicing the hardware interrupts.
- the processing of data is carried out asynchronously by the software interrupts through “tasklets ” or “bottom halves”
Software Interrupts
- It is like a hardware interrupt but can be started only at certain times
- The number of interrupts is limited
- enum {HI_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ,TASKLET_SOFTIRQ}; the date types tells the software interrupts for hi priority software interrupts, Network Tranmssion and Receiving Interrupt and tasklet interrupt). upon interrupt is generated, the Interrupt routine will be executed
Comments
Post a Comment