《自己动手写操作系统》读书笔记
文章平均质量分 69
m1j2t3
学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于GDT
书中《80x86编程》(杨季文)对段选择子是这样解释的: 段选择子长16位,其格式如下表所示。从表中可见,段选择子的高13位是描述符索引(Index)。所谓描述符索引是指描述符在描述符表中的序号。段选择子的第2位是引用描述符表指示位,标记为TI(Table Indicator),TI=0指示从全局描述符表GDT中读取描述符;TI=1指示从局部描述符表LDT中读取描述符。 选择子确定描述符,描述符确定段基地址,段基地址与偏移之和就是线性地址。所以,虚拟地址空间中的由选择子和偏移两部转载 2010-06-20 14:51:00 · 658 阅读 · 0 评论 -
探究Windows内核你知多少
<br />如上所述,现代操作系统的一个明显特征就是用户空间和系统空间的划分,从UNIX时代以来,人们一直把存在于系统空间的代码和数据的集合称为“内核(Kernel)”,因此内核是有明确边界的。空间的不同,或者说CPU运行模式(系统态和用户态)的不同,是不会被混淆的本质区别。可是,在Windows的术语中却不同,微软并不把系统空间的所有代码和数据的集合称为内核,而是把这里面的一部分,即比较低层、与硬件靠得最近因而最为核心的一部分称为“内核”,即Kernel。实际上,这也反映了当初微软在决策上的举棋不定,因为转载 2010-06-20 14:52:00 · 532 阅读 · 0 评论 -
在linux下安装NASM
参考《NASM中文手册.pdf》1.3.2 在unix 下安装NASM 如果你得到了 Unix 下的NASM 源码包'nasm-x.xx.tar.gz'(这里x.xx 表示该源码包中的 nasm 的版本号),把它解压压到一个目录,比如'/usr/local/src'。包被解压后会创建 自己的子目录'nasm-x.xx' NASM 是一个自动配置的安装包:一旦你解压了它,'cd'到它的目录下,输入'./configure', 该脚本会找到最好的 C编译器来构造 NA转载 2010-06-20 14:50:00 · 9858 阅读 · 0 评论 -
bochs在window环境下的调试
<br />最近头大之至,一直想用bochs调试,结果她的魅力远胜于想象。网上流传很多bochs的调试大多盲目转载且内容大为英文 帮助的翻译,下面是我在一大师的博客上转帖过来的,关于用bochs进行调试的步骤和实践过程中使用的例子。<br /> 注:1.大师博客:http://www.cnblogs.com/smwikipedia/<br /> 2.本文中所使用的bochs的版本为v2.1.1,否则有些命令不兼容<br />正文--------------------------转载 2010-06-20 14:49:00 · 1245 阅读 · 0 评论 -
从DOS命令到制作IMG的详细教程
<br />第一课 基本 DOS 命令集详细解说第一课 基本 DOS 命令集详细解说<br />path 指向路径命令:<br /> path=c:/dos;c:/windows;c:/ 这条命令就是说,当我们执行一个文件时,电脑先在当前目录下查找这个文件,找到则执行,如果没有找到,则电脑按照path命令所指定的目录顺序去查找,先在C盘dos目录下,然后在windows目录下,最后在C盘根目录下寻找这个文件<br /><br />edit 编辑命令:<br />转载 2010-06-20 14:47:00 · 1933 阅读 · 0 评论 -
用Bochs调试NTLDR
<br />对一台安装了Windows NT 系列操作系统的PC来说,按下电源开关之后,CPU中首先开始运行的是Bios,然后是MBR,接着是引导扇,然后就是NTLDR。ntoskrnl.exe和 hal.dll 都是由NTLDR来加载的。也就是说,运行NTLDR的时候,系统中还没有任何应用程序或者驱动,当然也就没有任何基于软件的调试器可用。当然,无所不能的硬件调试器肯定是可以的,可惜我们没有硬件调试器。 幸好有了Bochs。Bochs是一个基于LGPL的开源x86 虚拟机软件。Bochs的CPU指令是完全转载 2010-06-20 14:45:00 · 522 阅读 · 0 评论 -
一致代码段和非一致代码段
<br />11111111111111111<br />一致代码段:<br />非一致代码段.<br />之所以出现这个定义是因为系统要安全:内核要和用户程序分开..内核一定要安全.不能被用户程序干涉.<br />但是有时候用户程序也需要读取内核的某些数据,怎么办呢?<br />于是os将内核程序开辟一些可以供用用户程序访问的段.但是不允许用户程序写入数据.<br />1.内核不用知道用户程序的数据.内核不用调用用户程序的数据.内核不用转移到用户程序中来.<br />2.用户程序只能访问到内核的某些共享的转载 2010-06-20 14:34:00 · 619 阅读 · 0 评论 -
保护模式下三个重要的系统表——GDT、LDT和IDT
<br />这三个表是在内存中由操作系统或系统程序员所建,并不是固化在哪里,所以从理论上是可以被读写的。这三个表都是描述符表。描述符表是由若干个描述符组成,每个描述符占用8个字节的内存空间,每个描述符表内最多可以有8129个描述符。描述符是描述一个段的大小,地址及各种状态的。<br /> <br />描述符表有三种,分别为全局描述符表GDT、局部描述符表LDT和中断描述符表IDT。<br /> <br /> <br />1. 全局描述符表GDT:<br /> <br />全局描述符表在系统中只能有一个,且可转载 2010-06-20 14:33:00 · 891 阅读 · 0 评论 -
com文件与exe文件
<br />COM文件是一种可执行程序的内存映象文件,它与只有16位地址线的8位机上的CP/M操作系统下的可执行程序结构相似。在COM程序执行过程中,除了调用DOS功能和 ROM BIOS 功能,以及用户特意安排外,段寄存器一般不发生变化。四个段寄存器具有同样的内容,都指向PSP,因此程序的大小仍限于64k以内。COM文件的入口必须是100H,而EXE文件可以有多个段。其中CS和SS以及IP和SP在程序装入时由DOS根据文件头中的信息初始化,ES和DS则指向PSP。EXE文件除了程序本身外,还要包括文件头(转载 2010-06-20 14:32:00 · 9132 阅读 · 2 评论 -
控制寄存器(CR0,CR1,CR2,CR3)
<br />控制寄存器<br />(控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。)<br /> 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在 80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及转载 2010-06-20 14:30:00 · 1208 阅读 · 0 评论 -
《自己动手写操作系统》环境配置
最近一直在用windows,为了配置环境又装了Xp。环境配置:Virtual PC 5.2+MSodc6.22工具:windows下的NASM(nasm-0.99.04-win)和随书光盘中一些工具说明:Virtual PC 5.2汉化版是最好的选择,Virtual 2007可以装dos,但是却不能共享文件夹,《自己动手写操作系统》中作者的平台是virtual pc 5.0 1转载 2010-03-06 11:09:00 · 565 阅读 · 0 评论 -
关于GDT
书中《80x86编程》(杨季文)对段选择子是这样解释的: 段选择子长16位,其格式如下表所示。从表中可见,段选择子的高13位是描述符索引(Index)。所谓描述符索引是指描述符在描述符表中的序号。段选择子的第2位是引用描述符表指示位,标记为TI(Table Indicator),TI=0指示从全局描述符表GDT中读取描述符;TI=1指示从局部描述符表LDT中读取描述符。 选择子确定描述符,描述符确定段基地址,段基地址与偏移之和就是线性地址。所以,虚拟地址空间中的由选择子和偏移两部转载 2010-06-20 14:51:00 · 1097 阅读 · 2 评论 -
Linux用Nasm巧汇编
<br />随着Linux的普及,如何在Linux平台下进行编程,尤其是汇编成为大家关注的一个问题,但是这方面资料却很少。在遍访网站和论坛后,我把收集到的资料结合本人总结的一些经验跟大家分享一下。<br /><br /> Nasm介绍<br /><br /> Linux下的汇编编译器有多种,语法也不尽相同,其中GAS是比较基本的汇编工具。但是GAS采用的不是我们通常在DOS体系下使用的汇编语法,它采用的是AT&T的语法格式,这是继承Unix的特点,与Intel语法格式有很大的不同。<br /><br /转载 2010-06-20 14:50:00 · 674 阅读 · 0 评论 -
关于.bin格式的文件
<br />所有的文件, 无论后缀名是什么, 一律分为两种格式. text 和 binary. <br />一个后缀名为.bin的文件, 只是想表明它是binary格式. 但并不表明它与某种应用程序有必然的联系性. <br />虚拟光盘文件常用.bin作为后缀, 但并不意味着所有.bin文件都是虚拟光盘. <br />如果你的daemon无法正常安装它. 说明它很可能不是虚拟光盘.转载 2010-06-20 14:43:00 · 919 阅读 · 0 评论 -
#ifndef宏定义用法
<br />#ifndef #ifndef x<br /> #define x <br /> ...<br /> #endif<br /> 这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会现根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。<br /> #ifndef x<br /> //先测试x是否被定义过<转载 2010-06-20 14:35:00 · 1322 阅读 · 0 评论 -
Linux用Nasm巧汇编
随着Linux的普及,如何在Linux平台下进行编程,尤其是汇编成为大家关注的一个问题,但是这方面资料却很少。在遍访网站和论坛后,我把收集到的资料结合本人总结的一些经验跟大家分享一下。 Nasm介绍 Linux下的汇编编译器有多种,语法也不尽相同,其中GAS是比较基本的汇编工具。但是GAS采用的不是我们通常在DOS体系下使用的汇编语法,它采用的是AT&T的语法格式,这是继承Unix的特点,与Int转载 2010-05-17 10:00:00 · 768 阅读 · 0 评论 -
GDT详解
在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型: 在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-转载 2010-03-06 10:10:00 · 541 阅读 · 0 评论 -
自己动手写操作系统
有人可能担心自己既没有学过计算机原理,也没有学过操作系统原理,更不懂汇编语言,对C语言也一知半解,能写操作系统吗?答案是没问题。我将带大家一步一步完成自己的操作系统。当然如果学一学上述内容再好不过。 首先要明确处理器(也就是CPU)控制着计算机。对PC而言,启动的时候,CPU都处在实模式状态,相当于只是一个Intel 8086处理器。也就是说,即使你现在拥有一个奔腾处理器,它的功能也只能是80转载 2010-03-06 10:45:00 · 582 阅读 · 0 评论 -
实模式和保护模式
实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式。实模式被特殊定义为20位地址内存可访问空间上,这就意味着它的容量是2的20次幂(1M)的可访问内存空间(物理内存和BIOS-ROM),软件可通过这些地址直接访问BIOS程序和外围硬件。实模式下处理器没有硬件级的内存保护概念和多道任务的工作模式。但是为了向转载 2010-03-06 11:16:00 · 1047 阅读 · 1 评论 -
解决VirtualPC无法在PAE(物理地址扩展)模式下运行
以前我在旧机器上装的是VPC5.2版,在win2003下面运行没有任何问题。但是自从把我的“前线”挪到我的新amd64 4400+ x2机器上后,5.2就无法再运行了 Know How 出现这个问题的原因是virtualpc不支持64位模式,你只要改一下C盘下的BOOT.INI文件就ok 了 你只要改一下C盘下的BOOT.INI文件就ok 了 [boot lo转载 2010-03-06 11:13:00 · 1069 阅读 · 0 评论
分享