linux的多任务
linux并没有把任务和可 执行文件必然联系,它仅仅把任务作为一个执行绪来看待,以下就把任务说成进程,至于任务,作业,程序,进程的区别以及称呼演变就不谈了,用中文谈这些没有 意义的,在原汁原味的英文中可能可以看出个一二三来。linux没有把进程和可执行文件联系,试想在没有磁盘只有磁带的年代,可执行文件怎么定义?磁带的 速度...所谓进程就是一个跑在计算机上的执行绪,这是一个很纯朴的概念。虽然真正可执行的用户任务仍然要从磁带或者磁盘获取,但是那已经不是进程本身的 问题了,这正是接下来要说的,这也是一个机制和策略的问题。linux的进程架构为fork/exec,这里fork仅仅是进程的机制,而策略由exec 提供,fork使一件事成了进程,exec则定义了具体的事,fork产生一个一模一样的进程,然后exec可以运行不同的策略。为何unix开始的时候 采用这种方式呢?进程也要机制和策略分离?这样非常有用,其很重要的优点就是创建进程十分快速,fork就是克隆一个进程,也就是原本复制,现在又有了写 时复制,速度就更快了。还有一个fork/exec机制策略分离的好处就是操作系统本身不用介入用户进程,操作系统的功能之一就是进程管理,它管理的就是 进程本身,而不管是哪个用户的哪个进程,这样很有必要抽象出一个单独的进程机制让操作系统便于管理,仅此就够了。比如linux中的进程 task_struct就是这个东西,fork出来的就是这个东西,调度的也是这个东西,至于用户进程到底是什么,就不是task_struct了,而是 其类行为mm_struct的字段。fork用最快的速度产生一个进程,舞台就有了,至于想演什么戏,那就看exec的策略了,快速产生的进程马上进入操 作系统的管理队列被管理,这样整个多任务机制就形成了,fork出新的进程以后新进程和老进程共享地址空间直到新进程写地址空间(今天我忽略了进程的树形 关系,这也是unix/linux进程架构的一大块内容)。这样linux操作系统多任务机制的核心进程管理器就根本不用接触到任何用户的策略,也可以丝 毫不用管别的管理模块,比如内存管理,它只负责管理好进程就可以了,进程的具体策略由exec加载的地址空间来描述。因此可以说fork提供了进程机 制,exec提供了进程策略。unix/linux被如此设计出来的原因就是用户将计算机作为一个资源而操作系统负责在多个用户和多个进程之间合理分配资源,它们被设计出来的意义就是 用户和进程真的可以很好的共享资源。unix/linux的用户和进程将计算机看作可以被共享的资源,而Dos个人操作系统的用户则仅仅把计算机作为一台 机器,相应的dos操作系统不必采用分时机制,因而它只需要将设备进行抽象就可以了,dos无非就是改变了一下用户使用机器的方式,原来用户只是用插, 拔,拧的方式使用机器,现在只用输入命令就可以了,提供了设备抽象的dos做的事情就是这些。
页:
[1]