
Linux内核设计基础
文章平均质量分 70
Hey guys, 带你领略0.11内核的初始之路和2.6内核的经典之路,let's go!
刘秋杉
区块链资深研究者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
0.11之路(四):从实模式到保护模式
关中断并将system移动到内存地址起始位置 0x00000将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0。这样系统不会再响应中断,直到main函数中能够适应保护模式的中断服务体系重建完毕才会打开,那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,而是系统自身提供的。 就是要完成实模式下的中断向量表和保护模式下的中断描述符表(IDT)的交接工作。借助关中断(cli原创 2015-04-16 21:57:10 · 1824 阅读 · 0 评论 -
0.11之路(三):system模块
现在载入第三批代码——system模块,仍然使用 int 0x13 中断。 这批代码要比之前多很多,所以需要一点时间,于是出现了 “Loading system …”的字样。但是,此时操作系统的main函数还没有执行,所以它是用汇编来实现的。 system模块被加载至内存的 0x10000 往后的120KB空间中。这样整个操作系统的代码都加载至内存,最后要再次确定一下根设备号。什么是根设备?原创 2015-04-14 15:30:42 · 1728 阅读 · 0 评论 -
0.11之路(二):加载setup
BIOS将bootsect这个引导程序载入内存后,接下来就要靠bootsect来加载第二批和第三批程序。bootsect首先要做的工作就是规划内存。 实模式下,寻址最大范围是1MB(0xFFFFF)。关于setup程序,在bootsect.s中要指定setup程序的扇区数和被加载到的位置(0x90200),此外还要指定启动扇区(也就是bootsect.s)被BIOS加载的位置(0x07c00)和将原创 2015-04-10 16:33:48 · 1755 阅读 · 0 评论 -
0.11之路(一):BIOS引导过程
BIOS在内存最开始的位置构建中断向量表,紧接着是BIOS数据区,此外还要有与中断向量表相应的中断服务程序。我们正是利用这些中断服务程序把内核加载到内存中。 中断是操作系统里的一个意义重大的概念,是一个技术手段。加载内核程序并为保护模式做准备对于Linux 0.11来说,计算机将分三批次逐次加载操作系统的内核代码,第一批由BIOS中断 int 0x19 把第一扇区 bootsect 的内容加载到内原创 2015-04-09 15:36:29 · 2372 阅读 · 0 评论 -
Linux内核设计基础(十)之内核开发与总结
(1)Linux层次结构:(2)Linux内核组成:主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)等5个子系统组成。(3)与Unix的差异:Linux支持动态加载内核模块支持对称多处理(SMP)机制Linux内核可以抢占Linux内核并不区分线程和其他的一般进程Linux提供具有设备类原创 2014-06-15 13:20:48 · 1816 阅读 · 0 评论 -
Linux内核设计基础(九)之进程管理和调度
在Linux中进程用结构体task_struct来管理一个进程所需的所有信息(所以一般较大,在32位机上,大约有1.7KB)。为了提高效率,Linux使用了一些卓越的技术。通过slab分配task_struct结构Linux创建进程迅速,正是因为slab分配器预先分配和重复使用task_struct,这样就避免了动态分配和释放所带来的资源消耗(毕竟一个task_struct较大,而原创 2014-06-14 22:53:09 · 1624 阅读 · 0 评论 -
Linux内核设计基础(八)之内核数据结构
我个人比较喜欢学习数据结构,而Linux内核中实现的数据结构会是我们去学习、理解和应用数据结构的一个很好途径。这里介绍内核中广泛应用的四种数据结构:链表、队列、映射和二叉树。链表:Linux内核讲求高效精简,所以有时需要我们动态去创建和分配内存,这时就要借助链表,我们根据实际情况分配内存后,只需修改链表的指针,仍能索引到刚分配的内存区。链表分单向链表、双向链表和循环链表。原创 2014-06-14 20:53:44 · 1886 阅读 · 0 评论 -
Linux内核设计基础(一)之中断处理
如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,如果能让设备在需要内核时主动通知内核,会是一个聪明的方式,这便是中断。原创 2014-06-08 01:26:32 · 2341 阅读 · 0 评论 -
Linux内核设计基础(二)之Proc文件系统
Linux上的/proc目录是一种文件系统,称为proc文件系统(虚拟文件系统),它存储内核状态信息,包括cpu、内存以及进程等信息。proc文件系统有很多优点:应用程序获取内核数据不用切换到内核态,增加了系统的安全性(像ps命令就是通过proc获取进程信息);应用程序可以通过proc直接改变内核参数,这样不用重新编译内核就可以改变和优化内核行为。总之,proc为用户应用程序获取系统内部信息提供了原创 2014-04-04 21:57:45 · 2440 阅读 · 0 评论 -
Linux内核设计基础(三)之定时器和时间管理
内核知道连续两次时钟中断原创 2014-06-08 02:50:48 · 2036 阅读 · 0 评论 -
Linux内核设计基础(四)之虚拟文件系统
先来看一下写文件函数write的执行过程:ret = write()原创 2014-06-09 00:09:52 · 2369 阅读 · 0 评论 -
Linux内核设计基础(五)之内存管理
我感觉学习操作系统首先要从内存分配和管理入手。首先我们应该知道现代操作系统是以页为单位进行内存管理的,32位体系结构支持4KB的页,而64位体系结构支持8KB的页。页是用来分配的,如何才能进行高效和充分的利用,这是内存管理单元(MMU)应当仔细考虑的。原创 2014-06-11 18:46:11 · 1692 阅读 · 0 评论 -
Linux内核设计基础(六)之块I/O层
块设备是指能随机访问固定大小数据片的设备,如硬盘;字符设备(如串口和键盘)是按照字符流的方式有序访问。区别在于是否可以随机访问数据——也就是能否在访问设备时随意地从一个位置跳转到另一个位置。我们可以感觉到块设备的控制要比字符设备复杂多,实际上内核在块设备上下了大工夫——块I/O层原创 2014-06-12 13:42:50 · 1634 阅读 · 0 评论 -
Linux内核设计基础(七)之系统调用
我理解的系统调用就是内核提供的一组用户进程与内核进行交互的接口。除异常和陷入外,系统调用是内核唯一的合法入口。像/proc也是通过系统调用进行访问的。原创 2014-06-12 15:40:47 · 1474 阅读 · 0 评论