首页
社区
课程
招聘
未来操作系统长什么样
发表于: 2009-5-10 15:07 6571

未来操作系统长什么样

2009-5-10 15:07
6571
做过很多c/c++的 ,但是还是有很多不明白的地方,也许是因为没有完整的学习过编译器的知识吧

看看下面这个最简单的例子
//xxx.c
#include <stdio.h>

int power(int m,int n);

main()
{
    int i;
    for(i=0;i<10;++i)
        printf("%d %d %d\n",i,power(2,i),power(-3,i));
        return 0;
}

int power(int base,int n)
{
    int i,p;
    p=1;
    for(i=1;i<=n;++i)
        p=p*base;
    return p;
}

我在window xp下用gcc -S xxx.c翻译,之所以这样说是因为它还不是.o文件,就说它还不是机器码
看看xxx.s

.file        "poer.c"
        .def        ___main;        .scl        2;        .type        32;        .endef
        .section .rdata,"dr"
LC0:
        .ascii "%d %d %d\12\0"
        .text
.globl _main
        .def        _main;        .scl        2;        .type        32;        .endef
_main:
        pushl        %ebp
        movl        %esp, %ebp
        pushl        %ebx
        subl        $36, %esp
        andl        $-16, %esp
        movl        $0, %eax
        addl        $15, %eax
        addl        $15, %eax
        shrl        $4, %eax
        sall        $4, %eax
        movl        %eax, -12(%ebp)
        movl        -12(%ebp), %eax
        call        __alloca
        call        ___main
        movl        $0, -8(%ebp)
L2:
        cmpl        $9, -8(%ebp)
        jg        L3
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $-3, (%esp)
        call        _power
        movl        %eax, %ebx
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $2, (%esp)
        call        _power
        movl        %ebx, 12(%esp)
        movl        %eax, 8(%esp)
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $LC0, (%esp)
        call        _printf
        leal        -8(%ebp), %eax
        incl        (%eax)
        jmp        L2
L3:
        movl        $0, %eax
        movl        -4(%ebp), %ebx
        leave
        ret
.globl _power
        .def        _power;        .scl        2;        .type        32;        .endef
_power:
        pushl        %ebp
        movl        %esp, %ebp
        subl        $8, %esp
        movl        $1, -8(%ebp)
        movl        $1, -4(%ebp)
L6:
        movl        -4(%ebp), %eax
        cmpl        12(%ebp), %eax
        jg        L7
        movl        -8(%ebp), %eax
        imull        8(%ebp), %eax
        movl        %eax, -8(%ebp)
        leal        -4(%ebp), %eax
        incl        (%eax)
        jmp        L6
L7:
        movl        -8(%ebp), %eax
        leave
        ret
        .def        _printf;        .scl        2;        .type        32;        .endef
       
       
