
Linux操作系统
度亦有度
这个作者很懒,什么都没留下…
展开
-
80386 CPU资源
一、通用寄存器EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI 8个32位的通用寄存器。通用寄存器结构 AH AL BH BL CH CL DH DL SI ...原创 2019-02-23 22:09:08 · 602 阅读 · 0 评论 -
setup.s程序详解
前面已经介绍过了,bootsect.s从软盘中把第2到5扇区的setup.s程序读入到内存0x90200地址处。不清楚的朋友可以参见bootsect详解。那么setup.s到底做了什么呢?第一件事情就是利用BIOS中断程序填下面这张表格的内容:第二件事就是将0x10000(64K)地址到0x8ffff这段system内核代码移动到0地址处。因为我们已经使用完所有的BIOS中断程序,所以...原创 2019-03-09 10:14:07 · 3583 阅读 · 0 评论 -
中断和异常
中断常用于处理CPU外部的异步事件,异常则是处理CPU在执行过程中检测到的问题。外部中断源有两类,一类是由CPU中断引脚INTR输入的可屏蔽中断另一类是NMI引脚输入的不可屏蔽中断。异常也有两类,一类是由CPU检测到的出错、陷阱或放弃事件,另一类是编程设置的软中断比如int 3.中断和异常编号 NMI引脚输入的不可屏蔽中断 0-31 INTR输入的可屏蔽中断 32-...原创 2019-02-26 23:33:29 · 410 阅读 · 0 评论 -
bootsect里的设备号问题
设备号的问题,之前已经作为遗留问题了,刚开始的时候是下面:可以看出,作者展示了老式硬盘的命名方式:设备号=主设备号<<8+次设备号(major<<8+minor)对于主设备的定义:1-内存;2-磁盘;3-硬盘;4-ttyx;5-tty;6-并行口;7-非命名管道。所以0x300=3<<8+次设备号;一般来讲一块硬盘有4个分区,所以0x306就是第...原创 2019-03-02 23:36:19 · 302 阅读 · 0 评论 -
Bootsect代码详解续
下面这段汇编代码是从磁盘第2扇区读取4个扇区2K字节到内存0x90200开始处。使用的是INT 0x13 BIOS中断程序,主要就是学习一下到底该如何调用这个中断程序。JNC:如果CF标志位没有被置位。J就是段内跳转指令。常数用#号打头。读完磁盘4个扇区后,仍然是用INT 0x13中断程序,ah=0x08,dl=0,可以获取到磁盘信息:需要说明的是第86行,因为是使用的软盘...原创 2019-03-02 22:46:16 · 349 阅读 · 0 评论 -
Bootsect代码详解
首先来看第一条关键汇编指令:rep movw关于这个movw指令,查了网上很多说法,这里我调查的情况是:在INTEL 80386的数据手册中没有movw指令,只有movsw指令。按照之前学习的内容,bootsect使用的是intel的as86汇编器编译,as86的mov语法是mov Destination Source;从第47行的mov语法看确实是as86汇编器语法。而movw是GN...原创 2019-03-02 16:22:58 · 1616 阅读 · 0 评论 -
bootsect代码解析之system模块搬移
下面继续来看bootsect部分如何搬移system模块到0x10000即64K内存处的:首先将system段的地址0x1000存放到es段寄存器中,然后调用read_it子调用汇编函数。下面来看read_it都做了什么:开始之前,我们先来回顾一下开头的一段话:注意这里,linus说当前系统(这里指system模块)最大8*65536.这个值是64K*8=512K,那么这个51...原创 2019-03-04 23:09:08 · 462 阅读 · 0 评论 -
Linux引导初始化--代码搬移过程
Bootsect过程应用程序通过int 0x80中断将CPU从用户态USER切换到核心态KERNEL。Linux内核由内存管理模块、进程调度模块、文件系统模块、进程间通信模块和网络接口模块构成。boot目录下三个汇编程序,其中bootsect.s和setup.s使用的是Intel格式的汇编语言编写,编译器需...原创 2019-02-28 23:16:24 · 332 阅读 · 0 评论 -
Linux多任务相关的TR寄存器和TSS任务状态段数据结构
TR寄存器和TSS任务状态段数据结构可以帮助Linux操作系统快速的完成任务切换并保存原有任务的内容,具体的过程分析如下: 任务状态段TSS先来看下任务状态段TSS的结构:如上图所示:整个TSS可分成两类:> 只读静态字段集(图中灰色部分)>每次任务切换时处理器将...原创 2019-02-24 21:51:00 · 1388 阅读 · 0 评论 -
80386 内存寻址机制
本文主要介绍80386在保护模式下,将分段形式的逻辑地址段选择符:偏移地址(ES:BX)转换成实际的物理内存地址的过程。整个转换分成两个阶段:段转换(逻辑地址转换成线性地址)和页转换(线性地址转换成实际物理地址)。 段转换如上图所示,描述符表是操作系统初始化时,在内存区域创建...原创 2019-02-24 14:43:55 · 1303 阅读 · 0 评论 -
head.s程序详解
更新数据段寄存器与堆栈段寄存器首先,保护模式下把0x10加载到ds es fs gs段寄存器中,就是将setup.s中设置的第2项数据段描述符加载到各段寄存器的隐藏区域。然后,看下kernel/sched.c第69行的内容:说明:lss指令指定的是32位通用寄存器,所以该指令的作用是将存储操作数中低位双字...原创 2019-03-09 23:17:22 · 1422 阅读 · 0 评论