实验4并发与调度.ppt

上传人:max****ui 文档编号:11627408 上传时间:2020-04-30 格式:PPT 页数:28 大小:403.50KB
返回 下载 相关 举报
实验4并发与调度.ppt_第1页
第1页 / 共28页
实验4并发与调度.ppt_第2页
第2页 / 共28页
实验4并发与调度.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
操作系统原理实验,周苏ZsQQ:81505050,操作系统的各个主题粗线表示从设计和实现的角度考虑关系非常紧密,实验4并发与调度,通过对事件和互斥体对象以及对文件和文件映射对象的了解,来加深对操作系统进程同步、线程同步的理解;通过Linux并发程序的调试,学习操作系统并发程序的工作方式实验4.1Windows2000线程同步实验4.2Windows2000线程间的通讯实验4.3Linux并发程序设计,实验估计时间:120分钟,难度系数:4,4.1Windows2000线程同步,Windows2000提供的常用对象可分成三类:核心应用服务、线程同步和线程间通讯。其中,开发人员可以使用线程同步对象来协调线程和进程的工作,以使其共享信息并执行任务。此类对象包括互锁数据临界段事件互斥体信号,背景知识,多线程编程中关键的一步是保护所有的共享资源,工具主要有互锁函数、临界段和互斥体等;另一个实质性部分是协调线程使其完成应用程序的任务,为此,可利用内核中的事件对象和信号在进程内或进程间实现线程同步的最方便的方法是使用事件对象,这一组内核对象允许一个线程对其受信状态进行直接控制,背景知识,而互斥体则是另一个可命名且安全的内核对象,其主要目的是引导对共享资源的访问。拥有单一访问资源的线程创建互斥体,所有想要访问该资源的线程应该在实际执行操作之前获得互斥体,而在访问结束时立即释放互斥体,以允许下一个等待线程获得互斥体,然后接着进行下去与事件对象类似,互斥体容易创建、打开、使用并清除。利用CreateMutex()API可创建互斥体,创建时还可以指定一个初始的拥有权标志,通过使用这个标志,只有当线程完成了资源的所有的初始化工作时,才允许创建线程释放互斥体,背景知识,为了获得互斥体,首先,想要访问调用的线程可使用OpenMutex()API来获得指向对象的句柄;然后,线程将这个句柄提供给一个等待函数。当内核将互斥体对象发送给等待线程时,就表明该线程获得了互斥体的拥有权。当线程获得拥有权时,线程控制了对共享资源的访问必须设法尽快地放弃互斥体。放弃共享资源时需要在该对象上调用ReleaseMute()API。然后系统负责将互斥体拥有权传递给下一个等待着的线程(由到达时间决定顺序),背景知识,在本实验中,通过对事件和互斥体对象的了解,来加深对Windows2000线程同步的理解。回顾系统进程、线程的有关概念,加深对Windows2000线程的理解了解事件和互斥体对象通过分析实验程序,了解管理事件对象的API了解在进程中如何使用事件对象了解在进程中如何使用互斥体对象了解父进程创建子进程的程序设计方法,实验目的,在开始本实验之前,请回顾教科书的相关内容需要做以下准备一台运行Windows2000Professional操作系统的计算机计算机中需安装VisualC+6.0专业版或企业版,工具/准备工作,事件对象互斥体对象,实验内容与步骤,实验估计时间:120分钟,难度系数:5,4.2Windows2000线程间的通讯,Windows2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息,背景知识,文件对象文件对象是人们所熟悉的永久存储的传统元素。将一个文件看作是内核对象可使开发人员获得比标准C+文件操作更为强大的功能内核允许开发人员在系统设备或网络上创建代表永久存储数据块的文件对象。这些文件对象是对永久存储数据的低级访问者;用C+运行库或其他方法打开的所有文件最终都要变成对CreateFile()API的调用CreateFile()函数分配一个内核对象来代表一个永久的文件。当在磁盘上创建一个新文件或当打开一个已经存在的文件时,就调用这个API,背景知识,创建调用比创建事件、互斥体或信号量要复杂。首先必须在lpFilename中指定对象名,并且要指向文件系统中所访问的位置。接着必须用dwDesiredAccess参数提供所需的访问级别由创建函数要求的共享模式参数dwShareMode可以指定当另一进程企图同时访问数据时会发生什么。与所有其他第一级内核对象一样,可以利用lpSecurityAttributes参数指定所创建对象的安全性。接着,要通过dwCreationDisposition参数告诉创建函数,如果数据在指定的永久存储介质中存在或不存在时的行为,背景知识,可以使用dwFlagsAndAttributes参数来指定文件的属性(如只读),并确定对数据所执行的读写操作的行为。最后一个参数hTemplateFile可指定另一个文件对象作为模板,以便为新创建的文件复制属性或扩展属性Windows2000系统中包括许多文件对象的工具函数API通常可以使用ReadFile()和WriteFile()API在永久存储和应用程序间通过文件对象来移动数据。因为创建调用将对象的大多数复杂性封装起来了,这两个函数只是简单地利用指向要交换数据的文件对象的句柄(即指向内存内的数据缓存区的指针),然后计数移动数据的字节数。除此之外,这两个函数还执行重叠式的输入和输出,由于不会“堵塞”主线程,可用来传送大量的数据,背景知识,CreateFile()方法除了可访问标准的永久文件外,还可访问控制台输入和输出,以及从命名的管道来的数据GetFileType()API指明要处理的关键文件句柄的结构。除此之外,内核还提供了GetFileInformationByHandle()和GetFileSize()、GetFileTime()API用于获得关键数据的详细情况。其他用于在文件中改变数据的工具函数包括LockFile()、SetFilePointer()和SetEndOfFile()API除了这些基于句柄的API之外,内核还提供了大量的工具,用于按文件名对文件直接操作。文件对象用完之后,应该用CloseHandle()API加以清除,背景知识,文件映射对象比使用ReadFile()和WriteFile()API通过文件对象来读取和写入数据更为简单的是,Windows2000还提供了一种在文件中处理数据的方法,名为内存映射文件,也称为文件映射。文件映射对象是在虚拟内存中分配的永久或临时文件对象区域(如果可能的话,可大到整个文件),可将其看作是二进制的数据块。使用这类对象,可获得直接在内存中访问文件内容的能力文件映射对象提供了强大的扫描文件中数据的能力,而不必移动文件指针。对于多线程的读写操作来说,这一点特别有用,因为每个线程都可能想要把读取指针移动到不同的位置去为了防止这种情况,就需要使用某种线程同步机制保护文件,背景知识,在CreateFileMapping()API中,一个新的文件映射对象需要有一个永久的文件对象(由CreateFile()所创建)。该函数使用标准的安全性和命名参数,还有用于允许操作(如只读)的保护标志以及映射的最大容量。随后可根据来自OpenFileMapping()API的其他线程或进程使用该映射这与事件和互斥体的打开进程是非常类似的内存映射文件对象的另一个强大的应用是可请求系统创建一个运行映射的临时文件。该临时文件提供一个临时的区域,用于线程或进程互相发送大量数据,而不必创建或保护磁盘上的文件。利用向创建函数中发送INVALID_HANDLE_VALUE来代替真正的文件句柄,就可创建这一临时的内存映射文件;指令内核使用系统页式文件来建立支持映射的最大容量的临时数据区,背景知识,为了利用文件映射对象,进程必须将对文件的查看映射到它的内存空间中。也就是说,应该将文件映射对象想象为进程的第一步,在这一步中,当查看实际上允许访问的数据时,附加有共享数据的安全性和命名方式。为了获得指向内存区域的指针需要调用MapViewOfFile()API,此调用使用文件映射对象的句柄作为其主要参数。此外还有所需的访问等级(如读-写)和开始查看时文件内的偏移和要查看的容量。该函数返回一个指向进程内的内存的指针,此指针可有多种编程方面的应用(但不能超过访问权限)当结束文件映射查看时,必须用接受到的指针调用UnmapViewOfFlie()API,然后再根据映射对象调用CloseHandle()API,从而将其清除,背景知识,在本实验中,通过对文件和文件映射对象的了解,来加深对Windows2000线程同步的理解回顾系统进程、线程的有关概念,加深对Windows2000线程间通讯的理解了解文件和文件映射对象通过分析实验程序,了解线程如何通过文件对象发送数据了解在进程中如何使用文件对象通过分析实验程序,了解线程如何通过文件映射对象发送数据了解在进程中如何使用文件映射对象,实验目的,在开始本实验之前,请回顾教科书的相关内容您需要做以下准备:一台运行Windows2000Professional操作系统的计算机计算机中需安装VisualC+6.0专业版或企业版,工具/准备工作,文件对象文件映射对象,实验内容与步骤,实验估计时间:90分钟,难度系数:4,4.3Linux并发程序设计,管道是Linux中最常用的进程间通信IPC机制。利用管道时,一个进程的输出可成为另外一个进程的输入。当输入输出的数据量特别大时,这种IPC机制非常有用。可以想象,如果没有管道机制,而必须利用文件传递大量数据时,会造成许多空间和时间上的浪费在Linux中,通过将两个file结构指向同一个临时的索引节点,而两个索引节点又指向同一个物理页而实现管道,背景知识,通过在Linux进程之间进行的通信实例来学习并发程序设计的方法通过Linux进程通信的程序设计与实现,进一步熟悉操作系统的进程概念,理解Linux进程管理概念通过阅读和分析Linux实验程序,学习Linux程序设计、调试和运行的方法,实验目的,在开始本实验之前,请回顾教科书的相关内容需要准备一台运行Linux操作系统的计算机,工具/准备工作,并发程序的设计关键是使用创建进程的系统调用,使一个程序运行时可以生成几个同时运行的程序,如果程序中没有创建进程的动作则为顺序程序设计本实验中的并发程序例子完成两个程序child和father之间的数据传递工作,具体做法分为四步编制并发程序pipeline.c编制“管道写”程序father.c作为父进程的一部分工作编制“管道读”程序child.c作为子进程的一部分工作编译运行,实验内容与步骤,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!