Author Archives: verynix

Page 5 of 21« First...34567...1020...Last »

推荐一些实现操作系统内核有用的书籍或资料

Table of Contents

1 前言

自己本科的毕业设计是实现一个简单的操作系统内核,但是由于时间原因,只完成了一点点,包括引导加载程序,异常处理;当时考虑到大二大三自己的底层知识基础打得不好,再加上目前用C实现的内核是在太多了,要从头实现肯定会有抄袭的痕迹,所以打算完全用x86汇编语言实现,编译器用NASM,实现完之后确实汇编的东西基本的东西都捡回来了;在这里我整理一下自己实现这个内核过程中参考过的书籍、资料或者文献,希望对大家有所帮助。

2 一、x86汇编语言

虽然现在很少有使用汇编语言的场合,即使有,也尽量会被C取代,但是掌握汇编语言对于理解CPU和一些接口的工作原理至关重要。

intel cpu的官方手册,这手册是特别重要的,实现操作系统一定要看,特别是这几章节:卷1的第三章,主要讲intel cpu的程序运行环境,包括所有的寄存器,内存组织,堆栈结构等等;卷1的第六章,函数的调用过程,还有几个相关的重要指令、堆栈环境以及相关寄存器等等;卷3的第三章,主要讲解地址空间,重要;卷3的第四章,分页模式;卷3的第五章,保护模式,包括类型检查,越界检查以及特权级检查等;卷3的第六章,讲解异常处理;卷3的第七章,主要讲解任务,包括任务的数据结构、切换以及连接等;

  • 2.(美)Barry B.Brey.intel微处理器[M].北京:机械工业出版社,2008.

这本书我只看了一点,主要参考了一些指令,还有对选择子和描述符的讲解;

  • 3.Jeff Duntemann.Assembly Language Step-by-Step[M].美国:Wiley,2009.

这本书是为数不多的以NASM来讲解x86汇编语言的,而且讲得很详细,没有汇编语言的知识也能读懂,强烈推荐当做nasm的入门教材;

  • 4.吕晓庆.80386/486系统编程实践[M].浙江:浙江大学出版社,1993.

这本书很古老很古老了,找不到电子书,我是去我们学校的另一个校区的图书馆里面才找到的这本书,里面提供了很多关于保护模式编程的具体例子,用来理解intel cpu官方手册的绝佳教材,强烈推荐;

  • 5.罗克露 等编.计算机组成原理[M].北京:电子工业出版社,2004.

这本书是我们大二计算机组成原理课程的教材,主要用来复习一下微机接口的知识;

  • 6.谭毓安,张雪兰,李元章.Windows汇编语言程序设计实验指导[M].北京:清华大学出版社,2008.

当时我看intel cpu手册的时候,对卷3中的大部分内容理解得不是很透彻,通过这本书里面几个关于保护模式编程的例子,一下子就豁然开朗了好多,非常推荐配合intel cpu手册看的一本书;

  • 7.熊桂喜,赵海.PC机各类显示系统的编程及应用[M].北京:清华大学出版社,1992.

这也是一本很古老很古老的书籍,主要用来理解vga显示器编程的书籍,很好很强大;

  • 8.赵国相,张健,赵大鹏等.微型计算机原理与汇编语言程序设计[M].北京:科学出版社,2004.
  • 9.赵国相,于秀峰.微型计算机原理与接口技术[M].北京:科学出版社,2003.

这两本书是我们大三微机接口原理的课本,不推荐看,写得比较烂,而且还是实模式的讲解,太落后了,也是主要用来温习微机接口的知识;

3 二、操作系统理论及实现

  • 1.赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006

这本书的作者赵炯博士对linux的内核是非常熟悉的,是一位博士,国内市面上唯一对linux 0.12内核作出透彻剖析的一本书,非常强烈推荐,我就是通过这本书才知道怎么写cpu第0号到第20号的异常处理,当然,由于时间原因,我只看了前面几章,非常遗憾;书的开头有句非常经典的话:Read The F***ing Source Code;

  • 2.(荷)Andrew S.Tanenbaum.现代操作系统(英文影印版.第3版)[M].北京:机械工业出版社,2009.

这是荷兰科学家Tanenbaum写的操作系统理论教材;

  • 3.(美)ANDREW S.TANENBAUM,(美)ALBERT S.WOODHULL.操作系统设计与实现(第3版)[M].北京:清华大学出版社,2008.

