Mar 29
@2010-10-30 建議看 加強版: http://www.felix021.com/blog/read.php?1921

用VirtualBox在Windows上搭建一个Ubuntu工作站

目标
1. 没有多余窗口
2. Ubuntu少占资源
3. Ubuntu可以上外网
4. 可以ssh连上去搞开发

实现
1. 在Vbox上安装一个Ubuntu
2. 整两个网卡,一个host-only,一个NAT。
3. 安装好ssh-server
4. 如果有gdm(desktop/alternative),干掉 sudo update-rc.d -f gdm remove; cd /etc/X11/,在default-display-manager的第一行(gdm)前加个#注释掉
5. 编译这个东西,可执行程序放到program files\sun\virtualbox\下面,比如叫做startvm
#include <iostream>
#include <windows.h>
using namespace std;

int main(int argc, char * argv[])
{
    string param = string(" -startvm ") + argv[1];
    ShellExecute(NULL, "open",
            "vboxheadless", param.c_str(),
            "c:", SW_HIDE); //使用SW_HIDE就不会看到vboxheadless的命令行窗口了
    return 0;
}
6. 运行 startvm "虚拟机名"
7. 打开SecureCRT连上去干活吧
8. 可以使用VBoxManage controlvm "虚拟机名" start|poweroff|pause|resume|savestate...等来控制虚拟机的运行状态

其他
1. 如果需要开机自启动,稍微改改这个程序或者搞个bat扔到startup里面去,或者干脆注册一个服务。
Jan 25

WEB Windows 3.1 不指定

felix021 @ 2010-1-25 14:41 [IT » 操作系统] 评论(2) , 引用(0) , 阅读(6287) | Via 本站原创
Jan 19

血的教训 不指定

felix021 @ 2010-1-19 01:13 [IT » 操作系统] 评论(3) , 引用(0) , 阅读(6395) | Via 本站原创
给Windows 7设置环境变量的时候,在用于分隔各个路径的分号前后,不要为了容易分辨而加上空格,否则你会死的很难看。

这就是经过十五分钟后我才发现的,让我吐血的教训。
Nov 1

Ubuntu 9.10 Karmic Koala 不指定

felix021 @ 2009-11-1 15:17 [IT » 操作系统] 评论(5) , 引用(0) , 阅读(6134) | Via 本站原创
前天释出正式版,在公司花了几分钟下好ISO,昨天拷回去刻盘安装。
非常赞。用了2.6.31的kernel, Gnome 2.28, Firefox 3.5,速度很快。
Grub用的是1.97Beta4,跟以前的Grub不一样了,配置文件也不能直接手工改了,不很习惯。
启动的时候屏幕很少闪啊闪的切换了,启动速度也很快。
网络很方便使用,比以前更贴心了。
有很多很漂亮的桌面壁纸。
输入法换成了IBus而不是那ooxx的scim了,安装拼音以后觉得方便了非常多。
。。。

总之最深刻的印象就是,快,非常快。
Jul 1
本文档分析了xen启动时创建dom0的基本过程,并进行了一些简单的测试,记录了测试结果。

@ xen3.3.0/xen/arch/x86/setup.c

---- line 408 __start_xen(unsigned long mbi_p)
@ line 414, multiboot_info_t *mbi = __va(mbi_p);
mbi = multiboot_info, 类型multiboot_info_t, 位于include/xen/multiboot.h

@ line 415, modile_t *mod = (module_t *)__va(mbi->mods_addr);
module_t是一个位于multiboot.h中的struct,包含mod_start, mod_end, string, reserved等4个成员,其中mod_start, mod_end是地址, string是module [file] [para]这里的para字段(参数, 如果没有的话,就是NULL),比如kernel的参数就是这么搞出来的cmdline(大概在997行的位置)。
这个mod是一个指针,取值于mbi_p的成员mods_addr,其实就对应了一个数组,这数组的每一项应该就是顺序地对应着grub启动xen的时候,每一个module行对应的文件载入内存后的信息,包括起始和结束地址,还有附加的参数。
Jun 21
话说,虽然felixoj的judge已经在几天前完工,

但是有一个地方是felix没有理解的(因为是copy的sempr大牛的hustoj的流程):

按理,当RE/OLE的时候child是会收到SIGSEGV/SIGFPE...等表示RE的信号,或者SIGXFSZ表示OLE的信号

但是在wait4以后WIFSIGNALED(status)并没有得到正确的结果。

Sempr大牛的版本是另做了一些处理:
int sig = status >> 8;
if(sig == 5);
else{
    switch(sig){
        case SIGSEGV: ...
        case SIGXFSZ: ...
        ...
    }
}

