April 2009

  • 文哥四月在听什么?
    • 方大同.-.[橙月].专辑.(mp3) 01.Singalongsong (English).mp3
    • 方大同.-.[橙月].专辑.(mp3) 02.小小蟲.mp3
    • 方大同.-.[橙月].专辑.(mp3) 08.每個人都會.mp3
    • Linus' Blanket-Signal Waltz.mp3
    • Rascal Flats - Bless The Broken Road.mp3
    • what hurts the most - rascal flatts.mp3
    • 王凡瑞-青春.wma
    • 驿动的心-蔡琴.wma
    • 驿动的心.mp3
    • 源氏物語千年紀Genji~オリジナルサウンドトラック [192k+bk]/OST
  • 四月文哥在思考什么?
    • c.第三个十天过去了,也就是一个月了,当初我说个把月可能可以学会一项具体技能,实践证明一个月不行;按目前的进度,个把月也就是两个月以内应该还不行。不过我一点也不慌,也不觉得自己食言,因为我感觉到自己每天的进步,这种感觉是实实在在的,还有什么比这个还更重要? 2009-4-6 9:57
    • b.终于搞明白了所谓的地址空间了。原来操作系统的代码是所有进程共享的。从逻辑上看,操作系统和应用程序是连体的程序任务,而虚存实现多进程任务的分隔,特权级机制实现在单任务内的安全分隔。 2009-4-9 20:04
    • b.用电脑多了会有种错觉,以为计算机屏幕上跑了好多不同的程序,包括也以为操作系统也一个独立运行的程序。事实上,这种不同只存在于不同的应用程序之间,操作系统在逻辑上是应用程序的一部分。如果这种假设成立,那么有个概念很难理解,就是到底什么叫运行? 2009-4-9 20:04
    • b.之所以很理解应用程序和操作系统是“运行”的同一体,是因为操作系统具体双重角色。操作系统在作硬件的扩展一面是与应用程序一同“运行”;在作为资源管理一面则是管理应用程序,有自己的“运行”…… 2009-4-9 21:37
    • b.操作系统与应用程序是“运行”的同一体可以从操作系统提供的DLL看出来。这些DLL都是操作系统提供的服务的具体代码,应用程序运行时要将其映射入地址空间,一并“运行”。可“运行”的计算机系统被模块化成很多部分。硬件、系统软件和应用软件是其中最主要的三个部分。 2009-4-10 11:47
    • b.不能理解操作系统与应用程序是“运行”的同一体的另一个原因是,运行指进程内代码是直接调用,而操作系统与应用程序的代码不全是运行在同一个地址空间中,也就是说操作系统给应用程序提供的服务是独立运行的进程,应用程序与服务进程通过进程同步的方式一并“运行”。 2009-4-11 11:05
    • b.明白了,原来在CPU一级根本没有进程、线程、中断调用等概念,CPU只管读PC寄存器的地址,从那里“顺序”的执行。不过CPU本身提供一些机制给系统一级进程控制CPU的执行路线,比如内外中断和软件中断。部分进程(比如操作系统进程)之所以具有系统管理权限是因为系统引导时固定赋于的。 2009-4-11 11:48
    • b.其实操作系统的系统调用(system call)可以看成BIOS的扩展。应用程序通过软中断使用系统调用,外设通过硬中断获得BIOS处理。 2009-4-11 19:48
    • a.宗教有什么用?哲学有什么用?原来它们的都属“监管”范畴。这两天研究操作系统,发现计算机世界充满了监管的概念。并联想到各个领域只要涉及管理的都有一个额外的管理机构在作用着。比如,政治里的司法,人生中的宗教;而操作系统的CPU、内存、设备管理都有一个额外的负责管理的执行程序。 2009-4-11 19:57
    • b.来了个问题,到底操作系统的系统调用(system call)覆盖些什么功能?比如,硬件驱动有没有system call?显然应该有,比如读磁盘文件;也可能没有,比如新安装的硬件。 2009-4-12 11:35
    • b.又来了一个问题,跨进程(线程)的中断是怎样触发的?硬件中断有引脚,而用户进程要进入核态可以自己发出软中断,但是一个优先更高的线程(比如OS的进程调度线程)怎么打断当前进程,占用CPU的呢?那只有一种可能,就是CPU每执行一条指令后都会检查有没有优先更高的线程要中断处理,是这样的吗? 2009-4-13 11:34
    • b.P.S.注意这里我对driver的翻译使用了三个中文词汇:程序、代码和软件。我想强调driver在本质上和APP、OS是一样的,都是计算步骤,都是定义给图灵机计算时参考的状态转换规则。 2009-4-13 19:03
    • b.不得不说,现代计算机的复杂化严重混淆我们对计算机本质的把握。比如,计算的输入不再是数值,也不再只是文字了,输入是鼠标单击、显示器上的虚拟按钮,甚至是汽车肽盘;输出也不再是终端的数值结果了,可以是图形图象、声音、活动视频等。运行在计算机内的程序代码除了执行计算任务,更多程序在执行管理的任务!比如上面的驱动程序,好好可以把所有代码写到单一的软件,因为各种原因,分割分三块。 2009-4-13 19:04
    • b.又来了一个很大的问题,我想知道程序、计算和算法三者之间的关系。计算(Computations)的目的是为了解题;而程序是计算(Computations)在计算机里的实现,描述计算(Computations)的具体步骤。计算机科学领域主要研究设计程序和开发程序的方法,还有研究执行这些程序的计算机的开发方法。因此,对于想进入这一领域的人来说,正确区别和理解程序、计算机、问题和计算这些概念间细微差别是非常重要的。 2009-4-14 1:53
    • b.计算是为了解题与用电脑上网玩QQ、播放音乐、用摇杆玩PC游戏和用打印机看似没什么关系,难道说玩QQ在解题吗?回答是肯定的,为什么呢?请将“问题”的定义解开,问题是由初始状态到结果状态的转换。有了“状态”就好理解了,只是上面的电脑日常应用没有太多我们刻板印象中问题的特征罢了。 2009-4-14 10:06
    • a.我的学习方式是半随机半顺序的,感觉这种方式效率还不错。顺序是基于典型图书的,随机是基于搜索引擎的。这种随机和顺序的来回切换目的都是找到自己的“科学问题”,或者叫关键问题。真正做到以我观书,把学到的内化为自己的观点。 2009-4-14 17:40
    • b.总结一下这两天对操作系统研究。操作系统在计算机系统中的主要功能管理硬件资源,而这些管理功能目的是为了实现多道程序的运行。操作系统管理计算机系统的三大主要硬件:处理器、内存和外部设置;管理模块分别叫处理器管理(也叫进程管理)、内存管理(也叫虚拟内存管理)和设备管理。另外,硬盘除作为设备管理(硬盘储存设备,相对于其它的输入输出设备)外,由于具体计算的额外需要--数据的文件持久化,并且文件管理的复杂性,另设第四项管理,文件管理。 2009-4-14 22:51
    • b.似乎又发现了一个计算的很本质的问题了。控制器到底是什么?图灵机的读写头本身就是一个有穷控制器(为什么有穷?),CPU有控制部分,外部设备也有控制器,这三者在什么地主有着本质的联系? 2009-4-15 12:34
    • b.研究了一下,由于图灵机只是一个抽象的机器,它的控制器与CPU的控制器不完全一致。图灵机各组成部分和运行机理都是概念性,CPU的控制器很大部分功能都是实现这些概念 ,比如图灵机没“运行”的概念,CPU的控制器内部有时钟发生器驱使CPU在一定的频率下运行。图灵机与CPU的关系还有很地方值得研究…… 2009-4-15 18:52
    • c.第四个十天走完了,头两天,代码研究到自定义控件的绘画便跳进了操作系统内部,所以大部分时间在研究操作系统。研究的成果是对计算机系统(包括硬件)整体有了更深入的了解。而这一次操作系统研究使我更加的理解了什么叫融会贯通,并且让我的求职的取向多了一个选择,就是驱动程序开发。 2009-4-15 19:00
    • b.忽然又想通一个东西,CPU的控制器与图灵机的控制器是在同一维度部分一致,在不同维度是一致的。CPU的控制器的大部分功能是监督并协调CPU各部分的协作的,这些控制器本身是计算能力有限的自动机!从这一个例子可以看出来,计算机系统的实现的一个模式,就是各部分硬件都使用了硬件化的自动机--所谓的控制器进行协调工作。 2009-4-16 18:44
    • b.硬件研究到这一步,我觉得理解计算机的实现原理比写具体应用来得重要,所以决定试图转肽,花十天时间看看能不能进入驱动程序开发领域。 2009-4-17 19:35
    • a.现在明白为什么很多学者反对速读,主张慢读的原因了。慢读的时候思维才能充分的流动,更好吸收新思想。 2009-4-18 19:16
    • b.原来“运行”的概念就是进程的概念!不过进程的定义--进程是程序的一次执行--在多道程序的环境下也不太好理解。因为不太清楚“运行”的确切涵义,从而不能把握多进程多线程分隔的本质。 2009-4-21 17:45
    • b.要理解“运行”的确切涵义关键在运行的需要的环境,理解“运行”到底完成什么任务。比如,进程任务是计算集中的还是数据处理集中的?如果是计算集中的,像进程调试器,那么调试器的多线程的可能性比较低了;如果是数据处理集中的,比如下载工具,下载任务完全可以并全“运行”。 2009-4-21 18:01
    • b.我们似乎来到了理解“运行”的一个关键点了。就是得把“计算任务”解开。从上面可知,很明显是“计算任务”的性质决定了线程是否可以并行运行。“计算任务”其实就是我们设计一个软件程序的初衷和目的。但是在我们完全理解计算机是如何工作来完成这些“任务”之前,“计算任务”很难解开。 2009-4-21 18:14
    • b.显然“计算任务”种类繁多,大概可以分为计算集中和数据处理集中两类,而它们都可说成是信息处理。我们第一印象,计算机完成这些任务利用了计算硬件资源,比如CPU、内存和IO设备;CPU显然已经够复杂的了,但是建立在内存和IO设备之的软件资源更复杂! 2009-4-21 19:23
    • b.多线程编程意味着什么?怎么没有多进程编程?要理解这两只须想想什么叫创建一个新进程或创建一个新线程就明白了。进程一般只管自己的计算任务,它自己被创建是操作系统的计算任务,从在内存中创建一个新进程或线程可以看出来(如线程控制块数据结构)。所以多线程编程是为了提高程序效率开了一扇侧门给程序员使用操作系统功能;而多进程则算是病毒行为了。我现在不明白的是,多线程如何可能?进程间有互斥资源,难道线程间没有吗? 2009-4-22 17:27
    • b.缺乏软件开发经验的人把“计算任务”看得太纯一,所以很难理解多线程如何可能。现代软件功能远不是过去以计算为主的了(其实即使是算法任务也有可能并行,比如动态规划算法),一个简单的例子,程序的GUI部分与用户交互,后台进行网络数据传输或其它计算任务。 2009-4-22 18:15
    • b.处理器调度工作内容分两种!为什么呢?因为显然,进程内的线程切换与进程间的线程切换是不同的,后者也叫进程切换。书上说:“Linux中进程和线程都有独立的PCB结构,线程共享进程的代码段、数据段,线程有自己的堆栈和私有数据段。 ”,对了吧,调度进程使用两种PCB结构进行调度工作。P.S.这里很有意思的是,处理器通过调度进程对“自己”进行调度。 2009-4-22 21:28
    • b.来分析一下“处理器通过调度器对自己进行调度”这个悖。其实这个也像罗素提出的理发师的悖,演绎推理中出现跨层次范畴而造成的。CPU是不知道什么叫调度,更不知道什么线程切换。CPU只会读PC寄存器后一条一条指令顺序执行。现代CPU开了中断这扇后门(这样可以改变CPU的执行路线)给系统开发者进行各种演绎,包括上面所说的调度、上下文切换等。举一个例子,进程调度开始于一个时钟中断,CPU接到这个中断转到约定的地址执行时钟中断处理程序--调度器,调度器经过调度算法选中一个新的线程进入,判断如果是进程内线程则进行线程上下文切换并执行,否则进行进程上下文切换。这里边与其说是CPU调度自己,不如说是调度器把自己调出给新的线程占用CPU。 2009-4-23 1:01
    • b.上下文切换是调度器的任务之一,但不是只有调试器才会进行上下文切换。比如线程在调用系统服务时进行的上下文切换(这个切换与进程或线程上下文切换都有不同)。我现在特想知道的是,调度算法的详细和具体的各种上下文切换过程详细。 2009-4-23 12:22
    • b.上下文切换是多道程序的特征和必要。但是有一种切换迷惑了我们,就是协作式任务的切换,比如系统服务或硬件驱动调用。细心想想,其实切换的本质是换工作内容。由WORD切换到音乐播放器是进程切换;由WORD里的拼写检查到接受用户输入的切换是线程切换。而由音乐播放器解码到声卡驱动将解码数据输出的切换则是一种伪切换,它是一个无法分解的任务前后部分,但是因为要对硬件的保护而做成客户服务形式。这个过程中,音乐播放器的主线程被挂起,而声卡驱动输出可能不需要音乐播放器的主线程的任何信息(这就是所谓的无关上下文任务),完成后就绪(具体可能置一下音乐播放器的主线程某状态位)音乐播放器的主线程…… 2009-4-23 12:44
    • b.其实在明确进程切换与线程切换具体过程前,还是没法比较谁的开销大。因为目前这里还有一处灰色地带在作祟,就是进程占用的非处理器资源(内存、文件和IO)。这处灰色甚至影响了我质疑线程并行的可能性。线程间共用进程的代码和静态数据很好理解,因为毕业CPU是交替执行,静态数据又不能改;每个线程有自己的数据区和堆栈也很好理解。所以下一步该研究一下操作系统是怎么分配非处理器给不同的进程的,线程又是如何使用这些资源的。 2009-4-24 0:54
    • b.悟到了一个东西,就是计算任务可能繁多,但是可以从任务的中断请求级别(IRQL)和线程优先级别来分类。IRQL越高的证明任务相对简单,占用CPU时间较短。比如,用户进程的优先级最低,因为它相对复杂需时更多的CPU执行时间。另一种分类方法是看代码运行的操作模式,也就是核心模式还是用户模式。 2009-4-25 18:58
    • c.不知不觉第五个十天已经走完,结果是下决心完全转向,转向驱动开发。研究操作系统结构给了我一些新体会:第一,感觉找到了理论和实践的契合点,那就是驱动程序;第二,相对研究复杂的应用框架,了解了操作系统结构后,C语言开发会更简单,说不定更快的找到工作。关键是操作系统结构是必研究的。努力,加油! 2009-4-27 1:20
    • a.啊,原来翻译和慢读都是建构学习的变相形式而已,正! 2009-4-27 19:36
    • b.其实说CPU并行执行是不确切的,并行是计算任务本身决定。计算任务并行的本质(意思是说也有没法并行的计算任务了)是并行执行的第一个前提条件;第二个条件是操作系统提供了实现并行的机制,是操作系统让CPU并行执行才是确切的。 2009-4-28 19:06
    • b.分析一下什么叫开拓CPU的处理能力。假设我们设计了一款CPU,那么它的处理能力肯定有一个固定的峰值。在单任务的情况下,由于计算任务的多样化,各种计算任务对CPU的利用率是不同的,而且大多未能达CPU的峰值。为了提供CPU的利用率,于是引入多任务并行(多进程和多线程)机制,方法是增加一些管理级计算任务负责多任务并发问题,比如任务(线程)调度和任务(线程)同步问题。 2009-4-29 11:38
    • b.多任务是在软方面开拓CPU的处理能力,现代CPU在硬方面也在不断开拓,比如线程并发功能做进了CPU。CPU硬件除可以实现线程级并行(所谓超线程技术),还可以实现指令级并行Instruction Level Parallelism(所谓的超标量技术),真是让人惊叹不已。 2009-4-29 11:45
    • b.把线程并发功能做进了CPU使我对操作系统实现产生了一个很大的问号,如果是那样,操作系统与CPU不是更加紧密?操作系统被安装时不是要安装CPU驱动程序?这个真幽默!看来现在还不是研究这么详细的时候,确定一下操作系统在安装时肯定会检测当前机器所使用CPU后安装相应的内核模块就够了。作为一个一般应用开发者,大多情况连多线程都不用管,他只需要告诉编译器,你给我运行就行了! 2009-4-29 11:55

你可能感兴趣的:(多线程,算法,工作,音乐,任务,硬件驱动)