箫笑 发表于 2009-9-9 10:42

任务与进程

操作系统上讲调度的时候都一律谈进程跟线程,拿到uc/os上来,好像它调度的却是一个一个的任务,而到linux上就很少再提任务这个概念了,一句话就说这是个多任务的操作系统......
谁能解释一下,uc/os上的这个任务跟linux说的任务是不是一样的?还是跟linux上的进程这个概念更接近一点?没有弄明白这些个概念。。。。
谢谢了~

xinzha 发表于 2009-9-9 10:53

个人理解,在没有mmu的系统中(或者操作系统没有开启mmu支持),线程和任务基本可以划等号的,都是来竞争cpu时间的一个个指令序列,多个任务共享实地址空间,互相配合来完成既定的目标。
而在有mmu的系统中,进程更多的是一个资源的概念,一个进程能看到完整的32位的地址空间(多数情况,只考虑32位系统,linux下用户进程可以直接访问的是0xc0000000以下的3g空间,高1g空间需要特殊方式访问),而线程是在这4g空间之内所起的一些指令序列,多个线程共享进程地址空间。

箫笑 发表于 2009-9-9 11:41

你这提到MMU,那举个没有MMU的例子,uclinux,它也是引入了进程跟线程的概念。调度的也是进程啊。它这里提到的多任务,是不是可以理解为若干个进程共同来完成的一个任务。
我还是把进程跟任务混在一起了,uclinux里动辄成百上千的进程数,怎么也没办法把它等号到uc/os里最多也就百来个的任务上......

xinzha 发表于 2009-9-9 13:08

uclinux没用过,如果没有mmu的话,我怀疑它也就是跟线程一样的提法,你最好去找英文原版来看,看看老外到底是说process还是thread。

HWM 发表于 2009-9-9 13:52

本帖最后由 HWM 于 2009-9-9 13:54 编辑

只有三个概念:程序,进程和线程

程序——存放在外存的一个完整的代码。

进程——进入到内存的一个被执行的代码,其含有一个关联进程表。一个程序可以被多次同时执行,即形成多个进程(其实是多个进程表)。

线程——进程的最小不可分割的执行“单元”(一个进程可以有多个线程),线程可以使软件的执行“平行化”。

箫笑 发表于 2009-9-9 15:36

像LS说的都好理接,但是uc/os还没有引入进程这个概念,那么它调度的那个“任务”,跟linux上的进程有什么区别,也就是没搞明白这个问题。

xinzha 发表于 2009-9-9 16:06

你还是先去弄明白实地址模式操作系统和保护模式操作系统的概念吧,对你这个问题有帮助。
打个比方,在一个厂房之内,有人拿原料,有人包装,有人生产,有人喝茶,大家在同一个系统内协同工作,目的就是为了产出最终的产品,这里面的每一个人都有自己的工作还要做到不和其他人冲突,每个人就是一个线程或者任务,可是这种冲突又很容易发生,因为大家在生产过程中可能会同时要求占用同一个资源。
而从厂房这个角度来看,厂房里的人会认为他所工作的地方就是整个世界,他能获得厂房范围内一切可获得的资源,如果不能拿到还可以让喝茶的老板去向更高层(MMU或者内核的其他部分)申请获得,那么厂房就是整个工厂多个厂房中的一个独立的互不干扰的子系统,每个厂房看到的都是一个完整的4G空间,而不去关心是否有其他厂房要和自己竞争,此时厂房即进程。

HWM 发表于 2009-9-10 07:27

回 6 楼:

只是“叫法”不同而已(uc/os 中采用 TASK),类似于进程。

另外原则上MMU非进程所必须,只是有了MMU后在硬件层面上给了进程一个“独立”内存空间的支持。若仅强调内存保护的硬件支持,MPU就足够了。

gooogleman 发表于 2009-9-12 14:38

我要抽出点时间好好看看这个ucos了。
页: [1]
查看完整版本: 任务与进程