发布新日志

  • 断章

    2008-08-25 02:19:54

    细节太多,文字无力。所以叫断章。
    昨晚吃饭的时候,他们问我摊在面前的是什么书。我说是小说,刚刚坐在地铁上一直在读,这会儿看你们谈得高兴我也读不下去了。其实是一本用了报纸粗糙地做了书皮的本来就很可怜的小书——《肖邦的创作》。一旁的柳英还凑近了瞧了瞧,不过她对文字看来不敏感了,还真当是小说。
    我合上书,菜来了,酒已斟满。开始时可能尚保留着一些久隔后的拘谨,不过等大家染上一些醉意,空气便温和起来,仿佛又回到毕业前或每年中秋元旦的饭局。谈到那些过往,每个人的记忆原来都还清晰,谁醉得不省人事,谁吐得一塌糊涂,谁出去方便却掉到水沟里,谁对谁有意,谁撮合了谁,……,真是美好的回忆!这次和往常也许并无两样,我们都在变,但不该变的也都完好地保存下来。
    对我来说,不同的是,这次真的喝多了,喝得比这五年统共加起来的还要多,可能是想补偿:大学时,我太闷了,没有和你们好好玩——因为自卑,也没有和你们好好喝酒——因为莫名其妙的自我规定,现在很后悔,如果重新再来,……我当真举了酒说了这样的话,他们笑说什么自卑啊什么的,一边列举我的“优点”,谢谢,那就一饮而尽吧。
    在洗手间里遇上小孙,听他醉意迷蒙地说:还是同学亲,好久没有这样的感觉了!毕业后,聚少离多,朝夕相处的日子自然是远了。下周去南京,聚的人应该会多一些吧。
    2008/8/24 10:10
     
  • Make Vim Comfortable With C++ ACE

    2008-07-13 17:44:18

    I built ACE-5.6 in Ubuntu Linux. The headers and sources live in /usr/local/include/ace and the libraries go to /usr/local/lib.

    To simplify the words below, let ACE_INCLUDE represent /usr/local/include/ace.

    -- Build tags

    ACE_INCLUDE$ sudo ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

    -- Install scrīpt OmniCppComplete for Vim

    You can find it here: http://www.vim.org/scrīpts/scrīpt.php?scrīpt_id=1520

    Configuration for it in my .vimrc:

    "-------------------------------------------------------------------------------
    " plugin - omnicppcomplete

    let OmniCpp_NamespaceSearch = 2 " search in included files too
    let OmniCpp_DisplayMode = 1 " always show all members for class scope(::)
    let OmniCpp_ShowPrototypeInAbbr = 1 " useful for overloaded functions
    let OmniCpp_MayCompleteDot = 1 " default 1
    let OmniCpp_MayCompleteArrow = 1 " default 1
    let OmniCpp_MayCompleteScope = 1 " default 0 (::)
    let OmniCpp_SelectFirstItem = 0 " default 0

    -- Build cscope.out

    ACE_INCLUDE$ sudo cscope -Rbk *.h *.cpp *.inl

    -- Add a function in .vimrc to add those databases

    function! ACE_AddDB()
        if filereadable("/usr/bin/ctags")
            set tags+=/usr/local/include/ace/tags
        endif

        if has("cscope") && filereadable("/usr/bin/cscope")
            if filereadable("/usr/local/include/ace/cscope.out")
                cs add /usr/local/include/ace/cscope.out /usr/local/include/ace
            endif
        endif
    endfunction

    Note the second argument of 'cs add'. It's important.

    You can call it via :call ACE_AddDB() or bind a key to it.

    The reason why I don't add them directly is for Vim's performance. I don't want unnecessary databases to be added until I am really working on a ACE project.

    -- Screen shots

  • 内核笔记 - 10302007

    2008-07-10 19:19:45

    The Design of The UNIX Operating System(UNIX操作系统设计),by Maurice J. Bach。以Bach简称之。

    UNIX系统里的程序 - Bach,P.7

    UNIX系统里的程序,无知于内核用来存储文件数据的内部格式,它们只当那数据为无格式的字节流。程序各随其愿地解释字节流,但这解释无关乎操作系统存储数据的方式。

    内核模式(kernel mode) & 用户模式(user mode) - Bach,P.15~16

    硬件区分执行的模式,内核区分不同的进程。硬件只能看到内核模式和用户模式的差别,内核通过内部记录分辨系统中执行的不同进程。

    内核并不是一些单独的进程,以与用户进程平行,它是用户进程的一部分。所谓“内核”分配资源、“内核”做什么操作,其实是指运行于内核模式的进程分配了资源和做了什么操作。

    中断 & 异常 - Bach,P.17

    异:1 中断由进程之外事件引起,异常因进程之内操作而生;2 中断起于两条指令的间隙,异常起于一条指令的当中;3 中断处理后继续下条指令,异常处理后重做当前指令。

    同:系统对两者的处理机制相同(中断并非由特定的进程来侍服,而是由内核中特定的函数所处理,它们于当前运行进程的上下文中被调用。- Bach,P.22)。

     

  • 进程状态转换

    2008-07-10 19:00:32

    The Design of The UNIX Operating System (Maurice J. Bach),P.31,有一张图,描述进程的状态及其转换。觉得有很多东西值得一说。同时参考了Linux Kernel Development (Robert Love, 2nd Edition,英文影印版),P.28。Bach的书在P.148另有一幅更为详细的进程状态转换图,不过觉得暂时没有必要弄得那么细节。(下图灰色部分是Bach的书上所没有的)

    状态1:用户模式运行(user running)

    这是进程在用户模式下惟一可能的状态。

    状态2:内核模式运行(kernel running)

    运行中的进程既可以在用户模式下,也可以在内核模式下。用户模式下运行的进程,通过系统调用或中断步入内核模式运行。当系统调用返回或中断处理完毕,再回到用户模式。此状态的进程也接受中断(图中的那个双向回路),中断处理本身也在内核模式,所以状态并没改变。

    状态3:就绪运行(ready to run)

    当调用fork()后,新起的进程即处于此状态。睡眠而被唤醒的进程也处于此状态。就绪运行的进程并没真正运行,它们各自等着,等着CPU来眷顾它们。如果CPU抽出时间了,就会从它们中择一合适的,投入运行。

    状态4:睡眠(asleep)

    内核模式运行的进程,为了等待特定的事件(比如I/O的完成,其他某进程的退出,系统资源的可用,锁,等等),转而步入睡眠。

    在UNIX里(以及Linux 2.6之前),内核是非抢占性的(non-preemptive),上下文切换(context switch)也只能在一个进程从内核模式运行步入睡眠时得以允许。抢占性的内核就复杂了,表现在状态转换上还算简单:多了一条从内核模式运行到就绪运行的路径而已。

     

我的栏目

数据统计

  • 访问量: 212
  • 日志数: 4
  • 建立时间: 2007-12-23
  • 更新时间: 2008-08-25

RSS订阅

Open Toolbar