此为个人学习笔记存档 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 -…
第十八章 调试 内核级开发的调试工作远比用户级开发艰难的多. 一.准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 在这一章里,调试的主要思想是让bug重现,但是在内核中这并不是很容易做到的.因此,在跟踪bug的时候,掌握的信息越多越好. 二.内核中的bug 内核bug的原因可能有: - 错误代码 - 同步时发生的错误,例如共享变量锁定不当 - 错误的管理硬件 - -- 内核bug发作的症状可能有: - 降低所有程序的运行性能 - 毁坏数据 - 使得系…
第一章 Linux内核简介 一.Unix Unix是一个强大.健壮和稳定的操作系统. 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close() 出色的平台可移植性--内核和相关的系统工具软件用C语言编写而成 进程创建迅速 进程间通信原语简单稳定 Unix--支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络. 二.操作系统和内核简介 操作系统是指在整个系统…
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…
一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ pid = 0; my_current_task = &task[pid]; asm volatile( "movl %1,%%esp\n\t" /* 将进程的sp赋给esp寄存器 */ "pushl %1\n\t" /* ebp入栈:因为在这里栈为空,esp=e…
实验三:跟踪分析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端口上建立了…
week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengning/menu.git # 更新Menu cd menu mv test_fork.c test.c # 把test.c覆盖掉 make rootfs 执行fork,可以看到父进程子进程都输出了信息. 下面进行gdb调试: qemu -kernel linux-3.18.6/arch/x86/bo…
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分类: 非抢占式多任务 抢占式多任务 1.抢占式多任务 Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 几个相关概念: 抢占:强制的挂起动作 时间片:预先设置好的,进程被抢占之前能够运行的时间,实际上就是分配给每个可运行进程的处理器时间段 动态时间片计算…
此为个人笔记存档 week 8 进程的切换和系统的一般执行过程 一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) 计算密集型 需要大量的CPU时间进行运算 第二种分类: 批处理进程 不必与用户交互,通常在后台运行 不必很快响应 典型:编译程序,科学计算 实时进程 有实时需求,不应被低优先级的进程阻塞 响应时间要短要稳定 典型:视频.音配.机械控制…