李杰的博客

最想听却又不敢听的一首歌曲

时间:May.16, 2005 | 分类: 未分类

http://www.flash77.com/flashplay/flash77_4897.htm

张学友的《心如刀割

张学友:心如刀割

我的天是灰色
我的心是蓝色
触摸着你的心
竟是透明的

你的悠然自得
我却束手无策
我的心痛竟是你的快乐

其实我不想对你恋恋不舍
但什么让我辗转反侧
不觉我说着说着天就亮了
我的唇角尝到一种苦涩

我是真的为你哭了
你是真的随他走了
就在这一刻
全世界伤心角色又多了我一个
我是真的为你爱了
你是真的跟他走了
能给的我全都给了我都舍得
除了让你知道我心如刀割

发个牢骚吧 全文阅读...

纪念反法西斯胜利60周年

时间:May.08, 2005 | 分类: 未分类

http://news.sohu.com/s2005/fanfaxisi60.shtml

太多的资料

发个牢骚吧 全文阅读...

这句名言出自谁口中?

时间:May.07, 2005 | 分类: 未分类

看了,还不错,转过来

在一所著名大学里的历史课上,教授正在向来自各国的同学提问:“要生存还是要灭亡。这句名言出自谁的口中?”
  
     沉寂了半天之后,古田站起来说:“威廉·莎士比亚。”
  
    “很好,被誉为‘欧洲的良心’是指谁?”
  
    “罗曼·罗兰。”
  
    “完全正确,同学们,刚才回答问题的是位日本学生,可是作为欧洲国家的学生却答不出来,太遗憾了!”教授不无感慨的说道。
  
    “干死小日本!”突然有人发出一声喊叫。
  
    “谁!谁说的!”教授气得语音都颤抖了。
 ?br>    “杜鲁门说的。”约翰站了起来。
  
    “你以为自己在干什么?”教授生气的说道。
  
    “麦当娜说的。”杰克也站了起来。
  
    “这真叫人恶心,简直无法无天了。”教授浑身气得发抖。
  
    “乔治·布什说的。”斯蒂芬也坐不住了。
  
    课堂立刻陷入了混乱之中,所有的学生都开始议论纷纷,一些学生开始起哄:“耶!真***够劲。”
  
    “克林顿对莱温斯基说的。”玛丽毫无表情的接话道。
  
    教授愤怒得说不出话来,隔了一会,他大踏步的向门外走去,到门口时,他冷冷的看了所有人一眼:“我会回来的。”
  
    “阿诺德·施瓦辛格说的。”鲍勃终于插上话了。
  
    古田委屈的一摊手:“我没做什么坏事,为什么会这样?”
  
    “张国荣说的。”李小丽一脸崇拜的神情回答
  
    所有的学生都围成一个圈,汤姆有些垂头丧气:“该死,我们完了。”
  
    “希特勒说的。”伊汉诺娃立刻回答。
  
    赖特叹了口气:“今天将是一个很有意义的日子。”
  
    “本·拉登说的。”克瑞斯终于为自己能说出一个名字而得意。
  
    “这决非是我最得意的一天。”古田惭愧的说着。
  
    “托尼·布莱尔说的。”已经不知道谁在回答。
  
    这时校长和教授一起进来了,他脸色铁青,几乎是一字一顿的说道:“你们要为此付出代价!”
  
    “斯大林说的。”全班同学异口同声的回答

发个牢骚吧 全文阅读...

魅力城市视频

时间:May.07, 2005 | 分类: 未分类

我的家乡,山西省长治市,被评为了全国10大魅力城市之一,这里有几个视频,请大家欣赏

My hometown, Chang Zhi ,Shan Xi province ,was appraised tobe one of the 10 most attractive cities in China ,here are some videos about my hometown:

中文版本 In Chinese
http://218.26.240.48/spdb/ZT/zgczhy.rm

中国魅力城市-长治(德语版) In German
http://218.26.240.48/spdb/ZT/sx_041130115528_sxpd.rm

