Quote:
Originally Posted by
ab_tall
Hmm so as I understand it,
int 0x80 causes the change to the kernel mode.
Yes it is just a sw interrupt for switching from user to kernel mode.
Quote:
Originally Posted by
ab_tall
here 0x80 is used to index the IDT to get the location of the ISR.
No 0x80 is not the system call no...the system call no is inserted into eax by the wrapper routine before the int 0x80 instruction is executed...so for ex. if you call fputs its job is to setup the system call no in eax and then execute the int 0x80 instruction for mode switching.
Quote:
Originally Posted by
ab_tall
What does the ISR location usually contain?
It contains the instructions that makeup the ISR.
Quote:
Originally Posted by
ab_tall
Does the ISR have code to use the system call no. from EAX to look into the dispatch table?
That is the job of the kernel...it looks up the system call no in eax and then indexes into the dispatch table to get the address of the ISR and then jumps to that address.
Quote:
Originally Posted by
ab_tall
Also, I guess i'll have to look into how the dispatch table is populated in the first place.
Each dispatch table entry has two parts...one is the index or system call no and the other is the address of the ISR.
Quote:
Originally Posted by
ab_tall
The confusing part for me is that there seem to be 2 jumps here once we are in kernel mode.
1) Look up Interrupt vector table and jump to ISR
2) Look up dispatch table and jump to System call handler.
Please correct me if I'm wrong.
Yes you are wrong because the dispatch table is the same as the interrupt vector table and these terms are used interchangeably...similarly ISR is the same as the system call handler.
Quote:
Originally Posted by
ab_tall
I havent looked at it...try reading the BSD one...it is
here.