对此感到非常难以理解,于是咨询Sempr大牛。

大牛以其强悍的记忆力回忆一年前的事情,大致的回复是

  status >> 8 差不多是EXITCODE
  sig == 5 差不多是正常暂停

于是广搜资料,获得了一些更详细的信息:

WIFSIGNALED: 如果进程是被信号结束的,返回True
  WTERMSIG: 返回在上述情况下结束进程的信号

WIFSTOPPED: 如果进程在被ptrace调用监控的时候被信号暂停/停止,返回True
  WSTOPSIG: 返回在上述情况下暂停/停止进程的信号

另 psignal(int sig, char *s),进行类似perror(char *s)的操作,打印 s, 并输出信号 sig 对应的提示,其中
sig = 5 对应的是 Trace/breakpoint trap
sig = 11 对应的是 Segmentation fault
sig = 25 对应的是 File size limit exceeded

于是问题就解决了。

最后我的判断条件是:
if(WIFSIGNALED(status) ||
    (WIFSTOPPED(status) && WSTOPSIG(status) != 5))

另外用 strsignal(int sig) 函数获得 信号sig 对应的描述文字并用fprintf(stderr, "%s", 这样的语句输出。
Jun 18
@ 20091020 一直忘了补充一下,这个oj还是有问题的。

大概从什么时候开始,想写一个自己的OJ?

应该是从snoopy的flood开始的事情吧。
看了他的毕设论文,了解了一些该了解的东西。
然后我把马陈原来就很ooxx的web那一块的代码修改得更ooxx
然后flood终于不能再用了,决定回oak
可是snoopy把服务器重装了,oak的judge和daemon都没了
幸而不知道从什么地方找出了一个很ooxx的judge
虽然编译都不能通过,但是大体框架还在
于是就把那个judge看了过去,改来改去终于可以运行了
再修正一些BUG,judge总算是可以用了
然后再用java重写了一个daemon,终于把oak架起来。

在这个过程中发现很多问题,于是萌生了自己写OJ的想法。
最近这些天看了很多Linux开发的书
学会了包括wait, ptrace, setrlimit, setitimer等系统调用
----虽然以前都知道有这些东西,但是一直没有去写过
于是终于觉得量变到点了,该质变了
再加上还有sempr大牛的hustoj,节省了许多时间(syscall的列表...)
于是就在一天内写出了这个800行的judge
或者也可以说是copy sempr的judge吧,因为judge的整个流程基本一样。

写这个judge之前我已经思考了很多东西了,重点是架构的设计
我希望把judge设计成一个完全独立的程序,只负责跑程序,判输出
可惜由于RF的问题,judge还是没法和语言独立开来。
但是总的来说,这个judge和我接触过的oj的设计都不一样
它不负责任何与数据库有关的东西,只做该它做的事情
这样的好处是实现起来更加简单
由于其独立性,还可以配合不同的front-end,实现不同的judge
比如设计一个Personal版的,不需要web和daemon
这样可以进行offline judge,让acmer知道程序跑得是否正确,时间内存使用如何...

目前的这个效果是比较令我满意的,完成了一个judge该有的功能,包括spj。
felixoj(这个名字很挫吧。。。)的其他部分
比如Web, DB, Daemon, JudgeWrapper暂时没有时间去做了
预计留在暑假慢慢实现
如果你有兴趣测试使用这个judge,可以到felixoj的google code主页去:

http://felixoj.googlecode.com
Jun 6

推荐阅读的两篇文章 不指定

felix021 @ 2009-6-6 00:22 [IT » 操作系统] 评论(0) , 引用(0) , 阅读(4039) | Via 本站原创
1. c函数调用约定
http://blog.csdn.net/andylin02/archive/2009/04/30/4139410.aspx

对一个函数 int func(int a, int b); 当执行 func(1, 2) 的时候,它的栈结构是怎样的?
这是tx一面的时候的一个问题,我答错了。
正确的答案是:
  push 2      第二个参数入栈
  push 1      第一个参数入栈
  call function  调用参数,注意此时自动把cs:eip入栈; 如果是近程调用,那么CS是不需要入栈的。
此外,对于函数的返回是如何约定的,printf() 的不定参数列表的实现是基于什么方式。。。
详细看看这篇文章,很有收获。


2. 如果你是编程新手,你确信对系统栈结构有所了解吗?
http://blog.csdn.net/andylin02/archive/2009/04/30/4139409.aspx

和上一篇文章内容接近,或者解释更清晰一些 :)
分页: 5/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]