中国魅力城市-长治(英语版) In English
http://218.26.240.48/spdb/ZT/sx_041130115342_sxpd.rm

发个牢骚吧 全文阅读...

head.s 分析[原创]

时间:Apr.28, 2005 | 分类: 未分类

2005-04-28 BY:LinuxRen
head.s就运行在32位保护模式下面了,这里是名副其实的内核了

GNU 的汇编直接数,比如 0×10,如果前面有$,即$0×10,则表示立即数,在16位实模式下,内存地址由段基地址左移四位加上段内偏移量组成,而在保护模式下,由段选择子 (逻辑地址的高16位 )(由段选择子选择的描述符所决定的段基地址不需要左移,直接加偏移地址就可以形成线性地址)和段内偏移量(逻辑地址的低16位)组成,这里是内存管理中 的段式管理,还有页式管理(以后再说),这里有张图片可以很好地说明段式管理:

如果仅仅是0×10,则表示内存的地址。

这张图片好像有个小问题,右上角的偏移量应该是32位的,这里很容易给人错觉好像偏移量就是逻辑地址的低16位,段选择子时逻辑地址的高16位,可以从intel的手册得到证实 其中的图5-2,呵呵,intel应该不会犯错吧

为什么既有段式内存管理,也有页式内存管理,我想大概是cpu设计的原因,如果cpu加电直接就可以进入32位,那么段式管理就应该报废了。也不知道现在的64位的cpu是怎么处理的,现在64微处理器的资料实在太少了。

head.s 第18行,movl $0×10, %eax 之后eax就相当于段选择子,与gdt表的地址进行运算,就可以定为一个全局描述符,在全局表述符中会给出对应段的段基址,再加上已知的段内 偏移量,就可以将一个逻辑地址转为一个线性地址,这里的0×10仅仅是段选择子。

然后call setup_idt, setup_idt代码在79行,就是将idt中的每一项都设置为指向同一个中断门ignore_int,即打印一段信息“Unknown interrupt”

在这里说一下idt,idt就是中断描述符表,和全剧描述符表是一个等级的,相应的中断描述符表项和全局描述符表项是对应的,中断门ignore_int是和全局描述符表项所表述的段一个等级的,只不过这里的不是一个段,而可以是一段代码,这样就应该容易理解了吧。

接 着call setup_gdt,gdt在前面已经临时设置过了,在这里要重新设置.这里将gdt还是设置成为含有256个全局描述符表项,第0个不用,第一个系统代 码段,第二个系统数据段,值分别是 0×00c09a0000000fff 0×00c09020000000fff,可以对照着张表来看看具体的意思:

这里将系统代码段和系统数据段的段长都设置成为了16M.

后面的252项都填充0,用于以后用户程序使用。

接下来就是检查数学协处理器,还有什么287/387,没看,跳过。

然后就是开启分页管理

这里的分页机制是专门为内核使用的,也就是说以后的应用程序并不适用这里的页表,而是在程序执行的时候自己自动加载自己的页表。

这里的分页比较简单,经过分页之后的物理地址是和分页前的线性地址相同的,这一点是非常重要的。因为在分页启动之前有一句话: pushl $_main
这里是将main函数的地址压栈,当分页启动之后要讲这个地址pop出来,并且跳到main去执行,系统就会跳到以前压入栈的main的地址经过分页映射后的地址去运行,如果物理地址和线性地址不一样的话,那么就会跳到错误的地方,但是这里不会。

发个牢骚吧 全文阅读...

[原创]setup.s分析

时间:Apr.28, 2005 | 分类: 未分类

setup.s会将被bootsect.s读取到0×10000处的system模块移动到0×00000处,这样好象会把中断表给覆盖掉,文件执行到后来会加载中断描述符表,但是idt表却是这个样子的:

idt_48:
.word 0
.word 0,0