这也是AST写的书,其实是Minix 3的最全面的手册,minix 是一个非常优秀的、适合学习操作系统实现的、但是内核代码量不是很大的操作系统,如果要想实现一个比较实际的、能跑起来的操作系统内核,建议好好研读minix的源代码和这本书;

  • 4.(美)Marshall Kirk McKusick,(美)George V. Neville-Neil.FreeBSD操作系统设计与实现[M].北京:中国电力出版社,2008.

这本书从一个比较高的角度分析FreeBSD操作系统的架构,里面的代码很少,主要讲OS的数据结构以及这些数据结构之间的联系;

  • 5.Behrouz A. Forouzan With Sophia Chung Fegan.计算机科学基础–从数据操纵到计算理论(英文影印版)[M].北京:高等教育出版社,2007.

这本书比较基础,讲一些很底层的运算和对计算机各个方面进行简单的入门介绍;

  • 6.John R. Levine.Linkers and Loaders[M].美国:Morgan Kaufmann,1999.

这本书是唯一一本讲解连接器和加载器的著作,非常难以理解,推荐;

  • 7.Maurice J.Bach.UNIX操作系统设计[M].北京:机械工业出版社,2006.

这本书是类似于上面介绍的那本freebsd的书,也是从一个很高的角度介绍unix的架构;

+8.Randal E. Bryant,David R. O’Hallaron.Computer Systems:A Programmer’s Perspective (2nd Edition)[M].美国:Addison Wesley,2010.
这本书强烈推荐,里面讲解程序的链接和装载过程非常精彩,让我深刻理解了动态链接过程;

  • 9.于渊.Orange’s:一个操作系统的实现[M].北京:电子工业出版社,2009.

对于这本书的推荐,我是有所保留的,网上书评也给得挺高,大一大二的时候翻过这本书,曾经很冲动的想自己写个内核;作者自己实现了一个内核orange,讲得非常详细,贴了挺多代码,希望只有一点C语言基础的读者通过阅读他的书籍就能实现自己的OS,个人认为有些时候好心办坏事,好多地方讲得有点罗嗦,结果很多读者因为没有具备相应的知识只有囫囵吞枣,照着他的代码敲一遍,当然这也是一种学习方法,不过我觉得读者应该具备相应的知识再去阅读此书,不要连汇编语言都不会使就去阅读,否则碰到不会知识的时候,像书中序言所说的那样,学到再用,又得去翻其他的书籍,理解之后又回来看,来来回回折腾会需要更多的时间去理解这个内核的整体性,我希望读者具有足够的知识的时候再去阅读就能够理解书中的大部分内容,如果要阅读源代码,还是推荐linux 0.12和minix的代码,对理解实现很有帮助,本书的作者也是参考minix的代码,书中的很多地方有很深的模仿minix痕迹;当然,我没有看完这本书,只看了前几章,个人愚见,如有不妥,欢迎拍砖;

  • 10.俞甲子,石凡,潘爱民.程序员的自我修养–副标题: 链接、装载与库[M].北京:电子工业出版社,2009.

这本书也比较深奥,讲解连接器和装载器的入门书籍,作者的内功很深厚,推荐;

这个链接是博主实现操作系统内核的一个博客,要很好地理解intel卷3的内容,推荐阅读这里的代码;

评论同上。

这个链接讲解ELF的文件格式,浅显易懂;

ELF文件格式

这个网站是操作系统内核开发爱好者聚集的社区,它的维基页面有很多入门的资料和文献,强烈推荐;

4 三、工具

  • 1.Richard M. Stallman,Roland McGrath,Paul D. Smith.GNU Make[M].美国:Free Software Foundation,2004.

GNU make 的官方手册

  • 2.《GNU Make项目管理》(Managing projects with GNU Make)

Oreilly介绍gnu make的动物书,有很多gnu make的语法例子,强烈推荐;

  • 3.uClinux源代码中Make文件完全解析

详细讲解uClinux makefile的书籍,和上面一本书作为学习写makefile的绝佳书籍组合,如有疑问,可配合gnu make的官方手册查看;

  • 4.鸟哥.鸟哥的Linux私房菜 基础学习篇(第二版)[M].北京:人民邮电出版社,2007.

linux基础,命令,工具链啊,什么的;

NASM的官方手册,NASM的宏很强大,请仔细学习手册里面的宏的用法;

