摘要: 第七章 链接 ——《深入理解计算机系统》 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行。 一、编译器 大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。 链接可以执行于编译时,也就是在源代码被翻译成 阅读全文
posted @ 2016-04-06 19:51 20135312吴汉彦 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 一、进程的描述 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。 1.进程控制块PCB——task_struct 进程状态 进程打开的文件 进程优先级信息 2.操作系统的三大管理功能 进程管理 内存管理 文件系统 3.进程的状态 主要有就绪、等待、运行等。 二 阅读全文
posted @ 2016-04-03 00:18 20135312吴汉彦 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 第三章 进程管理 一、进程 1.进程 进程就是处于执行期的程序。 进程就是正在执行的程序代码的实时结果。 进程是处于执行期的程序以及相关的资源的总称。 进程包括代码段和其他资源。 2.线程 执行线程,简称线程,是在进程中活动的对象。 内核调度的对象是线程而不是进程。 Linux对线程并不特别区分,视 阅读全文
posted @ 2016-03-30 23:24 20135312吴汉彦 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 十八章 调试 一、内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确的。 确定bug最初出现的内核版本很困难:内核版本更新快,难以确定bug从哪个版本开始出现的。 3. 阅读全文
posted @ 2016-03-30 23:22 20135312吴汉彦 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 一、实验相关 1.下载老师最新的menu文件,并在其中添加上周所编写的代码,并运行 下载 添加 运行 2.gdb调试跟踪 gdb设置跟踪文件(先进入linux 3.18.6所在的文件) gdb设置断点 二、流程图 三、遇到的问题 进入gdb调试时,执行file linux 3.18.6/vmlinu 阅读全文
posted @ 2016-03-26 23:36 20135312吴汉彦 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 第五章 系统调用 一、与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用有: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户控件和系统的其余部分提供这样一层公共接口 在Linux中,系统调用是用户控件访问内核的唯一手段;除 阅读全文
posted @ 2016-03-23 22:35 20135312吴汉彦 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 一、系统调用的三层皮 1. 内核态、用户态 Intel x86 CPU有四个权限分级,0 3。Linux只取两种,0是内核态,3是用户态。 0xc0000000以上的空间只能在内核态下访问 0x00000000 0xbfffffff两种状态下都可以访问 2. API、中断向量、中断服务程序 中断向量 阅读全文
posted @ 2016-03-20 14:16 20135312吴汉彦 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 一、linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme Sharing System),支持30台终端访问主机; 1965年,Bell实验室、MIT、GE(通用电气公司)准备开发Multics系统,为了同时支持300个终端访问主机,但是1969年失败了; ~刚开 阅读全文
posted @ 2016-03-16 22:43 20135312吴汉彦 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 一、Linux内核源码(简单分析) 1. README 一开始刚接触内核源码的时候,不知道代码文件是什么功能、不清楚如何使用文件的时候,就需要打开README。 README提供了内核的各种编译方法、生成文件的查看方法。 2. arch arch目录中包含和硬件体系结构相关的代码,每种平台有自己相应 阅读全文
posted @ 2016-03-13 20:37 20135312吴汉彦 阅读(225) 评论(1) 推荐(0) 编辑
摘要: 一、实验截图 网络太卡,实验楼的实验没有太多的截图,下面的代码是看着老师的视频分析的。 二、代码解析 1.mymain.c asm volatile( "movl %1,%%esp\n\t" // 将进程的task[pid].thread.sp,即esp赋给esp寄存器 "pushl %1\n\t" 阅读全文
posted @ 2016-03-06 16:15 20135312吴汉彦 阅读(324) 评论(0) 推荐(0) 编辑