idt表的基地址居然还是0×00000,这里就搞不懂了,因为这个时候0×00000的地方已经是system模块了,所以在真正的重新设置idt表以前,如果出现异常,我不知道系统将会进行什么样的处理,这里是问题一

setup.s会读取大量的参数然后存到0×90000处,也就是说会覆盖bootsect.s,具体的参数分布书上44页有,这里有个问题是,系统会将 第一个硬盘的参数表读到0×90080处,然后再读取第二个硬盘的参数表到0×90090处,然后再去检测到底有没有第二个硬盘,如果没有再将 0×90090处的参数表清0,怪了,为什么不先检测有没有第二个硬盘,在去决定是否读取参数表到0×90090呢?非要反着来不成?

下面是我对保护模式的一点理解,不知是否正确,有错误欢迎提出:

在16位的实模式下的程序在内存中的布局和操作系统的是混在一起的,也就是说,cpu没有提供对操作系统的保护,这会出很多问题,32为保护模式下, cpu提供的很强大的功能来保护操作系统的代码不被侵犯,我们所要做的就是提供相应的数据,将相应的寄存器初始化,打开A20地址线,然后执行一个跳转指 令,cpu就会进入保护模式,对我们的程序进行保护,具体的各位可以在网上找到资料,其中一个方法就是设置gdt以及ldt来保护操作系统以及应用程序, gdt(大小限制在64k以内)也即全局描述符表里包含有全局描述符,每个全局描述符得大小为8字节,所以理论上,一个gdt一共可以有64K/8=8K 个全局描述符.其中三个是描述全局性的操作系统的代码段,数据段,其他的一个程序占用一个全局描述符.

系统怎么来确定要使用哪一个全局描述符呢?使用段选择子!这里是他的结构:

其中3-15字节是用来索引gdt来去定某一个全局描述符得,共13位,所以gdt最大长度限制在2^13=64K.但是不知道为什么在这里Linus只将gdt的长度设置为了2K,也就是为什么在
gdt_48:
.word 0×800 !这里为什么是0×800,而不是0xFFFF,难道就是因为现在的gdt是临时的,以后还有设置,所以只要够现在用就可以了??

.word 512+gdt,0×9 ! 这里由于setup.s是在0×90200处,所以要加上0×200(512)的偏移量。

然后就是为系统进入32为保护模式作准备了,这里就要先初始化gdt,由于现在还没有程序运行,所以只是用了三项(其实是两项),其中,第零项没有使用,第一项描述系统的代码段,第二项描述系统的数据段(堆栈段)。

全局表述符表:

gdt:
.word 0×0000 !第0个弃用
.word 0×0000
.word 0×0000
.word 0×0000

.word 0×07FF !第1个,第0个用了4个word,所以这里偏移量是0×08
.word 0×0000 !用来描述系统代码段
.word 0×9A00
.word 0×00C0

.word 0×07FF !第2个,偏移量是0×10,也就是16
.word 0×0000 !用来描述系统数据段
.word 0×9200
.word 0×00C0

这里是gdt的结构

这是,进入保护模式所要准备的数据已经够了,接下来就是加载gdt的基地址以及大小限制到专用寄存器gdtr,idt基地址以及大小限制到idtr,然后打开A20数据线,关于A20数据线,哈工大纯c板块上有很好的文章介绍,然后重新对8259进行编程(看见头大,没怎么看),设置状态字,然后执行
jmpi 0,8 !这里的8就是上面的段选择子的值,化为二进制为 0000,0000,0000,1000 这里的1就是第1个全局描述符,即系统代码段,就会去执行head.s

最好对这个时候内核内存布局有个印象,便于以后的理解

——————-
数据段表述符
——————-
代码段描述符
——————-
——————-0X90200
硬件参数
——————-0X90000

head.s程序
——————–0X00000

发个牢骚吧 全文阅读...

[原创]内核引导启动程序分析

时间:Apr.28, 2005 | 分类: 未分类

