程序/进程的前世今生

2012年2月8日 sigma 5 条评论 5,781 views

在这篇文章中,将介绍下程序从源码,到目标文件,到二进制码,再到装载,运行以及退出的整个过程,简称程序/进程的前世今生。

首先,区分一下程序和进程的概念。程序是一个静态的概念,而进程是一个动态的概念。程序一般是指从源码到二进制码这些过程的实体(勉强简称为前世),而进程则是从装载,到执行,到推出的实体(勉强简称为今生)。维基百科对两个概念的定义为:

程序的定义:

计算机程序或者软件程序(通常简称程序)是指一组指示计算机或其他具有讯息处理能力装置每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。

进程的定义:

行程(英语:Process,中国大陆译作进程,台湾译作行程)是计算机中已执行程序的实体。行程本身不会执行,是线程的容器。程式本身只是指令的集合,行程才是程式(那些指令)的真正执行。

对于上面进程的定义,个人觉得有点问题(不仅仅是大陆台湾叫法不同的问题),我认为应该是”进程是计算机已执行程序的实体。对于多线程程序,程序可能存在多个同时执行的指令流和控制流,称为线程。程序本身知识指令的集合,进程才是那些指令的真正执行”。

下面,就开始介绍程序/进程的前世今生,由于内容较多,在这里只是介绍前世今生的各个阶段,各个阶段的详细介绍,后面有空的话,并且觉得有必要的话,会单独写一文。不废话,转入正题,程序/进程大致需要经过以下阶段完成其前世今生(以C语言以及Linux进程为例): 阅读全文…

笑傲江湖三部曲

2012年2月5日 sigma 2 条评论 6,225 views

昨天无聊,又不想干活,于是去凤凰网随便找了个叫《金庸群侠传》的纪录片看。该纪录片与其说是介绍“群侠”的,不如说是介绍“电影”的,里面的介绍了很多改变自金庸作品的老电影,作为怀旧的我最喜欢看得就是很老的东西了,而其中介绍的《笑傲江湖》三部曲,更是引起了我的兴趣。

于是我跑去六维把笑傲江湖三部曲下了下来,并且花了一晚上算基本看完(因为第三部没怎么看)。

《笑傲江湖》三部曲是1990年,1991年,1992年由徐克,胡金铨,程小东等人导演的三部作品,包括《笑傲江湖》,《笑傲江湖之东方不败》以及《笑傲江湖之东方不败之风云再起》。具体的介绍,可以从百度百科以及维基百科的相关词条了解。

这三部作品中,《笑傲江湖》是奠基之作,也是铺垫之作,为后面的两部,尤其是《笑傲江湖之东方不败》作了铺垫,其中的插曲《沧海一声笑》则是本片的最大亮点。

《笑傲江湖之东方不败》则是该系列的巅峰之作,里面的元素非常多,表达的思想也很多,具有很多突破,应该算是徐克的成名作了。具体的解释网上有很多,我就不赘述,可以参见百度百科“笑傲江湖之东方不败”词条。唯一想说的是,这部片子好多老牌美女呀,林青霞,关之琳,李嘉欣….

《笑傲江湖之东方不败之风云再起》则我没怎么看,貌似也不怎么样,唯一的亮点就是那首主题曲《笑红尘》…
阅读全文…

我的2011

2012年1月12日 sigma 3 条评论 4,691 views

2011年已经过去了10来天了,其实在1月1日就想凑热闹写个2011的总结的,但是一直由于文笔羞涩,不敢下笔。可是,我貌似曾经下过每年写一个总结的决定,所以,只好硬着头皮,在回家前扯一扯。

2011年,算是我来ICT的第二年了(或者第三年?)了,这一年,感觉再也没有刚来的激情。上半年虽然有课,但基本没上什么课,可能上的课加起来不超过10节,都是靠考试前突击,不过貌似结果尚可;那时,我还住在青年公寓,每天上午11点准时起床,去食堂吃个饭,然后逆着上课回来的人流跑往计算所,然后去机房,调2H代码。

下半年,开局就不利,抽签抽到科一招,也不做工程了,开始“学术”了,可是非常不顺,“撞车”各种事都碰到了,到最后,除了教训,一无所有,这半年过得憋屈!

上面就算是我的2011的总结了。恩,在写这篇总结前,看到一段话,触动很深,引在这里:

