上一页 1 2 3 4 5 6 ··· 8 下一页
摘要: 在介绍tcp发送函数之前得先介绍很关键的一个结构sk_buff,在linux中,sk_buff结构代表了一个报文: 然后见发送函数源码,这里不关注硬件支持的分散-聚集: 详细的说明见注释。 注意几点主要的流程: 1.TCP以1mss为单元来发送数据,最大段大小基于MTU计算获得,MTU是一个链路层的 阅读全文
posted @ 2016-09-24 21:47 是非猫 阅读(897) 评论(0) 推荐(0) 编辑
摘要: RT 1.effective_prio函数计算进程的动态优先级。 普通进程除了静态优先级,还有动态优先级,其值的范围是100(最高优先级)~139(最低优先级)。动态优先级是调度程序在选择新进程来运行的时候使用的数。它与静态优先级的关系用下面的经验公式表示: bonus是范围从0-10的值,值小于5 阅读全文
posted @ 2016-08-21 13:53 是非猫 阅读(551) 评论(0) 推荐(0) 编辑
摘要: RT 1.这里解释几个主要的子函数,首先是task_timeslice,重新计算时间片。首先介绍一下基本时间片的概念。 静态优先级本质上决定了进程的基本时间片,即进程用完了以前的时间片时,系统分配给进程的时间片长度。静态优先级和基本时间片的关系用下列公式确定: 如你所见,静态优先级越高(其值越小), 阅读全文
posted @ 2016-08-21 01:18 是非猫 阅读(1281) 评论(0) 推荐(0) 编辑
摘要: 参考的是ULK第三版,Linux2.6.11.12内核版本。 调度程序依靠几个函数来完成调度工作,其中最重要的第一个函数是scheduler_tick函数,主要步骤如下: 这就是此函数所做的主要工作,总体思想。 阅读全文
posted @ 2016-08-14 18:29 是非猫 阅读(1089) 评论(0) 推荐(0) 编辑
摘要: 从1991年Linux的第1版到后来的2.4内核系列,Linux的调度程序都相当简陋,设计近乎原始,见0.11版内核进程调度。当然它很容易理解,但是它在众多可运行进程或者多处理器的环境下都难以胜任。 正因为如此,在Linux2.5开发系列的内核中,调度程序做了大手术。开始采用了一种叫做O(1)调度程 阅读全文
posted @ 2016-07-29 17:17 是非猫 阅读(1679) 评论(0) 推荐(0) 编辑
摘要: 文件系统的文件太多,而且是照搬的MINIX的文件系统,不想继续分析下去了。缓冲区机制和文件系统密切相关,所以这里就简单分析一下缓冲区机制。 buffer.c 程序用于对高速缓冲区(池)进行操作和管理。高速缓冲区位于内核代码块和主内存区之间,见图9-9 中所示。高速缓冲区在块设备与内核其它程序之间起着 阅读全文
posted @ 2016-07-11 23:49 是非猫 阅读(3133) 评论(0) 推荐(0) 编辑
摘要: 最后剩下最核心的函数do_execve了,由于这里为了简单起见我不分析shell命令的情况, 尽管删掉很大一部分,但代码还是很长。不过没有关系,核心代码还是一小部分,大部分是判断性的代码。判断性的代码就不做分析了,仔细看也是能看懂。 注意bh = bread (inode->i_dev, inode 阅读全文
posted @ 2016-07-03 19:06 是非猫 阅读(1825) 评论(0) 推荐(0) 编辑
摘要: 前面分析完了copy_strings函数,这里来分析另一个注意的函数change_ldt。 先来看调用处: 解释的很清楚,也就是说p指向的是相当于在图9-23的左方添加了64M-MAX_ARG_PAGES * PAGE_SIZE的大小容量。总容量为64M。 这里的ex为读取的可执行二进制文件头部分。 阅读全文
posted @ 2016-07-03 18:02 是非猫 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 从现在开始就是分析最后的核心模块exec.c了,分析完这个文件后,就会和之前的所有分析形成一个环路,从创建进程、加载进程程序到进程调度、内存管理。 exec.c的核心do_execve函数很长,而且用到了很多其他的函数,copy_strings就是其中一个,我们这里就先来分析这个函数。 首先看调用处 阅读全文
posted @ 2016-07-03 16:54 是非猫 阅读(1436) 评论(0) 推荐(0) 编辑
摘要: 1.文件系统介绍 一个简单的文件系统大致需要这么几个要素: ● 要有地方存放Metadata; ● 要有地方记录扇区的使用情况; ● 要有地方来记录任一文件的信息,比如占用了哪些扇区等; ● 要有地方存放文件的索引。 根据这些要素,同时参照Minix的文件系统,我们就把我们的文件系统设计成如下图所示 阅读全文
posted @ 2016-06-29 15:34 是非猫 阅读(1677) 评论(1) 推荐(0) 编辑
摘要: 【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5598451.html 】 在上一篇的fork函数中,首先一上来就调用get_free_page为新任务的数据结构申请一页内存,在memory.c中: 上面有几个指令比较陌生,先介绍repne s 阅读全文
posted @ 2016-06-19 19:40 是非猫 阅读(1224) 评论(0) 推荐(1) 编辑
摘要: 【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5597818.html 】 据说安卓应用里通过fork子进程的方式可以防止应用被杀,大概原理就是子进程被杀会向父进程发送信号什么的,就不深究了。 首先fork()函数它是一个系统调用,在sys.h 阅读全文
posted @ 2016-06-19 17:15 是非猫 阅读(2324) 评论(0) 推荐(0) 编辑
摘要: 【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5597705.html 】 Linux内核因为使用了内存分页机制,所以相对来说好理解些。因为内存分页就是为了方便管理内存。 说到内存分页,最根部的要属页目录表了,head.h中: 然后再看head 阅读全文
posted @ 2016-06-19 11:24 是非猫 阅读(1712) 评论(0) 推荐(0) 编辑
摘要: 【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5596830.html 】 上一篇说到进程调度归根结底是调用timer_interrupt函数,在system_call.s中: 前面一堆push指令保存当前的寄存器,然后在ret_from_sy 阅读全文
posted @ 2016-06-18 23:38 是非猫 阅读(1841) 评论(0) 推荐(0) 编辑
摘要: 【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5596746.html 】 首先看main.c里的初始化函数main函数里面有个函数是对进程调度的初始化,sched_init()函数,次函数在sched.c中实现: 首先初始化任务0的TTS,F 阅读全文
posted @ 2016-06-18 19:42 是非猫 阅读(1913) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 8 下一页