May 27
话说今晚用visio 2007画张图,看那两本书看得我是死去活来啊(就是说半途睡着了一次)
一本是《深入理解Linux内核》,一本是《深入理解Linux虚拟内存管理》,书名都差不多,内容也差不多郁闷。

最后理出来这些东西凑进了图里:
init_tast, double circular linked list, process descriptor, mm_struct, pgd, pt, page ...

点击在新窗口中浏览此图片
May 20

新进展:init_task 不指定

felix021 @ 2009-5-20 16:35 [IT » 操作系统] 评论(1) , 引用(0) , 阅读(8096) | Via 本站原创
XenLab项目里我这一块有了新进展:从System.map里面找到了init_task的虚拟地址。

简而言之,init_task就是linux的第一个进程,在载入init以后,它就进入一个无限循环,然后就变成传说中的idle进程。
更详细的内容参考《深入理解Linux内核》等相关资料。

当然,init_task的地址本来是不用费心去找的,如果你写一个内核模块,这个符号是可以直接引用的:
struct task_struct *task = &init_task;

但是我的目标是:从“Linux外”找到这个init_task的地址
因为我是要从Xen虚拟机的Dom0(类似宿主机的概念)去入侵DomU(类似客户机的概念)
找到init_task以后,我们就可以遍历Linux中的所有进程,然后就可以做一些ooxx的事情了。

因为宿主机是无法直接调用客户机的API,自然无法通过上述方式获得init_task地址。
本来是想通过某种方式直接从DomU中找出这个地址,但是毫无头绪
后来发现System.map可以挖出这个地址,虽然这个方法很挫,但是起码可以进行下一步的动作了。
May 13

Ubuntu 9.04入门小结 不指定

felix021 @ 2009-5-13 13:05 [IT » 操作系统] 评论(1) , 引用(0) , 阅读(7834) | Via 本站原创
预计覆盖以下内容:
1。安装基本知识
2。添加源(教育网and电信)
3。完整的中文语言支持(输入法)
4。apt-get基本知识
5。root用户相关
6。nVidia显卡驱动
7。引导相关(Grub,Windows,修复,单用户模式)
8。多媒体相关
9。常用软件推荐

另,发现一篇更全的东西:速配指南
http://wiki.ubuntu.org.cn/index.php?title=%E9%80%9F%E9%85%8D%E6%8C%87%E5%8D%97&variant=zh-cn

-----华丽的分割线-----
Mar 22
看了一个帖子,讨论这个问题的
URL: http://bbs.chinaunix.net/archiver/?tid-1399973.html

第一页4L的说法是正确的,那些的确是滥用管道,不过这个问题放到后面讨论。

感觉第一页末尾beginner-bj的测试方法不很对头,于是自己写了个小程序测试一下:
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char * argv[]){
    char cmd[1024];
    if(argc < 3) {
        printf("Not Enough Parameters.\n");
        return 1;
    }
    int a, b;
    sscanf(argv[1], "%d", &a);
    sscanf(argv[2], "%d", &b);
    sprintf(cmd, "sleep %d | sleep %d", a, b);
    system(cmd);
    return 0;
}


测试结果如下:
引用
felix021@felix021-laptop:~/code$ g++ a.cpp
felix021@felix021-laptop:~/code$ ./a.out 1 2
felix021@felix021-laptop:~/code$ time ./a.out 2 2

real  0m2.035s
user  0m0.000s
sys  0m0.020s
felix021@felix021-laptop:~/code$ time ./a.out 2 3

real  0m3.039s
user  0m0.012s
sys  0m0.016s
felix021@felix021-laptop:~/code$ time ./a.out 4 3

real  0m4.020s
user  0m0.016s
sys  0m0.004s
felix021@felix021-laptop:~/code$ time ./a.out 6 3

real  0m6.034s
user  0m0.004s
sys  0m0.020s


看来管道两头确实是协同工作的(从管道的原理也可以推知)
一头写,一头读,同时处理,这样可以提高CPU的利用率,特别是在多CPU的时候
不过总体来说,我想应该是会多占用一些CPU(进程之间的切换什么的?)。