我们从后向前解释这段的话:
L7是power()函数中最后一句return p的汇编码,
在L6的jg L7调用的。
movl        -8(%ebp), %eax
        imull        8(%ebp), %eax
        movl        %eax, -8(%ebp)
        leal        -4(%ebp), %eax
        incl        (%eax)
       
        是 for(i=1;i<=n;++i)
        p=p*base; 的汇编码
               
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $-3, (%esp)
        call        _power  //相当于将power()的两个参数入栈,再call _power()  <3>
        movl        %eax, %ebx
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $2, (%esp)
        call        _power
        movl        %ebx, 12(%esp)
        movl        %eax, 8(%esp)
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        $LC0, (%esp)
        call        _printf  //理论上同_power
       
        以上几段的汇编代码是L2中的执行语句
        <3>再转到下面的语句执行
        _power:
        pushl        %ebp
        movl        %esp, %ebp
        subl        $8, %esp
        movl        $1, -8(%ebp)
        movl        $1, -4(%ebp)
       
        main中的代码相当于做了一些初始,比如在系统中为这个程序做程序代码,数据栈的初始。分配程序空间。
       
       
       
        我不知道自己的分析是否完全对,但是它是我个人的理解,开发了几年的程序,写了几十万行代码,我对计算机还是不懂。
       
        最近研究了一些机器码,linux,再加上5年前自己看过x86,当时还不是很懂,压力使得我的学习只是为了满足工作的需要,
        做过很多分析工作,最后发现自己对操作系统还是不了解。
       
        最近参加了一个自动导航的设计,居然发现自己对计算机系统组成一点都不了解,所以研究linux,知道现在我对bootloader
        的了解还只是看网上一些资料,我觉得这些人的解释,我不懂,就找了基本书来学习,最少发现,糊涂了,操作系统是什么?
       
       
        前天早上醒来,很郁闷,问题:
        计算机系统中包括了kvm(linux),window也有虚拟机,虚拟内存,虚拟文件,内核级和用户级,为何不论linux,window对程序的行为
        不加验证的执行,说是cpu对指令不加思索的执行,可是前年,冲击波流行的时候说是将在硬件级做防御(我的记忆中的),我就想为什么不在
        操作系统中对程序行为预测啦?
          
          想象难道是哪跑的太慢吗?那么系统加上杀毒软件......?
          了解了许多理论知识,到今天发觉还有许多不了解?
          
          最近参加的东西,让我学习了arm,avr等东西
          发现arm加上一些扩展就可以整合出笔记本,原来笔记本就这么简单,只是自己对基础电路太不懂了。
          以前了解过window驱动的编写但是一直没有机会真正的开发过,对于linux也一样,但是有谁考虑过,比如打开播放器看片子,这一行为,从系统运作上考虑他都
          做了那些工作,比如运行什么驱动,初始化lcd等,你知道请告诉我。因为我的思路比较模糊。
          
          还有谁看完过完整的linux 2.26.28,如果有心得请告诉我,或是我们可以共同讨论下,一起说说自己的心得,如果你愿意可以给我一份资料,对各个目录的认识,主要的功能,我现在在研究,其实单个独立出来的话,就是boot,driver,network,fs(file folder system),如果写出这些东西一个内核应该是具备了。
          谁开发过系统的桌面系统,比如用QT,GTK2.0甚至是swing,swt,哪怕是python,你这么做的请告诉我。
          
          在图像方面,人脸识别我已经做过了,但是还非常的浅,如果你做过环境设别的部分,我也同样希望和你讨论,语音识别我还没有做过,不过如果你做过,请告诉我。
          
          目前本人辞职充电中...........这些问题也是困扰我的问题
          学习电子电路和数学,发现原来压力挺大的。
          
          如果你有什么学习的建议,或是好的书籍可以介绍给我啊,如果你要和我讨论或是要告诉我那些问题,你可以加QQ:770308625,如果你对以上中很多都不知道甚至没听过,就不要加我QQ了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
那就不加了...
2009-5-10 15:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是无聊才写那些的,
你加不加,我无所谓
2009-5-10 17:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了你的NTFS.虽然早都了解过,看着还是觉得有意思
2009-5-10 17:51
0
雪    币: 241
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
管理各种外设的管家婆
2009-5-10 19:19
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有这么复杂吗?
2009-5-14 00:21
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
7
未来的操作系统是云操作系统,让人开了就晕
http://www.vmware.com/technology/cloud-os/
2009-5-14 00:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我觉得云操作系统更适合于大型网络系统,比如网络中心,来处理在无限或是其他环境的情况,但我所涉及的地方,云视乎大了许多,当然也有涉及的但是目前我还不至于用到
2009-5-16 18:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最近考虑了许多系统中未来使用的过程,觉得很有启发有不好意思直接给出来,欢迎高手,特别是自动控制,微电子,雷达系统,计算机视觉系统,语音方面的高手加QQ群:87321138来讨论如果你是个寡言少语的人就不要加了
2009-5-16 18:52
0
雪    币: 209
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
个人认为未来的系统不是不让病毒代码跑起来,而是让不同的代码执行时隔离开来,不同的代码能触到的系统空间和用户文件不同,限制其操作。不过目前似乎还只有虚拟机能隔离开
2009-5-16 23:54
0
雪    币: 208
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
君子先迷后得主,祝愿lz早日出关!
2009-5-17 11:21
0
雪    币: 238
活跃值: (108)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
....lz不用太介意了吧?人的一辈子时间有限,但凡有成就的多数不是啥都明白,而是沿着一条小路走到了当前的尽头并又往前迈了几步。

感觉没必要执着的追求...操作系统这东西说大可大,说小可小的东西...该做啥不该做啥因目标而异,lz感觉目前的OS无法应对自己的需求,那就先找接近的实现HACK一个,如果觉得HACK还不够简洁,那就自己DIY一个
2009-5-17 11:36
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
大家的意见我读懂了一些,其实我说的是研究和实现,诚然现在的操作系统一样有三大类,但是也都在不同程度的雷同,完全写一个也在很多方面一个某样,但请关注其他帖子的内容,也许你会有兴趣
2009-5-17 19:37
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
在我个人的考虑中,操作系统不在出现用户层和kernel层,其实说白了那不过是理想主义的方法,觉得那类人,不还得通信吗?这就好比同一个房间的一群人之间还要打电话通信,该累了吧
2009-5-17 19:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最近了解后,觉得中国编程上高手写操作系统的人真的很多。不过本人对linux的使用即使加了桌面还是不咋的,怎么说才好啊
2009-5-17 19:50
0
游客
登录 | 注册 方可回帖
返回
//