我从没意识到,人生可以短暂到如此精确。回想刚刚过去的四月份,不过就是一眨眼的时间,但是人生的900分之一就已经消失了,真是恐怖啊。

事实上,你可以画一个30×30的表格,一张A4纸就够了。每过一个月,就在一个格子里打钩。你全部的人生就在这张纸上。你会因此有一个清晰的概念:你的人生是如何蹉跎的。

最后,前面写得主要是学习工作相关的,生活没怎么写,由于文笔羞涩,还是用图来补充诠释我2011的生活吧: 阅读全文…

分类: life 标签: , ,

个性VS傻瓜 点点网用神马打败传统博客?

2012年1月9日 sigma 2 条评论 5,241 views

在点点内测时期,我就通过邀请码进入了点点网,并体验了点点网。当时进入就觉得这东西挺新鲜的,比较兴奋写了一篇文章《成功注册点点,附找点点邀请码的方法》,并在那篇文章简要的谈了下初始的体验。九个月已经过去了,点点网已经成为了我每天必定登陆并停留时间较长的网站了,其中对点点有些体验和看法,体验主要是指我用点点的感受,而看法则是对博客平台进化的看法,个性VS傻瓜,是点点网打败传统博客的致命武器。

点点网作为一个简单记录,轻松发布的新一代博客平台,通过其个性的自定义,随时随地的记录和发布方式,掀起了2011年互联网江湖的腥风血雨,也掀起了轻博客与传统博客的争斗。作者认为,传统独立博客提供的是傻瓜服务,以点点网为代表的轻博客提供的是定制服务,主要体现在:简单,个性,开放,潮流的四个特性。

阅读全文…

MIPS中LL/SC指令介绍

2011年12月14日 sigma 1 条评论 17,211 views

注:本文主要参考了IBM的《Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现》一文,需要更详细的关于spinlock的实现可以看前述文章。

在多线程程序中,为了实现对共享变量的互斥访问,一般都会用spinlock实现,而spinlock需要一个TestAndSet的原子操作。而这种原子操作是需要专门的硬件支持才能完成的,在MIPS中,是通过特殊的Load,Store操作LL(Load Linked,链接加载)以及SC(Store Conditional,条件存储)完成的。

LL 指令的功能是从内存中读取一个字,以实现接下来的 RMW(Read-Modify-Write) 操作;SC 指令的功能是向内存中写入一个字,以完成前面的 RMW 操作。LL/SC 指令的独特之处在于,它们不是一个简单的内存读取/写入的函数,当使用 LL 指令从内存中读取一个字之后,比如 LL d, off(b),处理器会记住 LL 指令的这次操作(会在 CPU 的寄存器中设置一个不可见的 bit 位),同时 LL 指令读取的地址 off(b) 也会保存在处理器的寄存器中。接下来的 SC 指令,比如 SC t, off(b),会检查上次 LL 指令执行后的 RMW 操作是否是原子操作(即不存在其它对这个地址的操作),如果是原子操作,则 t 的值将会被更新至内存中,同时 t 的值也会变为1,表示操作成功;反之,如果 RMW 的操作不是原子操作(即存在其它对这个地址的访问冲突),则 t 的值不会被更新至内存中,且 t 的值也会变为0,表示操作失败。

SC 指令执行失败的原因有两种:

  • 在 LL/SC 操作序列的过程中,发生了一个异常(或中断),这些异常(或中断)可能会打乱 RMW 操作的原子性。
  • 在多核处理器中,一个核在进行 RMW 操作时,别的核试图对同样的地址也进行操作,这会导致 SC 指令执行的失败。

在IBM的那篇文章中,并没有说明SC是如何实现RMW是否有冲突的操作的。在一般实现中,处理器有两个专门的域给LL和SC指令,即上文中的“不可见的bit位”以及保存ll操作地址的“寄存器”。再LL之后,处理器会监测各种事件,当发生异常或者有别的处理器对该地址发了invalid请求时,会将不可见的bit位重置,从而导致后面的SC失败。

由于这样的bit位只有一位,存ll的寄存器也只有一个,因此,LL/SC无法实现嵌套,也即无法实现嵌套锁,这是程序员使用LL/SC所需要注意的。

分类: 技术相关, 未分类 标签: , , ,

无觅相关文章插件,快速提升流量