然后关注一下滥用管道的问题,这个直接引用第二页某楼的vbs100童鞋的大作,应该可以说明问题了:
引用
正确的是
$ grep 'some word' urfile
但是更方便的是
$ <urfile grep 'some word'
这样可方便改 grep 的参数

还有经常用的
$ cat urfile | grep 'some word' | wc -l
其实直接可以用
$ <urfile grep -c 'some word'
Mar 4
ooxx的X3100阿,死活不肯就范。
在Fedora8下面,虽然可以进入X,但是有个ooxx的SELinux,烦死人。
打开包管理器,卸载SELinux,爽,顺便把什么东西都卸掉了, ls 和 init 都不行了,sigh。强制关机。

正好,张文那里用着Debian5,在Dom0下正常。
于是把vmlinuz、initrd、/usr/src/ooxx、/lib/modules/ooxx拷过来
apt-get安装了一个 ubuntu-xen-desktop
然后在/boot/grub/menu.lst里面加了一个title,kernel ,module,module。。。
然后启动:找不到这个和那个。囧。
然后发现是在module /boot/vmlinuz那个地方忘了加上内核参数,没有root=ooxx  =.=
好吧,root=/dev/sda3
启动,哦也,进入了XWindow!声音 网卡都正常,但是Atheros的无线网卡不对劲。
于是重新编译madwifi,make、make install、modprobe ath_pci,重启,还是不行=.=
找了跟网线插上去,也不能上网:网卡被当成网桥了。
brctl delif还是brctl delbr来着,反正删掉了个什么东西,剩下一个peth0,就可以上网了,嗯。

$ xm list
看到dom0,哦也。

然后开始整domU,上网找到一个脚本超赞的,指定一个分区,或者一个文件
它可以自动从源里面下载东西,制作好一个完整的可以作为的domU跑的分区。大约需要400MB空间。

$ dd if=/dev/zero of=ooxx.img bs=1M count=1 seek=1024  #创建一个镜像,当然你也可以用分区,就免掉这一步
$ mkubuntu.sh ooxx.img
等那么一段时间,然后就OK了

然后把脚本输出的东东存为一个xen的配置文件,比如ubuntu.xenrc

$ xm create -c ubuntu.xenrc

然后就看到启动信息拉~
Feb 19
发现以前在Linux下C编程入门里面看到的创建守护进程的办法不够完整,导致做好的东东在路由器的MIPS版Linux下面不能正常在后台运行,一旦退出telnet,进程也就跟着结束了。于是参考这篇文章做出了一个完整的版本,哦也!

zz from http://dev.csdn.net/article/42/42281.shtm

Linux 守护进程的编程方法

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同 Unix环境下守护进程的编程规则并不一致。这需要读者注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将全面介绍Linux下守护进程的编程要点并给出详细实例。

一. 守护进程及其特性
Feb 16
@ 2010-08-20 BS一下不看manpage的自己
引用
$ man sed
...
      -i[SUFFIX], --in-place[=SUFFIX]
              edit files in place (makes backup if extension supplied)
...
也就是说,只需要用 sed -i 就可以直接替换文件中的内容

======以前的分割线======

要用sed批量修改文件的内容,但是用这个命令解决不了问题:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} > {} \;
因为bash把 > 解释为find命令输出的重定向。
修改一下:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} \> {} \;
还是不行,因为 sed 去寻找一个名为 > 的文件进行处理
再修改:
find -name "*.php" -exec "sed -e 's/aaa/bbb/' {} \> {} " \;
还是不行,因为find去找一个名为 "sed -e 's/aaa/bbb/' {} \> {} " 的程序来执行
那是囧之又囧阿。于是去baidu,去google,
但是无论baidu还是google "find -exec 重定向"
都搜不到相应的解决方案,这样的问题居然没有人遇到过?
于是用google搜了一下
引用
linux find using "-exec" sed redirect