bochs模拟器的用户手册;

晦涩难懂的AT&T语法的gnu汇编器的官方手册

这本书是gnu ld连接器的手册。

以上书籍的电子书在网上基本都能找到,一些国内的书找不到,只能到图书馆里面翻,有的链接可能已经失效,如果这样,请自行Google之。

Date: 2012-11-27T04:06-0500

Author: User

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0

 

整理工作中经常用到的一些freebsd命令或者技巧











这里整理一下平日工作中经常用到的一些unix命令,这些命令不是大全,如果你有这样的目的,请看相关手册;因为平台是FreeBSD,所以一些配置文件可能只是它独有的,这篇日志会经常更新。

1.cmd

1.1 chsh -s /usr/local/bin/bash

修改默认shell(FreeBSD),确保你的shell程序路径在/etc/shells中,例如,如果你要把你的shell设置为你默认的shell,示例:

# $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/bash
/usr/local/bin/rbash

1.2 fsck -y

磁盘出问题,用fsck修复的时候,会经常询问你是否需要SAVEGE?如果时间长的话,每次都敲YES确认是一件效率很低下的事情,用-y选项让它自动yes;

1.3 call cpureset()

用kgdb调试内核的时候,用这个键进行软重启,这样就不用每次都去手动按那颗重启键了;

1.4 arp -d -a

这条命令是清空freebsd的arp缓存;

1.5 sockstat -4

这条命令用来查看哪个应用程序占用了哪个端口。比如说安装apache的时候,如果出现无法启动、提示端口被占用的错误,就可以用这条命令查看哪个应用程序占用对应端口了;

1.6 netstat -r

用来查看路由表信息

1.7 route add …

用来添加静态路由,具体格式请看手册页面。例子:
添加一条到主机192.168.0.21的路由192.168.0.11:

route add -host 192.168.0.21 192.168.0.11
route add -inet 192.168.1.0 255.255.255.0 172.168.0.1

添加到网段的路由:
ipv6的话,需要添加-inet6选项,例如:

route add -inet6 -host 2012:2013::192:168:0:1

对应的route del也需要-inet6选项

1.8 sh /etc/rc

修改/etc/rc.conf之后,小白经常不知道怎么让它马上生效,最2的办法就是重启系统,这条命令就是用来让修改生效的;

1.9 修改、添加或者删除ip地址,我一般是修改/etc/rc.conf,然后执行第9条命令,格式请看手册,例子:

ifconfigem0=”inet 10.8.1.75 netmask 255.255.255.0″
ifconfigem0alias0=”inet 192.168.0.5 netmask 255.255.255.0″

1.10 /var/tmp/vi.recover

开机启动FreeBSD,有时候会在这行 Recovering vi editor sessions 停住挺长时间,删除这个目录就能解决 /var/tmp/vi.recover

2.Reference

这篇文章会定期更新,更多详细内容请看freebsd的手册:
<a href=”http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/“>http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/</a>

Date: 2013-01-08

Author: User

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0


http请求中的via头可能会影响iis6 web服务器的压缩行为

哎,终于更新博客了,这是在大猫那边买空间之后为数不多的文章之一;工作之后发现时间真的是越来越紧张,不像在学校那样时间宽裕,又想念学校生活了。。几个月之前就想更新,学习、加班什么乱七八糟的事耽误着,总让人有种心有余力不足的感觉,差不多空间又要续费了,再不更新资源严重浪费了。

今天记录一下工作中修bug中遇到的一个技术问题,主要是http的via头会影响iis6 web服务器的默认压缩行为;更具体一点,就是如果请求中有via头,并且希望得到压缩内容,也就是”Accept-Encoding”头中的含有有效压缩字符,如”Accept-Encoding: gzip”,那么iis6服务器默认情况下是不回复压缩的内容;因为iis6服务器认为,含有via头的http请求来自代理服务器,它们不能很好的处理有编码的内容;确实是这样,最近修了公司产品几个关于压缩的bug。

我们举例子来理解它的行为:

1.环境:iis6服务器,我用windows 2003装的iis6;任何能发送含有via头请求的浏览器,我用telnet,非常简单但是非常强大;如下图所示。

有via,没压缩内容

没via头,有压缩内容

 

