全部博文(23)
2014年(23)
分类: 嵌入式
2014-08-18 16:40:32
解释一:
Linux是一个多用户、多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以 在还未 执行完一个任务时又执行另一项任务。在操作系统设计上,从进程(Process)演化出线程(Thread),最主要的目的就是更好地支持多处理器,并 且 减小(进程/线程)上下文切换的开销。 进程和线程的关系 根据操作系统的定义,进程是系统资源管理的最小单位,线程是程序执行的最小单位。线程和进程十分相似,不同的只是线程比 进程小。 首先,线程采用了多个线程可共享资源的设计思想。例如,它们的操作大部分都是在同一地址空间进行的。其次,从一个线程切换到另一线程所花费的 代价比进程低。再次,进程本身的信息在内存中占用的空间比线程大。 因此,线程更能允分地利用内存。线程可以看作是在进程内部执行的指定序列。线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一 地址上。 Linux线程的定义 线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。在两个普通进程(非线程) 间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费很大的开销。 这里上下文切换的主要任务是保存老进程CPU状态,并加载新进程的保存状态,用新进程的内存映像替换老进程的内存映像。线程允许进程在几个正在运行 的任务之间进行切换,而不必执行前面提到的完整的上下文。 在Unix类系统中,曾经出现过一些不同线程标准,它们都支持可移植操作系统接口标准POSIX(Portable Operating System Interface Standard)。 POSIX 标准由IEEE制定,并由国际标准化组织接受为国际标准。POSIX 1003.1c是一个用于线程(在一个程序中当前被执行的代码段)的标准,以前是 P1993.4或POSIX.4的一部分,这个标准已经在1995年被 IEEE通过,归入ISO/IEC 9945-1:1996。 本文介绍线程主要是针对POSIX线程,即Pthread,因为Linux 对它的支持最好。相对进程而言,线程是一个更加接近于执行体的概念,它可以与进程中的其 它线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行 程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响 应时间。 也可以将线程和轻量级进程(LWP)视为等同,但其实在不同的系统/实现中有不同的解释。LWP更恰当的解释可能为一个虚拟CPU或内核的线程,它可以帮助 用户态线程实现一些特殊的功能。Pthread是一种标准化模型,它用来把一个程序分成一组能够同时执行的任务。
解释二:
进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序, 系统就创建一个进程,并为它分配资源,包括各种表格、内存 空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分 配CPU以及其它有关资源,该进程才真正运行。所以, 进程是系统中的并发执行的单位。 在Mach、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统 中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。 线程概念 线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该 任务的许多可能的 子任务之一。例如,假设用户启动了一个窗口中的数据库应用程序,操作系统就将对数据库的调用表示为一个进程。假设用户要从数据 库中产生一份工资单报表,并 传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输人数据库查询请求,这又是一个子任务。 这样,操作系统则把每一个请求――工资单 报表和新输人的数据查询表示为数据库进程中的独立的线程。线程可以在处理器上独立调度执行,这样, 在多处理器环境下就允许几个线程各自在单独处理器上进 行。操作系统提供线程就是为了方便而有效地实现这种并发性; 引入线程的好处 ; (1)易于调度。 (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 (3)开销少。创建线程比创建进程要快,所需开销很少。。 (4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的 并发性,使每个处理器都得到充分运行。 进程和线程的关系 (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。