抢占式内核中,线程在系统调用过程中被抢占,然后又被重新调度时,如何返回至被中断的系统调用的
答案:2 悬赏:80 手机版
解决时间 2021-03-06 14:38
- 提问者网友:最爱你的唇
- 2021-03-06 00:47
线程A进入系统调用,实际上是进入中断。此时转至线程B时,还保持系统调用的中断状态吗?如果不是,则返回线程A时如何使系统处于系统调用中断状态?
最佳答案
- 五星知识达人网友:怙棘
- 2021-03-06 01:44
首先,一般配置的linux,如果进程正在进行系统调用,那么此时进程就是正运行在内核态,而内核态的进程是不可被抢占的。
你说的这种情况,属于编译内核的时候开启了“内核可抢占”这个特性,这种情况下,即使进程正在内核态执行系统调用,也可以被其他进程抢占,这时,首先系统会在进程结构体中记录下这个进程当前是在内核态运行,然后,每个进程都有专属于自己的内核栈,系统会把当前的执行上下文信息都记录到这个进程的内核堆栈上。
以后这个进程恢复运行的时候,内核会从它的结构体中读到被打断前它处于内核态,进而从它的内核栈中读取当时的上下文信息并进行恢复,这样,进程就得以重新运行了。
有问题请追问
你说的这种情况,属于编译内核的时候开启了“内核可抢占”这个特性,这种情况下,即使进程正在内核态执行系统调用,也可以被其他进程抢占,这时,首先系统会在进程结构体中记录下这个进程当前是在内核态运行,然后,每个进程都有专属于自己的内核栈,系统会把当前的执行上下文信息都记录到这个进程的内核堆栈上。
以后这个进程恢复运行的时候,内核会从它的结构体中读到被打断前它处于内核态,进而从它的内核栈中读取当时的上下文信息并进行恢复,这样,进程就得以重新运行了。
有问题请追问
全部回答
- 1楼网友:独钓一江月
- 2021-03-06 01:55
1线程的调度并不是由java决定的,而是os,os可以保证所有线程都有机会得到执行。即时某个线程正在忙。也会被休眠。具体的你要看os相关的线程调度这一块,这叫抢占式任务调度。
2即使线程t的优先级高,在调用start时,也不会保证线程已经真实的启动。os只是把他放到了线程队列中去排队。而当前线程继续执行。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