2.分别发送含有via头的请求和没有via头的请求,我们发现,来自iis6服务器的内容不一样。原因上面已经提及。那么,如何解决?简单,在请求中屏蔽via头,还有一个办法,调整iis6的一个参数,就能让它回复含有编码的内容给含有via头的请求:在配置文件中,C:\WINDOWS\system32\inetsrv\MetaBase.xml,把变量HcNoCompressionForProxies的值变为FALSE;这样,就能收到压缩编码了。如下图:

有via,有压缩

vmware bridged 桥接模式无法上网,也无法ping通其他主机

折腾vmware折腾了一天半,真郁闷。原来用的是bridged桥接模式能正常上网,但是不知道什么非人为的原因,突然上不了网了,一起之下把之前已经装好的虚拟机环境都删了,那个气氛啊。vmware workstation和vmware player来来回回不知道重新装了几遍,还是解决不了问题,那个郁闷之极。

最后还是Google。这篇博客帮了大忙:http://blog.21ic.com/user1/5809/archives/2009/60113.html

猜测是桥接的时候初的问题,结果打开网络编辑器,让桥接方式选择物理网卡,果然,能ping通了。之前桥接模式让vmware自动选择网卡的时候,估计它没有选择正确的网卡,因为我安装了loopback,virtualbox,还有vpn的虚拟网卡。如下图所示:

我的所有网卡

解决办法:

1.打开vmware的网卡编辑器:

2.选择你的物理网卡:

 我的物理网卡是Intel(R)……

FreeBSD 源代码安装samba服务器

关于samba的知识,这里不介绍,请参考维基百科:

http://en.wikipedia.org/wiki/Samba_(software)

http://zh.wikipedia.org/wiki/Samba

 

这里以安装比较稳定的版本3.0.37为例。

1.下载源代码

http://ftp.samba.org/pub/samba/

 

2.解压:tar xvfz samba-3.0.37.tar.gz

3.cd samba-3.0.37/source

4../configure

5.make

6.make install(需要root 权限)

7.配置samba

(1)编辑/etc/inetd.conf文件(需要root权限)

  netbios-ssn stream tcp nowait root /usr/local/samba/sbin/smbd smbd
   netbios-ns dgram udp wait root /usr/local/samba/sbin/nmbd nmbd
   swat stream tcp nowait.400 root /usr/local/samba/sbin/swat swat
注意路径
(2)拷贝配置文件:

cp samba-3.0.37/examples/smb.conf.default /usr/local/samba/lib/smb.conf
(3)编辑配置文件:
security = share
 hosts allow = 192.168.0.1   《—-允许访问的ip地址列表
guest account = root
定义访问的规则
[policy]
   path = /home/……
   public = yes
#   only guest = yes
   writable = yes
   printable = no

图解FreeBSD 7.0使用ports安装samba服务器

1.cd /usr/ports/net/samba34;

2.切换到root用户;

3.make install clean;

4.出现这样的编译选项:

选择需要的编译选项,一般默认就行。然后按:O,注意,不是0

5.配置samba

(1)/etc/inetd.conf 文件

去掉以下三行注释

netbios-ssn stream tcp nowait root /usr/local/samba/sbin/smbd smbd
   netbios-ns dgram udp wait root /usr/local/samba/sbin/nmbd nmbd
   swat stream tcp nowait.400 root /usr/local/samba/sbin/swat swat
(2)samba的配置文件smb.conf:
cp /usr/local/share/examples/samba34/smb.conf.default /usr/local/etc/smb.conf
需要root 权限
配置 smb.conf
更改这几行:

security = share   <—
hosts allow = 192.168.0.2  <—添写哪些IP可以访问samba服务器
guest account = root <–一般用root
然后就添加访问文件夹
[src_policy]
   path = /home/…..   <—允许访问的路径                 
   public = yes    
#   only guest = yes
   writable = yes
   printable = no
(3)启动samba:

/usr/local/etc/rc.d/samba start

(3)更多详细信息请参考FreeBSD的手册:

答辩结束了,有点离别的伤感

今天答辩结束,答辩倒不是重点,重点是”舍不得”,舍不得大学生活,舍不得自由的感觉,舍不得学生生活,舍不得小协,舍不得5108…….又婆妈了……

总喜欢回忆,回忆让人幸福,虽然有点善感,可能是长大之后心灵深处的一个庇护处吧.

