Windows 2000系统编程03.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:29 大小:1.5MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Windows 2000系统编程03.pdf

Windows2000系统编程03.pdf

预览

免费试读已结束,剩余 19 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

下载第3章进程、线程和纤程是不是人们比以前变得越来越没有教养?或许只有我这样?我甚至还没有提到在新闻中听到的那些陌生的人们。犯罪让人看起来越来越陌生。或许只是我天真,但我未曾记得孩提时候的事情,像现在这样陌生。我为许多生活的现代问题而责怪电话公司。令人惊奇,为什么人们似乎完全不适应环境?更多的粗暴?更多的困扰?这就是电话公司。考虑一下。如果要给某人打电话,当拨完最后一个号码时,听到的却是嘟嘟的忙音!嗯,也许他在忙着与别人通话。再拨一次,听到的还是忙音。好像情况没有那么糟糕,现在必须要应付烦人的等待。要与某人说话吗?只有等!比你更重要的人正在与之通话。你就必须等待。这是多大的打击啊。我认为,最好的事情就是tenretnI(通常,也包括电脑)。当你试图连接一个Wbe站点时,你很少会遇到线路忙的信号。当然,有时站点掉线或阻塞,不过很少见。当然,如果tenretnI服务商发出线路忙的信号,就是最终的过失。计算机从来不会出现忙的一个原因是,现代化机器的多任务特性。Windows2000拥有几种多任务处理的形式。当然,sWwodni可以同时运行多个程序。每个应用程序至少拥有一个执行线程,而它们也许有不止一个线程,与系统中的其他线程同时执行。如果要在一个进程内控制执行的多线程,可以创建纤程。当然,在实际生活中,拥有单处理器的计算机同时只能执行一项任务。即便有多处理器的计算机同时也不能一次执行无限多的任务。但是,计算机的速度非常快,使人看起来好像在同时做许多事。3.1其他操作系统如果用过其他操作系统(例如XINU),就会发现sWwodni的多进程,常常令人混淆。这是因为sWwodni使用许多其他操作系统所用的相同术语,而它们的含义常常有很大不同。当在sWwodni下启动一个程序时,就创建了一个进程。这类似于许多其他的操作系统,对吗?并非如此。在sWwodni下,一个进程拥有内存、打开的文件及其他资源。然而,进程并不执行。而是,每个进程启动一个单线程。该线程(只是一组处理器的寄存器)有正在执行的程序中的指针,及堆栈指针(及因此所有的局部变量)。那么,进程执行和线程执行有什么区别呢?只要每个进程只拥有一个线程,就没有区别。然而,线程可以创建更多的线程,这些线程又会创建更多的线程。除非使用特殊的技术,一个进程不能共享其他进程的资源,而单进程中的线程几乎共享了所有的资源。indowsWwodni和XINU间的另一个区别是如何创建新进程。在XINU中,要建立新进程,就调用派生(krof)命令。派生命令复制当前的进程,所创建另外的进程就是第一个进程的精确复制品。第3章进程、线程和纤程91下载该新进程拥有原始变量的私有拷贝。在大多数情况下,在调用krof后,调用cexe。这导致操作系统将新的可执行文件装载到复制的进程里。然而,有时做一个进程的拷贝是十分有用,在没有开始新的程序,于是就有两个进程继续运行。例如,在程序装载并处理一些数据后,就说要运行三个“假定分析”的脚本。在XINU下,可以派生三个新进程来操作数据。每个新进程都将拥有自己相关数据的拷贝。在sWwodni下,实际上没有这个选择。可以调用ssecorPetaerC,启动一个新程序。即十分类似于krof和cexe。新进程是全新的,且与原来的进程只有一点相似。当然,可以启动三个线程,执行“假定分析”。然而,如果线程改变了数据,它们都将看见这些改变。因为线程所访问的数据不是私有的。这并不是说,该问题没有解决方案。例如,可以将数据存入共享的存储区域,并使这些进程创建自己的拷贝。甚至将数据存入一个文件。这就是不同的基本原理,并需要不同的考虑问题的方式。W23ni的多任务处理还不同于61位的sWwodni。在Windows3.1,多个程序必须协作处理多任务。当程序要求系统发消息(或其他少数操作所执行的)时,系统可能选择使某个程序转为睡眠状态,并运行其他程序。然而,如果任何程序请求系统发消息失败,一切都会停止。当然,在任何时候,W23ni都能从该程序中撤出。这是很好的事情,不是吗?从某些观点来看,这是一个好主意。由于未能产生其他的程序,坏的程序就不能锁定整个系统。运行速度很慢的程序也不会减慢整个系统的速度。然而,在indowsWwodni方式的多任务处理(称作抢先多任务处理)下,作为编程人员,会有一组新问题要处理。在Windows3.1下,假设已经完全控制机器,除非有可以产生sWwodni的一个系统命令。然而,对于抢先的多任务处理,就不能做这样的假设。假设打开一个文件,并开始写入一些消息。在操作的中间,sWwodni抢先于该操作,也许有利于另一个线程。如果另一个线程试图打开相同的文件以