核心提示:俄《论据与事实》周刊30日刊登对卡扎菲一位亲信官员的独家专访。这名官员表示,卡扎菲及其支持者将战斗到底,别无退路。卡扎菲当下最大的遗憾是未能制造出核武器,否则西方将不敢擅自入侵。
卡扎菲的支持者在的黎波里街头挥舞旗帜展示决心。
俄《论据与事实》周刊30日刊登对卡扎菲一位亲信官员的独家专访。这名官员表示,卡扎菲及其支持者将战斗到底,别无退路。卡扎菲当下最大的遗憾是未能制造出核武器,否则西方将不敢擅自入侵。
《论据与事实》周刊利用其在某阿拉伯国家总统府内的关系,成功得到这位卡扎菲核心亲信圈官员的手机号,并于夜间对其进行了专访。可以说,该官员言论基本上反映了利比亚当局的立场,虽然部分内容的黎波里未必会赞同。
《论据与事实》:卡扎菲清楚他当下的处境么?
答:当然清楚。大家都是现实主义者,不会奢望什么奇迹。我们现在的主要目标是:在的黎波里支撑数月,不管对方如何狂轰乱炸。另外重要的一点是,卡扎菲拥有长期防御所需的一切。
《论据与事实》:您指的是武器?
答:不是,是金钱。重赏之下必有勇夫。
《论据与事实》:然后呢?
答:再看吧。
《论据与事实》:利比亚所有空军都已被摧毁,这是事实吗?
答:我们当然无法与北约军力相抗衡。我们犯下了一个错误,在西方取消制裁后我们应该立马采购新式俄制武器。虽然我们签署了合同,但是迟迟未付诸实施。但是情况还没那么糟。CNN每天都声称利比亚防空军不复存在,但是随后的报道画面显示,我们正在向敌军飞机开火。这岂不是自相矛盾?
《论据与事实》:南斯拉夫在抵抗北约3个月后,最终不得不屈服……
答:卡扎菲不会屈服。他亲眼目睹,米洛舍维奇死在狱中,而萨达姆被活活绞死。卡扎菲别无退路,所以他将战斗到底。
《论据与事实》:会坚持多久?反政府军一周时间就攻取了3座城市。
答:但是首都他们无法夺取。现在,每个为卡扎菲而战的人都明白:如果战败,将被处以绞刑。所以,除了誓死反击,我们别无别路。您还记得么,2月(利比亚)爆发骚动时,所有的人都说:“卡扎菲完了,他逃往委内瑞拉了。”但事实上,卡扎菲只用2个星期就平息了叛乱——如果不是美国人,我们就攻下班加西了。谁知道局势会发生逆转?
《论据与事实》:您看么看北约取得了对利战争的成功?
答:世界主要强国的精锐空军一周都搞不定一个600万人口小国的军队,的确让人见笑。这不是场战争,而是场闹剧。西方又一次向世人展示,它是如何的蛮横无礼。说是为了捍卫“自由斗士”,简直一派胡言。2008年的时候,一个小国开始残酷屠杀本国的叛乱分子,某个大国挺身而出。结果这个大国遭到所有人的抨击,被指责为“侵略者”。您是不是已经明白了,我指的是俄罗斯与格鲁吉亚之间的战争。但是,利比亚尚未出现类似情景,美国人就立即站到了反叛者一边。到处都充斥着谎言。卡扎菲被指屠杀了8000人,但是谁能展示出哪怕是20具尸体的电视画面。因为“卡扎菲的兽行”没有一名利比亚人逃往欧洲,但现在出现了成千上万的逃避北约轰炸的难民。
《论据与事实》:卡扎菲现在感到后悔的是什么?
答:他只是后悔当初中止了核武器研制工作。现在所有人都害怕去动朝鲜。如果拥有核弹的话,也没人会入侵我们。
====================================后记=========================================
她在哭泣!
《Linux内核源代码情景分析》----毛德操【著】 阅读笔记。
1、GCC编译器吸收了很多C++特性对ANSI C做了很多扩充。【ADI 的Visual DSP使用的就是GCC内核,也支持以下扩展特性】
1.1 增加inline关键字,并且为兼容其他以编程将“inline”作为变量的代码,还扩充了“__inline__”作为关键字,等价于“inline”。用inline定义的函数需要写在“.h”文件,用于打开编译器优化时自动将代码插入到调用的地方。
1.2 扩充了数据长度,增加“long long int”类型,定义64bit整数,增加“double double”定义64bit float数据。
2、常见以下形式宏定义:
#define DUMP_WRITE(addr, n) do{memcpy(buff, addr, n); buff+=n;}while(0)
表面上看,使用一个do..while循环,可是循环条件却永远为假,等价于不用循环。但是这样定义的好处是这个宏定义可以插在代码的任何地方而不用担心编译器报错或编译出错。比如:
if( addr ) DUMP_WRITE; else do_something_else();
就可以很好的工作,这种宏定义方式巧妙的利用了C的特性实现了宏定义一段代码的方法。
3、利用一个独立定义的链表指针结构体来供各种需要双向指针的结构体包含,以提供双向链节点。
struct list_head{ struct list_head * next ; struct list_head * prev ; };
任何需要链表的结构体只需包含上述结构体即可,上述结构体还可以单独用于定义一个链表头类型变量或指针。
4、对于以上结构体,如果一个结构体包含了以上的结构体用于构成链表。那么怎么通过链表指针计算出其宿主结构体变量的首地址呢?Linux这么做的:
假如有如下定义: struct page{ ...... struct list_head list ; //不确定处于page结构体的某个偏移地址的位置上 ...... } 【取自mm/page_alloc.c】 page = memlist_entry( pcurr, struct page, list ); memlist_entry函数实现将一个list_head类型的指针pcurr换算成其宿主结构体变量的起始地址。 并且文件中根本没有定义list变量。第二个参数还仅仅是个类型,而不是变量。 但是同一文件中,有以下宏定义: #define memlist_entry list_entry list_entry则在【include/linux/list.h】中定义如下: #define list_entry(ptr, type, member) ((type *)((char*)(ptr)-(unsigned long)(&((type *)0)->member))) 由此可见,以上“page = memlist_entry( pcurr, struct page, list );”语句将被预处理替换成如下格式: page = ((struct page *)((char*)(curr)-(unsigned long)(&((struct page *)0)->list))) ; 这样就很好理解了,用链表指针的地址减去list成员在结构体中的偏移。
(转自:http://mikesakai.blog.163.com/blog/static/13533548920112226823207/?suggestedreading)
日本地震了,我知道会有很多人跳出来说自己多么正义多么仁慈,多么关心日本人的安危,但是我提醒这些人,如果你是中国人请收起你这份感情。日本曾经说中国能做的东西他们都能做,J-20他们行吗?现在中国人缺的是民族自豪感,而不是对日本人的同情。 海豚湾看过吗?金粒餐你吃过吗?全世界都不杀海洋哺乳动物了,日本杀,全世界的人都不会吃屎日本人吃。 汶川地震你知道日本人为什么迫不及待的来中国吗?因为他们要收集第一手的地震资料因为他们那里地震多,日本对中国的援助,是压榨了多少中国人的血汗啊,一个日本老板给日本员工2万工资,给你2000,你就当日本人是救苦救难的恩人,是你的爸妈,真为你认贼作父感到 羞耻。 你最好别批人皮虚伪的说你有人性,我觉得敢爱敢恨的人才是真有人性,日本不是没有好人,但是日本民族太虚伪,太伪善了,我就是讨厌这个民族,憎恨这个民 族,这次地震我就是很开心,其实民族与民族之间的仇恨不是你说没有就没有的,知道为什么日本人瞧不起中国人吗?就是因为太多麻木的中国人,把你打的头破血流,家破人亡,给你颗糖就把一切恩怨一笔勾销了,这样的中国人值得日本人尊重吗?知道美国人为什么尊重中国人吗?因为抗美援朝,因为志愿军是他们值得尊重的对手。他们在做天在看,海豚的血鲸鱼的泪冲刷着他们那个大和民族。 你喜欢日本可以同情他们,但是你如果当自己是个中国人,就请把你那份感情留在自己心里 ,首先日本人不肖你那份同情,中国人也会觉得你很虚伪,就好比以前那些选美,最后的冠军都会说“我希望世界和平”现在很多人拿日本和德国比,德国总理可以跪在2战纪念碑前请求全世界原谅,日本了?每年还去拜祭那些甲级战犯。说到经济,中国的通货膨胀你们真以为全是国内的贪官搞出来的?都是这些所谓发达国家,眼红中国的经济发展速度,要抑制中国的发展,你们知道他们美日,为什么要求人民币升值吗?因为外汇储备世界第一,你们自己想象下,上万亿日元美元,一天要贬值多少,这和抢中国人的血汗钱有什么区别?中国说实在的就太儒了,对谁都儒,就让其他国家觉得软弱,你们看看俄罗斯吧,中国要拿出俄罗斯的魄力,他小日本还敢在钓鱼岛那么猖狂,现在还出来同情日本地震的人真应该好好检讨下了。这次地震真的让我感触,我只想对小日本说句:人在做天在看,不是不报。
后记:关于日本地震,出于人道主义,我们应该同情,但我更愿意把它埋在心底,日本不需要中国人同情。
今日网易新闻页面,日本地震还很殷勤的送人家石油,不觉得很滑稽吗?送什么不行,讨好似的非要送石油给他,凭什么?
1 优先级翻转(Priority Inversion)
优先级翻转(Priority Inversion),是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推迟被调度执行的现象。
优先级翻转现象在普通的分时调度系统中对系统的影响不大,或者本来就对优先级高低的进程/线程被调度的顺序就不太在意的情况下,不用太多关注。但是对于基于优先级调度的实时系统,优先级高的进程/线程被优先调度是调度算法首要考虑的因素,调度程序对于较高优先级被调度单元总是最钟情的,所有其它相应资源分配的考量也是基于优先级做出的。SUN Solaris和Microsoft Windows CE等系统都对优先级翻转现象在操作系统级做了处理。
所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有, 而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级的任务抢先, 因此造成高优先级任务被许多具有较低优先级的任务阻塞, 实时性难以得到保证。
2 解决优先级翻转问题有优先级天花板(priority ceiling)和优先级继承(priority inheritance)两种办法。
2.1 优先级天花板是当任务申请某资源时, 把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级, 这个优先级称为该资源的优先级天花板。这种方法简单易行, 不必进行复杂的判断, 不管任务是否阻塞了高优先级任务的运行, 只要任务访问共享资源都会提升任务的优先级。
2.2 优先级继承是当任务A 申请共享资源S 时, 如果S正在被任务C 使用,通过比较任务C 与自身的优先级,如发现任务C 的优先级小于自身的优先级, 则将任务C的优先级提升到自身的优先级, 任务C 释放资源S 后,再恢复任务C 的原优先级。这种方法只在占有资源的低优先级任务阻塞了高优先级任务时才动态的改变任务的优先级,如果过程较复杂, 则需要进行判断。
2.3 优先级继承的传递性
优先级继承的传递性,是指图二的优先级继承发生时,在Thread3的优先级已经提升到Thread1执行的T3-T4时间段里,如果Thread3竞争比Thread3的初始优先级还要低的线程Thread4拥有的同步资源,操作系统同样会把Thread4的优先级提升到Thread1的优先级。SUN的Solaris系统实现了优先级继承和继承的传递,Microsoft的Windows CE虽然实现了优先级继承,但是它只实现了一级,即,没有实现优先级继承的传递性。
3 总结
优先级翻转是多线程环境中应该尽力避免的现象,尤其是依赖线程优先级来调度的系统中。在设计多线程程序时候,避免优先级翻转的最简单方法,就是不要让不同优先级的线程去竞争同一个同步资源。
优先级继承可以减缓优先级翻转带来的问题,但是也不能保证优先级最高的线程绝对地被最先调度执行,还是有一定的延缓时间。如果有优先级继承的传递性,传递的级别很深时,对系统性能的影响还是很大的。
假定一个进程中有三个线程Thread1、Thread2和Thread3,它们的优先级顺序是Priority(Thread1) > Priority(Thread2) > Priority(Thread3)。考虑上图的执行情况。
◇ T0时刻,只有Thread3处于可运行状态,运行过程中,Thread3拥有了一个同步资源SYNCH1;
◇ T1时刻,Thread2就绪进入可运行状态,由于优先级高于正在运行的Thread3,Thread3被抢占(未释放同步资源SYNCH1),Thread2被调度执行;
◇ 同样地T2时刻,Thread1抢占Thread2;
◇ Thread1运行到T3时刻,需要同步资源SYNCH1,但SYNCH1被更低优先级的Thread3所拥有,Thread1被挂起等待该资源,而此时处于可运行状态的线程Thread2和Thread3中,Thread2的优先级大于Thread3的优先级,Thread2被调度执行。
上述现象中,优先级最高的Thread1既要等优先级低的Thread2运行完,还要等优先级更低的Thread3运行完之后才能被调度。如果Thread2和Thread3执行的很费时的操作,显然Thread1的被调度时机就不能保证,整个实时调度的性能就很差了。
1. 优先级反转(Priority Inversion)
由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。
2. 产生原因
其实,优先级反转是在高优级(假设为A)的任务要访问一个被低优先级任务(假设为C)占有的资源时,被阻塞.而此时又有优先级高于占有资源的任务(C)而低于被阻塞的任务(A)的优先级的任务(假设为B)时,于是,占有资源的任务就被挂起(占有的资源仍为它占有),因为占有资源的任务优先级很低,所以,它可能一直被另外的任务挂起.而它占有的资源也就一直不能释放,这样,引起任务A一直没办法执行.而比它优先低的任务却可以执行.
所以,一个解决办法就是提高占有资源任务的优先级,让它正常执行,然后释放资源,以让任务A能正常获取资源而得以执行.
3. 解决方案 ( 优先级继承 / 优先级天花板 )
目前解决优先级反转有许多种方法。其中普遍使用的有2种方法:一种被称作优先级继承(priority inheritance);另一种被称作优先级极限(priority ceilings)。
A. 优先级继承(priority inheritance)
优先级继承是指将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级.当高优先级任务由于等待资源而被阻塞时,此时资源的拥有者的优先级将会自动被提升.
B. 优先级天花板(priority ceilings)
优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)
A 和B的区别:
优先级继承,只有当占有资源的低优先级的任务被阻塞时,才会提高占有资源任务的优先级,而优先级天花板,不论是否发生阻塞,都提升.
2006-3-7
本文描述操作系统中的优先级翻转(Priority Inversion,也有翻译为反转,逆转或倒置的)现象以及如何用优先级继承来解决此类问题的方法,并阐述了 Microsoft Platform Builder for Windows CE 环境下,如何查看此种现象。
摘要
1 优先级翻转(Priority Inversion)
2 优先级继承(Priority Inheritance)
2.1 优先级继承
2.2 WinCE中优先级继承
2.3 优先级继承的传递性
3 总结
参考资料及进一步阅读
关于作者
优先级翻转(Priority Inversion),是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推迟被调度执行的现象。
优先级翻转现象在普通的分时调度系统中对系统的影响不大,或者本来就对优先级高低的进程/线程被调度的顺序就不太在意的情况下,不用太多关注。但是对于基于优先级调度的实时系统,优先级高的进程/线程被优先调度是调度算法首要考虑的因素,调度程序对于较高优先级被调度单元总是最钟情的,所有其它相应资源分配的考量也是基于优先级做出的。SUN Solaris和Microsoft Windows CE等系统都对优先级翻转现象在操作系统级做了处理。
假定一个进程中有三个线程Thread1、Thread2和Thread3,它们的优先级顺序是Priority(Thread1) > Priority(Thread2) > Priority(Thread3)。考虑图一的执行情况。
图一、优先级翻转现象(无优先级继承)
◇ T0时刻,只有Thread3处于可运行状态,运行过程中,Thread3拥有了一个同步资源SYNCH1;
◇ T1时刻,Thread2就绪进入可运行状态,由于优先级高于正在运行的Thread3,Thread3被抢占(未释放同步资源SYNCH1),Thread2被调度执行;
◇ 同样地T2时刻,Thread1抢占Thread2;
◇ Thread1运行到T3时刻,需要同步资源SYNCH1,但SYNCH1被更低优先级的Thread3所拥有,Thread1被挂起等待该资源,而此时处于可运行状态的线程Thread2和Thread3中,Thread2的优先级大于Thread3的优先级,Thread2被调度执行。
上述现象中,优先级最高的Thread1既要等优先级低的Thread2运行完,还要等优先级更低的Thread3运行完之后才能被调度,如果Thread2和Thread3执行的很费时的操作,显然Thread1的被调度时机就不能保证,整个实时调度的性能就很差了。
为了解决上述由于优先级翻转引起的问题,Solaris和WinCE引入了优先级继承的解决方法。优先级继承也就是,高优先级进程TH在等待低优先级的线程TL继承占用的竞争资源时,为了使TH能够尽快获得调度运行,由操作系统把TL的优先级提高到TH的优先级,从而让TL以TH的优先级参与调度,尽快让TL执行并释放调TH欲获得的竞争资源,然后TL的优先级调整到继承前的水平,此时TH可获得竞争资源而继续执行。
有了优先级继承之后的上述现象的执行情况如图二所示。
图二、优先级继承执行情况
与图一比较,图二中,到了T3时刻,Thread1需要Thread3占用的同步资源SYNCH1,操作系统检测到这种情况后,就把Thread3的优先级提高到Thread1的优先级。此时处于可运行状态的线程Thread2和Thread3中,Thread3的优先级大于Thread2的优先级,Thread3被调度执行。
Thread3执行到T4时刻,释放了同步资源SYNCH1,操作系统何时恢复了Thread3的优先级,Thread1获得了同步资源SYNCH1,重新进入可执行队列。处于可运行状态的线程Thread1和Thread2中,Thread1的优先级大于Thread2的优先级,所以Thread1被调度执行。
上述机制,使优先级最高的Thread1获得执行的时机提前。
下面用在Microsoft Platform Builder for Windows CE 5.0环境的Emulator中,来做一个优先级继承的实验。
2.2.1 程序设计
主线程做了如下工作:
◇ 创建三个子线程,设置它们的优先级顺序:
Priority(Thread1) > Priority(Thread2) > Priority(Thread3);
◇ 只是启动Thread3。
◇ 创建一个互斥体g_Mutex1,初始状态是未被获得的。
三个子线程的执行体分别如下:
Thread3:
◇ 获得g_Mutex1;
◇ 循环执行一定次数的
打印“Thread3: Executing BEFORE releasing the MUTEX...”
◇ 释放g_Mutex1;
◇ 循环执行:
打印“Thread3: Executing AFTER releasing the MUTEX...”
Thread2:
◇ 打印:“Thread2: Start executing...”
◇ 循环执行:
打印“Thread2: executing...”
Thread1:
◇ 打印:“Thread1: Start executing...”
◇ 打印:“Thread1: Waiting on Mutex1...”
◇ 执行:WaitForSingleObject(g_Mutex1, INFINITE);
◇ 打印:“Thread1: GOT g_Mutex1, and will resume.”
◇ 循环执行:
打印“Thread1: Executing AFTER getting the MUTEX...”
2.2.2 Log结果分析
结果输出如下:
TID:a3ecaa1e Thread1: Handler = a3c867b2, ThreadId = a3c867b2
TID:a3ecaa1e Thread2: Handler = 83c8c002, ThreadId = 83c8c002
TID:a3ecaa1e Thread3: Handler = 3c866c2, ThreadId = 3c866c2
TID:3c866c2 Thread3 GOT the Mutex g_Mutex1
TID:83c8c002 Thread2: Start executing...
TID:83c8c002 Thread2: executing...
TID:a3c867b2 Thread1: Start executing...
TID:a3c867b2 Thread1: Waiting on Mutex1...
TID:3c866c2 Thread3: Executing BEFORE releasing the MUTEX...
TID:3c866c2 Thread3: Executing BEFORE releasing the MUTEX...
......
TID:3c866c2 Thread3: Executing BEFORE releasing the MUTEX...
TID:3c866c2 Thread3: Executing BEFORE releasing the MUTEX...
TID:3c866c2 Thread3: Released the mutex1.
TID:a3c867b2 Thread1: GOT g_Mutex1, and will resume.
TID:a3c867b2 Thread1: Executing AFTER getting the MUTEX...
TID:a3c867b2 Thread1: Executing AFTER getting the MUTEX...
TID:a3c867b2 Thread1: Executing AFTER getting the MUTEX...
......
结果中的斜体加粗部分标识了图二的T3-T4时刻的操作。Thread3由于拥有Thread1欲申请的同步资源g_Mutex1而继承了Thread1的优先级,获得了执行。
结果中的粗体加下划线部分标识了图二的T4时刻的操作。Thread3释放同步资源g_Mutex1,Thread3的优先级被恢复到T3之前;Thread1获得了g_Mutex1之后继续执行。
2.2.3 用Platform Builder的工具查看
优先级继承时的线程的优先级是无法在程序中通过诸如GetThreadPriority() / CEGetThreadPriority() 之类的函数来查看CurrPrio的,这些函数查看的是显式设置的BasePrio。(WinCE的早期版本里,这些函数返回的是CurrPrio)
我们可以通过Platform Builder的调试工具来查看,不过因为PB提供的Emulator与BP Host之间同步需要时间,所以我们在上面的程序中需要延长Thread3在T3-T4时间段的时间以获得足够的时间查看此时Thread3继承的优先级。仅仅为了查看,这里可以设置一个极限情况,即Thread3在释放g_Mutex1之前无限循环。
下图是做完上述设置之后,通过 Platform Builder 的菜单“View | Debug Windows | Threads”,调出的Process/Thread View。
图三、通过Thread View查看优先级继承
图中,第一行对应Thread3;第二行对应PriorityInversion进程的主线程;第三行对应Thread1;第四行对应Thread2。从Thread3的CurrPrio列可以看出,它的当前的优先级确实提升到了Thread1的优先级。
优先级继承的传递性,是指图二的优先级继承发生时,在Thread3的优先级已经提升到Thread1执行的T3-T4时间段里,如果Thread3竞争比Thread3的初始优先级还要低的线程Thread4拥有的同步资源,操作系统同样会把Thread4的优先级提升到Thread1的优先级。SUN的Solaris系统实现了优先级继承和继承的传递,Microsoft的Windows CE虽然实现了优先级继承,但是它只实现了一级,即,没有实现优先级继承的传递性。
下图是WinCE中按照上面描述增加了Thread4之后,参看Thread View得到的一个快照。
图四、通过Thread View查看优先级继承的传递性
图中,第一行对应Thread1;第二行对应Thread2;第三行对应PriorityInversion进程的主线程;第四行对应Thread4;第五行对应Thread3。从Thread3和Thread4所在行的CurrPrio列可以看出,Thread3由于等待Thread4拥有的竞争资源而被Blocked,优先级也没有得到提升;Thread4由于拥有Thread3所要竞争的同步资源,其优先级被提升到Thread3的优先级。这种现象不具有优先级继承的传递性。
优先级翻转是多线程环境中应该尽力避免的现象,尤其是依赖线程优先级来调度的系统中。在设计多线程程序时候,避免优先级翻转的最简单方法,就是不要让不同优先级的线程去竞争同一个同步资源。
优先级继承可以减缓优先级翻转带来的问题,但是也不能保证优先级最高的线程绝对地被最先调度执行,还是有一定的延缓时间。如果有优先级继承的传递性,传递的级别很深时,对系统性能的影响还是很大的。
◇ Microsoft, MSDN, 2005.
◇ Uresh Vahalia, UNIX Internals: The New Frontiers, PEARSON EDU / 人民邮电出版社影印, 2003/2003.7
田海立,硕士,国家系统分析师,中国系统分析员协会顾问团专业顾问。
您可以通过 HaiLi.Tian(at)csai.cn 或 TianHaiLi(at)nju.org.cn 与他联系,到 http://blog.csdn.net/thl789/ 看他最新的文章。
版权声明:
◇ 本文为作者原创作品,版权归作者所有。
◇ 为了学习和研究,可转载本文,但必须与原文的内容和格式保持一致,并给出原文的链接!
二进制信号量
这种信号量有两种功能:互斥和同步。它经过精心设计,效率很高,很适合性能要求高的应用。互斥信号量也是一种Binary信号量,它专门为互斥设计的,但是如果在认为没有必要使用互斥信号量的场合可以用Binary信号量提供互斥功能(需要使用互斥信号量的特殊场合将在介绍互斥信号量中进行说明)。
一个Binary信号量有两种状态:可利用(full)和不可利用(empty)。用semTake()来获得信号量。如果使用该函数的时候,信号量处于full状态,则调用函数后信号量变为empty,否则将根据该信号量的类型把申请信号量的任务挂到相应的等待队列中。当然如果任务是不等待信号量方式,则任务继续执行。
互斥信号量
互斥信号量是一种特殊的Binary信号量,它专门用于解决互斥问题如:优先级倒置,安全删除及递归访问资源等。互斥信号量和Binary信号量有以下不同:
- 它仅用于互斥;
- 它只能由申请(take)到该信号量的任务来释放(give);
- 它不能由中断来使其为full;
- semFlush()操作是非法的;
信号量和互斥信号量
信号量和互斥信号量是在多线程环境中必备资源,很多网友对它都有很丰富的经验和深刻的教训。因为这篇文章不将重点于如何使用信号量或者是互斥,而是从概念上简述他们之间的一些关系。
信号量一般有两种运用,一是所谓的binary semaphore,它的值只有0或者1,从技术角度看它可以产生类似于互斥的功能,但是它们有区别:
信号量的释放不一定是已经获取信号量的线程,但是互斥的释放一定要是已经获取互斥的线程。
信号量的初始值可以是0,其他线程可以通过post或者up之类的函数增加这个值,但是互斥的初始化值一定是一个有效的值。
信号量一般情况下无法实现递归获取和释放,但是互斥一般有递归获取和释放。
另外一种信号量的使用就是作为计数资源,一般而言是大于1的一个数值。当获取对应资源后,线程能够执行相应的操作,比如在生产者和消费者模型中,只有获取资源后,才能进行对应的读写操作。
那么我们在什么情况下使用信号量或者是互斥呢?我的个人意见是对于多进程之间资源的保护,信号量的使用一般比较方便,因为如果使用互斥的话,在按照posix1标准实现的系统中,我们往往要把互斥存放在共享内存中,以便进程之间能够相互访问。如果我们运用的系统是多线程,那么互斥的使用可能更加的容易,并且相对容易调试,因为互斥的释放只能是在获取线程中,减少了线程之间的太多关联。
miniOCR软件免费的图像文字识别软件:http://www.xdowns.com/soft/softdown.asp?softid=28674
GNU开源OCR系统:http://www.gnu.org/software/ocrad/ocrad.html
汉王 PDF OCR V8.1简体中文版:http://xiazai.zol.com.cn/detail/34/335364.shtml
开源社区相关:http://www.oschina.net/project/tag/262/ocr?lang=21&sort=view
OCR是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种方法。它通过扫描和摄像等光学输入方式获取纸张上的文字图像信息,利用各种模式识别算法分析文字形态特征,判断出汉字的标准编码,并按通用格式存储在文本文件中,所以,OCR是一种非常快捷、省力的文字输入方式,也是在文字量比较大的今天,很受人们欢迎的一种输入方式。 OCR的发展简况 OCR的概念是在1929年由德国科学家Tausheck最先提出来的,后来美国科学家Handel也提出了利用技术对文字进行识别的想法。而最早对印刷体汉字识别进行研究的是IBM公司的Casey和Nagy,1966年他们发表了第一篇关于汉字识别的文章,采用了模板匹配法识别了1000个印刷体汉字。 20世纪70年代初,日本的学者开始研究汉字识别,并做了大量的工作。我国研究汉字识别的起步比较晚,20世纪70年代末才开始进行OCR的研究工作。早期的OCR软件,由于识别率及产品化等多方面的因素,未能达到实际要求。同时,由于硬件设备成本高,运行速度慢,也没有达到实用的程度。只有个别部门,如信息部门、新闻出版单位等使用OCR软件。1986年以后我国的OCR研究有了很大进展,在汉字建模和识别方法上都有所创新,在系统研制和开发应用中都取得了丰硕的成果,不少单位相继推出了中文OCR产品。进入20世纪90年代以后,随着平台式扫描仪的广泛应用,以及我国信息自动化和办公自动化的普及,大大推动了OCR技术的进一步发展,使OCR的识别正确率、识别速度满足了广大用户的要求。 目前,比较流行的OCR软件很多,英文OCR主要有OmniPage,中文OCR主要有清华紫光OCR、清华文通OCR、汉王OCR、中晶尚书OCR、丹青OCR、蒙恬OCR等。尽管汉字字量大、字形复杂,但OCR技术已经走向成熟。许多OCR软件不仅能识别黑白印刷体汉字,还能识别灰度和彩色印刷体汉字,识别速度很快,识别正确率达到了99%以上;可识别宋体、黑体、楷体等多种字体的简、繁体;可对多种字体、不同字号的混排进行识别;有些OCR软件还能识别图像、表格。与此同时,对于手写体汉字识别的研究也取得了很大进展,正确识别率已达到了70%以上。 OCR软件的应用 在扫描仪市场上,许多类型的办公和家用扫描仪均配有OCR软件,如紫光的扫描仪配备了紫光OCR,中晶的扫描仪配备了尚书OCR,Mustek的扫描仪配备了丹青OCR等。扫描仪与OCR软件共同承担着从文稿的输入到文字识别的全过程。 文稿扫描在办公领域中经常用到,即将报纸、杂志等媒体上刊载的有关文稿通过扫描仪进行扫描,随后进行OCR识别,或存储成图像文件,留待以后进行OCR识别,将图像文件转换成文本文件或Word文件进行存储。 此外,数字化信息的存储、传输、不仅成本低、效率高,而且能够适应排版,网络传输等不断发展的需要。目前我国有很多历史遗留下来的大量图书、报刊、杂志等纸质珍品,急需将其转换成电子信息。如电子图书馆的建立,就需要将图书逐页扫描,加上OCR软件的识别,更替代了人工键入文字的工作,大大缩短了录入时间,减轻了劳动强度,节省了人力且降低了费用,提高了录入正确率、工作效率和现代办公自动化程度。 目前OCR软件与扫描仪的搭配已应用到信息化时代的多个领域,如数字化图书馆,各种报表的识别,以及银行、税务系统票据的识别等。随着网络化、信息化的发展与普及,其应用范围将越来越广泛。 OCR系统的组成 汉字识别软件OCR的功能是将各种录入汉字、印刷体或手写体中每个汉字的图形或图像通过计算机辨认出来,并标出汉字类别代码。因此,汉字识别归根结底是一个图像识别问题。由于汉字信息量很大,具有不同的字形、字体,而且结构复杂,因此汉字识别的过程极其复杂。 由于扫描仪的普及与广泛应用,OCR软件只需提供与扫描仪的接口,利用扫描仪驱动软件即可。因此,OCR软件主要是由图像处理模块、版面划分模块、文字识别模块和文字编辑模块等4部分组成。 1、图像处理模块 图像处理模块主要具有文稿扫描、图像缩放、图像旋转等功能。通过扫描仪输入后,文稿形成图像文件,图像处理模块可对图像进行放大,去除污点和划痕,如果图像放置不正,可以手工或自动旋转图像,目的是为文字识别创造更好的条件,使识别率更高。 2、版面划分模块 版面划分模块主要包括版面划分、更改划分,即对版面的理解、字切分、归一化等,可选择自动或手动两种版面划分方式。目的是告诉OCR软件将同一版面的文章、表格等分开,以便于分别处理,并按照怎样的顺序进行识别。 3、文字识别模块 文字识别模块是OCR软件的核心部分,文字识别模块主要对输入的汉字进行"阅读",但不能一目多行,必须逐行切割,对于汉字通常也是一个字一个字地辨认,即单字识别,再进行归一化。文字识别模块通过对不同样本汉字的特征进行提取,完成识别,自动查找可疑字,具有前后联想等功能。 4、文字编辑模块 文字编辑模块主要对OCR识别后的文字进行修改、编辑,如系统识别认为有误,则文字会以醒目的红色或蓝色显示,并提供相似的文字供选择,选择编辑器供输出等。 OCR软件的使用方法 OCR软件的种类虽然很多,但其使用方法大同小异。首先要对文稿进行扫描,然后进行OCR识别。OCR软件的使用方法如下: 1、文稿扫描 为了利用OCR软件进行文字识别,可直接在OCR软件中扫描文稿。运行OCR软件后,会出现OCR软件界面。 将要扫描的文稿放在扫描仪的玻璃面上,使要扫描的一面朝向扫描仪的玻璃面并让文稿的上端朝下,与标尺边缘对齐,再将扫描仪盖上,即可准备扫描。点击视窗中的"扫描"键,即可进入扫描驱动软件进行扫描,有关扫描方法这里不再赘述。但应注意的是:分辨力可设置在200~400dpi,对于文本文档,调整亮度适中很关键。扫描后的文档图像出现在OCR软件视窗中。 2、OCR识别 为了便于操作,可从菜单中选择选项,各种图标出现在视窗的左边。 为了更好使用,首先从上到下介绍画面左边的图标: "放大"工具:用于放大图像;"缩小"工具:用于缩小图像;"设定识别区域"工具:用于设定识别区域;"设定识别顺序"工具:用于设定识别顺序;"删除识别区域"工具:用于删除识别区域;"擦除图像杂点"工具:用于擦除图像中的杂点;"擦拭图像块"工具:用于擦除图像中的某一区域;"旋转图像"工具:用于将图像旋转90°、180°或270°;"倾斜校正"工具:用于手动图像倾斜校正。 OCR识别的一般步骤: (1)文稿扫描后,刚开始出现在视窗中的要识别的文字画面很小,首先选择"放大"工具,对画面进行适当放大,以使画面看得更清楚。必要时还可以选择"缩小"工具,将画面适当缩小。 (2)如果画面需要旋转90°,180°或270°,可使用"旋转图像"工具旋转图像。如果文字画面倾斜,可选择"倾斜校正"工具,将画面调正。 (3)识别时选择"设定识别区域"工具,在文字画面上框出要识别的区域,这时也可根据画面情况框出多个区域。如果所框区域有误,则可使用"删除识别区域"工具,删除所选识别区域。 (4)为了提高识别率,如果所选识别区有杂点或有不能识别的图像,则可选择"擦除图像杂点"工具,将杂点一点一点地擦除。如果需要成片地擦除,则可选择"擦拭图像块"工具。 (5)点击"识别"图标,则OCR显示正在进行文字切分,然后转入"正在识别"画面,将识别的文字逐步显示出来,"文稿校对"窗口。 许多OCR软件都具有文字修改功能,被识别出可能有错误的文字,用比较鲜明的颜色显示出来,并且可以进行修改。 (6)将识别后的文件存储成文本(TXT)文件或Word的RTF文件。
在最近几年中,OCR识别技术随着扫描仪的普及得到了飞速的发展,扫描、识别软件的性能不断强大并向智能化不断升级发展。 OCR是英文Optical Character Recognition的缩写,意思为光学字符识别,通称为文字识别,它的工作原理为通过扫描仪或数码相机等光学输入设备获取纸张上的文字图片信息,利用各种模式识别算法分析文字形态特征,判断出汉字的标准编码,并按通用格式存储在文本文件中,由此可以看出,OCR实际上是让计算机认字,实现文字自动输入。它是一种快捷、省力、高效的文字输入方法。 汉王OCR 是针对机关单位、企业及有文字录入需求的个人用户,在日常的工作中,快速的对书刊、报纸、公文、宣传页等印刷稿件中内容进行录入的应用需求而推出的。本产品集成了汉王科技顶尖的文字识别技术,对印刷文稿录入的识别率高达99.5%,能够识别百余种印刷字体和各种中英繁表图混排格式的文本,。是理想的文字、表格、图像录入系统。 这样一来,就不用再手工输入大量的资料了,只要扫进去,像那种抓英文的工具一样,让软件自动地转成WORD文档。即可将图片变成可编辑的文挡格式。这是目前破解最完美的汉王OCR软件。 http://down.x6x8.com/soft/6/64/245.html 清华紫光文通 TH-OCR 9.0 光盘完全特别版 把破解补丁放到安装目录下,运行破解补丁,确定,OK! TH-OCR简介 OCR是英文Optical Character Recognition的缩写,意思为光学字符识别,通称为文字识别,它的工作原理为通过扫描仪或数码相机等光学输入设备获取纸张上的文字图片信息,利用各种模式识别算法分析文字形态特征,判断出汉字的标准编码,并按通用格式存储在文本文件中,由此可以看出,OCR实际上是让计算机认字,实现文字自动输入。它是一种快捷、省力、高效的文字输入方法。 TH-OCR是清华大学自1985年就开始研发的,TH是TsingHua(清华)的缩写,TH-OCR代表北京清华紫光文通信息技术有限公司开发的OCR软件。在国家“863”计划支持下,持续了十多年的科研成果,从1.0版本开始已经升级到现在的9.0版本。独家真正实现了汉英混排同时识别,在国际上首次突破了OCR产品只能处理汉字或英文单一文字的局限性,新增了东方文字(简繁汉、日文、韩文)识别功能,对日文和韩文与英文混排文档的识别水平甚至超过日本和韩国对本国文字的识别水平,在国内、外产生了重大的影响,并连续3年被中国软件行业协会评为优秀软件产品,成为汉字输入技术的一座里程碑。TH-OCR9.0版本已应用到了包括电子政务、电子出版物、报社、银行、邮政、税务、图书馆等多个领域,成为国内OCR市场的先锋。 本届两会代表的所有提案全部采用了我国自主知识产权的世界识别领域领先产品——清华紫光文通的TH-OCR9.0进行录入识别,它以准确的识别率、优异的识别速度博得了两会工作人员的交口称赞。而清华TH-OCR技术在两会上的成功应用更论证了我国也完全有实力拥有自己的卓越技术。 TH-OCR的突出特点: ◇ 汉英双语同时混排,识别率最高,居世界领先水平。 ◇ 可以识别黑白、灰度、彩色图像,可以读取多种图像格式。 ◇ 首创对识别结果进行电子文档版面复原功能,所见即所得。 ◇ 首创日文、韩文、日英混排、韩英混排识别功能,识别率98%以上。 TH-OCR的六大优势: 1. 是唯一可以识别2万多汉字的多体文字识别系统,汉字识别国内最优。 2. 汉字和英文混排、日文和英文混排、韩文和英文混排同时识别。 3. 汉字识别率最高。清华紫光文通TH-OCR经过"863"智能专家组对数十万字的指标评测和中国软件评测中心对产品的严格测试,识别正确率超过99.5%,代表了目前印刷体文字识别的最高水平。 4. 支持多种环境接口。清华紫光文通TH-OCR支持WINDOWS环境和GB、BIG5、GBK、JIS、 SHIFT-JIS和KSC等多种内码,可以用于 WINDOWS NT和WINDOWS 98/2000/XP,适合全球各个地区使用。TH-OCR还具有自学习功能,不论什么生僻字,都可以通过键盘输入进行学习,大大拓宽了OCR系统的识别字符集。 5. 历次国内鉴定均被中国科学院院土和中国工程院院土等专家组成的鉴定委员会评定为“具有世界领先水平”。 广泛的社会认可: 1、 多年来为众多著名的扫描仪厂商HP、UNISCAN、EPSON、CANON、 LENOVO等提供TH-OCR普及版作为其扫描仪的捆绑软件。 2、美国MICROSOFT公司将TH-OCR作为东方文字识别捆绑到WINXP 操作系统中。 3、美国MOTOROLA公司确定TH-OCR的部分技术使用权。 4、美国INTEL公司确定TH-OCR为最新的MMX技术支持项目。 5、《计算机世界》市场调查结果,清华紫光文通TH-OCR市场占有率达65%以上。 6、《中国计算机报》 CIWLAB组织的用户调查认为, TH-OCR是一个性能极好的系统,是一个值得用户信赖的系统(对其他品牌OCR评价为:“是值得用户选择的产品”)。 http://down.x6x8.com/soft/6/64/247.html 尚书7号OCR文字识别系统完全版 Shocr7.0 本软件系统是应用OCR(Optical Character Recognition)技术,为满足书籍、报刊杂志、报表票据、公文档案等录入需求而设计的软件系统。目前,许多信息资料需要转化成电子文档以便于各种应用及管理,但因信息数字化处理的方式落后,不但费时费力,而且资金耗费巨大,造成了大量文档资料的积压,因此急需一种快速高效的软件系统来满足这种海量录入需求。本软件系统正是适用于个人、小型图书馆、小型档案馆、小型企业进行大规模文档输入、图书翻印、大量资料电子化的软件系统。 ●识别字符 简体字符集:国标GB2312-80的全部一、二级汉字6800多个。纯英文字符集。 简繁字集:除了简体汉字外,还可以混识台湾繁体字5400多个以及香港繁体字和GBK汉字。 ●识别字体种类 能识别宋体、仿宋、楷、黑、魏碑、隶书、圆体、行楷等一百多种字体,并支持多种字体混排 。 ● 识别字号 初号 小六号字体。 ●表格识别 可以自动判断、拆分、识别和还原各种通用型印刷体表格。 ●可支持繁体WINDOWS系统 首先,尚书七号开始将整个OCR的过程,明确化了,通过程序的菜单,我们就能够知道整个OCR的过程,主要分为:“文件”、“编辑”、“识别”、“输出”等步骤。在文件菜单中,您可以调用扫描仪,或者选择将已经扫描好的图像文件打开。得到图像文件后,用户开始的工作,就是“编辑“菜单里面所提示的:图像页面的处理,其中包括图像页的倾斜校正(提供自动和手动实现方法),旋转等功能。处理完毕后,就可以进入“识别过程”,该过程关键的是“版面分析”,现在尚书七号的自动版面分析功能很强,面对报纸杂志等复杂情况的版面,也是分析的正确率很高。不再需要我们在尚书六号里面那样的建议手工划识别范围。也正是这点,大大降低了使用者的工作量。为了方便,“识别”菜单下,也提供了用户自己在自动版面分析后,通过修改识别范围框的属性,来决定需要识别否的功能(默认的情况下,图象属性的栏目是不用识别的。当然,如果用户还是习惯原来尚书六号那样,自己来设定识别区域,只要直接用鼠标划框就可以了。接下来,用户就可以直接选择“开始识别”的按钮了,等待识别的结果。 http://down.x6x8.com/soft/6/64/246.html 丹青中英日文OCR辩识 白金版 4.5 安装序列号:MXRD450-7DMN-MM7M-CFCB 功能简介 原文重现 尽在瞬间 ◎提供繁中、简中和日文三种操作介面 ◎可辨识繁中、简中、英文及日文四种文件 ◎辨识后的文件可储存成各种常用档案格式再编辑 ◎超高辨识速率及辨识率再提升,快速原文重现各式文件 产品说明 影像扫瞄 1. 可处理彩色、灰阶或黑白的文件影像。 2. 倾斜校正:自动侦测文件影像倾斜角度,并提供旋转影像之功能。 辨识文件 < 文件分析及辨识 > 1. 自动辨识:轻按一钮,即可自动分析、辨识、校对影像文件,图文分离,并转换成可编辑的文件档案。 2. 设定辨识字集:不需切换语文环境,即可辨识繁中、简中、纯英文及日文四种文件。 3. 高辨识速率:在Pentium III 667MHz个人电脑环境下,每秒钟能辨识高达150个中文字。 4. 多种字体辨识及重现:能够辨识多种印刷字体,如明体、黑体、仿宋体、楷书、圆体、隶书等,并在辨识后还原成原稿的字体。 5. 原文重现编辑环境:可辨识各种表格及影像,辨识结果依照原文件的图文版面格式呈现,方便您校对、编辑,节省重新排版的时间。 < 自动校对与学习 > 1. 再辨识功能:提供合/分字、合/分行、合/分区块、变更区块属性等再辨识功能,让您能够修正错误的辨识结果。 2. 学习新字功能:可将易辨识错误的字元输入到学习资料库中,提高下次辨识之正确率。 3. 候选字功能:提供原文影像供辨识后图文作校对,且针对型态相近之文字及语意上前后相连的字词提供候选字轻松更正辨识错误的文字。 4. 自动校对:利用内建的常用词库自动校对辨识出的文字,并标示出辨识时所碰到的疑问字,节省您校对的时间。 输出档案 1. 传送至其他应用软体:可将辨识结果直接传送至您所指定的应用软体中再处理,例如可设定辨识结果自动储存成HTML档案并直接传送至网路浏览器中。 2. 可储存多种档案格式:辨识后的结果可储存成不同之档案格式,如TXT、RTF、DOC、XLS、SLK、CSV、HTML等,方便您做不同的应用与处理。 http://down.x6x8.com/soft/6/64/248.html
转载自:http://topic.csdn.net/u/20110326/12/636E4A4C-4F5C-4026-99A7-64BCC0DDFC13.html
学计算机的你伤不起啊!!!!!!
老子六年前开始学计算机啊!!!!!!
于是踏上了尼玛不归路啊!!!!!!
谁特么跟老子讲计算机是王道专业啊!!!!!!
尼玛路边乞丐都是程序员!!!!!!
会打代码的一大把啊 有木有!!!!!!!!!
谁再跟老子讲计算机是王道专业 老子一个键盘盖死你啊,一个鼠标线勒死你啊!!!!
尼玛一上大学就找不到女朋友!!!!!!
班上男女比例八比一,八比一啊!!!!!!
都塔玛建军节了!!!!!!
就八比一还有学长来抢有木有!!!
本科学长,研究生学长还有博士学长!!!!!!
玛德学长你们是兔子啊就这么喜欢啃嫩草!!!!
还草!!!!!!
等熬过一年去迎新,一件行李十几个人竞争!!!!!!
要打群架了有木有!!!妹子吓哭了有木有!!!!!!
学了两年还在学数学物理!!!!!!
傅里叶!!!
拉普拉斯!!!
尼玛两个法国老头死了咋还这不安神呢!!!!!!
编程作业Code得抄在纸上交!!!
汇编啊!!!!!!
随随便便就几百行啊!!!!
抄次作业都要半个小时啊!!!!!!
课设还要插电板!!!!!
一个板子插一千多根线,一千多根线!!!!!!
连起来可以绕地球三圈半啊!!!!!!
谁再说计算机好学劳资吐一口血水腥死他!!!!!!
学计算机的孩纸真是命苦啊!!!!!!!!
电脑坏了来找你修的有没有啊!!!!!!!!!!
还有尼玛谁说学计算机就会修电脑!!!!!!
就会买电脑!!!!!!
劳资用linux不懂windows可不可以!!!!!!
劳资用windows也不懂 windows可不可以!!!!!!
谁规定学计算机的就要会修电脑啊!!!!!!!!!!!!!!
特么学光电的会不会发光啊!!!!!!!!!!!
特么学能源的会不会发电啊!!!!!!!!!!!!
特么学化学的会不会自爆啊!!!!!!!!!!!!
特么学妇产的难道会怀孕啊!!!!!!!!!!!!
你当你是冠希哥啊,是个男人就想修你电脑啊!!!!!!!!!!!!!
重装系统也别找我!!!!!!
劳资帮隔壁系妹子重装了10几次操作系统了啊!!!
10几次啊!!!!!!10几次连手都还没牵到啊!!!!!!
你特么一句想重装,哥特么的要通宵啊,有木有啊!!!!!!!!!!!!!!!
你们全家才是修电脑的啊!!!!!!!!!!!!!!!
问你会不由盗QQ的有木有啊!!!!!!
还鄙视你盗个QQ都不会搞什么计算机的有么有啊!!!!!!!!!!
Word不会用的来问你的有没有啊!!!!!!!!!!
Excel不会使的来找你的有没有啊!!!!!!!!!
电影音乐下不来找你拷的有没有啊!!!!!!!!!!!!!
看毛片中毒了来找你的有没有啊!!!!!!!!!!!!
老子是学计算机的,不是你妹的F1啊!!!!!!!!!
问我也不可以!!!!!!
劳资还是买块硬盘撞死算了!!!!!!
语法书一本就是一个砖头啊!!!!!!!!!!!
每一种都不一样啊!!!!!!!!!!
C,C++,C#,mips,java,sql,jsp,asp,php!!!!!!!!!!!
每一本都可以砸死你啊!!!!!!!!!
特么编译器都一坨啊!!!!!!!!!!!!!
学个C,指针搞死你啊!!!!!!!
学个汇编,寄存器几十个啊,尼玛每一个都不一样啊,指令有多少你都不敢想啊!!!!!!!!!!!
你当哥是CPU啊,人生价值就是执行指令啊!!!!!!!!!!
Sql还没学好就叫你写一个数据库的有没有啊!!!!!!!!!
Windows还没用好就叫你编译linux内核的有没有啊!!!!!!!!!!
MeeGo有没有听说过啊!!!!!!!!!!!!
尼玛上个学期还来学校开讲座啊!!!!!!!!!!!!
特么还讲的头头是道前途无限啊!!!!!!!!!!
这个学期就特么没啦!!!!!!!!!!
没啦!!!!!!
你特么怕不怕啊!!!!!!!!!
哥早几年毕业要是干这个现在就好跳楼了,有没有啊!!!!!!!!!!!!
工作敢不敢找啊!!!!!!!!!!!!!!!!!!!
面试书买了十几本有木有!!!
天天研究各个公司面经有木有!!!
都快面瘫了!!!!!!
玛德现在每个公司都学着Google考算法!!!!!!
算你妹!!!!!!
尼玛贵公司产品里只有算法啊!!!!!!
尼玛难道每个人都是搞ACM的啊!!!!!!
还不如去SM!!!!!!
NND面试官你要不是事先知道答案你做得出来吗!!!!!!
你做得出来吗!!!!!!
公司一开口就是要你各种精通啊!!!!!!!!!!!!!!!
精通C,精通java!!!!!!!!!!!!!!!!!!!
还要你妹的会人际沟通啊,怕你一个学计算机的不好相处啊!!!!!!!!
我特么现在就精通修电脑啊!!!!!!!!!!!!!!!!!!!!!
我特么现在就会咆哮啊!!!!!!!!!!!!!!
找到工作了也是民工!!!
是码农!!!
Robin都首富了,你都还没首付!!!!!!
羞愧吗!!!!!!
羞愧吗!!!!!!
工作了照样没有女朋友!!!
研发部门的比例连八比一都没有!!!!!!
新入职的mm上学期间都被下手了有木有!!!!!!
上学期间下手的 mm入职后都被挖了墙角有木有!!!!!!
卧槽都是程序猿,相煎那么急!!!!!!
尼玛是个搞计算机的最后都去搞单反,搞摄影!!!!!!
尼玛搞来搞去还不就是为了搞mm!!!!!
工作压力也超大!!!!!!
有没有啊!!!!!
操着卖白粉的心,挣着卖白菜的钱!!!
应用上线压力大,一分钟几十万收入有木有!!!
尼玛收入归老板,责任该你挡有木有!!!!!!
凌晨三点跑去公司解决线上故障!!!
大便便秘要带笔记本防止突发事件!!!
一天收几百条报警短信!!!有木有!!!有没有!!!有木有!!!!!!
万一哪天ML时报警短信来了,吓出病了,找谁哭去!!!!!!
找谁哭去!!!!!!
特么知不知道什么叫需求啊!!!!!!!!!!!!!!!!!
需求特么的就跟菊爆一样爽啊,有没有啊!!!!!!!!!!!!!!!!!
动一下你就痛的要死啊!!!!!!!!!!!!!!
多动几下下辈子都是折翅的天使啊!!!!!!!!!
特么知不知道什么叫文档啊!!!!!!!!!!!!!!!!
文档特么就跟自宫一样爽啊,有没有啊!!!!!!!!!!!!!!!
还没开操写文档就写死你啊!!!!!!!!!!!!!!!!!!
坑爹啊!!!!!!!!!!!!!!
当老子是文艺小青年啊!!!!!!!!!!!!!!!!!!!!
计算理论有没有听说过啊!!!!!!!!!!!!!!!!!
有限状态自动机下推自动机图灵机啊!!!!!!!!!!!!!!!!
别特么问我是什么机啊!!!!!!!!!!!!!!
都特么是别人YY的啊,有没有啊!!!!!!!!!!!!!!!
正则语言上下文无关语言递归可枚举语言啊!!!!!!!!!!!!
别特么问我是什么语言啊!!!!!!!!!!!!!!!!
学了半天停机问题搞不定啊!!!!!!!!!!!!!!!!!
别特么问我为啥搞不定啊,特么有人证明了你搞不啊!!!!!!!!!!!!!!!!!!!!!!!!
证明你搞不定啊,有没有啊!!!!!!!!!!!!!!!!!
每个你用过的IT产品和应用,都是背后无数程序猿的血与泪啊!!!!!!!!!!
每个学计算机的上辈纸都是身怀绝迹的路边乞丐啊!!!!!!!!!!!!!!runtime error go **** yourself啊!!!!!!!!!!有木有!!有木有!!!
每个程序猿上辈子都是折了护翼的卫生巾!!!你伤不起!!!伤不起!!!!!!!!!!!!
vmware虚拟机上的操作系统,希望配置共享主机的文件夹以方便文件或资料传输,方法比较多(如:组建一个主机和虚拟机的内部网络、为虚拟机分配一个独立IP 然后作为网络邻居访问等)。
本文实现利用Vmware的 vmware tool直接实现虚拟机读写主机文件夹。
一 设置共享文件夹
1、打开vmware,不要启动虚拟机上的操作系统,选择“编辑虚拟机设置”。
2、选择“选项”选项卡。
3、选中“共享文件夹”,右侧则出现设置选项。
4、点击“添加...”,设置一个名称(虚拟机上的操作系统使用),设置一个主机路径(主机操作系统愿意共享的文件夹路径)。
二 在虚拟机的linux中安装Vmware Tool
(不论虚拟机上安装的什么操作系统都要安装vmware tool后才能访问主机文件夹,如果虚拟机安装的是windows那就比较好办了,选择了安装vmware tool的话,vmware就把安装软件虚拟成一个光盘文件,供用户安装即可。其实,linux下的原理也是这样,只不过安装起来不如windows方便而已)
1、登陆linux
2、切换到 root身份: 建一个终端,输入命令:su,提示输入root的密码,输入即可。
3、从Vmware的“虚拟机”菜单点击“安装Vmware tool”,可以看到虚拟机中 linux的桌面存在了一个 VMWARE的光盘文件。
或者,进入 /mnt 目录可以看到 cdrom文件夹。
4、光盘里存放的就是安装文件。(运行rpm文件安装有问题!安装不上)
5、使用命令安装:
5.1 在linux终端里,用su命令切换到root用户。
5.2 用 “cp /mnt/cdrom/vmwareXXXXXX.tar.gz /tmp” 命令将后缀名为“tar.gz”的压缩文件复制到 /tmp 目录。
5.3 用“ tar zxf vmwareXXXXXX.tar.gz ”解压缩该软件包,默认解压到vmwareXXXXXX目录下(与文件名同名)。
5.4 cd vmwareXXXXXX, 进入“vmwareXXXXXX”目录。
5.5 “./vmware-install.pl ” 运行后缀名为pl的安装文件。
6、删除安装文件。
用 rm -fr XXXXX 删除目录或文件。
7、进入 /mnt 目录就可以看到 一个 hgft 文件夹,下面就有最开始设置的共享爱文件夹的名称。打开就可以直接访问主机文件夹。
来源: 人民日报海外版(北京)
连日来,美英法持续对利比亚发动空中打击。就在西方宣称空袭行动“进展顺利”的同时,空袭所造成大规模人员伤亡也引起国际社会的质疑,不满和反对声音开始增大。
据美军方介绍,从3月19日下午开始的“奥德赛黎明”军事行动已使利比亚防空力量大大削弱。20日,美军参谋长联席会议主席马伦称,多国控制利领空的第一阶段努力已“取得成功”。
不过,虽然西方称首轮空袭目标“范围有限”,但空袭规模之大、范围之广遭到诸多质疑。据利比亚国营电视台报道,西方一天的空袭即造成64人丧生,150人受伤。从目前看,空袭行动仍将持续一段时间,预计伤亡还将继续增加。空袭主要实现两大目标,一是摧毁利防空设施,为建立禁飞区,西方战机开始巡航创造条件;二是遏制卡扎菲向东进攻,并从班加西等地撤退。现在来看,这两目标都未达到,卡扎菲也未退让。
西方推动设立禁飞区,发动空袭的主要理由是防止利比亚发生人道主义灾难,阻止卡扎菲“屠杀平民”。但实际的情况是,这场军事干涉所导致的人员伤亡可能远远超出未加干涉之前。除了空袭直接导致大规模人员伤亡外,西方军事干涉还会使冲突升级、爆发持久内战,由此将造成更大的人道主义灾难。其实,西方早在上世纪90年代就开始高举“人道主义干预”大旗,并在波黑、伊拉克身上试验过,但从未成功过。从波黑、伊拉克的经验看,这种人道主义干涉往往与推翻政权相挂钩,为日后直接推翻政权做铺垫。历史经验也表明,所谓人道主义干涉往往是武力干涉他国内政的借口,名义上是出于国际道义,但实际上则是出于狭隘的政治或经济利益(如石油、不喜欢某个政权),甚至可能简单地出于对某个领导人的好恶(如西方都不喜欢萨达姆、卡扎菲)。背后绝非如其所宣扬的人道主义那么简单。
正因为此,阿拉伯国家联盟已经开始由原先支持立场转为动摇、“后悔”。为阻止卡扎菲对无辜平民的军事轰炸,阿盟3月12日决定促请安理会在利设立禁飞区,从而为英、法等国推动1973号禁飞决议提供了“合法”依据。但多国部队的空袭规模及后果大大超出阿盟预料,担忧造成大量平民死亡的责任很有可能首先由阿拉伯国家政府承担。20日阿盟转而谴责西方国家对利军事打击。阿盟秘书长穆萨表示,利比亚现在发生的情况偏离了安理会在利设立禁飞区的目的。安理会决议旨在保护利比亚平民,而不是轰炸和袭击更多平民。阿盟希望看到禁飞区而非炸弹。此外,俄罗斯强烈呼吁利所有各方以及参与军事行动的国家立即停火,采取一切措施避免殃及平民,反对“毫无选择”地使用武力。伊朗谴责西方国家空袭利比亚,并质疑西方国家空袭利比亚的目的,认为“这些国家通常以支持别国民众为借口,进入别国领土”,“实际上是为了谋求自己的利益”。委内瑞拉总统查韦斯谴责空袭行动是不正当的,说它只会造成更多的流血。作为北约成员的土耳其也反对军事干预以及设立禁飞区,敦促北约重审对利军事行动计划,称其“性质发生了变化”,警告北约此举将导致危险后果。
================
后记:几天了,每每看到此类的新闻,除了愤怒再也不知道用什么表达自己的感情了!国家与国家就像人与人一样,当一个远远强大于你的敌人欺负你的时候,你真的无能为力!山姆大叔,你不怕上帝看了会生气吗?你不怕报应吗?