打印

请教一下:多线程在OS里面是怎样一个实体?RTOS中能否应用?

[复制链接]
2611|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoohoo|  楼主 | 2007-9-27 09:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看操作系统方面的东西,对这个"多线程"的概念不是很能理解,google得到的都是概念上面的东西,不知道在程序当中的实体是怎样一个东西?谢谢!

    PS:比如对进程来说,看了一个调度器方面的知识基本就知道是怎样一个东西,基本是人为改变SP得到的一个运行实体,但是对多线程一直不知道是怎样一个东西。

相关帖子

沙发
HWM| | 2007-9-27 09:41 | 只看该作者

“线程”是程序和状态的集合,

多线程就是可以有多个这样的集合同时存在。

要注意的是同样的程序和不同的状态可以组成不同的线程

另外一个程序的执行(一个进程)可以分解成若干个并行的线程。这是并行处理的基础。

使用特权

评论回复
板凳
yoohoo|  楼主 | 2007-9-27 09:54 | 只看该作者

能否举一个例子,最好能写一些代码。

to HWM:

能否举一个例子,最好能写一些代码。

因为我无法想象同样的程序核不同的状态组合有什么意义?
另外,我现在正在想编一个对51的OS,能否将这个东西应用进去?

比如对于进程,我认为我大概已经理解了,如果要我解释的话,我就直接从定时器这里入手解释,因为在cpu内部的一个任务就差不多相当于一个进程,定时器定时中断,通过保存SP指向的堆栈信息来切换任务,于是就形成了多任务。
  但是对于线程,想不出还能如何分割,是在一个task当中分割吗?

  另外,网络上面有看到OS是多线程的,但是又说道MIPS的54K系列是支持多线程的,74K系列没有支持多线程,这个我就更加模糊了,多线程是否需要硬件支持,到底是怎么一个东西能够提供效率,减少任务切换的开销?

what is the thread,what the hell is the threed?酱紫!

使用特权

评论回复
地板
dld2| | 2007-9-27 09:56 | 只看该作者

任务和进程不类似

和线程类似。

使用特权

评论回复
5
HWM| | 2007-9-27 10:28 | 只看该作者

LZ:打一个形象的比方

你去做一件事(相当于一个进程),但你却会用两只手同时操作,这就有点象两个同时运行的“线程”。

在只有单核的单CPU系统中,微观的来说同时只能有一个线程运行。

下面概述一下,程序,进程,线程的关系,希望对你有帮助:

程序(未执行)

进程(已执行的程序实例),包含程序本身和当前状态。

线程(在进程中执行的最小单位),同样包含程序本身和当前状态。

一个程序可以有多个执行实例( 进程),而一个进程又可分成多个线程。

使用特权

评论回复
6
yoohoo|  楼主 | 2007-9-27 10:40 | 只看该作者

还是没有理解

   还是没有看到实体在哪里,比如对于进程,比如在linux当中,运行两个gvim,依我现在的知识,知道这两个gvim形成的进程的ID是不一样的,并且这两个gvim有各自的运行环境包括虚拟内存空间,堆栈空间。我可以找到实体。
   那么线程有什么?

这样问吧:
    在简单的比如uCos里面,在51上面的移植,有没有多线程存在?

使用特权

评论回复
7
xwj| | 2007-9-27 11:17 | 只看该作者

编程其实就是人的思想的体现,和人的思维模式是一致的


人只有一个大脑,任意时间只能想一个东西  --相当于只有一个CPU

但人却可以“同时”做几件不相关的事,比如一边工作,一边灌水;或一边吃饭,一边聊天。
但微观上却是错开了时间的          --这就相当于时间片的切分

在我们“同时”做的几件事的某一件中,又有很多步骤是重复的,相近的:
比如说要填10份表格发给不同的人,你可以一张一张的填,也可以把10份中一个个相同项全填完,再填下一个相同项
--前者的表格是串联的,相当于单线程;后者是并联的(10个线程)。虽然总的时间好像是一样的,但是当某个环节有等待是就不同了
--比如说某个事情(比如审批)要几个步骤,有的在你这里办,有的在别人那里,而很多人都要办这个事情,你说是等全部办完了再开始下一个还是在等待中另开线程直接给下一个办理好呢?


--同样的,设计程序也是一样的,多线程编程的含义是将程序任务分成几个并行的子任务。

比如大家上同一个网站,打开一个网页要多次应答、请求、回复,逐一送出每个图片、文件,最终才能显示出来...
另一个人打开网页也是一样要这样一大堆处理.
这是就明显该用多线程给每一个连接、请求服务了
而服务器里实际上只是运行了一个程序(进程),进程中在切分(或动态切分)出多个线程,来处理类似的、却有互不相干的事件


使用特权

评论回复
8
yoohoo|  楼主 | 2007-9-27 12:20 | 只看该作者

找到了实体了,基本知道线程大概是一个怎样的东西了

综合一下,经xwj指点,终于有些明白了,整理一下,帮我看看是否对:


看xwj的回复,的确多线程能提高效率,另外,我理解好像需要在软件设计部分要做一些技巧性的东西,我看java里面好像有一个类之类的东西是专门针对多线程编程的。这样的理解是否正确?


另外我再问一下:
1、如果用C语言,要实现多线程的话,一般要如何做?
     1、1 在潜入式当中,比如uCos之类的系统,如何应用多线程这个东西?

2、我google过,好像mips和arm有多线程和多核之争,请问一下,这个mips的硬件多线程大概是一个什么东西?

使用特权

评论回复
9
yoohoo|  楼主 | 2007-9-27 13:17 | 只看该作者

google了一下,好像在PC上,多线程需linux和win之类OS的支持。

google了一下,好像在PC上,多线程需linux和win之类OS的支持。

那如果要在嵌入式的uCos上面实现多线程要如何实现?即uCos之类的是否支持多线程?

使用特权

评论回复
10
ketp| | 2007-9-27 22:21 | 只看该作者

-

多线程就是多任务,内存空间是扁平的.

进程要有mmu来保护内存空间,

比如整个rtos就是一个进程,而任务就是线程

使用特权

评论回复
11
biao.l| | 2007-9-28 00:45 | 只看该作者

按我理解,UC/OS并没有多线程,

   按我理解,UC/OS并没有多线程,它只有进程,并不会分开几个同时工作,即没有时间片轮转办法来运行程序.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

46

帖子

0

粉丝