发布时间:2014-07-02 09:39:24
page fault不能发生在内核态么?为什么?
这里有3个问题:
1、为什么会产生page fault?
?2、发生缺页的上下文是否可以位于内核态
3、发生缺页的地址是否可以位于内核态地址空间......【阅读全文】
发布时间:2014-07-01 17:08:31
原理上,内核态是可以直接访问用户态的虚拟地址空间的,所以如果需要在内核态获取用户态地址空间的数据的话,理论上应该是可以直接访问的,但为什么还需要使用copy_from_user接口呢?......【阅读全文】
发布时间:2014-06-06 10:26:58
kernel 3.10内核源码分析--file write流程
文件写入流程通常从用户态发起,总体分两部分:
1) 从用户态到页缓存
用户态进程先open指定文件,返回fd
用户态进程调用write库函数接口,fd作为入参
read库函数接口最终调用write对应的系统调用接口,sys_write,由此进入内核流程
--------用户态和内核态分界------------------------
内核态调用特定文件系统定义的对应相关操作接口,如ext2对应的write接口为ext2_file_operations->aio_write->generic_file_aio_write,
由于用户对写入速度不敏感,同时磁盘操作较慢,所以写操作通常被延迟,以提升性能,即通常说的“延迟写”。
基本原理为:数据先写入页缓存(page cache)中并设置脏标记,后续由pdflush内核线程周期性或者按需对脏页进行回写。写入操作在数据写入页缓存后即可返回,无需等待数据实际写入磁盘,页缓存(内存)的写入速度显然比磁盘快多了,所以如此能大大提升w......【阅读全文】
发布时间:2014-06-06 10:24:38
kernel 3.10内核源码分析--file read流程
基本原理
文件读取流程通常从用户态发起,总体流程为:
用户态进程先open指定文件,返回fd
用户态进程调用read库函数接口,fd作为入参
read库函数接口最终调用read对应的系统调用接口,sys_read,由此进入内核流程
--------用户态和内核态分界------------------------
内核态调用特定文件系统定义的对应相关操作接口,如ext2对应的read接口为ext2_file_operations->aio_read,由此进入mapping层(VFS层)
mapping层在进行相应处理后,构造并提交bio,进入通用块层。
--------mapping层和通用块层分界----------------
通用块层构造request,提交到IO调度层
--------通用块层和IO调度层分界----------------
IO调度层对request按特定的IO调度算法进行合并和排序后,将request放入对应块设备的reque......【阅读全文】
发布时间:2014-04-18 16:07:38
softlockup(watchdog)用于检测系统调度是否正常,即软锁的情况,当发生softlockup时,内核不能调度,但还能响应中断,对用户的表现可能为:能ping通,但无法登陆系统,无法进行正常操作。
其基本原理为:为每个CPU启动一个内核线程(watchdog/x),此线程为优先级最高的实时线程,在该线程得到调度时,会更新相应的计数(时间戳),同时会启动定时器,当定时器到期时检查相应的时间戳,如果超过指定时间,都没有更新,则说明这段时间内都没有发生调度(因为此线程优先级最高),则打印相应告警或根据配置可以进入panic流程。......【阅读全文】
发布时间:2014-04-18 14:20:39
nmi_watchdog原理(用于检测关中断死锁)
nmi_watchdog用于检测内核中关中断死锁(也称硬死锁)的情况,是调测内核死机或死锁问题的一大利器。内核中,如果代码编写不好可能会出现关中断死锁的情况,即进入内核态后,关中断,然后在内核态中死锁,或长时间运行,导致该CPU无法响应中断(因为中断已关),也无法得到调度(对于没有启用内核抢占的内核来说),外在表现可能为系统挂死、无法ping通、没有响应。而nmi_watchdog正是针对这种情况而设计的。
......【阅读全文】
发布时间:2014-03-26 08:55:59
内核中为防止用户对敏感数据(比如一些关键指针)的直接引用,通常会采用“掩饰”的方法,即在分配相关数据的时候,就对其进行掩饰,
然后在引用时,又对其进行还原,这样的话,用户就不能直接引用相应数据(会导致非法访问),而必须使用内核提供的标准接口来引用。......【阅读全文】