搜到了这一页: http://www.loisch.de/linux.html
看来还是国人太ooxx了,sigh。

解决方案其实很简单:绕个弯,把 -exec 的命令给shell来执行
注意:下面的命令一定不要在有用的文件上直接尝试!!!!!!
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;

哦也!没有错误提示了!
然后 ls -al 一下,爽!所有文件大小都变成 0 了!
为什么捏?那篇文章里面解释了:
因为bash检测到需要重定向到那个文件,所以事先把那个文件清空了。
那篇文章里面提到一个修改bash配置的解决方案,但是不通用,建议还是用他说的第二种方案:
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;

嘿,这下爽了!
Tags: ,
Jan 14

Xen 想说爱你不容易 不指定

felix021 @ 2009-1-14 23:55 [IT » 操作系统] 评论(3) , 引用(0) , 阅读(6701) | Via 本站原创
丫的。可恶的Xen。
从前天开始整,试着搭建一个Xen的Dom0。
首先是,Ubuntu 8.10 Intrepid Ibex取消了对Xen Domain0的支持
因为Ubuntu 8.04 Hardy Heron还有,于是试着Vbox里面装
但是总是停在Xen is relinquishing VGA ... 然后vbox就挂掉。
在机器上装,不想刻盘,所以尝试镜像本地安装,但是试了好久就是不对头,没成功。
昨天在实验室,张文说Suse很简单,DVD里直接就有Xen,于是开始装OpenSuse11
好不容易装上去了,结果它进不了X,小黑本来就黑了,还总是给我个全黑的脸色, 也不注意形象, sigh。
然后Google了一下,得知是X3100的问题,这个Bug从2006年10月26日提出
从Egdy到Feisty到Gutsy到Hardy再到Intrepid,硬是没有解决。
不过有人说,Fedora Core 8上面倒是正常。
于是就拿了个FC8的安装盘开始装。
装啊装啊,终于是装上了,进入了Dom0的X Window。
但是因为不习惯Fedora,用起来多处地方习惯不符,并且有些东西还是不对头
于是把FC8的vmlinuz和initrd以及/lib/modules/... cp过去,用它启动Ubuntu
启动是成功了,但是只能待在Single模式下,进不了X,作罢。
于是自己试着编译Kernel,下的是xensource上面的linux-2.6.18-xen的源码, 40+MB
解压以后make menuconfig,然后make,居然提示编译错误
google了一下,才知道是gcc 4.3.3版本太新的缘故,修改了一下Makefile里面的CFLAGS即可
编译完了以后make install,在/boot里面多了几个莫名其妙的文件,是kernel,但是貌似不是支持Xen的
在GRUB里面加了引导选项以后,果然没法启动到Dom0,sigh。。。
于是最后一次尝试,安装阿牛down的VMware 6.5.1 For Linux,在上面安装Ubuntu Hardy
因为在Linux下VMware速度实在太慢,于是切回到XP下面
去down了一个500MB的VMware 6.5.1 for win, 在上面重新安装Hardy
结果发现其实速度和在Linux下面差不多,囧。
安装完 然后apt-get install ubuntu-xen-server,重启,进入XenUbuntu
结果发现启动Xend的时候还是出错,ImportError什么什么ooxx的,于是还是挂掉。
sigh。。。还好还有一个Fedora 8可以先凑合。。。

p.s. 昨天晚上又和那帮家伙们去KTV了,好Happy,阳光钱柜530,夜场, ¥118,猪猪请的。
研一的蜗牛,大四的圆圆,猪猪和他同学,大三的小宝,我,大二的七七,大一的南瓜和星魂。
用我的魔方成功地吸引了眼球,忽悠了蜗牛童鞋,不过正如我信奉的"No B, else P",出问题了
——魔方被他们砸到地上,白色中央的那一片掉下来失踪,找不到了,sigh。变得好丑。
3点睡觉,6点夜场结束,到猪猪租的房子去睡了俩小时,8点30小观园吃饭,然后去实验室。
分页: 6/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]