
Linux0.11版本内核学习笔记
文章平均质量分 79
乘风life
学如逆水行舟,不进则退!
展开
-
Linux内核0.11版本sched.c中sleep_on()函数分析
void sleep_on(struct task_struct **p) { struct task_struct *tmp; if (!p) //若指针无效,则退出 return; if (current == &(init_task.task)) //若当前任务是任务0则死机 panic("task[0原创 2017-03-20 09:57:42 · 1754 阅读 · 1 评论 -
Linux内核0.11版本schedule()函数分析
void schedule(void) { int i,next,c; struct task_struct ** p; //任务结构数组指针//检测alarm(进程的报警定时值),唤醒任何已得到信号的可中断任务 for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) //从任务结构数组中从后向前依原创 2017-03-19 21:04:21 · 2156 阅读 · 0 评论 -
Linux内核0.11版本signal.c中sys_signal()和sys_sigaction的理解
signal()和sigaction()的功能比较类似,都是更改信号原处理句柄(handler ,或称为处理程序)。但signal()就是内核操作上述传统信号处理的方式,在某些特殊时刻可能会造成信号丢失,造成信号丢失的原因在于signal()函数会在一处理句柄结束后将其恢复成信号的默认处理句柄。所以要持续保持新的信号处理函数就得在新的信号处理函数中再次signal()设置,但在上一次响应信号进原创 2017-03-20 17:52:14 · 1145 阅读 · 0 评论 -
do_signel()函数的理解
在 中记录了对signal()函数和sigaction()函数的分析,这里分析用户程序进行系统调用(int 0x80)时中断处理程序对信号的处理。在进程每次调用系统调用时,若该进程已收到信号,则该函数就会把信号的处理句柄(即对应的信号处理函数)插入到用户程序堆栈中。这样,在当前系统调用结束返回后就会立刻执行信号句柄程序,然后再继续执行用户的程序,如下图所示在用户程序调用系统调用刚进原创 2017-03-20 21:00:28 · 1865 阅读 · 0 评论 -
task_struct结构体注释
内核程序通过进程表对进程进行管理,每个进程在进程表中占有一项。在Linux 系统中,进程表项是一个task_struct 任务结构指针。任务数据结构定义在头文件include/linux/sched.h 中。有些书上称其为进程控制块PCB(Process Control Block)或进程描述符PD(Processor Descriptor)。其中保存着用于控制和管理进程的所有信息。主要包括进程当原创 2017-03-15 13:58:37 · 988 阅读 · 0 评论 -
Linux内核0.11版本sys_waitpid()函数分析
文章内容摘自与Linux内核完全注释(修正版v1.9.5)5.10.2部分系统调用waitpid()。挂起当前进程,直到pid 指定的子进程退出(终止)或者收到要求终止该进程的信号,或者是需要调用一个信号句柄(信号处理程序)。如果pid 所指的子进程早已退出(已成所谓的僵死进程),则本调用将立刻返回。子进程使用的所有资源将释放。如果pid > 0, 表示等待进程号等于pid 的子进程。如果pi原创 2017-03-21 09:32:53 · 881 阅读 · 1 评论 -
GDTR、LDTR、GDT、LDT的理解’
网上关于GDT与LDT的内容很多,这里只是在别人的基础上加入了自己理解的内容,首先贴一段LDTR的百度百科说明:LDTR(Local Descriptor Table Register)即局部描述符表寄存器,为自intel 80386起引入的寄存器。其中存放内容由两部分构成,第一部分为16位的LDT(局部描述符表)段的段选择子;第二部分为LDT段的段描述符的内容,intel 80386起引入的原创 2017-03-22 13:27:22 · 970 阅读 · 0 评论