《最新实验4并发与调度PPT课件》由会员分享,可在线阅读,更多相关《最新实验4并发与调度PPT课件(29页珍藏版)》请在金锄头文库上搜索。
1、实验实验4 4并发与调度并发与调度安全性安全性安全性安全性 输入输入输入输入/ /输出输出输出输出管理管理管理管理 调度调度调度调度 存储器管理存储器管理存储器管理存储器管理进程描述进程描述进程描述进程描述与控制与控制与控制与控制 并发性并发性并发性并发性 文件管理文件管理文件管理文件管理 联网联网联网联网 操作系统的各个主题操作系统的各个主题操作系统的各个主题操作系统的各个主题 粗线表示从设计和实现粗线表示从设计和实现粗线表示从设计和实现粗线表示从设计和实现的角度考虑关系非常紧密的角度考虑关系非常紧密的角度考虑关系非常紧密的角度考虑关系非常紧密在本实验中,通过对事件和互斥体对象的了解,来在本
2、实验中,通过对事件和互斥体对象的了解,来在本实验中,通过对事件和互斥体对象的了解,来在本实验中,通过对事件和互斥体对象的了解,来加深对加深对加深对加深对Windows 2000Windows 2000线程同步的理解。线程同步的理解。线程同步的理解。线程同步的理解。 回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,加深对Windows 2000Windows 2000线程的理解线程的理解线程的理解线程的理解 了解事件和互斥体对象了解事件和互斥体对象了解事件和互斥体对象了解事件和互斥体对象 通过分析实验程序,
3、了解管理事件对象的通过分析实验程序,了解管理事件对象的通过分析实验程序,了解管理事件对象的通过分析实验程序,了解管理事件对象的APIAPI 了解在进程中如何使用事件对象了解在进程中如何使用事件对象了解在进程中如何使用事件对象了解在进程中如何使用事件对象 了解在进程中如何使用互斥体对象了解在进程中如何使用互斥体对象了解在进程中如何使用互斥体对象了解在进程中如何使用互斥体对象 了解父进程创建子进程的程序设计方法了解父进程创建子进程的程序设计方法了解父进程创建子进程的程序设计方法了解父进程创建子进程的程序设计方法实验目的实验目的在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的
4、相关内容在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容需要做以下准备需要做以下准备需要做以下准备需要做以下准备 一台运行一台运行一台运行一台运行Windows 2000 ProfessionalWindows 2000 Professional操作系统的计算机操作系统的计算机操作系统的计算机操作系统的计算机 计算机中需安装计算机中需安装计算机中需安装计算机中需安装Visual C+ 6.0Visual C+ 6.0专业版或企业版专业版或企业版专业版或企业版专业版或企业版工具工具/准备工作准备工作事件对象事件对象事件对象事件对象互斥体对象互斥体对象互斥体对象互斥
5、体对象 实验内容与步骤实验内容与步骤实验估计时间:实验估计时间:实验估计时间:实验估计时间:120120分钟分钟分钟分钟,难度系数:,难度系数:,难度系数:,难度系数:5 54.2 Windows 2000 线程间的通讯线程间的通讯Windows 2000Windows 2000提供的线程间通讯类内核对象允提供的线程间通讯类内核对象允提供的线程间通讯类内核对象允提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,许同一进程或跨进程的线程之间互相发送信息,许同一进程或跨进程的线程之间互相发送信息,许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,
6、包括文件、文件映射、邮件位和命名管道等,包括文件、文件映射、邮件位和命名管道等,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允其中最常用的是文件和文件映射。这类对象允其中最常用的是文件和文件映射。这类对象允其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中许一个线程很容易地向同一进程或其他进程中许一个线程很容易地向同一进程或其他进程中许一个线程很容易地向同一进程或其他进程中的另一线程发送信息的另一线程发送信息的另一线程发送信息的另一线程发送信息背景知识背景知识文件对象文件对象文件对象文件对象 文件对象是人们所熟悉的永久存储的传统元
7、素。将一个文件对象是人们所熟悉的永久存储的传统元素。将一个文件对象是人们所熟悉的永久存储的传统元素。将一个文件对象是人们所熟悉的永久存储的传统元素。将一个文件看作是内核对象可使开发人员获得比标准文件看作是内核对象可使开发人员获得比标准文件看作是内核对象可使开发人员获得比标准文件看作是内核对象可使开发人员获得比标准C+ C+ 文件文件文件文件操作更为强大的功能操作更为强大的功能操作更为强大的功能操作更为强大的功能 内核允许开发人员在系统设备或网络上创建代表永久存内核允许开发人员在系统设备或网络上创建代表永久存内核允许开发人员在系统设备或网络上创建代表永久存内核允许开发人员在系统设备或网络上创建代
8、表永久存储数据块的文件对象。这些文件对象是对永久存储数据储数据块的文件对象。这些文件对象是对永久存储数据储数据块的文件对象。这些文件对象是对永久存储数据储数据块的文件对象。这些文件对象是对永久存储数据的低级访问者;用的低级访问者;用的低级访问者;用的低级访问者;用C+ C+ 运行库或其他方法打开的所有文运行库或其他方法打开的所有文运行库或其他方法打开的所有文运行库或其他方法打开的所有文件最终都要变成对件最终都要变成对件最终都要变成对件最终都要变成对CreateFile() APICreateFile() API的调用的调用的调用的调用 CreateFile() CreateFile() 函数分
9、配一个内核对象来代表一个永久的文函数分配一个内核对象来代表一个永久的文函数分配一个内核对象来代表一个永久的文函数分配一个内核对象来代表一个永久的文件。当在磁盘上创建一个新文件或当打开一个已经存在件。当在磁盘上创建一个新文件或当打开一个已经存在件。当在磁盘上创建一个新文件或当打开一个已经存在件。当在磁盘上创建一个新文件或当打开一个已经存在的文件时,就调用这个的文件时,就调用这个的文件时,就调用这个的文件时,就调用这个APIAPI背景知识背景知识 创建调用比创建事件、互斥体或信号量要复杂。首先必创建调用比创建事件、互斥体或信号量要复杂。首先必创建调用比创建事件、互斥体或信号量要复杂。首先必创建调用
10、比创建事件、互斥体或信号量要复杂。首先必须在须在须在须在lpFilenamelpFilename中指定对象名,并且要指向文件系统中中指定对象名,并且要指向文件系统中中指定对象名,并且要指向文件系统中中指定对象名,并且要指向文件系统中所访问的位置。接着必须用所访问的位置。接着必须用所访问的位置。接着必须用所访问的位置。接着必须用dwDesiredAccessdwDesiredAccess参数提供所参数提供所参数提供所参数提供所需的访问级别需的访问级别需的访问级别需的访问级别 由创建函数要求的共享模式参数由创建函数要求的共享模式参数由创建函数要求的共享模式参数由创建函数要求的共享模式参数dwSha
11、reModedwShareMode可以指定可以指定可以指定可以指定当另一进程企图同时访问数据时会发生什么。与所有其当另一进程企图同时访问数据时会发生什么。与所有其当另一进程企图同时访问数据时会发生什么。与所有其当另一进程企图同时访问数据时会发生什么。与所有其他第一级内核对象一样,可以利用他第一级内核对象一样,可以利用他第一级内核对象一样,可以利用他第一级内核对象一样,可以利用lpSecurityAttributeslpSecurityAttributes参数指定所创建对象的安全性。接着,要通过参数指定所创建对象的安全性。接着,要通过参数指定所创建对象的安全性。接着,要通过参数指定所创建对象的安
12、全性。接着,要通过dwCreationDispositiondwCreationDisposition参数告诉创建函数,如果数据在参数告诉创建函数,如果数据在参数告诉创建函数,如果数据在参数告诉创建函数,如果数据在指定的永久存储介质中存在或不存在时的行为指定的永久存储介质中存在或不存在时的行为指定的永久存储介质中存在或不存在时的行为指定的永久存储介质中存在或不存在时的行为背景知识背景知识 可以使用可以使用可以使用可以使用dwFlagsAndAttributesdwFlagsAndAttributes参数来指定文件的属性参数来指定文件的属性参数来指定文件的属性参数来指定文件的属性 ( (如只读如
13、只读如只读如只读) ) ,并确定对数据所执行的读写操作的行为。最,并确定对数据所执行的读写操作的行为。最,并确定对数据所执行的读写操作的行为。最,并确定对数据所执行的读写操作的行为。最后一个参数后一个参数后一个参数后一个参数hTemplateFilehTemplateFile可指定另一个文件对象作为模可指定另一个文件对象作为模可指定另一个文件对象作为模可指定另一个文件对象作为模板,以便为新创建的文件复制属性或扩展属性板,以便为新创建的文件复制属性或扩展属性板,以便为新创建的文件复制属性或扩展属性板,以便为新创建的文件复制属性或扩展属性 Windows 2000Windows 2000系统中包括
14、许多文件对象的工具函数系统中包括许多文件对象的工具函数系统中包括许多文件对象的工具函数系统中包括许多文件对象的工具函数APIAPI 通常可以使用通常可以使用通常可以使用通常可以使用ReadFile() ReadFile() 和和和和WriteFile() APIWriteFile() API在永久存储和在永久存储和在永久存储和在永久存储和应用程序间通过文件对象来移动数据。因为创建调用将应用程序间通过文件对象来移动数据。因为创建调用将应用程序间通过文件对象来移动数据。因为创建调用将应用程序间通过文件对象来移动数据。因为创建调用将对象的大多数复杂性封装起来了,这两个函数只是简单对象的大多数复杂性封
15、装起来了,这两个函数只是简单对象的大多数复杂性封装起来了,这两个函数只是简单对象的大多数复杂性封装起来了,这两个函数只是简单地利用指向要交换数据的文件对象的句柄地利用指向要交换数据的文件对象的句柄地利用指向要交换数据的文件对象的句柄地利用指向要交换数据的文件对象的句柄 ( (即指向内存内即指向内存内即指向内存内即指向内存内的数据缓存区的指针的数据缓存区的指针的数据缓存区的指针的数据缓存区的指针) ) ,然后计数移动数据的字节数。除,然后计数移动数据的字节数。除,然后计数移动数据的字节数。除,然后计数移动数据的字节数。除此之外,这两个函数还执行重叠式的输入和输出,由于此之外,这两个函数还执行重叠
16、式的输入和输出,由于此之外,这两个函数还执行重叠式的输入和输出,由于此之外,这两个函数还执行重叠式的输入和输出,由于不会不会不会不会“ “堵塞堵塞堵塞堵塞” ”主线程,可用来传送大量的数据主线程,可用来传送大量的数据主线程,可用来传送大量的数据主线程,可用来传送大量的数据背景知识背景知识 CreateFile() CreateFile() 方法除了可访问标准的永久文件外,还可访方法除了可访问标准的永久文件外,还可访方法除了可访问标准的永久文件外,还可访方法除了可访问标准的永久文件外,还可访问控制台输入和输出,以及从命名的管道来的数据问控制台输入和输出,以及从命名的管道来的数据问控制台输入和输出
17、,以及从命名的管道来的数据问控制台输入和输出,以及从命名的管道来的数据 GetFileType() APIGetFileType() API指明要处理的关键文件句柄的结构。指明要处理的关键文件句柄的结构。指明要处理的关键文件句柄的结构。指明要处理的关键文件句柄的结构。除此之外,内核还提供了除此之外,内核还提供了除此之外,内核还提供了除此之外,内核还提供了GetFileInformationByHandle() GetFileInformationByHandle() 和和和和GetFileSize() GetFileSize() 、GetFileTime() APIGetFileTime()
18、API用于获得关键数据用于获得关键数据用于获得关键数据用于获得关键数据的详细情况。其他用于在文件中改变数据的工具函数包的详细情况。其他用于在文件中改变数据的工具函数包的详细情况。其他用于在文件中改变数据的工具函数包的详细情况。其他用于在文件中改变数据的工具函数包括括括括LockFile() LockFile() 、SetFilePointer() SetFilePointer() 和和和和SetEndOfFile() APISetEndOfFile() API 除了这些基于句柄的除了这些基于句柄的除了这些基于句柄的除了这些基于句柄的APIAPI之外,内核还提供了大量的工之外,内核还提供了大量的
19、工之外,内核还提供了大量的工之外,内核还提供了大量的工具,用于按文件名对文件直接操作。文件对象用完之后,具,用于按文件名对文件直接操作。文件对象用完之后,具,用于按文件名对文件直接操作。文件对象用完之后,具,用于按文件名对文件直接操作。文件对象用完之后,应该用应该用应该用应该用CloseHandle() APICloseHandle() API加以清除加以清除加以清除加以清除背景知识背景知识文件映射对象文件映射对象文件映射对象文件映射对象 比使用比使用比使用比使用ReadFile() ReadFile() 和和和和WriteFile() APIWriteFile() API通过文件对象来读取通
20、过文件对象来读取通过文件对象来读取通过文件对象来读取和写入数据更为简单的是,和写入数据更为简单的是,和写入数据更为简单的是,和写入数据更为简单的是,Windows 2000Windows 2000还提供了一种还提供了一种还提供了一种还提供了一种在文件中处理数据的方法,名为内存映射文件,也称为在文件中处理数据的方法,名为内存映射文件,也称为在文件中处理数据的方法,名为内存映射文件,也称为在文件中处理数据的方法,名为内存映射文件,也称为文件映射。文件映射对象是在虚拟内存中分配的永久或文件映射。文件映射对象是在虚拟内存中分配的永久或文件映射。文件映射对象是在虚拟内存中分配的永久或文件映射。文件映射对
21、象是在虚拟内存中分配的永久或临时文件对象区域临时文件对象区域临时文件对象区域临时文件对象区域 ( (如果可能的话,可大到整个文件如果可能的话,可大到整个文件如果可能的话,可大到整个文件如果可能的话,可大到整个文件) ) ,可将其看作是二进制的数据块。使用这类对象,可获得可将其看作是二进制的数据块。使用这类对象,可获得可将其看作是二进制的数据块。使用这类对象,可获得可将其看作是二进制的数据块。使用这类对象,可获得直接在内存中访问文件内容的能力直接在内存中访问文件内容的能力直接在内存中访问文件内容的能力直接在内存中访问文件内容的能力 文件映射对象提供了强大的扫描文件中数据的能力,而文件映射对象提供
22、了强大的扫描文件中数据的能力,而文件映射对象提供了强大的扫描文件中数据的能力,而文件映射对象提供了强大的扫描文件中数据的能力,而不必移动文件指针。对于多线程的读写操作来说,这一不必移动文件指针。对于多线程的读写操作来说,这一不必移动文件指针。对于多线程的读写操作来说,这一不必移动文件指针。对于多线程的读写操作来说,这一点特别有用,因为每个线程都可能想要把读取指针移动点特别有用,因为每个线程都可能想要把读取指针移动点特别有用,因为每个线程都可能想要把读取指针移动点特别有用,因为每个线程都可能想要把读取指针移动到不同的位置去到不同的位置去到不同的位置去到不同的位置去为了防止这种情况,就需要使用某为
23、了防止这种情况,就需要使用某为了防止这种情况,就需要使用某为了防止这种情况,就需要使用某种线程同步机制保护文件种线程同步机制保护文件种线程同步机制保护文件种线程同步机制保护文件背景知识背景知识 在在在在CreateFileMapping() APICreateFileMapping() API中,一个新的文件映射对象中,一个新的文件映射对象中,一个新的文件映射对象中,一个新的文件映射对象需要有一个永久的文件对象需要有一个永久的文件对象需要有一个永久的文件对象需要有一个永久的文件对象 ( (由由由由CreateFile() CreateFile() 所创建所创建所创建所创建) ) 。该。该。该。
24、该函数使用标准的安全性和命名参数,还有用于允许操作函数使用标准的安全性和命名参数,还有用于允许操作函数使用标准的安全性和命名参数,还有用于允许操作函数使用标准的安全性和命名参数,还有用于允许操作 ( (如只读如只读如只读如只读) ) 的保护标志以及映射的最大容量。随后可根据的保护标志以及映射的最大容量。随后可根据的保护标志以及映射的最大容量。随后可根据的保护标志以及映射的最大容量。随后可根据来自来自来自来自OpenFileMapping() APIOpenFileMapping() API的其他线程或进程使用该映的其他线程或进程使用该映的其他线程或进程使用该映的其他线程或进程使用该映射射射射这
25、与事件和互斥体的打开进程是非常类似的这与事件和互斥体的打开进程是非常类似的这与事件和互斥体的打开进程是非常类似的这与事件和互斥体的打开进程是非常类似的 内存映射文件对象的另一个强大的应用是可请求系统创内存映射文件对象的另一个强大的应用是可请求系统创内存映射文件对象的另一个强大的应用是可请求系统创内存映射文件对象的另一个强大的应用是可请求系统创建一个运行映射的临时文件。该临时文件提供一个临时建一个运行映射的临时文件。该临时文件提供一个临时建一个运行映射的临时文件。该临时文件提供一个临时建一个运行映射的临时文件。该临时文件提供一个临时的区域,用于线程或进程互相发送大量数据,而不必创的区域,用于线程
26、或进程互相发送大量数据,而不必创的区域,用于线程或进程互相发送大量数据,而不必创的区域,用于线程或进程互相发送大量数据,而不必创建或保护磁盘上的文件。利用向创建函数中发送建或保护磁盘上的文件。利用向创建函数中发送建或保护磁盘上的文件。利用向创建函数中发送建或保护磁盘上的文件。利用向创建函数中发送INVALID_HANDLE_VALUEINVALID_HANDLE_VALUE来代替真正的文件句柄,来代替真正的文件句柄,来代替真正的文件句柄,来代替真正的文件句柄,就可创建这一临时的内存映射文件;指令内核使用系统就可创建这一临时的内存映射文件;指令内核使用系统就可创建这一临时的内存映射文件;指令内核
27、使用系统就可创建这一临时的内存映射文件;指令内核使用系统页式文件来建立支持映射的最大容量的临时数据区页式文件来建立支持映射的最大容量的临时数据区页式文件来建立支持映射的最大容量的临时数据区页式文件来建立支持映射的最大容量的临时数据区背景知识背景知识 为了利用文件映射对象,进程必须将对文件的查看映射为了利用文件映射对象,进程必须将对文件的查看映射为了利用文件映射对象,进程必须将对文件的查看映射为了利用文件映射对象,进程必须将对文件的查看映射到它的内存空间中。也就是说,应该将文件映射对象想到它的内存空间中。也就是说,应该将文件映射对象想到它的内存空间中。也就是说,应该将文件映射对象想到它的内存空间
28、中。也就是说,应该将文件映射对象想象为进程的第一步,在这一步中,当查看实际上允许访象为进程的第一步,在这一步中,当查看实际上允许访象为进程的第一步,在这一步中,当查看实际上允许访象为进程的第一步,在这一步中,当查看实际上允许访问的数据时,附加有共享数据的安全性和命名方式。为问的数据时,附加有共享数据的安全性和命名方式。为问的数据时,附加有共享数据的安全性和命名方式。为问的数据时,附加有共享数据的安全性和命名方式。为了获得指向内存区域的指针需要调用了获得指向内存区域的指针需要调用了获得指向内存区域的指针需要调用了获得指向内存区域的指针需要调用MapViewOfFile() MapViewOfFi
29、le() APIAPI,此调用使用文件映射对象的句柄作为其主要参数。,此调用使用文件映射对象的句柄作为其主要参数。,此调用使用文件映射对象的句柄作为其主要参数。,此调用使用文件映射对象的句柄作为其主要参数。此外还有所需的访问等级此外还有所需的访问等级此外还有所需的访问等级此外还有所需的访问等级 ( (如读如读如读如读- -写写写写) ) 和开始查看时文件内和开始查看时文件内和开始查看时文件内和开始查看时文件内的偏移和要查看的容量。该函数返回一个指向进程内的的偏移和要查看的容量。该函数返回一个指向进程内的的偏移和要查看的容量。该函数返回一个指向进程内的的偏移和要查看的容量。该函数返回一个指向进程
30、内的内存的指针,此指针可有多种编程方面的应用内存的指针,此指针可有多种编程方面的应用内存的指针,此指针可有多种编程方面的应用内存的指针,此指针可有多种编程方面的应用 ( (但不能超但不能超但不能超但不能超过访问权限过访问权限过访问权限过访问权限) ) 当结束文件映射查看时,必须用接受到的指针调用当结束文件映射查看时,必须用接受到的指针调用当结束文件映射查看时,必须用接受到的指针调用当结束文件映射查看时,必须用接受到的指针调用UnmapViewOfFlie() APIUnmapViewOfFlie() API,然后再根据映射对象调用,然后再根据映射对象调用,然后再根据映射对象调用,然后再根据映射
31、对象调用CloseHandle() APICloseHandle() API,从而将其清除,从而将其清除,从而将其清除,从而将其清除背景知识背景知识在本实验中,通过对文件和文件映射对象的了解,在本实验中,通过对文件和文件映射对象的了解,在本实验中,通过对文件和文件映射对象的了解,在本实验中,通过对文件和文件映射对象的了解,来加深对来加深对来加深对来加深对Windows 2000Windows 2000线程同步的理解线程同步的理解线程同步的理解线程同步的理解 回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,加深对回顾系统进程、线程的有关概念,
32、加深对Windows 2000Windows 2000线程间通讯的理解线程间通讯的理解线程间通讯的理解线程间通讯的理解 了解文件和文件映射对象了解文件和文件映射对象了解文件和文件映射对象了解文件和文件映射对象 通过分析实验程序,了解线程如何通过文件对象发送数据通过分析实验程序,了解线程如何通过文件对象发送数据通过分析实验程序,了解线程如何通过文件对象发送数据通过分析实验程序,了解线程如何通过文件对象发送数据 了解在进程中如何使用文件对象了解在进程中如何使用文件对象了解在进程中如何使用文件对象了解在进程中如何使用文件对象 通过分析实验程序,了解线程如何通过文件映射对象发送通过分析实验程序,了解线
33、程如何通过文件映射对象发送通过分析实验程序,了解线程如何通过文件映射对象发送通过分析实验程序,了解线程如何通过文件映射对象发送数据数据数据数据 了解在进程中如何使用文件映射对象了解在进程中如何使用文件映射对象了解在进程中如何使用文件映射对象了解在进程中如何使用文件映射对象实验目的实验目的在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容您需要做以下准备:您需要做以下准备:您需要做以下准备:您需要做以下准备: 一台运行一台运行一台运行一台运行Windows 2000 Profession
34、al Windows 2000 Professional 操作系统的计算机操作系统的计算机操作系统的计算机操作系统的计算机 计算机中需安装计算机中需安装计算机中需安装计算机中需安装Visual C+ 6.0Visual C+ 6.0专业版或企业版专业版或企业版专业版或企业版专业版或企业版 工具工具/准备工作准备工作 文件对象文件对象 文件映射对象文件映射对象实验内容与步骤实验内容与步骤实验估计时间:实验估计时间:实验估计时间:实验估计时间:9090分钟分钟分钟分钟,难度系数:,难度系数:,难度系数:,难度系数:4 44.3 Linux 并发程序设计并发程序设计管道是管道是管道是管道是Linux
35、Linux中最常用的进程间通信中最常用的进程间通信中最常用的进程间通信中最常用的进程间通信IPCIPC机制。利机制。利机制。利机制。利用管道时,一个进程的输出可成为另外一个进程的用管道时,一个进程的输出可成为另外一个进程的用管道时,一个进程的输出可成为另外一个进程的用管道时,一个进程的输出可成为另外一个进程的输入。当输入输出的数据量特别大时,这种输入。当输入输出的数据量特别大时,这种输入。当输入输出的数据量特别大时,这种输入。当输入输出的数据量特别大时,这种IPCIPC机机机机制非常有用。可以想象,如果没有管道机制,而必制非常有用。可以想象,如果没有管道机制,而必制非常有用。可以想象,如果没有
36、管道机制,而必制非常有用。可以想象,如果没有管道机制,而必须利用文件传递大量数据时,会造成许多空间和时须利用文件传递大量数据时,会造成许多空间和时须利用文件传递大量数据时,会造成许多空间和时须利用文件传递大量数据时,会造成许多空间和时间上的浪费间上的浪费间上的浪费间上的浪费在在在在LinuxLinux中,通过将两个中,通过将两个中,通过将两个中,通过将两个filefile结构指向同一个临时的结构指向同一个临时的结构指向同一个临时的结构指向同一个临时的索引节点,而两个索引节点又指向同一个物理页而索引节点,而两个索引节点又指向同一个物理页而索引节点,而两个索引节点又指向同一个物理页而索引节点,而两
37、个索引节点又指向同一个物理页而实现管道实现管道实现管道实现管道背景知识背景知识通过在通过在通过在通过在LinuxLinux进程之间进行的通信实例来学习并发进程之间进行的通信实例来学习并发进程之间进行的通信实例来学习并发进程之间进行的通信实例来学习并发程序设计的方法程序设计的方法程序设计的方法程序设计的方法通过通过通过通过LinuxLinux进程通信的程序设计与实现,进一步熟进程通信的程序设计与实现,进一步熟进程通信的程序设计与实现,进一步熟进程通信的程序设计与实现,进一步熟悉操作系统的进程概念,理解悉操作系统的进程概念,理解悉操作系统的进程概念,理解悉操作系统的进程概念,理解LinuxLinu
38、x进程管理概念进程管理概念进程管理概念进程管理概念通过阅读和分析通过阅读和分析通过阅读和分析通过阅读和分析LinuxLinux实验程序,学习实验程序,学习实验程序,学习实验程序,学习LinuxLinux程序设程序设程序设程序设计、调试和运行的方法计、调试和运行的方法计、调试和运行的方法计、调试和运行的方法实验目的实验目的在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容在开始本实验之前,请回顾教科书的相关内容需要准备一台运行需要准备一台运行需要准备一台运行需要准备一台运行LinuxLinux操作系统的计算机操作系统的计算机操
39、作系统的计算机操作系统的计算机工具工具/准备工作准备工作并发程序的设计关键是使用创建进程的系统调用,并发程序的设计关键是使用创建进程的系统调用,并发程序的设计关键是使用创建进程的系统调用,并发程序的设计关键是使用创建进程的系统调用,使一个程序运行时可以生成几个同时运行的程序,使一个程序运行时可以生成几个同时运行的程序,使一个程序运行时可以生成几个同时运行的程序,使一个程序运行时可以生成几个同时运行的程序,如果程序中没有创建进程的动作则为顺序程序设计如果程序中没有创建进程的动作则为顺序程序设计如果程序中没有创建进程的动作则为顺序程序设计如果程序中没有创建进程的动作则为顺序程序设计本实验中的并发程
40、序例子完成两个程序本实验中的并发程序例子完成两个程序本实验中的并发程序例子完成两个程序本实验中的并发程序例子完成两个程序childchild和和和和fatherfather之间的数据传递工作,具体做法分为四步之间的数据传递工作,具体做法分为四步之间的数据传递工作,具体做法分为四步之间的数据传递工作,具体做法分为四步 编制并发程序编制并发程序编制并发程序编制并发程序pipeline.cpipeline.c 编制编制编制编制“ “管道写管道写管道写管道写” ”程序程序程序程序father.cfather.c作为父进程的一部分工作作为父进程的一部分工作作为父进程的一部分工作作为父进程的一部分工作 编制编制编制编制“ “管道读管道读管道读管道读” ”程序程序程序程序child.cchild.c作为子进程的一部分工作作为子进程的一部分工作作为子进程的一部分工作作为子进程的一部分工作 编译编译编译编译 运行运行运行运行实验内容与步骤实验内容与步骤