[Prev][Next][Index][Thread]

OSKit & processes



    Since OSkit does not support processes directly, I decided I should give it a try and implement some of it myself. One of the easy ways is to use TSS and let the CPU handle all the state saving. I can easily put a task gate in the IDT, but how can I do an "iretd" from a TSS exception/interrupt handler? By coding it by hand, i.e. asm("iretd") or however gas requires? I don't think this should work, since the compiler inevitably places some "push"-es on the entry of the function and messes stacks. When I was fiddling with NASM and Visual C++ to make a simple 32-bit protected kernel, things were easy, because VC++ does _very_ simple code, and was easy to disassemble and see what it does in terms of asm instructions. Since I cannot do that here, and base_trap_* stuff obviously cannot handle task gates, and I do not want to make a software task switch, what should I do?
BTW, task switching can be very easily implemented this way, just change the back_link field in the kernel's TSS and iretd, that's all...
    Any advice? 10x in advance.
 
FtpDaemon