
OS相关
文章平均质量分 87
axx1611
这个作者很懒,什么都没留下…
展开
-
关于NASM
NASM可真是个好东西。俺以前特别菜的时候用过masm,主要是研究C语言参数调用协议的(ASM和C混合编程相关),什么高级用法都不会。不过masm的语法也够繁琐,不合胃口。传说中的gas我真的没用过 ,看了赵博的书上成篇的gas代码我就头痛,AT&T的汇编格式真的很别扭。首先源操作数和目的操作数和Intel汇编相反,这和我们通常的编程习惯相反。我举个例子,strcpy()函数,该函数第原创 2006-12-25 21:51:00 · 7054 阅读 · 0 评论 -
我的实验环境
做OS嘛,实验环境很重要这我也明白,但是我懒。相信勤快的人一定比我做得更好(向于前辈学习!!)。不过懒人也有懒招,我不会老老实实的跟着于前辈用DOS引导,用TD,自己写FAT12这种掉了牙的文件系统,以及自己剖析ELF目标文件(当然这个功夫还是要有,不然自己的OS怎么跑可执行文件阿)等等。 废话不多说,首先是WINDOWS下,偶(公司)的XP SP2中文(家里的索日文SP1 XD),“原创 2006-12-25 23:03:00 · 1813 阅读 · 0 评论 -
想说说实模式的内存地址映射的问题
最近时间紧了,工作忙了,进度也降下来了……无奈 大学时期没有多做点事情真是遗憾闲话不说,进入正题。昨天用 nasm重写linux0.11的bootsect.s,又有了一些新的体会。看过赵博的书的人都知道,bootsect.s在BIOS加电后被载入0x07c00这个地方,然后它把自己复制到0x90000,把setup.s复制到0x90200(紧挨着0x90000的bootsect.s),同时原创 2006-12-27 19:57:00 · 4363 阅读 · 2 评论 -
BIOS关于获取内存信息的调用
OS开机获取当前计算机的内存信息是一件很重要的事情,因为分页机制要用到它。来看看Linux是怎么做的吧 。读了0.11内核的人应该注意到了,linus使用int 0x15 ah = 0x88中断调用获取扩展内存的大小,代码极其简洁: mov ah, 0x88int 0x15mov [2], ax 这个方法真得很简单,而且不用担心BIOS不支持(该调用从28原创 2006-12-28 14:08:00 · 5974 阅读 · 1 评论 -
用来生成二进制内核的Makefile样例
弄出了下面这个Makefile,在偶的Linux试了一切正常:Makefile AS = nasm # 使用nasm作为汇编器. -s 打印错误信息到标准输出.LD = ld # GNU的gld作为连接器.CC = gcc原创 2006-12-26 20:44:00 · 3172 阅读 · 1 评论 -
Linux内核bootsect.S的一个小BUG
读Linux 2.4.33.4的时候发现一个不怎么显眼的bug,位置/arch/i386/boot/bootsect.S,第271行,read_track子程序处:read_track: pusha pusha movw $0xe2e, %ax # loading... message 2e = . movw $7, %bx int $0x10 popa # Accessi原创 2007-01-03 16:45:00 · 1525 阅读 · 0 评论 -
LDT淡出江湖?
如果你看过早期linux内核的代码,你可以发现里面每一个进程(任务)拥有一个tss段和一个ldt段描述 ,每个进程都使用自己的ldt中的代码段描述符和数据段描述符所表示的段作为进程自己的代码段和数据段。 但事实上这不是必需的。事实上linux到1.0的时候就已经放弃这种方法了。现在的linux使用gdt描述符表中的user code和user data两个段(可参见__USER_CS原创 2007-01-13 16:26:00 · 1428 阅读 · 2 评论 -
Linux内核中的可编程间隔定时器PIT
Linux内核中的可编程间隔定时器PIT(Programmable Interval Timer) 每个PC机中都有一个PIT,通过IRQ产生周期性的时钟中断信号来充当系统定时器。i386中使用的通常是Intel 8254 PIT芯片,它的I/O端口地址范围是40h~43h。 8254 PIT有3个计时通道,每个通道都有其不同的用途: 通道0用来负责更新系统时原创 2007-09-15 19:32:00 · 5251 阅读 · 0 评论 -
Linux源码中的mktime算法解析
Linux源码中的mktime算法解析 我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。 那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。 我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。 但是Linux的源代码仅仅用了短短的原创 2007-09-20 13:05:00 · 22096 阅读 · 10 评论