linux内核分析第3章&第18章读书笔记

linux内核分析第3章&第18章读书笔记

第三章 进程管理

进程:处于执行期的程序(目标码存放在某种存储介质上)

包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态,具有内存映射的内存地址空间,执行线程,存放全局变量的数据段

执行线程:进程中活动的对象

拥有资源:独立的程序计数器,进程栈,进程寄存器。

内核调度的对象是线程

进程的两种虚拟机制:虚拟处理器,虚拟内存

任务队列:链表每一项都是进程描述符结构。

进程描述符描述内容:打开的文件,进程地址空间,挂起信号,进程状态

Linux通过slab分配器分配task_struct结构,达到对象复用和缓存着色。

进程标识值:内核通过唯一的PID来标识每个进程。

进程状态:进程描述符中state域描述了进程的当前状态。

TASK_RUNNING(可执行)

TASK_INTERRUPTIBLE(正被阻塞)

TASK_UNINTERRUPTIBLE(不可中断)

_TASK_TRACED(被其他进程跟踪)

_TASK_STOPPED(进程停止执行)

进程家族

所有进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程

进程创建

1 fork()通过拷贝当前进程创建一个子进程
2 exec()函数读取可执行文件并将其载入地址空间

线程实现

在linux中,线程仅仅被视作一个与其他进程共享某些资源的进程,它只是一种进程间共享资源的手段

内核线程:独立运行在内核空间中的标准进程

它与普通进程的区别在于,内科线程没有独立的地址空间,只在内核空间运行。可以被调度或者抢占。

第18章 调试

通过打印调试

Printk()具有健壮性,可以在任何时候,任何地方调用它。(除非在启动过程的初期就要在终端上输出)

Printk()可以指定一个日志级别,内核把比某个特定级别低的所有消息显示在终端上。

OOPS

Oops是内核告知用户有不幸发生的常用方式。他的产生有很多原因,包括内存访问越界或者非法的指令

如果oops在idle进程(pid为0)或者init进程(pid为1)时发生,或者在中断上下文时发生,或者持有一个锁或正在和硬件交互,系统将陷入混乱。

探测系统

用UID作为选择条件

如果开发进程相关部分,可以通过把用户id作为选择条件来安排究竟是执行新算法还是老算法。通过在特定条件下执行新算法,可以保证安全性。

使用条件变量

可以创建一个全局变量作为分支选择开关,通过某种接口或者调试器进行操控。

使用统计量

可以在定义某事件的文件里,定义两个全局变量,统计事件发生规律,最好通过原子操作来实现。

重复频率限制

1.限制重复频率

2.限制发生次数

posted on 2016-03-30 22:00  5319zl  阅读(145)  评论(0编辑  收藏  举报

导航