主要参考用书:《linux内核完全分析》
由于比较简单,所以先把bootsect.s看了一下,其实整个内核引导程序有三个,分别是bootsect.s,setup.s,head.s ,前两个都不属于严格意义上的kernel,只不过是对kernel的启动做一些准备,真正的内核是从head.s启动的,现在先分析 bootsect.s:

当你按机箱上的power on的时候,cup会自动去到bios中地址0xFFFF0处开始执行bios中的代码,除了会进行一些初始化工作,这段代码最主要的是将可启动设备的第 一个扇区(bootsect.s)(引导扇区,512字节)读到内存0×07c00处。

当bootsect.s执行时,它已经被读到了0×07c00处,首先它会将自己读到0×90000处,为什么要先读到0×7c00,再读到 0×90000,是由于bios被设置成了先读到0×7c00的地方,再度到0×90000是为了防止后来读入到0×10000处的system模块覆盖 掉bootsect.s。将自己读到0×90000处后先会设置一下堆栈(0×9000:0xff00),然后将setup.s读入到紧接着 bootsect的地方(0×90200),默认的是从软盘读取的(硬盘在当时估计是奢侈品),然后就是取相应磁盘(被当作软盘,写成了hard code)的参数,然后就是利用bios的0×10中断,ah=0×03,将一段话”Loading system…”打印到屏幕上。然后检测要使用哪个根文件系统设备(软盘或者硬盘),具体的方法是判断508,509字节处的根设备号是否被置为1.
问题一.508,509是什么时候设置的?

如果有硬盘的话,就将其保存,否则读取每磁道的扇区数来判断是什么类型的软盘(1.2M还是1.4M),也保存。
问题二.这里硬盘参数ROOT_DEV=0×306,意思是第二个硬盘的第一个分区,为什么是第二个硬盘?

问题三.在这之前的代码都是软盘启动的,是不是就是说,不管你有没有硬盘,都必须从软盘启动,如果不修改bootsect的代码的话

最后执行 jmpi 0,SETUPSEG,跳转到setup.s程序的开始处执行。

发个牢骚吧 全文阅读...

今天新买了个域名

时间:Apr.20, 2005 | 分类: 未分类

LinuxRen.Org,58块钱,现在就有两个域名了,我对.net的注册商彻底失望了,打算快到期的时候转注册商,LinuxRen.Org的解析到首页上,LinuxRen.Net直接解析到论坛上面,这样也方便一些,与空间在一个地方买的,兄弟给推荐的人,哈哈,没有这个贱人我都不知道该怎么弄了,网站就打算先这样办下去,慢慢人估计会多起来的,关键要有自己的特点,由于自己水平不高,所以还是在网上招聘版主,嗯,大家一起努力~~~~~~~~~

发个牢骚吧 全文阅读...

BIOS和DOS建立的中断向量表

时间:Apr.19, 2005 | 分类: 未分类

绝对地址 16进制 10进制 有关内容
00H 0H 0 0做除数时处理器发出的中断 溢出条件是:

除法类型 结果
———————————
有符号字 +127
有符号双字 +32767
无符号字 | >255
无符号双字 | >65535
———————————
DOS设有INT 00H处理程序,系统将显示”Divide Overflo”,结束当前程序的执行。

