Re: task switching at Page Faults

From: Mikulas Patocka
Date: Mon Apr 19 2004 - 18:08:37 EST

> > > I am in doubt about the linux kernel behaviour is
> > this situation:
> > > supose a have the process A, with the highest
> > realtime
> > > priority and SCHED_FIFO policy. The process then
> > issues a syscall,
> > > say read():
> > >
> > > 1) Can I be sure that there will be no process
> > switch during the
> > > syscall processing, even if the system call causes
> > a page fault?
> >
> > No. If the data read is not in cache and if read
> > operations causes page
> > fault there will be process switch.
> >
> > Additionally, if you don't mlock memory, there can
> > be process switch at
> > any place, because of page faults on code pages or
> > swapping of data pages.
> I was reading the book "Understanding the Linux
> kernel", about 2.4, and the authors:
> 1)assure that there is no process switch during
> the execution of an eception handler (aka syscall).
> they emphasize it.

It is wrong. The process switch will occur, if the process blocks waiting
for some resource (disk IO, keyboard, net or similar). Moreover, on 2.6
kernels, if you turn on CONFIG_PREEMPT, process switch in kernel may occur
almost anywhere

> 2) say that the execption handler may not generate
> exceptions, except for page faults.

That's true. Kernel can generate only page fault.

> So, if process switching occurs at page faults, I
> was wondering which statement is true of if I am
> missing sth.
> You mentioned page faults due to code. Aren´t the
> syscall handlers located in mlocked?

Kernel is nonswappable, but when the syscalls returns from kernel, it can
generate page-fault because of its code or data were paged-out.


> Thanks again
> Fabiano
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at