操作系统执行两个相对独立的任务:1)扩展机器 2)管理资源。一般程序员并不想涉足硬件编程的具体细节,程序员需要的是一种简单的,高度抽象的处理。在磁盘的情况下,典型的朝向是包括一组已经命名文件的一个磁盘。每个文件可以被打开或读写,然后读写完毕,最后被关闭。诸如记录是否应该使用修整的调频记录方式,以及当前电机的状态等细节,不应该不出现在提供给用户的抽象描述中。于是,操作系统为程序员隐藏硬件的实际细节,并提供一个可读写的,简洁的命名文件视图。它屏蔽了磁盘硬件,并提供了一个简单的,面向文件的接口,操作系统还隐藏了大量与中断,定时器,存储管理以及其它与低层特征有关的细节。无论在哪种情况下,操作系统索提供的抽象都比底层硬件所能提供的更简单和更易于使用。从上述角度看,操作系统的作用是为用户提供一台等价的扩展机器(extend machine)或称为虚拟机(virtual machine),它比底层硬件更容易编程。概括来说,操作系统提供各种类型的服务,程序可以通过使用称为系统调用的特殊指令来得到这些服务。
上面把操作系统作看作向用户提供基本方便接口的概念,是一种从上而下的观点。按照另一种从下而上的观点,操作系统则用来管理一个复杂系统的各个部分。现代计算机包括诸多硬件设备,操作系统的任务就是在相互竞争的程序之间有序的控地控制对处理器,存储器以及其他I/O设备的分配。当一个计算机(或网络)有多个用户时,管理和保护存储器,I/O设备以及其他资源的需求变得强烈起来,因为用户可能互相干扰。另外,用户通常不仅共享硬件,还要共享信息(文件/数据库)。简而言之,操作系统的这一种观点认为,其主要任务是1)记录使用资源的情况,2)对资源请求进行授权,3)计算使用费用,4)为不同的程序和用户协调互相冲突的资源请求。
资源管理包括以下两种方式实现复用(共享)资源: 在时间上复用或在空间上复用。当一种资源在时间上复用时,不同的程序或用户轮流使用它。先是第一个获得资源的使用,然后下一个,以此类推。这方面的典型例子是处理器和打印机。当一种资源在空间上复用时,每个顾客都得到资源的一个小部分,从而取代了顾客排队。例如,通常在若干运行程序之间分割主存,这样每一个运行程序都可以同时驻留在内存。假设有足够的内存可以存放多个程序,那么在内存中同时存放多个程序的效率,比把所有的内存分配给一个程序的效率要高很多,尤其是一个程序只需要内存中一小部分的时候。当然,如此的做法会引起公平,保护等问题,这都有赖于操作系统去解决。
写到这里,我想起前些天看的《大明王朝1566》中的明朝内阁。如果把嘉靖皇帝看做是用户,百官臣民看做是底层各类硬件,那么内阁就有类似操作系统的作用。首先从用户态,就是从嘉靖的观点来看,管理内阁的几位大臣,远远比直接管理明朝两京一十三省的官民要容易。这些大臣就如同系统中的各项服务,皇帝可以用圣旨(系统调用)的方式来要求各项服务。对付皇帝而言,内阁就是所有资源的缩影(虚拟机),是方便统治的工具。那么从硬件态,即从普通官民的观点来看,内阁必须要处理好各个地方的资源计划及调配,解决各类争抢的冲突。为了达到这样的目的,在资源分配方面(用人)就因人而异: 比如海瑞这样清廉正直的官员,哪个地方问题比较严重,就派到哪里。问题解决后,再去其他的地方,这是时间上的复用;又比如有一个总督,他的工作就是处理各地的公文。这些公文由各地先呈报给总督的文书,然后文书再转交给总督。假设总督是处理器,那么文书类似于内存的作用。如果文书规定每天只收一个县或一个州的公文,那么就要乱套了;文书只能尽可能多的收集起来,请总督批阅,当然,如果这个文书做的好,他甚至可以帮助总督排好事情的优先级再送呈。总督不一定能在当天批阅完所有的公文,但是比起每天只批阅一个县的公文,(处理器)效率何止提高了百倍。这就是文书的空间复用。看来,历史知道多了,对于再次深入了解计算机系统也是颇有好处的。
计算机配置了一个称为操作系统的软件层,它的任务是(1)管理所有的硬件设备,(2)并为用户程序提供一个较为简单的到硬件的接口。计算机系统可划分为硬件(物理设备-微体系结构-机器语言)和软件(操作系统-系统程序-应用程序)两大部分。最底层的是物理设备,包括集成电路芯片、连线、电源、阴极射线管以及类似的设备。接着是微体系结构层,其中的物理设备分组构成了不同的功能单元。在这层中有CPU的专用寄存器以及包括算术逻辑单元的数据通道。在每个时钟周期,CPU从寄存器中取出一个或两个操作数,并在算术逻辑单元中进行运算。其结果存储在一个或多个寄存器中。在有些机器中,数据通道的操作由称为微程序的软件控制,在另外一些机器中,相关的操作由硬件电路直接控制。
设立数据通道的目的是执行某些指令集。相关的硬件以及对汇编语言程序员可见的指令,构成了指令集体系结构(Instruction Set Architecture,ISA)层,这一层被称为机器语言。典型的机器语言有50-300条指令,大多数指令在机器里从事数据传送、算术运算和值比较的操作。在这个层次上,可以通过向特定的设备寄存器(Device Register)写入值来控制对应的I/O设备。
为了隐藏设备操作的复杂性,使用了操作系统。操作系统包括一个专门隐藏这些硬件的软件层,并且给程序员提供一个使用更为便利的指令集。在操作系统的顶层是其他系统软件,其中有命令解释器(Shell),编译器,编辑器以及类似的独立于应用的程序。重要的是,尽管这些程序通常由计算机厂商提供,但是它们本身并不是操作系统的组成部分。这一点很重要,也很微妙。操作系统通常是专指在核心态(Kernel Mode)或管态(Supervisor Mode)下运行的软件,它受到硬件保护以免遭到用户的修改。编辑器和编译器运行在用户态(User Mode)下。用户可以重新一个编译器,但是他无法自行编写一个时钟中断处理程序,因为这是操作系统的一部分,它通常由硬件保护,以防止用户试图对它进行修改。然而这一区分在嵌入式系统(没有核心态)和解释系统(基于Java的操作系统,它采用解释的方式而非硬件方式区分组件)中是模糊的,它只在传统模式的计算机系统中适用。(注:JNode是目前较为常见的一个Java操作系统)。最后,在系统程序的上层是应用程序。这些程序是用户买来或自行编写的,用于解决用户的问题。如文字处理,工程计算。
新浪(sina)的共享文件(ishare)中有不少比较好的书籍和资料。经过两天研究,我找到一个进行批量下载的方法。最初的思路是找到每个文件的下载链接进行操作,所有的编码和测试工作都是在Ubuntu 10.04下进行的,脚本语言为Perl ,Web浏览器为Chrome。首先对ishare下载页面进行分析,发现这些链接中部分可以使用wget在命令行模式中下载,而更多的被服务器拒绝访问。随后我通过Chrome Dev模式对页面中的JS进行再次分析,发现下载路径被PHP加密无法直接获取,于是决定放弃这种通过源路径下载的方法。有一句Perl名言, “there’s more than one way to do it”。重新对命题进行分析:找到所需下载的文件页面链接,在上述页面中启动下载任务。第一点很容易通过Perl脚本和w3m浏览器实现,关于第二点,上面已经测试了根据源代码使用wget在命令行模式下载。既然是“启动下载任务”,那么是不是可以考虑鼠标点击直接下载呢? 这种最原始的方法说不定就最实用的方法,至少我不用再去纠缠于JS脚本/Cache/解密路径。于是我在万能的CPAN中找到了强大的X11::GUITest,该模块支持鼠标键盘对图形界面的所有操作。理清问题的解决思路: 取得下载页面列表,使用Chrome依次打开每个页面,在每个页面中捕获下载按钮中心鼠标的二维坐标,将鼠标移至指定位置然后点击开始下载,下载完成后关闭页面。根据这个思路编写脚本(下载),测试通过。需要考虑的几点是浏览器打开网页的速度,需要根据网速,文件的平均大小估计文件下载的时间和系统缓存的处理。基于X11::GUITest功能强大,我认为以后实际生活和工作中可以做在自动化操作。比如测试人员根据测试案例设置流程,剩下的就是检查输出和异常处理了,提高测试效率;甚至可以写一些Web游戏“外挂”(偷菜)或者秒杀购买淘宝上的特价物品。
5月15日 Startup Phillip’s Website
5月18日
- 修改日期参数: 修改the_time参数
- 调整主页css
- 安装wp_recentcomment插件
- 调整sidebar.php中各部分名称及顺序
- 去掉random posts, 改为recent posts
5月19日
- 去掉widget中回复人头像
- 将用户名和发布内容显示为一行
- 在回复内容区域中, 调整时间和增加文字
5月20日
- 页面优化: 使用本地头像取代远程连接获取avatar头像, 平均减少700-750ms响应时间.
- 修改回复栏, 将@author改为对回复帖子的序号.
5月21日 调整侧栏recent post显示摘要内容, 去掉”回复#1楼:”字样
5月26日 将测试域名迁移到www.jikufurito.com
Install mysql in CentOS4.5 as default setting, and later find mysqld does not exist.
[root@perl ~]# service mysqld start
mysqld: unrecognized service
[root@perl ~]# mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
Check the current mysql package:
[root@perl ~]# rpm -qa | grep mysql
libdbi-dbd-mysql-0.6.5-10.RHEL4.1
mysql-4.1.20-2.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
mysql-devel-4.1.20-2.RHEL4.1
The root cause is no mysql-server package installed. Just use yum to install this package:
[root@perl ~]# yum install mysql-server
Setting up Install Process
Setting up repositories
update 100% |=========================| 951 B 00:01
base 100% |=========================| 1.1 kB 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
–> Populating transaction set with selected packages. Please wait.
—> Downloading header for mysql-server to pack into transaction set.
mysql-server-4.1.20-3.RHE 100% |=========================| 30 kB 00:03
—> Package mysql-server.i386 0:4.1.20-3.RHEL4.1.el4_6.1 set to be updated
–> Running transaction check
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
mysql-server i386 4.1.20-3.RHEL4.1.el4_6.1 update 9.8 M
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 9.8 M
Is this ok [y/N]: y
Downloading Packages:
(1/1): mysql-server-4.1.2 100% |=========================| 184 kB 05:42
http://ftp.cs.pu.edu.tw/Linux/CentOS/4.6/updates/i386/RPMS/mysql-server-4.1.20-3.RHEL4.1.el4_6.1.i386.rpm: [Errno 4] Socket Error: timed out
Trying other mirror.
(1/1): mysql-server-4.1.2 100% |=========================| 2.4 MB 03:11
http://ftp.hostrino.com/pub/centos/4.6/updates/i386/RPMS/mysql-server-4.1.20-3.RHEL4.1.el4_6.1.i386.rpm: [Errno 4] Socket Error: timed out
Trying other mirror.
(1/1): mysql-server-4.1.2 100% |=========================| 3.3 MB 02:30
http://ftp.twaren.net/Linux/CentOS/4.6/updates/i386/RPMS/mysql-server-4.1.20-3.RHEL4.1.el4_6.1.i386.rpm: [Errno 4] Socket Error: timed out
Trying other mirror.
(1/1): mysql-server-4.1.2 100% |=========================| 3.4 MB 00:39
http://ftp.stu.edu.tw/Linux/CentOS/4.6/updates/i386/RPMS/mysql-server-4.1.20-3.RHEL4.1.el4_6.1.i386.rpm: [Errno 4] Socket Error: timed out
Trying other mirror.
(1/1): mysql-server-4.1.2 100% |=========================| 9.8 MB 00:09
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: mysql-server ######################### [1/1]
Installed: mysql-server.i386 0:4.1.20-3.RHEL4.1.el4_6.1
Complete!
OK, the mysqld service can be started now.
[root@perl ~]# service mysqld start
Initializing MySQL database: [ OK ]
Starting MySQL: [ OK ]
[root@perl ~]#
Fixed.
My A1200 can not read or create short messages, view address book, and later it displayes “DB Waiting”. I find the solution, backup curent profile,and then “Setting-Clear all setting”. Reboot the phone, it turns well now. Today I have to stay at office and lead the test on 6.0.1 Firmware, while I am not satisfied with some testing engineers’ attitude, they always did not focus on the current job. I can not hold my fury to criticize them directly. These men should not be in my team. As former China coach Milutinovic said: Attitude is everything!
Good site for self-motivation.
http://www.stevepavlina.com/
In slackware12.1, when update the current ATI driver 8.42 to the latest 8.6. I can use the finger-ring on mice now. By the way, after run ATI install scripts, it also should run “aticonfig” to init some parameters. Till now,the screen mess does not happen again.
HDD lost issue was found at May 5th, as Liu Changjing verified the units sent to customer. Later, we tried almost all LSI firmware including original 6.0.1, 8.0.1-0035/38, and even the latest 9.0. While all this versions have various problems: HDD lost during fast initializing and slow initializing, and 9.0 can not recognize attached JBOD device at all. After contact with manufactory, and decided to upgrade from current backplane firmware 2.92 to 2.94, tuning the i-Button parameter(Post Delay =2). Till not, neither of above can resolve this issue as it seems we did not find the root cause.
Shanghai, an important customer need high-performance equipment, including Quad-Core, and 16GB Fully Buffer DIMM, it will encountered unexpected shutdown when load very heavy. Now, we find it is caused by no sufficient power supply. A solution is change the fan boards cables to motherboard, which is now shared from the backplane and harddisk.
I’m very tired during these days, and I know I can not lose confidence by myself: Life is going on, I must fight with my fate.
Fix firefox crash in Slackware 12.1
Error messages:
# firefox
/usr/lib/firefox-2.0.0.14/run-mozilla.sh: line 131: 3048 Segmentation fault “$prog” ${1+”$@”}
Resolution:
This issue is caused by “scim”.
# chmod +x /etc/profile.d/scim.sh
# chmod +x /etc/profile.d/scim.csh
And add a new script “scim_start.sh” to “~/.kde/Autostart” directory:
# cat scim_start.sh
scim -d
It means autostart scim after X start.
Now, firefox return.