第十八章 调试 内核级开发的调试工作远比用户级开发艰难的多. 一.准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 在这一章里,调试的主要思想是让bug重现,但是在内核中这并不是很容易做到的.因此,在跟踪bug的时候,掌握的信息越多越好. 二.内核中的bug 内核bug的原因可能有: - 错误代码 - 同步时发生的错误,例如共享变量锁定不当 - 错误的管理硬件 - -- 内核bug发作的症状可能有: - 降低所有程序的运行性能 - 毁坏数据 - 使得系…
第一章 Linux内核简介 一.Unix Unix是一个强大.健壮和稳定的操作系统. 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close() 出色的平台可移植性--内核和相关的系统工具软件用C语言编写而成 进程创建迅速 进程间通信原语简单稳定 Unix--支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络. 二.操作系统和内核简介 操作系统是指在整个系统…
此为个人学习笔记存档 week 7 可执行程序的装载 一.预处理.编译.链接和目标文件的格式 可执行文件的创建--预处理.编译和链接 cd Code vi hello.c gcc -E -o hello.cpp hello.c -m32 vi hello.cpp gcc -x cpp-output -S -o hello.s hello.cpp -m32 vi hello.s gcc -x assembler -c hello.s -o hello.o -m32 vi hello.o gcc -…
第五章 系统调用 一.与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用如下" 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户控件和系统的其余部分提供这样一层公共接口 在Linux中,系统调用是用户控件访问内核的唯一手段:除异常和陷入外,他们是内核唯一的合法入口. ※系统调用与API的不同在于运行级别的切换. 二.API.POSIX和C库 POSIX.API.C库和系统调用之间的关系如下图: POSIX-Unix世界中…
此为个人笔记存档 week 5 系统调用(下) 一.给MenuOS增加time和time-asm命令 这里老师示范的时候是已经做好的了: rm menu -rf 强制删除 git clone http://github.com/mengning/menu.git 克隆相关信息 cd menu make rootfs 一个脚本,自动编译自动生成根文件系统,并自动启动MenuOS 如何实现? - 更新menu代码到最新版 - test.c中main函数里,增加MenuConfig() - 增加对应的…
第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程,简称线程,是在进程中活动的对象. 内核调度的对象是线程而不是进程. Linux对线程并不特别区分,视其为特殊的进程. 3.虚拟处理器和虚拟内存 在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存. 包含在同一个进程中的线程可以共享虚拟内存,但是每个都拥有各自的虚拟处理器. 4.几个函数 f…
week 5 实验:分析system_call中断处理过程 一.使用gdb跟踪分析一个系统调用内核函数(上周选择那一个系统调用)--getpid 复习视频: 如何实现? - 更新menu代码到最新版 - test.c中main函数里,增加MenuConfig() - 增加对应的两个函数,Time和TimeAsm - make rootfs 自动编译脚本 1.增加系统调用 先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版 test.c中main函数…
week 7 实验:Linux内核如何装载和启动一个可执行程序 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls mv test_exec.c test.c vi test.c // 可以看到增加了一个exec的程序,只比fork程序多了一个execlp vi Makefile // 查看Makefile的更改,加入了hello make rootfs 执行exec后,出现了hello wo…
期中总结 前半学期的主要学习内容是学习mooc课程<Linux内核分析>以及课本<Linux内核设计与实现>. 所涉及知识点总结如下: 1. Linux内核启动的过程--以MenuOS为例 1.1 计算机的启动过程 CPU启动后,BIOS程序开始执行,检测硬件,然后加载引导程序BootLoader和硬盘的第一个扇区MBR. BootLoader会将操作系统初始化,启动操作系统. Linux内核的启动有三个参数: kernel initrd root所在目录.分区. 内核会首先生成0…
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明: // -S freeze CPU at startup (use 'c' to start execution) cpu初始化之前把它冻结起来 // -s shorthand for -gdb tcp::1234 在1234端口上建立了…