吉大,真好,校园这么大,这么美,其实还真是没认真花一次时间逛校园,什么五月花啊,数学楼啊,化学国家重点实验室啊,标志..北京没几所高校的校园比吉大好,就连那几所非常著名的大学都不例外,经理来招聘的时候说,”吉大真奢侈,这么多的草地绿化带”.哎,生在福中不知福.有一次从东门回来,还专门饶过正道,特意在东融大厦旁边的那条小道走走,微风吹吹,感受春的气息,不错,绿化真是不错.

行政楼旁边的篮球场,大一入学的时候就是去那里打的篮球,刚到前几天还真是不敢往里走,真会迷路.当时的后来啊,去了计算机学院取包裹,正好碰到计算机学院的师哥要去大学城招纳新生,屁颠屁颠跟着过去,走了半个小时,我问师哥:师哥,大学城到底在哪啊?……

倚澜观邸,很不错的小区,真适合养生,安静,空气还好,总比市中心好吧.重点是莎士比亚景观大道,修了两年才修好,真是的.大二的时候泥土溅得全身都是.

体育馆,迪克牛仔来过,当时去听了,那个激动啊,给全班的同学都发了一遍短信,要是beyond来了还不得当场哭得一塌糊涂啊.还有小协,经常在那里活动,场地在熟悉不过了.

冰场,哎,遗憾,没机会滑了,真是很喜欢滑冰,为什么一个学期的时间没学会呢?

体育场,好宽的地方,夏天的时候好喜欢去那跑跑,也是给我自信的地方,长跑的一幕记忆犹新,真希望以后想到体育场的时候,还在坚持锻炼身体.

新食堂,经常去那里吃饭,一楼的饭菜没有吃完,二楼的饭菜倒是吃了无数遍.莘子园,大一之后就很少去那里了.B食堂,可惜啊,印象中就只在那里吃过几个烤饼,味道不错.

计算机学院,计院,青色的外观让人给起了个外号:青楼.真巧,为什么会是青色的呢.

图书馆,真是好地方啊,外观这么豪华,里面学习氛围这么好,留恋忘返啊.主要是,好多好多好书啊!!!可是大三的时候书多起来了.三楼的桌子和凳子都被搬出来了,看书真不方便,还得外借.最遗憾的是,有一本好书没看完就得还了.

在网上搜了几首离别诗,贴在这里,用别人的话语来抒发抒发自己的内心感受.也送给那些即将离校的同学们.

又一季

栀子花的盛开
缤纷了青春的色彩
羞涩的我们
却在
这个灿烂的季节
难舍又难分
犹记得
曾在许愿树下的约定
那么清澈,那么纯洁
你那真诚的笑脸
绽放在我的心间
天空中一道灿烂的弧线
划破了快乐的瞬间
我们将匆匆的离别
品尝着
友谊醉人的芬芳
回忆起
我们那段清纯的时光
站在离别的路口
我擦干了眼泪
挥了挥手

离别

不愿你走,时间为我停留;
思绪如依依拂柳,荡漾我心头。
不愿你走,爱恨亦悠悠,情如梦镜般神游。
别离,往事依旧;
别离,故人挥手;
别离,夕阳映映;
别离,落红亦悲愁。
相约黄昏后,心要走,人难留。
挥泪饮苦酒,豪情溢觥筹,泪洗眼,何须问原由?


-顾程

在春天
你把手帕轻挥
是让我远去
还是马上返回

不,什么也不是
什么也不因为
就像水中的落花
就像花上的露水

只有影子懂得
只有风能体会
只有叹息掠起的彩蝶
还在心花中纷飞…….

送别

偶然的我们相遇
变成了忘年知已
同耽心共忧虑
带给我友情的温馨
纵然你将远去异域
友谊相系暖自我心底
纵然你将离我远去
友谊相系你我心底
我在这默默祝福你
祝福你能有好运气
娶一个贤德的妻
帮助你奠定事业基
没有什么好送给你
送你一首自己谱的曲
陪你远渡太平洋
做为一份祝福的礼

送元二使安西
王维

渭城朝雨浥轻尘,
客舍青青柳色新。
劝君更尽一杯酒,
西出阳关无故人。

雨霖铃
柳永

念去去,千里烟波,暮霭沉沉楚天阔。
(下阕)
多情自古伤离别,更那堪,冷落清秋节。今宵酒醒何处?杨柳岸,晓风残月。此去经年,应是良辰好景虚设。便纵有千种风情,更与何人说?

Page 5 of 21« First...34567...1020...Last »