《Linux内核设计与实现》课程学习重点问题总结

(问题均是同学提出或是老师上课重点讲解的部分内容,根据自身理解和笔记总结出自己的答案。如有不对,还请指教。)

week2

【Q1】命令qemu -kernel 内核可执行文件 -initrd rootfs.img

在内核代码目录下有init,这是一个可执行文件,内含有C语言文件。

【Q2】编译内核的目的是什么?

为了生成符号表(即名称与地址的映射表)。

make config--->make bzImage
make module--->make module--->install--->make install
make all

week3

【课堂笔记】

1.MUU页式转换(虚拟地址--->物理地址)。

2.0号中断是除0错误。

3.硬中断:CPU出错,被动中断;软中断:异常,陷入,trap。

4.所有的驱动操作均在内核态。

5.操作系统的边界即是系统调用。

6.快速系统调用机制:sysenter/sysexit。

7.int指令流程:无运行级别切换;有运行级别切换

8.TSS:任务堆栈段。

9.Intel设计用来存放硬件上下文,实现任务切换。

10.系统调用过程:执行路径的切换、运行级别的切换

【Q1】所谓的打开中程序关闭中断程序过程中的两种不同情况是指什么?

打开中断与关闭中断过程中涉及两种不同情况。即笔记中第7条提及的不同。什么是运行级别的切换呢?我认为就是在视频讲解中简单带过的“中断发生后的第一件事就是保存现场,结束前最后一件事就是恢复现场”、“发生进程调度”这部分内容。

老师上课提到的打开中断和关闭中断的两种情况应该是指硬中断与软中断的区别。视频中讲解总结如下:

SAVE_ALL
    -...//内核代码,完成中断服务,进程调度
RESTORE_ALL
iret_pop cs:eip/ss:eip/eflags from kernel stack

如果并未发生进程调度,则直接往下执行restore_all;

如果发生了进程调度,则当前的这些状态都会暂时保存在系统内,在下次发生进程调度再切回到该进程时则往下执行restore_all。

结合上面知识来思考应该是这样的:

硬中断是CPU出错,因此相当于“停等”。如果执行过程中发生了硬中断,那么整个执行就“硬生生停下”,然后什么事也不干,此时就是“无运行级别切换”(老师所说),即“未发生进程调度”(视频所说),中断结束后,回过神来继续往下走刚才没做完的工作。

软中断相对应的,就是“发生了进程调度”,中断发生后,保存现场,然后处理进程,然后下次进程调度到自身时,恢复现场,继续往下执行。

【Q2】中断过程init前后分析

当init触发中断时,系统会根据init中断的中断号去查询中断向量表,获取产生的中断种类,然后找到处理该中断的中断处理程序,例如课程中我们所得的中断号是128(即十六进制数80处理系统调用中断),寻到中断处理程序中进行地址换算获得中断所对应的程序地址,根据先前在eax中存放的系统调用号查询系统调用表,然后找到该号系统调用对应的C代码程序执行实现该系统调用功能。

【Q3】虚拟地址、页式存储、物理地址三者关系

我们可以联想到操作系统中所说的“设备无关性”。这里也可以根据无关性来理解。

用户在操作计算机系统的时候其实只需要对虚拟地址,或说逻辑地址进行操作。而无需去对真正存放程序代码的地址、资源地址进行操作。而真正存放这些指令、数据的是物理地址,即绝对地址。在操作系统中运用页式存储数据。在用户进行操作时,操作系统中会自动完成地址映射、转换,通过页式存储、段式存储将虚拟地址转换为物理地址从而实现寻址。

持续更新中....

时间: 2024-11-03 21:04:56

《Linux内核设计与实现》课程学习重点问题总结的相关文章

Linux内核设计第八周学习总结 理解进程调度时机跟踪分析进程调度与进程切换的过程

陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频内容 Linux系统的一般执行过程 最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程 1. 正在运行的用户态进程X 2. 发生中断——save cs:eip/esp/eflags(current) to kernel stack, then load cs:eip(entry of a specific IS

Linux内核设计第六周学习总结 分析Linux内核创建一个新进程的过程

陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验过程 登陆实验楼虚拟机http://www.shiyanlou.com/courses/195 打开shell终端,执行以下命令: cd LinuxKernel rm -rf menu git clone https://github.com/mengning/menu.git cd menu mv test_fork.c

Linux内核设计第三周学习总结 跟踪分析Linux内核的启动过程

陈巧然 原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验步骤 登陆实验楼虚拟机http://www.shiyanlou.com/courses/195 打开shell终端,执行以下命令: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage-initrd rootfs.img 执行完毕后会弹出QEMU窗口,输

《Linux内核设计与实现》学习总结 Chap4

第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发行的效果. 调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是只要有可以执行的进程,那么就总会有进程正在执行,但是只要系统中可运行的进程的数目比处理器的个数多,就注定某一给定时刻会有一些进程不能执行,这些进程在等待运行,在一组处于可运行状态的进程中,选择―个来执

《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程

分享一个最近丢了手机心塞到爆炸的我,现在穷的只剩下满脑子的智慧了,好了,我要开始学习了. 首先,搭建一个linux0.11的系统环境,贴出结果图. 从开机加电到执行main函数之前的过程. 1. 启动BIOS,准备实模式下的中断向量表和中断服务程序; 2. 从启动盘加载操作系统程序到内存,加载操作系统程序的工作就是利用第一步中断服务程序实现的; 3. 为执行32位的main函数做过渡工作. 启动BIOS,准备实模式下的中断向量表和中断服务程序 cpu的硬件设计为加电即进入16位实模式下状态运行,

《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数

  实验内核版本:0.11 ◆ 从开机到main函数的三步: ① 启动BIOS,准备实模式下的中断向量表和中断服务程序: ② 从启动盘加载OS程序到内存中,加载OS程序的工作就是利用第一步中的中断服务程序实现的: ③ 为执行保护模式下32位的main函数做过渡工作. ? Intel将所有80x86系列的CPU硬件都设计为加电即进入16位实模式状态运行: ? 将CPU硬件逻辑设计为在加电瞬间强行将CS置为0xFFFF,IP置为0x0000,即是CS:IP指向了0xFFFF0这个地址: 整个过程是一

《Linux内核设计与实现》学习笔记——中断、中断处理程序

中断和中断处理程序 中断随时可能产生,打断CPU的执行,CPU转而处理中断. 不同的设备对应的中断不同,每个中断都通过一个唯一的数字标志. 这些中断值称为中断请求(IRQ)线,每个irq线关联一个数值. 中断处理程序 响应中断时,内核会执行一个函数,中断处理程序/中断服务例程ISR, 一个设备的中断处理程序是他的设备驱动的一部分. IO资源包括 : 中断,I/O端口,共享RAM,DMA.驱动程序需要管理注册释放这些资源. 上半部:接收到中断就立即执行,只做有严格时限的工作,如对中断应答或复位硬件

《Linux内核设计与实现》学习总结 Chap18

一.准备开始 1.一个确定的bug,但大部分bug通常都不是行为可靠且定义明确的. 2.一个藏匿bug的内核版本. 3.相关内核代码的知识和运气. 二.内核中的bug 1.bug的表象: 明白无误的错误代码,同步时发生的错误,错误地管理硬件,降低所有程序的运行性能,毁坏数据,使系统处于死锁状态. 2.引用空指针会导致产生一个oops,垃圾数据可能会导致系统崩溃. 三.通过打印来调试 1.printk()是内核的格式化打印函数,与C库提供的printf()函数功能基本相同. 2.printk()在

《Linux内核设计与实现》学习笔记——I/O调度算法

I/O调度子系统用于调度来自多个进程对块设备的I/O请求. 电梯调度 首先,如果队列中已存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并为一个请求. 2.如果队列中存在一个驻留时间过长的请求,那么新请求将被插入到队列尾部,以防止其他旧的请求发生饥饿. 3.如果队列中以扇区方向为序存在合适的插入位置,那么新的请求将被插入到该位置,保证队列中的请求是以被访问磁盘物理位置为序进行排序的. 4.如果队列中不存在合适的请求插入位置,请求将被插入到队列尾部. 最后期限IO调度 在最后期

《Linux内核设计的艺术》学习笔记(五)INT 0x10中断

参考书籍:<IBM-PC汇编语言程序设计>   ◆ 设置显示方式: AH = 0 AL = 00 40 × 25 黑白文本,16级灰度 AL = 01 40 × 25 16色文本 AL = 02 80 × 25 黑白文本,16级灰度 AL = 03 80 × 25 16色文本 AL = 04 320 × 200 4色图形 AL = 05 320 × 200 黑白图形,4色灰度 AL = 06 640 × 200 黑白图形 AL = 07 80 × 25 黑白文本 AL = 08 160 × 2