一个应用程序包含一个进程,进程包含一个线程。在执行过程中,应用程序可以创建其他进程(构成一个多进程网络),一个进程可以创建其他线程(构成一个多线程进程)。
进程是一个装入在内存中并且能够运行的程序。每一个进程都有它自己的虚拟地址空间,用来从EXE和DLL文件中装入数据和代码。一个进程拥有系统资源(比如文件和动态分配内存)和私有资源(比如线程和临界区),在一个进程运行过程中创建的资源随着进程的终止而被破坏,系统资源在进程终止时被释放或关闭。
线程是代码执行的基本单位,操作系统根据线程分配处理器时间。一个进程的所有线程都共享进程的虚拟地址空间,因此可以访问进程拥有的全局变量和资源。每一个线程都执行赋予它的代码,并拥有一个执行上下文(execution context),包含处理器寄存器的内容、线程堆栈,以及系统状态信息。由于这个原因,线程也常常被称为执行线索(threads of execution)。在同一个进程中从一个线程向另一个线程切换所花的时间要小于从一个进程向另一个进程切换的时间。一个线程上的状况切换要求也同时切换地址状况。
进程并不执行代码,它只是驻留在进程的地址空间中的资源的存储之处,其中资源包括线程。当一个进程被创建时,一个主线程也同时被创建,供初始代码执行(通常是WinMain),同时一个缺省堆也为了动态内存分配而被创建。附加线程、堆或资源在进程过程中可能被创建或分配。
系统中所有活动进程的线程都根据其优先级,经过规划后运行。每个线程都被分配一个大约20毫秒的时间片。一旦激活,线程正常运行直到时间片耗尽,此时操作系统选择另一个线程进行运行。由于当前执行的线程是抢先式的,因此这种方式被称为抢先式多任务(preemptive multitasking)。操作系统通过保存当前线程的执行状况来挂起它,通过恢复线程的执行状况来启动下一个线程。在这种方式中,在一台单处理器的机器上,操作系统可以给用户一种很多线程同时执行的假像。
转载自:《WINDOWS 95高级程序设计》第六章,同济大学出版社出版。

636

被折叠的 条评论
为什么被折叠?



