0.11之路(三):system模块

现在载入第三批代码——system模块,仍然使用 int 0x13 中断。

这批代码要比之前多很多,所以需要一点时间,于是出现了 “Loading system …”的字样。但是,此时操作系统的main函数还没有执行,所以它是用汇编来实现的。

system模块被加载至内存的 0x10000 往后的120KB空间中。这样整个操作系统的代码都加载至内存,最后要再次确定一下根设备号。

什么是根设备?

根文件系统设备(Root Device):

0.11使用的是Minix操作系统的文件系统管理方式,要求系统必须存在一个根文件系统,其他文件系统挂接在其上,而不是同等地位。一张格式化好的软盘就可以成为一个根文件系统设备。

setup程序做的第一件事就是利用BIOS中断服务程序从设备上提取内核运行所需的机器系统数据。然后将这些数据放在了 0x90000 ~ 0x901FD 的位置,可见已经覆盖了原先的bootsect代码,bootsect只有2B未被覆盖,可见,操作系统对内存的使用是非常严谨的——充分利用了已经没有用的内存,而且几乎正合适,只差2字节。

最后,总结一下整个的加载过程。

开机 —— BIOS —— bootsect(int 0x19)—— setup (int 0x13)—— system(int 0x13)

时间: 2024-10-13 10:20:48

0.11之路(三):system模块的相关文章

0.11之路(四):从实模式到保护模式

(一)关中断并将system移动到内存地址起始位置 0x00000 将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0.这样系统不会再响应中断,直到main函数中能够适应保护模式的中断服务体系重建完毕才会打开,那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,而是系统自身提供的. 就是要完成实模式下的中断向量表和保护模式下的中断描述符表(IDT)的交接工作.借助关中断(cli)和开中断(sti)完成这个过程的创建,即在创建过程中不能去响应中断,否则没有对应的中断程序,系统

0.11之路(一):BIOS引导过程

BIOS在内存最开始的位置构建中断向量表,紧接着是BIOS数据区,此外还要有与中断向量表相应的中断服务程序.我们正是利用这些中断服务程序把内核加载到内存中. 中断是操作系统里的一个意义重大的概念,是一个技术手段. 加载内核程序并为保护模式做准备 对于Linux 0.11来说,计算机将分三批次逐次加载操作系统的内核代码,第一批由BIOS中断 int 0x19 把第一扇区 bootsect 的内容加载到内存:第二批.第三批在bootsect的指挥下,分别把其后的4个扇区和随后的240个扇区的内容加载

0.11之路(五):激活进程0

linux的第一个进程--进程0. Linux 0.11 是一个支持多进程的现代操作系统,所以我们需要进程管理信息数据结构:task_struct.task[64].GDT等的支撑. 我们需要设置物理内存的分布:主内存区.缓冲区和虚拟盘. memory_end -- 系统有效内存末端位置 main_memory_start -- 主内存区起始位置 buffer_memory_end -- 缓冲区末端位置 main_memory_start = buffer_memory_end -- 缓冲区之后

0.11之路(六):创建进程1

进程0要做的第一件事就是作为父进程调用fork函数创建第一个子进程--进程1. 内核用last_pid来存放系统自开机以来累计的进程数,也将此变量用作新建进程的进程号.BTW,linux 0.11 的task[64]只有64项,最多只能同时运行64个进程.fork函数中有个很重要的函数叫 copy_process() 函数. 进程0依靠它完成对进程1的创建: 1) 为进程1创建task_struct,将进程0的task_struct的内容复制给进程1 2) 为进程1的task_struct.ts

0.11之路(二):加载setup

BIOS将bootsect这个引导程序载入内存后,接下来就要靠bootsect来加载第二批和第三批程序. bootsect首先要做的工作就是规划内存. 实模式下,寻址最大范围是1MB(0xFFFFF).关于setup程序,在bootsect.s中要指定setup程序的扇区数和被加载到的位置(0x90200),此外还要指定启动扇区(也就是bootsect.s)被BIOS加载的位置(0x07c00)和将要移动到的新位置(0x90000),内核被加载的位置(0x10000)和内核的末尾位置,根文件系统

Python学习之路13?常用模块

一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. 格式化的时间字符串(Format String) 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 1 import time 2 #

python之路-16-常用模块学习

16.1模块定义 定义:用一砣代码实现了某个功能的代码集合(n个 .py 文件组成的代码集合就称为模块) 模块分为三种: 自定义模块 内置标准模块(又称标准库) 开源模块 16.2导入方法 单个模块导入:import module_name 一个模块多个函数:from module_lanhan import * 别名导入:from module_lanhan import def_name as module_lanhan_def_name 多模块一起导入需要用逗号(,)隔开 Import m

Jquery学习之路(三) 实现弹出层插件

弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 要弹出层,先要用一个遮罩层挡在下面的页面,此遮罩层是全屏的,页面滚动也要有,所以设置 position: fixed;还要有透明效果,下面是我定义的遮罩层css,取名mask .mask { position: fixed; width: 100%; height: 100%; backgroun

我的VSTO之路(三):Word基本知识

原文:我的VSTO之路(三):Word基本知识 在前一篇文章中,我初步介绍了如何如何开发一个VSTO程序,在本文中,我将进一步深入介绍Word的插件开发.Word是一个大家在日常工作中一直接触的文档工具,也是微软最赚钱的产品之一.从最初的Word 1.0到现在的Word 2010历经了13代的演化,已经成为了一个比较复杂的系统.(这里稍微跑题一下,Office 2010的版本代号是version 14,但是我为什么说Word一共演化了13代呢?因为Office并没有Version 13,上一代的