系统调用下

1.系统调用简易的伪代码

#systme call
#asm pseudo code
#系统调用处理过程的伪代码
.macro INTERRUPT_RETURN
    iret
.endm
.macro SAVE_ALL
    ...
.endm
.macro RESTORE_INT_REGS
    ...
.endm
ENTRY(system_call)
    SAVE_ALL
system_call:
    call *sys_call_table(,%eax,4)
    movl %eax,PT_EAX(%esp)    #store the return value
syscall_exit:
    testl $_TIF_ALLWORK_MASK,%ecx    #current->work
    jne syscall_exit_work
restall_all:
    RESTORE_INT_REGS
irq_return:
    INTERRUPT_RETURN
ENDPROC(system_call)
syscall_exit_work:
    testl $_TIF_WORK_SYSCALL_EXIT,%ecx
    jz work_pending
END(syscall_exit_work)
work_pending:
    testb $_TIF_NEED_RESCHED,%c1
    jz work_notifysig
work_resched:
    call schedule
    jz restall_all
work_notifysig:
    ...
END(work_pending)

2.系统调用简易的流程图

image

 

原文地址:https://www.cnblogs.com/boyiliushui/p/5474894.html