linux0.12内核bootsect.S

这个文件就是0.12内核的主引导扇区代码,他的作用就是加载操作系统内核。

计算机加电,自检完毕后,BOIS就将启动设备的第一扇区加载到内存0x7c00(31KB)处,并开始从这里执行,若启动设备是硬盘的话,加载的即为该硬盘0磁道0柱面1扇区的内容,共512字节,以0xAA55为结束标志,这就是硬盘的MBR(master boot recorder)。

linux0.12内核bootsect.S中的代码编译后,将会写入启动设备的MBR中,它的主要工作加载操作系统内核的初始化程序setup.S和操作系统内核system模块。

为完成这个工作,bootsect.S开始执行时将自己移动到内存0x90000(576KB)处,然后在0x90200开始处加载setup.S程序,加载完毕后,又将system加载到内存0x10000(64KB)处。至此它的使命完成了,最后执行一句段间远转移指令,接下来cpu开始执行setup.S中的代码了。

时间: 2024-08-19 07:53:08

linux0.12内核bootsect.S的相关文章

Linux0.12内核学习之(1)——用MASM编写Boot Sector引导扇区

最近在学习Linux0.12内核,正在读<Linux内核完全剖析>.一开始就被ax86写的引导扇区弄晕了.于是Google了很多资料.最终实验了一晚上终于搞定.下面来看看我们怎么用Windows下的MASM来写个Boot Sector.因为我MASM汇编用的比较熟,所以就用MASM来写,当然,汇编只有语法差异,你用什么来写都没关系. 首先,先来说说计算机怎么启动的.经过一系列BIOS加电.系统自检后,会将硬盘0面0道1扇区的512字节(Boot Sector)加载到内存地址07c0:0000处

Linux0.12内核之内存管理(2)

本文主要介绍Linux0.12内核memory.c中的函数 1.void free_page(unsigned long addr) //释放物理地址addr处的一页内存.用于free_page_tables()函数 void free_page(unsigned long addr) { //首先判定给定物理地址的合理性.如果物理地址addr小于内存低端1M,对此不///予处理.如果addr>=内存最高端,则显示出错并且内核停止工作 if(addr<LOW_MEM) return; if(a

linux0.12内核的内存组织和进程结构

进程结构 Linux0.12中的每个进程都有如下的结构: 在gdt中占有两项,一项是tss段描述符,一项是ldt段描述符. 在task数组中占有一项,指向一页物理内存,该物理内存低端是进程控制块task_struct(里面包括tss段和ldt段),其余部分是进程的内核态堆栈. 在页目录表和页表中设置有相关项. Linux0.12中,最多只有64个进程,task数组大小也定义成了64,每个进程与一个task数组中的项一一对应.虽然gdt中有256项,但是并不是都用到.第一个gdt项保留不用,内核用

Linux0.12内核之内存管理(3)

本系列的第三篇文章主要来介绍与共享物理页面相关的两个函数. //在发生缺页异常的时,首先看看能否与运行同一个文件的其他进程进行页面共享处理.该函数首先判断系统中是否有另外进程也在运行与当前进程一样的执行文件.若有,则在系统当前任务中找寻这样的任务.若找到了这样的任务就尝试与其共享指定地址处的页面.判断系统中是否有另一个进程也在执行同一个可执行文件的方法是利用进程任务数据结构中的executable字段.该字段执行进程正在执行程序的内存中的i节点,根据该i节点的引用次数i_count我们就可以判断

Linux-0.12内核sleep_on函数分析

sleep_on用于进程休眠,原型如下: void sleep_on(struct task_struct **p) 当进程访问某个互斥资源时,如果资源被另外进程占用,当前进程就需要休眠. 假设资源的结构如下: struct res { .... struct task_struct *wait; } 其实我们参考下文件系统的i节点就会发现,i节点也是一种资源,它的结构体中就有一个变量i_wait.那么我们就用i节点举例.如果进程访问某个i节点,发现i节点被锁住,当前进程就需要睡眠:sleep_

Ubuntu 12.10安装Bochs 2.6, 调试linux-0.11内核

http://blog.csdn.net/sinzou1/article/details/5903968 Linux(ubuntu)安装bochs http://wenku.baidu.com/view/f968e23b0912a21614792914.html ubuntu下安装bochs http://www.linuxidc.com/Linux/2011-07/38371.html Ubuntu 10.04安装Bochs 2.4.5笔记 http://blog.csdn.net/trace

Linux0.11内核剖析–内核体系结构 &#169;Fanwu

Linux0.11内核剖析–内核体系结构 ©Fanwu <Linux内核完全注释>下载:http://files.cnblogs.com/files/HanBlogs/linux-kernel.pdf(进入pdf后要点击右下角保存喔^_^) 一个完整可用的操作系统主要由 4 部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如下图所示: 用户应用程序是指那些字处理程序. Internet 浏览器程序或用户自行编制的各种应用程序: 操作系统服务程序是指那些向用户所提供的服务被看作是操作系

一站式linux0.11内核head.s代码段图表详解

阅读本文章需要的基础: 计算机组成原理:针对8086,80386CPU架构的计算机硬件体系要有清楚的认知,我们都知道操作系统是用来管理硬件的,那我们就要对本版本的操作系统所依赖的硬件体系有系统的了解,有了系统的了解后才能全面的管理它,我们对8086,80386CPU架构的计算机硬件体系如果有非常深刻的认识,我们看源代码内核的时候,就可以更可能的以一种开发者的角度去思考代码的作用,先从全局的角度去思考问题,而不是采用一种众人摸象的思维从头看到末尾. 计算机编程C语言基础:linux内核基本都是用C

linux0.11的bootsect.s和setup.s

 1.计算机的启动 1.首先计算机的工作原理可以简单的概述为取指,执行:再取指,再执行:以此类推的过程,cpu就是一个不停取指执行不会休息的机器.  2.那么x86结构的计算机上电后是是怎么工作的呢?其实上电后(未加载操作系统代码之前)会先执行内存中一段为BIOS固化的区域,这段区域是每次开机都必须执行的,正常情况下不被我们所控,主要作用是对一些硬件环境做出检测,是否有硬件损坏.这段期间cpu处在实模式下工作.在BIOS代码执行完毕后,cpu会去磁盘的0磁道0扇区读取512字节到内存地址的0x7