head.s被编译成system模块的最前面部分,故而称为头部。
这段程序处于地址的绝对0处,首先是加载各个数据段寄存器,重新设置中断描述符表 idt,共 256 项,并使各个表项均指向一个只报错误的哑中断
程序。然后重新设置全局描述符表 gdt。接着使用物理地址 0 与 1M 开始处的内容相比较的方法,检测 A20 地址线是否已真的开启(如果没有开
启,则在访问高于 1Mb 物理内存地址时 CPU 实际只会访问(IP MOD,如果检测下来发现没有开启,则进入死循环。然后程序测试 PC 机是否含有数
学1Mb)地址处的内容)协处理器芯片(80287、80387 或其兼容芯片),并在控制寄存器 CR0 中设置相应的标志位。接着设置管理内存的分页处
理机制,将页目录表放在绝对物理地址 0 开始处(也是本程序所处的物理内存位置,因此这段程序将被覆盖掉),紧随后面放置共可寻址 16MB 内存
的 4 个页表,并分别设置它们的表项。最后利用返回指令将预先放置在堆栈中的/init/main.c 程序的入口地址弹出,去运行 main()程序。
下面看一下idt表的初始化。
首先设置ds,es,fs,gs选择符为setup.s中设置的数据段
然后设置系统的堆栈
lss stack_start,%esp #表示_stack_start ss:esp
其中stack_start在/kernel/sched.c中定义了
然后进入setup_idt子程序
idt表项的结构如下图
这段子程序就是循环设置了256项idt描述符,全部指向ignore_int中断门,以后使用的时候再重新设置
其中idt标号的地址就是idt表的其实地址 位于head.s的233行
定义如下
其中.align n 伪指令的含义
在x86 ELF格式中,要在8字节处对齐,应该用 .align 8
而在a.out格式中,要在8字节处对齐,应该用 .align 3 (2^n),现在一般用elf格式。
分享到:
相关推荐
linux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-devel-060625.ziplinux-0.11-...
本代码是目前能够找到的最早的Linux的内核版本,Linux 0.11内核是Linux内核的早期版本,于1991年由Linus Torvalds编写并发布。作为一个基于UNIX的操作系统内核,它的源代码包含了核心代码和一些驱动程序。采用开源...
首先,"linux-0.11-devel-040809.rar"这个文件名揭示了我们关注的核心内容:Linux 0.11的开发版本,日期为2004年8月9日。Linux 0.11是Linux历史上的一个重要里程碑,它是Linux内核发展早期的一个关键版本,由Linux之...
linux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-devel-050518.ziplinux-0.11-...
linux 0.11 源码下载Linux0.11是Linux内核的早期版本之一,也是第一个可用的Linux内核版本。它的源代码是开放的,允许用户自由地阅读、修改和分发。它的开放源代码使得Linux0.11成为了计算机科学领域里的一个重要...
9. **设备树**:虽然Linux 0.11内核没有完整的设备树概念,但书中可能涉及设备配置和初始化的方法。 10. **编译和调试**:如何编译和调试Linux内核源代码,包括makefile的使用和GDB调试技巧。 通过学习这本书,...
Linux 0.11内核是Linux操作系统历史上的一个重要里程碑,它是林纳斯·托瓦兹(Linus Torvalds)于1992年发布的第二个公开版本,标志着Linux开源项目正式开始走向成熟。这个内核版本奠定了后续Linux发展的基础,为...
1. **内核初始化**:赵炯解释了Linux0.11如何在系统启动时进行内核初始化,包括硬件检测、内存管理、中断处理等核心功能的设置。 2. **进程管理**:内核中的进程模型是Linux系统运行的基础。注释详细介绍了进程创建...
在Windows环境下编译Linux 0.11内核是一项对技术有一定挑战性的任务,它涉及到在非Linux系统上构建开源操作系统的核心代码。Linux 0.11是Linux历史上的一个早期版本,对于学习操作系统原理和了解Linux内核的构建过程...
通过分析和学习 Linux 0.11 内核源码,开发者可以深入理解操作系统的工作原理,例如如何进行中断处理、调度策略、内存分配等。同时,这也是一次回顾历史的机会,让我们了解 Linux 从何而来,以及它是如何逐步发展...
标题“linux-0.11-040327-rh9.diff.gz”和描述中的内容都指向同一个文件,这是一个在Linux系统中常见的补丁(patch)文件,被压缩成gzip格式。这个文件名为“linux-0.11-040327-rh9.diff.gz”,我们可以从中提取出几...
Linux-0.11code-master.zip 是一个包含Linux操作系统0.11版本源代码的压缩文件,对于想要深入了解操作系统工作原理、学习Linux内核或进行系统级编程的开发者来说,这是一个宝贵的资源。Linux 0.11是林纳斯·托瓦兹在...
在Linux-0.11-gdb-rh9-050619.tar.gz中,它提供了对Linux 0.11内核的调试支持。GDB允许开发者在运行时检查和修改程序状态,包括查看内存、设置断点、单步执行代码等,极大地简化了调试过程。对于学习和理解操作系统...
5. **Linux内核发展**:从0.11到现代的Linux内核,经历了无数的迭代和改进,包括引入模块化设计、增强安全性和性能优化等。理解早期版本可以帮助我们更好地追踪Linux的发展历程,理解其设计理念和演变过程。 6. **...
3. **创建初始化RAM磁盘**:为了启动Linux内核,还需要一个初始RAM磁盘(initrd)。可以使用`mkfs.cramfs`工具创建一个包含基本文件系统的映像,比如`/etc`、`/bin`等目录。 4. **配置Bochs**:编辑Bochs的配置文件...
linux0.11源码里面有中文注释。linux内核完全注释根据linux0.11编写的。...学习内核建议从linux0.11看起,初始版本内容比较简单,但包含的都是内核的精髓。先上手,学到了方法,后面再看最新版本就更容易了。
Linux 0.11 内核中的中断处理机制包括中断描述符表(IDT),用于定义如何处理各种中断和异常。IDT 中的每个条目是一个中断门或陷阱门,指定了一个中断服务例程的入口地址。EFLAGS 寄存器中的虚拟8086模式标志位和...
Linux 0.11内核源代码是Linux操作系统发展初期的一个重要版本,它为后来的Linux内核开发奠定了基础。这个版本的内核虽然相对较为简单,但它包含了操作系统核心的基本功能,是理解操作系统原理和Linux内核工作方式的...
Linux 0.11通过中断描述表(IDT)来管理各种中断和异常。IDT中每一个条目都指定了一个中断处理程序的入口。Linux 0.11内核中使用了不同的门类型来处理中断和异常,包括陷阱门(trap gate)、系统门(system gate)和...