Linux 0.11初步总结

 

Linux 0.11内核只有8000多行代码,是学习操作系统基本原理的好材料,也是进一步学习linux后期版本的好基础。因为我看它主要是为了深入学习arm linux,所以关于x86的知识没有深入,所以只用了两天时间就把这些内容大致搞定。

首先是操作系统设计的基本准则:

简单就是美

利用已有基础

良好的设计

单内核和微内核操作系统选择

核心源代码的目录分布:

Boot

Boot.s

Head.s

我发现其实linux的启动引导代码在后来一直没有很大的变化,具体的工作就是读取内核文件,和设置各种和cpu有关的内容,比如什么idt,gdt之类的啦,更具体的我也不太懂,呵呵。

Fs

这 个目录下老多文件了,就是一些和文件系统有关的东西,包括各种读写驱动函数。看了一个文件,就是想知道如果自己实现这些东西该怎么去做,现在也没怎么弄明 白,以后认真研究一下arm linux里的nand flash驱动的实现吧。其实我对驱动最不明白的就是到底要到哪一层。

Include

就是一些头文件啦。

Init

只有一个main.c文件,工作为:初始化系统时钟->启动tty设备->启动系统陷阱->启动进程调度器->启动文件系统->启动硬盘中断处理程序->开启中断,切换至用户模式->init函数->进入进程调度循环

Kernel

一些重要的功能

Lib

系统调用功能

Mm

内存管理有关的内容

Tools

一个程序,将生成的内核拼接成一个核心映像文件。

操作系统的引导:

X86上的我在看这本书前也就有点了解:粗略的说就是当计算机启动时,bios会自动复制一段代码上内存,然后跳往内存执行,所以我们就可以根据这个原理写段代码实现引导内核的作用,具体的我也不太懂,不过应该很简单。

ARM上, 我分析过一个bootloader的源码,其实在ARM上也是很简单的,比如在arm刚启动时都时执行地址0的代码,然后我们就可以编一个程序初始化并将 内核读取,然后跳到内核起始地址就可以执行了,但是有一个问题就是如果开启mmu功能那些地址怎么变化,我还没有搞明白。

存储管理分析

以后分析arm linux吧

进程管理和调度

在 linux中调度函数就是schedule(),具体的调度算法没有认真的研究,以后要用在看吧,其实调度工作还是很简单的,就是选择适当的进程,将进程 上下文保存和还原啦,这个工作其实也分为两部分,一保存原来的进程,二是对将要运行的进程还原,其实更进一步说应该是汇编代码实现这个功能,因为要对 cpu寄存器赋值,能不用汇编吗?

还有就是什么时候发生调度:呵呵,时间到了的时候(rtc/timer),或者有程序自动放弃cpu的时候。

设备管理和调度

关于中断和驱动啦,当外设发生中断时会执行一段汇编后跳往c语言写的中断处理函数,然后执行完事后回到原来的地方执行。

文件系统

以后分析arm linux吧

你可能感兴趣的:(linux)