最近在研究solaris线程模型,libc库函数pthread_create依次创建用户线程(ulwp_t),接着执行系统调用syslwp_create创建klwp_t和kthread内核线程。然后设置kthread的state为RUNNING,等待cpu调度。在cpu调度此内核线程的时候,会转而执行lwp_rtt函数,这个函数就通过IRET指令从内核态切换到用户态,转而执行用户线程的函数。 问题:在执行iret指令时,内核线程对应的内核栈上的CS,EIP,EFLAGS,ESP,SS这些寄存器是什么时候由哪个函数设...
假如一个用户进程因为系统调用或其他原因进入内核态,执行内核中的代码. 因为每个进程都在内核的地址空间内有一个进程内核栈,所以内核中会有很多这样的栈存在(每个8K).是这样的吗? 如果是这样的话,内核在执行代码时,是如何定位该进程内核栈所在的地址的? 也就是说,内核栈的栈指针是存在哪的?