04H 1H 1 单步调试时处理器发出的中断
08H 2H 2 非屏蔽中断
0CH 3H 3 调试程序设置断点时处理器发出的中断
10H 4H 4 发生算术溢出时处理器发出的中断
14H 5H 5 调用BIOS的屏幕拷贝操作
18-1FH 6-7H 6-7 保留单元
20H 8H 8 每1/18.2秒定时器发出的中断
24H 9H 9 按压或释放键时产生的中断
28H 0AH 10 保留单元
2CH 0BH 11 通讯设备使用的硬件中断
30H 0CH 12 通讯设备使用的硬件中断
34H 0DH 13 交替打印时硬件产生的中断
38H 0EH 14 软驱操作结束时产生的硬件中断
3CH 0FH 15 打印机发出警告信号时产生的硬件中断
40H 10H 16 BIOS的显示I/O功能调用
44H 11H 17 BIOS设备确认调用
48H 12H 18 BIOS确认内存空间大小的功能调用
4CH 13H 19 BOIS的磁盘I/O功能调用
50H 14H 20 BIOS的RS-232串行I/O功能调用
54H 15H 21 在PC和XT机上是BIOS磁带I/O功能调用。在AT机上是AT扩充服务功能调用。
58H 16H 22 BIOS的键盘I/O功能调用
5CH 17H 23 BIOS的打印机I/O功能调用
60H 18H 24 ROM的BASIC解释和程序功能调用
64H 19H 25 BIOS的装载引导服务调用
68H 1AH 26 BIOS的日期时钟功能调用
6CH 1BH 27 Ctrl+Break处理程序功能调用。当键入Ctrl+Break键时指向可执行的程序入口初 始化BIOS使该向量指向一条TRET指令。用户可修改该向量,使它指向自己的程序。
70H 1CH 28 指向每1/18.2秒时可执行的服务程序的入口。初始化时该向量指向一条IRET指令。用户可修 改该向量,使它指向自己的Ctrl+Break 处理程序。
74H 1DH 29 指向显示控制器初始化参数。BIOS使这个向量指向ROM驻留表。
78H 1EH 30 指向软盘参数表。BIOS使这个向量指向ROM 驻留表,但是DOS把它改为指向DOS的RAM 驻留表。
7CH 1FH 31 指向一点阵表。在这个表中,BIOS可以找到字符集后128个字符的点阵
80H 20H 32 终止程序的DOS功能调用
84H 21H 33 任何种DOS功能调用
88H 22H 34 指向DOS的结束地址
8CH 23H 35 指向D
OS的Ctrl+Break处理程序
90H 24H 36 指向DOS的严重错误处理程序
94H 25H 37 DOS绝对磁盘读调用
98H 26H 38 DOS绝对磁盘写调用
9CH 27H 39 程序终止,但仍驻留内存的DOS功能调用
9DH 28H 40 DOS空闲
9EH 29H 41 支持驱动器程序输出
9FH-A1H 2AH-2CH 42-44 保留单元
A2H 2DH 45 DOS构件接口
A3H 2EH 46 COMMAND.COM退回入口
A4H 2FH 47 多路中断(空闲信号)
A5-FFH 30-3FH 48-63 为DOS保留的单元
100H 40H 64 保留单元
104H 41H 65 指向硬盘0的参数表,BOIS使这个向量指向ROM驻留的表。
108-10FH 42-43H 66-67 保留单元
110H 44H 68 PC机使用,用于指向低分辩率图形字符参数表
114H 45H 69 保留单元
118H 46H 70 指向硬盘1的参数表,BIOS使这个向量指向 ROM驻留的表。
11CH 47H 71 保留单元
120H 48H 72 PC机使用,用于把PC机的键盘代码变换为标准的键盘代码。
124H 49H 73 指向键盘增强服务变换表
128-17FH 4A-5FH 74-95 保留单元
180-19FH 60-67H 96-103 为用户程序保留的单元
1A0-1BFH 68-6FH 104-111 未使用
1C0H 70H 112 硬件中断(IRQ–interrupt request) 8–实时时钟中断
1C4H 71H 113 硬件中断9
1C8H 72H 114 硬件中断10
1CCH 73H 115 硬件中断11
1D0H 74H 116 硬件中断12
1D4H 75H 117 硬件中断13–BIOS把这个中断向量重定向为非屏蔽中断(NMI)
1D8H 76H 118 硬件中断14
1DCH 77H 119 硬件中断15
1E0-1FFH 78-7FH 120-127 未使用
200-217H 80-85H 128-133 为BASIC保留
218-3C3H 86-F0H 134-240 BASIC程序运行时提供给BASIC解释程序作用
3C4-#FFH F1-FFH 241-255 未作用
发个牢骚吧 全文阅读...

