博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux的内核日志系统
阅读量:7024 次
发布时间:2019-06-28

本文共 805 字,大约阅读时间需要 2 分钟。

如果没有数据,那么就睡眠等待。

如果要往外读数据,不希望在读的过程中数据发生变化,因此必须锁住环形数据缓冲区

这里才是内核环形缓冲区真正消耗的地方。

得到一个字符

只有在这里才逻辑上清除环形缓冲区的数据

这个logbuf_lock自旋锁其实很重要,确保一次内核信息写的过程不会有别的写过程来捣乱,否则很多信息会揉在一起,比如hello和 world会变为hwellorold。

如果现在可以得到设备的信号量,那么马上将数据显示到终端

该函数具体显示数据

本次的内核信息已经写入了内核环形缓冲,为了不阻碍别人写,释放掉自旋锁

打印向屏幕,注意,打印的时候也要确保logbuf_lock被拥有,因为不想在打印过程中发生缓冲区变化的事情

确保有数据,这个变量还作为是否唤醒do_syslog的睡眠队列的依据。

注意,log_end和log_start并没有变化,而是副本变化了,这是因为下面还要用到内核缓冲,不能因为写到了屏幕,信息就消耗了。

如果内核唤醒缓冲中有数据,那么就唤醒睡眠队列

在这里,sys_open打开了/dev/console,将其作为标准输出,其实也就是我们的终端,当前终端,在sys_open中会自动将文件描述符0分配给这个终端文件,然后紧接着的sys_dup相当于复制了这个终端文件描述符代表的文件给了新的描述符1和2,这样的话实际上0,1,2代表的是同一个东西,都是指当前的终端,这也就是为什么你往标准错误里面写东西也不会错的道理,实际上标准输入,输出,错误都是给用户进程用的,对于内核,它们是一个东西。因为linux进程都是fork出来的,根源就是这个kernel_init进程,于是每个进程都会默认复制父进程的0,1,2文件描述符(如果父进程没有关闭它们的话)。

 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274024

转载地址:http://depxl.baihongyu.com/

你可能感兴趣的文章
ExtJs之Ext.core.DomQuery
查看>>
使用chain方式,在第二action中获取第一个action中actionMessage
查看>>
CentOS安装及配置DNS服务器
查看>>
淘宝Diamond架构分析
查看>>
IE8 jquery ajax获取静态资源报错TypeError 拒绝访问
查看>>
创建完美SDK的10个技巧
查看>>
5、spss做加权最小二乘回归及岭回归
查看>>
Map 按key和value 排序
查看>>
每周一道数据结构(一)图
查看>>
Android 5.x特性概览四
查看>>
归并排序MergeSort
查看>>
十五天精通WCF——第二天 告别烦恼的config配置
查看>>
CYQ.Data 轻量数据访问层(四) 构造数据单元列
查看>>
精美UI界面欣赏[12]
查看>>
UIButton的两种block传值方式
查看>>
深蓝词库转换1.5发布
查看>>
ORA-01033: ORACLE initialization or shutdown in progress
查看>>
得到设备是何种iPhone设备 + 怎么获得启动页面图片
查看>>
【Python】实现从AWR 报表上抓取指定数据改进版
查看>>
优化OEA中的聚合SQL
查看>>