用户态进程:如何创建,如何销毁

如何创建 分为两个步骤: fork()/clone() 创建新内核线程 execve() 执行新用户态程序 新 forked 出来的线程如何开始工作 在 fork()/clone() 的过程中: 由 copy_process() 调用体系结构相关的 copy_thread() 来构造新线程的上下文; 由 wake_up_new_task() 将新线程的 task_struct 挂到某个 CPU 的 run queue 上,待调度器调度执行。 x86_64 1copy_thread(p, args) { 2 struct pt_regs *childregs = task_pt_regs(p); 3 struct fork_frame …

Things That Happen Around Function Calls

Registers: call-clobbered v.s. call-preserved Call-clobbered registers a.k.a. caller-saved or volatile registers; “scratch register/temporary register” in AAPCS32, “scratch” registers in x86 Registers whose values would be changed (or “clobbered”) across a function call, and so the …