有一种爱叫痛 有一种爱叫放手

时间:Apr.15, 2005 | 分类: 未分类

有一种爱很凄迷,有一种爱只能远望,有一种爱注定成传奇…….
 有一种爱叫做痛,痛得心脏起了褶子,痛得头脑空洞无物,痛得意志麻木萧瑟……
 有一种爱叫放弃,明知道许多事情是没有答案的,却想寻找一个答案,真的好累……
 有一种爱叫忍让,忍让也是一种爱,以爱的方式善待对方的缺陷,用包容的胸怀宽恕自己的爱人,给他一个悔悟的机会留一个自省的空间于平平淡淡中演绎经典,在无声无语中融洽恩爱.这样即使是不传奇的爱情也将变得永恒,再平淡的婚姻,依然一如既往令人留连.
有一种爱,叫放手.曾经天真的以为不管时间和空间的距离有多长多远,感情一定会恒久不变,因为爱是没有理由的……
 爱不能成为牵绊,所以要选择放手,从容的让彼此走彼此的世界,凡事到极至,伤也会痛.其实爱过就会懂,彼此个性的太过坚强终究会是一起生活的阴影。
 昨日的幸福以成为一种痕迹,两人能携手走完整人生固然很好,可陪上了一段也应心存感激了.
 爱一个人不是要成为所爱人的牵绊,只要心中有爱,生活总是那么美好!
 相距是一种缘,相识,相恋更是一种缘分,缘起而聚,缘尽而散,放手才是真爱.有一种爱叫放手!
 有一种爱,叫离开,曾经以为自己的爱情能够长久,曾经以为真心的付出就能换来幸福,其实错了……
 爱情给的唯一的东西就是背叛,无情的背叛!曾经是那么相爱的两个人,转眼陌路,留下的是残缺不全的记忆和心痛.
 没有想到结局会是这样,曾经的山盟海誓,曾经的天长地久,转眼都成了飞灰。
 经常惊醒于午夜梦回的黑暗中,我的心都好痛,我思念一个人的疼痛,看着空中的星星,想着远方属于你的夜,你还好吗?一直都快乐吗?没有我在你身边是不是有另外一个人去关心你,爱你呢?
 我现在唯一的愿望只是希望再见你一面,但我又怕见你,怕见到你,我的心又会再一次的被捏碎.我只有对自己说不要再去想他,不要再想了,虽然他的影子从未离开过。
生活还是要过的,其实有种爱叫离开,再见了,我的爱人……
 有一种爱,我们不能称之为爱情,虽然有同样的心动,同样的怀想,同样乍然相见的喜悦,依依不舍的眷恋,但世间总有一种约束,让心思沉静,让感情不再漂泊,依然可以在午夜梦回事心生柔情,依然可以相信自己的完美与可爱,在这些温柔的情愫里。
  有一种爱,可以默默的爱,默默的理解,默默的在心里装满祝福,挥一挥手,让春草缠绵,落江成阵,就是有这样的感情啊!飘荡成缠绵而温暖的空气,就是在这样 无心的眷恋里,我们认识自己也认识世间,就是有这样无缘而有情的瞬间,让我们轻轻的叹息,深深的爱,虽然我们相爱,但不能称之为爱情,多想让爱发出声响 啊!可那是一种毁灭,善良绝对不允许这样,多想让爱明白啊!可怎么人心看着爱有为难,感情也不能饶恕爱的胡来。
 就这样默默的去爱,永远放在心头来爱;当风吹来的时候,就让湖水激动地涌出堤岸,一点点就已经足够了,就象喝第一口茶水,才能品出味道.只要轻盈的湖水永远不下沉,只要坚固的堤岸永远拦得住湖水,相信湖水总是会泛出激情,堤岸也总是能感到坚强。
 有一种爱,永远难以启齿,可这种爱情来得持久,来得绝美……

发个牢骚吧 全文阅读...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!