第十八章 调试 18.1准备开始 需要的只是: 一个确定的bug.大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的内核版本. 相关的内核代码的知识和运气. 18.2内核中的bug 内核中的bug多种多样,它们的产生可以有无数的原因,同时他们的表象也变化多端. 从隐藏在源代码中的错误到展现在目击者面前的bug,往往都是经历一系列连锁反应的事件才可能触发. 内核与其他大型的软件项目没有什么太大的不同. 内核有一些独特的问题需要考虑:例如定时限制和竞争条件等,它们都是允许多个线程在内核…
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年,整个Unix系统用C语言进行了重写,给后来Unix系统的广泛移植铺平了道路. 伯克利的第一个Unix演化版是1977年推出的1BSD系统. 伯克利真正独立开发的Unix系统是于1979年推出的3BSD系统,支持虚拟内存. 1994年重写了虚拟内存子系统,推出了最终官方版,即4.4BSD. Unix内…
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 内容:1.使用gdb跟踪分析一个系统调用内核函数 2.根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图 一.给MenuOS增加time和time-asm命令 (一) 克隆并自动编译MenuOS rm menu -…
第五章 系统调用 20135307 张嘉琪 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 它为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全,作为硬件设备和应用程序之间的中间人,内核可以基于权限.用户类型和其他一些规则对需要进行的访问进行裁决 在第3章中曾经提到过,每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑,如果应用程序可以随意访问硬件而内核又对此一无所知的话几乎就没法实现多任…
第十七章 设备与模块 关于设备驱动与设备管理,我们讨论四种内核成分. 设备类型 模块 内核对象 sysfs 17.1设备类型 在Linux以及所有Unix系统中,设备被分为以下三种类型: 块设备,块设备通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对数据的随机访问.块设备是通过称为"块设备节点"的特殊文件来访问,并且通常被挂载为文件系统. 字符设备,字符设备通常缩写为cdev,它是不可寻址的,仅提供数据的流式访问,就是一个…
进程管理 进程是处于执行期的程序以及相关的资源的总称,也称作任务.执行线程,简称线程,是在进程中活动的对象. 可以两个或两个以上的进程执行同一个程序 也可以两个或两个以上并存的进程共享许多资源 内核调度的对象是线程,而不是进程. 进程描述符及任务结构 内核把进程的列表存放在任务列表(task list)的双向循环链表中. 链表中每一项都是类型为task_struct的进程描述符的结构. 进程描述符中包含的数据能完整地描述一个正在执行的程序: 打开的文件 进程的地址空间 挂起的信号 进程的状态 m…
第三章 进程管理 3.1 进程 进程是处于执行期的代码.通常进程还要包含其他资源,像打开的文件.挂起的信号.内核的内部数据.处理器状态.一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段等. 进程提供两种虚拟机制:虚拟处理器和虚拟内存. 通常,创建新的进程都是为了立即执行新的.不同的程序,而接着调用exec()这组函数就可以创建新的地址空间,并把新的程序载入其中. 3.2 进程描述符以及任务结构 内核把进程的列表存放在叫做任务队列(task list)的…
4.1多任务 多任务操作系统:同时并发地交互执行多个进程的操作系统 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但是并不处于可运行状态.这些进程利用内核堵塞自己,直到某一事件发生. 多任务系统可以划分为两类:非抢占式和抢占式. 抢占:强制挂起. 时间片:分配给每个可运行进程的处理器时间段. 4.2 linux的进程调度 4.3策略 策略决定调度程序在何时让什么程序运行. 4.3.1I/O消耗型和处理器消耗型的进程 I/O消耗型:进程的大部分时间用来提交I/O请求或是等待…
第四章 进程调度 进程在操作系统看来是程序的运行态表现形式. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但并不处于可运行状态.相反,这些进程利用内核堵塞自己,直到某一事件发生. 多任务系统可以划分为两类:非抢占式多任务和抢占式多任务. 强制的挂起动作就叫做抢占. 时间片实际上就是分配给每个可运行进程的处理器时间段. 4.2 linux的进程调度 O(1)调度程序 4.3策略 策略决定调度程序在何…
第七章 链接 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行.链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时:也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时:甚至执行于运行时(run time),由应用程序来执行. 理解链接器将帮助你构造大型程序. 理解链接器将帮助你避免一些危险的编程错误. 理解链接将帮助你理解语言的作用域规则是如何…