北大操作系统实验指导书nachos

第一章绪论 (1)

第一节N ACHOS概述 (1)

一、引言 (1)

二、Nachos教学用操作系统 (1)

第二节N ACHOS的实验环境 (4)

一、Nachos的安装 (4)

二、Nachos的目录结构 (4)

三、各个部分的编译运行 (4)

四、应用程序的编译 (5)

第二章机器模拟 (6)

第一节概述 (6)

第二节机器模拟的实现 (10)

1. Sysdep模块分析(文件https://www.360docs.net/doc/0f17462121.html, sysdep.h) (10)

1.1 PoolFile 函数 (10)

1.2 OpenForWrite 函数 (10)

1.3 OpenForReadWrite 函数 (10)

1.4 Read 函数 (10)

1.5 ReadPartial 函数 (11)

1.6 WriteFile 函数 (11)

1.7 Lseek 函数 (11)

1.8 Tell 函数 (11)

1.9 Close 函数 (11)

1.10 Unlink 函数 (12)

1.11 OpenSocket 函数 (12)

1.12 CloseSocket 函数 (12)

1.13 AssignNameToSocket 函数 (12)

1.14 DeAssignNameToSocket 函数 (12)

1.15 PoolSocket 函数 (12)

1.16 ReadFromSocket 函数 (13)

1.17 SendToSocket 函数 (13)

1.18 CallOnUserAbort 函数 (13)

1.19 Delay 函数 (13)

1.20 Abort 函数 (13)

1.21 Exit 函数 (14)

1.22 RandomInit 函数 (14)

1.23 Random 函数 (14)

1.24 AllocBoundedArray 函数 (14)

1.25 DeallocBoundedArray 函数 (14)

2. 中断模块分析(文件https://www.360docs.net/doc/0f17462121.html, interrupt.h) (14)

2.1 PendingInterrupt类 (16)

2.2 Interrupt类 (17)

2.2.1 内部使用方法 (17)

2.2.2 内部使用函数 (18)

2.2.3 对外接口 (18)

3. 时钟中断模块分析(文件https://www.360docs.net/doc/0f17462121.html, timer.h) (20)

4. 终端设备模块分析(文件https://www.360docs.net/doc/0f17462121.html, console.h) (22)

5. 磁盘设备模块分析(文件https://www.360docs.net/doc/0f17462121.html, disk.h) (23)

6. Nachos运行情况统计(文件https://www.360docs.net/doc/0f17462121.html, stats.h) (24)

第三章线程管理系统 (26)

第一节进程与线程 (26)

一、进程 (26)

1. 进程概念 (26)

2. 进程的状态及状态变化 (26)

3. 进程调度 (27)

4. 进程之间的同步和互斥 (28)

5. 进程的实施 (29)

6. 进程的创建 (29)

二、线程 (29)

1. 线程概念 (29)

2. 进程和线程的关系 (31)

第二节N ACHOS的线程管理 (32)

一、Nachos的线程管理 (32)

二、Nachos线程管理同实际进程管理的不同 (34)

第三节N ACHOS线程管理系统的初步实现 (35)

1. 工具模块分析(文件https://www.360docs.net/doc/0f17462121.html, list.h https://www.360docs.net/doc/0f17462121.html, utility.h) (35)

2. 线程启动和调度模块分析(文件switch.s switch.h) (35)

2.1 ThreadRoot函数 (35)

2.2 SWITCH函数 (36)

3. 线程模块分析(文件https://www.360docs.net/doc/0f17462121.html, thread.h) (36)

3.1 Fork 方法 (38)

3.2 StackAllocate 方法 (38)

3.3 Yield 方法 (39)

3.4 Sleep 方法 (40)

4. 线程调度算法模块分析(文件https://www.360docs.net/doc/0f17462121.html, scheduler.h) (40)

4.1 Run方法 (41)

5. Nachos主控模块分析(文件https://www.360docs.net/doc/0f17462121.html, https://www.360docs.net/doc/0f17462121.html, system.h) (41)

6. 同步机制模块分析(文件https://www.360docs.net/doc/0f17462121.html, synch.h) (42)

6.1 信号量( Semaphore ) (42)

6.2 锁机制 (42)

6.3 条件变量 (43)

第四节线程管理系统作业 (45)

第五节实现实例 (47)

4.1 对线程的改进 (47)

4.2 对线程调度的改进 (48)

第四章文件管理系统 (51)

第一节文件管理系统概述 (51)

一、文件 (51)

1. 文件结构 (51)

2. 文件访问 (52)

3. 文件类型 (52)

4. 文件属性 (53)

5. 文件操作 (53)

二、目录 (54)

1. 目录结构 (54)

2. 多级目录结构 (55)

3. 文件路径名 (55)

4. 工作目录 (55)

5. 目录结构的勾连 (55)

6. 目录项 (56)

三、UNIX文件系统的实现 (56)

1. UNIX文件系统中的主要结构 (56)

2. UNIX文件系统存储资源的分配和回收 (58)

第二节N ACHOS文件管理系统 (61)

第三节N ACHOS文件系统的实现 (63)

1. 同步磁盘分析(文件https://www.360docs.net/doc/0f17462121.html, 、synchdisk.h) (63)

2. 位图模块分析(文件https://www.360docs.net/doc/0f17462121.html,、bitmap.h) (64)

3. 文件系统模块分析(文件https://www.360docs.net/doc/0f17462121.html,、filesys.h) (64)

3.1 生成方法 (65)

3.2 Create方法 (65)

3.3 Open方法 (66)

3.4 Remove方法 (66)

4. 文件头模块分析(文件https://www.360docs.net/doc/0f17462121.html,、filehdr.h) (66)

5. 打开文件结构分析(文件https://www.360docs.net/doc/0f17462121.html,、openfile.h) (67)

5.1 ReadAt方法 (67)

5.2 WriteAt方法 (68)

6. 目录模块分析(文件https://www.360docs.net/doc/0f17462121.html, directory.h) (68)

第四节文件管理系统作业 (70)

第五章用户程序和虚拟内存 (71)

第一节N ACHOS 对内存、寄存器以及CPU的模拟 (71)

1 RaiseException 方法 (74)

2 ReadMem 方法 (74)

3 WriteMem 方法 (74)

4 Translate方法 (74)

5 Run 方法 (75)

第二节N ACHOS用户进程运行机制 (77)

一、用户程序空间(文件https://www.360docs.net/doc/0f17462121.html,, address.h) (77)

1.1 生成方法 (77)

1.2 InitRegisters方法 (78)

1.3 SaveState方法 (78)

1.4 RestoreState方法 (78)

二、系统调用(文件https://www.360docs.net/doc/0f17462121.html,, syscall.h, start.s) (78)

第三节虚存管理的设计和实现 (80)

一、Nachos存储管理的改进要求 (80)

二、一个虚拟存储管理实现的实例 (80)

2.1 虚拟存储系统的总体设计 (80)

2.2 缺页中断陷入及其调度算法 (83)

2.3 虚存的存储分配 (85)

2.4 存储保护 (85)

2.5 实现中的一些细节 (85)

第四节用户程序和虚拟存储作业 (87)

第六章NACHOS的网络系统 (88)

第一节N ACHOS对物理网络的模拟 (88)

第二节N ACHOS的邮局协议 (91)

2.1 PostalDelivery方法 (92)

2.2 Send方法 (93)

第三节网络部分作业 (94)

第一章绪论

第一节Nachos概述

一、引言

计算机操作系统是一门实践性很强的课程。一般地阐述其工作原理,很可能使本来具体生动的内容变得十分抽象、枯燥并难以理解。解决好理论与实践相结合的问题是提高操作系统教学质量的关键。一门好的操作系统实践课将使读者更加形象和深刻地理解课堂中讲述的概念、原理和它们的应用。

国内外许多著名的大学都在操作系统教学实践方面作了大量研究,比较突出的有著名计算机专家A.S.Tanenbaum设计和实现的MINIX。MINIX是一个比较完整的操作系统,它的用户界面类似于UNIX。说它比较完整,是因为它包括了进程管理、文件系统管理、存储管理、设备管理以及I/O管理等操作系统的所有重要内容,而且还包含了系统启动和Shell等实际操作系统不可缺少的部分。由于MINIX较UNIX的出现晚十年,所以在程序风格上较原来的UNIX要好得多,更加结构化和模块化。包含有3000行注释的12000行源代码使整个系统较为容易阅读和理解。但是MINIX作为教学用操作系统有它的不足之处,就是由于它的目标是一个完整的操作系统,必然要和具体的设备打交道;而且不同的机器指令集需要有不同的编译器,所以MINIX的移植性并不令人满意。一个MINIX操作系统需要占据一台独立的主机,所以在网络的配置和实现上比较复杂,读者需要有一定的实践经验才能完成。

上海交通大学开发的MOS操作系统是另一个较成功的教学用操作系统。它是一个小型而功能较齐全的多道程序的操作系统,主要包括作业调度管理和文件系统管理,建立在一个只包含十几条指令的指令集虚拟机基础之上。由于MOS比较简单,读者可以非常容易地理解操作系统课程中讲述的进程调度和文件系统等部分原理。MOS的不足是过于简单,不能涵盖操作系统的大部分功能。MOS的虚拟机指令集是自定义的,没有现成的编译器,所以读者必须直接编写汇编程序才能在MOS虚拟机上运行。这样就缺乏开发大型应用程序的能力。但是MOS毕竟给了读者一个自由发挥的空间,在MOS的基础上衍生出TOS等学生自己定义和实现的相对完整的操作系统。

二、Nachos教学用操作系统

作为教学用操作系统,需要实现简单并且尽量缩小与实际操作系统之间的差距,所以我们采用Nachos作为操作系统课程的教学实践平台。Nachos是美国加州大学伯克莱分校在操作系统课程中已多次使用的操作系统课程设计平台,在美国很多大学中得到了应用,它在操作系统教学方面具有一下几个突出的优点:

采用通用虚拟机

Nachos是建立在一个软件模拟的虚拟机之上的,模拟了MIPS R2/3000的指令集、主存、中断系统、网络以及磁盘系统等操作系统所必须的硬件系统。许多现代操作系统大多是先在用软件模拟的硬件上建立并调试,最后才在真正的硬件上运行。用软件模拟硬件的可靠性比真实硬件高得多,不会因为硬件故障而导致系统出错,便于调试。虚拟机可以在运行时报告详尽的出错信息,更重要的是采用虚拟机使Nachos的移植变得非常容易,在不同机器上移植Nachos,只需对虚拟机部分作移植即可。

采用R2/3000指令集的原因是该指令集为RISC指令集,其指令数目比较少。Nachos 虚拟机模拟了其中的63条指令。由于R2/3000指令集是一个比较常用的指令集,许多现有的编译器如gc++能够直接将C或C++源程序编译成该指令集的目标代码,于是就不必编写编译器,读者就可以直接用C/C++语言编写应用程序,使得在Nachos上开发大型的应用程序也成为可能。

●使用并实现了操作系统中的一些新的概念

随着计算机技术和操作系统技术的不断发展,产生了很多新的概念。Nachos将这些新概念融入操作系统教学中,包括网络、线程和分布式应用。而且Nachos以线程作为一个基本概念讲述,取代了进程在以前操作系统教学中的地位。

Nachos的虚拟机使得网络的实现相当简单。与MINIX不同,Nachos只是一个在宿主机上运行的一个进程。在同一个宿主机上可以运行多个Nachos进程,各个进程可以相互通讯,作为一个全互连网络的一个节点;进程之间通过Socket进行通讯,模拟了一个全互连网络。

●确定性调试比较方便;随机因素使系统运行更加真实

因为操作系统的不确定性,所以在一个实际的系统中进行多线程调试是比较困难的。由于Nachos是在宿主机上运行的进程,它提供了确定性调试的手段。所谓确定性调试,就是在同样的输入顺序、输入参数的情况下,Nachos运行的结果是完全一样的。在多线程调试中,可以将注意力集中在某一个实际问题上,而不受操作系统不确定性的干扰。

另外,不确定性是操作系统所必须具有的特征,Nachos采用了随机因子模拟了真实操作系统的不确定性。

●简单而易于扩展

Nachos是一个教学用操作系统平台,它必须简单而且有一定的扩展余地。Nachos不是向读者展示一个成功的操作系统,而是让读者在一个框架下发挥自己的创造性进行扩展。例如一个完整的类似于UNIX的文件系统是很复杂的,但是对于文件系统来说,无非是需要实现文件的逻辑地址到物理地址的映射以及实现文件inode、打开文件结构、线程打开文件表等重要的数据结构以及维护它们之间的关系。Nachos中具有所有这些内容,但是在很多方面作了一定的限制,比如只有一级索引结构限制了系统中最大文件的大小。读者可以应用学到的各种知识对文件系统进行扩展,逐步消除这些限制。Nachos 在每一部分给出很多课程作业,作为读者进行系统扩展的提示和检查对系统扩展的结果。

●面向对象性

Nachos的主体是用C++的一个子集来实现的。目前面向对象语言日渐流行,它能够清楚地描述操作系统各个部分的接口。Nachos没有用到面向对象语言的所有特征,如继承性、多态性等,所以它的代码就更容易阅读和理解。

以下各章分五个部分讲述Nachos的各个部分以及它们的功能。它们是机器模拟、线程管理、文件系统管理、用户程序和虚拟存储以及网络系统。各章的安排是:

第二章分析Nachos虚拟机的各个部分,包括中断系统、定时器、以及一些外部设备,如磁盘、键盘和显示器。Nachos的应用程序将在这个虚拟机上运行。

第三章分析Nachos如何实现多线程机制以及Nachos的线程管理方法。Nachos没有借助于

属主UNIX操作系统的多进程机制,而是通过编写自己的进程图象切换函数来实现多线程。该部分对Nachos的进程图象切换函数作了详细介绍。

第四章分析Nachos的文件系统。Nachos原有的文件系统非常简单,该部分在分析原有文件系统的基础上提出了对文件系统的扩展要求。

第五章介绍用户程序和虚拟存储。该部分补充介绍了Nachos对虚拟机内存、寄存器以及CPU 的模拟。现有的Nachos系统没有实现虚拟内存,当一个用户进程的逻辑地址空间较大时,就不能在现有Nachos上运行。该部分提出了虚拟内存的概念,并且给出了一个实例。

第六章论述了Nachos的网络系统,Nachos的网络部分实现了不可靠的定长报文传送,在此之上需要建立可靠的网络,并实现网络应用程序。

第二节Nachos的实验环境

一、Nachos的安装

本书的实际实验环境是Linux,Nachos可以运行在内核版本1.2.13以上的各种Linux版本,包括Slackware和Redhat。编译器的版本是gcc2.7.2版本以上。

本书附有一张软盘,磁盘的格式为DOS格式,磁盘上有一个名为“nachos-3.4.tgz”的压缩文件。学生需要将此文件拷贝到自己的工作目录下:

~/$ mcopy a:nachos-3.4.tgz .

并将其解开:

~/$ gzip -dc nachos-3.4.tgz | tar xf -

二、Nachos的目录结构

以上操作系统可以发现在工作目录下生成一个名为nachos-3.4的目录。该目录中含有:copyright 文件Nachos的版权信息

readme 文件Nachos的readme信息

nachos.ps 文件Nachos的介绍文档(Postscript格式)

c++example 目录有关C++介绍和实例

doc 目录Nachos各个部分介绍和原有的作业要求

code 目录Nachos各个部分的源代码

最主要的部分是Nachos的源代码部分。它的目录结构是:

Makefile https://www.360docs.net/doc/0f17462121.html,mon Makefile.dep 文件

文件

文件

Nachos的Makefile文件。当Nachos需要移植到其它系统时,

可以修改Makefile.dep中的HOST参数

machine 目录Nachos虚拟机模拟部分源代码

threads 目录Nachos线程管理部分源代码

filesys 目录Nachos文件系统管理部分源代码

userprog 目录Nachos用户程序部分源代码

network 目录Nachos网络管理部分源代码

vm 目录Nachos虚拟内存管理部分源代码

test 目录一些测试用应用程序

bin 目录包含有用户程序目标码变换的程序

三、各个部分的编译运行

Nachos的各个部分都可以独立编译运行,也可以同时编译各个部分。全部编译可以采用如下命令:

~/nachos-3.4$ make

当需要单独编译线程管理部分时,先进入threads目录,然后采用如下命令:~/nachos-3.4/threads$ make depend

~/nachos-3.4/threads$ make nachos

实际上,各部分目录下都有一个Makefile文件,内容大体相同,区别在于一些条件编译的参数。比如在单独编译线程管理部分时,文件管理部分就被屏蔽了,这样读者读者就可以专

心于线程管理部分的调试。

四、应用程序的编译

由于Linux指令集和R2/3000指令集不同,用户编写的应用程序用Linux系统中标准gcc编译后,不能直接在Nachos虚拟机环境下运行。所以需要采用交叉编译技术。所谓交叉编译技术是在一个操作系统下将源码编译成另一个操作系统的目标码,这里就是在Linux下通过gcc交叉编译版本将用户程序的源码编译成R2/3000指令集的目标码。

在Linux中,没有缺省的交叉编译工具。读者可以到上海交通大学计算机系FTP服务器上下载,URL为:

ftp://https://www.360docs.net/doc/0f17462121.html,/linux/cross-compiler.tgz

该文件的解开需要有超级用户的权利,将解开至/usr/local/目录下:

/# gzip -dc cross-compiler.tgz | tar xf -

在编译用户程序时,用交叉编译器将源码编译成R2/3000指令集的目标代码,再经过一个简单的转换就可以在Nachos虚拟机上运行。注意,在读者实现虚拟存储之前,有些应用程序可能会因为使用过多的内存而不能运行。

第二章机器模拟

第一节概述

Nachos是建立在一个软件模拟的虚拟机上的。该虚拟机包括计算机的基本部分:如CPU、主存、寄存器、中断系统,还包括一些外部设备,如终端设备、网络以及磁盘系统。现代许多操作系统都是先在软件模拟的硬件上建立并调试,最后才在真正的硬件上运行。软件模拟的硬件可靠性比真实的硬件高的多,不会因为硬件故障而导致系统出错,因而便于调试。模拟的硬件还可以监视程序对硬件的操作,并加以严格的限制,在程序误操作时报告详尽的出错信息。这些都是真实硬件难以做到的。

用软件来模拟硬件另一个优点是充分利用了宿主机操作系统的软件资源,避免了编写复杂的硬件控制程序。更重要的是提高了程序的可移植性,只要在不同硬件上实现Nachos 虚拟机就完成了Nachos 的大部分移植工作。我们将Nachos 移植到Linux 上的工作就受益于这种设计。

下面对Nachos 的机器模拟部分作概要说明。Nachos是用C++语言中的类来表示各个对象的。

其中Machine类用来模拟计算机主机。它提供的功能有:读写寄存器。读写主存、运行一条用户程序的汇编指令、运行用户程序、单步调试用户程序、显示主存和寄存器状态、将虚拟内存地址转换为物理内存地址、陷入Nachos 内核等等。

Machine类实现方法是在宿主机上分配两块内存分别作为虚拟机的寄存器和物理内存。运行用户程序时,先将用户程序从Nachos 文件系统中读出,写入模拟的物理内存中,然后调用指令模拟模块对每一条用户指令解释执行。将用户程序的读写内存要求,转变为对物理内存地址的读写。Machine类提供了单步调试用户程序的功能,执行一条指令后会自动停下来,让用户查看系统状态,不过这里的单步调试是汇编指令级的,需要读者对R2/3000指令比较熟悉。如果用户程序想使用操作系统提供的功能或者发出异常信号时,Machine调用系统异常陷入功能,进入Nachos的核心部分。

Interrupt类用来模拟硬件中断系统。在这个中断系统中,中断状态有开,关两种,中断类型有时钟中断、磁盘中断、控制台写中断、控制台读中断、网络发送中断以及网络接收中断。机器状态有用户态,核心态和空闲态。中断系统提供的功能有开/关中断,读/写机器状态,将一个即将发生中断放入中断队列,以及使机器时钟前进一步。

在Interrupt类中有一个记录即将发生中断的队列,称为中断等待队列。中断等待队列中每个等待处理的中断包含中断类型、中断处理程序的地址及参数、中断应当发生的时间等信息。一般是由硬件设备模拟程序把将要发生的中断放入中断队列。中断系统提供了一个模拟机器时钟,机器时钟在下列情况下前进(详见第二节对中断模块的分析):

●用户程序打开中断

●执行一条用户指令

●处理机没有进程正在运行

机器时钟前进时,中断处理的过程如下图2.1 所示:

图2.1 Nachos中断处理时机

所以,在Nachos中只有在时钟前进时,才会检查是否有中断会发生,而Nachos模拟时钟前进的时机不是任意的,这样即使打开了中断,中断也不能在任意时刻发生。只有在模拟时钟前进的时候才能处理等待着的中断。通过以后的叙述我们可以看到,在执行非用户代码的大部分时间里,系统不会被中断。这意味着不正确的同步代码可能在这个硬件模拟环境下工作正常,而实际上在真正的硬件上是无法正确运行的。

在有些中断处理程序的最后可能要进行正文切换,可以通过调用Interrupt 类的一个成员函数来要求时钟前进的时候进行正文切换。中断系统还提供关机的功能,当系统中没有正在运行的进程同时系统中没有除了时钟中断以外的其它中断时,Nachos结束运行。

在这个中断系统基础上,Nachos模拟了各种硬件设备,这些设备都是异步设备,依靠中断来与主机通信。

Timer类模拟定时器。定时器每隔X个时钟周期就向CPU发一个时钟中断。它是时间片管理必不可少的硬件基础。它的实现方法是将一个即将发生的时钟中断放入中断队列,到了时钟中断应发生的时候,中断系统将处理这个中断,在中断处理的过程中又将下一个即将发生的时钟中断放入中断队列,这样每隔X个时钟周期,就有一个时钟中断发生。

由于Nachos是一个软件模拟的系统,有很多的随机事件需要通过一定的控制来实现。所以系统中在计算下一个时钟中断应发生的时间时,还加入了一些随机值,使得中断发生的时间间隔不确定,这样就与现实的定时器更相似。

Console类模拟的是控制台设备。当用户程序向控制台写一个字符时,写程序立即返回,过了给定的时钟周期后I/O操作完成,控制台向CPU发一个控制台写中断。但是控制台是否有用户输入可供读取是随机的,所以控制台每隔给定的时钟周期向CPU发一个控制台读中断,周期性地发中断的方法与定时器的类似,即先计算下一个控制台读中断将发生的时间,然后将读中断放入中断队列,等待读中断的发生。读中断发生后,如果有用户输入的话,控制台读中断处理过程将控制台输入的字符放入字符缓冲区。当用户从控制台读字符时,把字符缓冲区的内容传给用户。控制台的读/写分别用两个文件来模拟。

Disk类模拟了物理磁盘,它一次只能接受一个读写请求,当读写操作完成后向CPU发一个磁盘中断。该物理磁盘只有一个面,分为几个磁道,每道又分为几个扇区。每道的扇区数,每个扇区的存储容量都是固定的。磁盘的使用者可以读写指定的扇区,读写单位是一个扇区。模拟磁盘用宿主机文件系统中一个文件来实现,当用户发出读写请求时,Nachos的处理过程如下:

1.从模拟文件中读出数据或向模拟文件写入数据。

2.计算磁盘操作需要的时间。磁盘操作时间= 移动磁头寻道的时间+ 旋转到读写

扇区的时间+ 数据传送的时间。

3.将一个磁盘读/写中断放入中断队列,因为中断是在操作完成后发生的。所以,中

断发生时间= 当前时间+ 磁盘操作时间。

每个Nachos运行时是宿主机上的一个进程,如果在宿主机上运行多个Nachos进程,这些Nachos进程可以组成一个网络,而每个Nachos进程就是一个网络节点。Network类模拟了一个网络节点。这个网络节点可以把报文发送到网络的其他节点上。报文的长度固定,Nachos 模拟了在现实网络中时常发生的报文丢失的情况;但是报文中的内容不会在网络传送中被修改破坏。每个网络节点都有全网络唯一的“地址”,报文传送的起始节点、目的节点都是由这个“地址”表示。

报文在网络中的传递是用通过Socket(套接口)来实现的。每个节点还有一个可靠性系数,用来模拟报文从这个节点发出后丢失的概率。Network的实现与控制台类似,每隔一定的时钟周期,就产生一个网络接收中断,网络接收中断处理过程是:

1.将下一个网络接收中断放入中断队列以实现中断的周期性发生。

2.如果报文缓冲区中已有报文,则返回。

3.读取套接口,如果没有报文,则返回。

4.读取报文,把它放入报文缓冲区。

5.调用本节点自定义的接收处理函数。

在现有实现中,报文缓冲区只能存放一个报文,有可能因为报文缓冲区满而造成报文丢失(上面第2行),可以多设几个报文缓冲区来减少丢失的可能性。

Network类提供了让网络用户读取已经收到的报文的成员函数,当报文缓冲区为空时,它返回空,否则从报文缓冲区读出报文,并将报文缓冲区清空,返回刚读出的报文。

报文发送的过程是:

1.将网络发送中断放入中断队列。

2.产生一个随机数。

3.如果这个随机数大于网络的可靠性系数,则不发送报文(用来模拟报文丢失),否

则通过套接口将报文发送出去。

从以上的叙述中可以看出,中断系统成为整个Nachos虚拟机的基础,其它的模拟硬件设备都是建立在中断系统之上的。在此之上,加上Machine类模拟的指令解释器,可以实现Nachos 的线程管理、文件系统管理、虚拟内存、用户程序和网络管理等所有操作系统功能。图2.2展示了Nachos系统的整体结构。

图2.2 Nachos系统的整体结构

第二节机器模拟的实现

1. Sysdep模块分析(文件https://www.360docs.net/doc/0f17462121.html, sysdep.h)

Nachos的运行环境可以是多种操作系统,由于每种操作系统所提供的系统调用或函数调用

在形式和内容上可能有细微的差别。sysdep模块的作用是屏蔽掉这些差别。

1.1 PoolFile 函数

语法:bool PoolFile (int fd)

参数:fd: 文件描述符,也可以是一个套接字(socket)

功能:测试一个打开文件fd 是否有内容可以读,如果有则返回TRUE,否则返回FALSE。

当Nachos系统处于IDLE状态时,测试过程有一个延时,也就是在一定时间范围内如

果有内容可读的话,同样返回TRUE。

实现:通过select 系统调用。

返回:打开文件是否有内容供读取。

1.2 OpenForWrite 函数

语法:int OpenForWrite (char *name)

参数:name: 文件名

功能:为写操作打开一个文件。如果该文件不存在,产生该文件;如果该文件已经存在,则将该文件原有的内容删除。

实现:通过open 系统调用。

返回:打开的文件描述符。

1.3 OpenForReadWrite 函数

语法:int OpenForReadWrite (char *name, bool crashOnError)

参数:name: 文件名

crashOnError: crash标志

功能:为读写操作打开一个文件。当crashOnError 标志设置而文件不能读写打开时,系统出错退出。

通过open 系统调用。

实现:

返回:打开的文件描述符。

1.4 Read 函数

语法:void Read (int fd, char *buffer, int nBytes)

参数:fd: 打开文件描述符

buffer: 读取内容的缓冲区

nBytes: 需要读取的字节数

功能:从一个打开文件fd中读取nBytes的内容到buffer缓冲区。如果读取失败,系统退出。实现:通过read系统调用。

返回:无。

注意:这和系统调用read不完全一样。read系统调用返回的是实际读出的字节数,而

Read函数则必须读出nBytes,否则系统将退出。如果需要使用同read系统调用相对

应的函数,请用ReadPartial。

1.5 ReadPartial 函数

语法:int ReadPartial (int fd, char *buffer, int nBytes)

参数:fd: 打开文件描述符buffer: 读取内容的缓冲区nBytes: 需要读取的最大字节数

功能:从一个打开文件fd中读取nBytes的内容到buffer缓冲区。

实现:通过read系统调用。

返回:实际读出的字节数。

1.6 WriteFile 函数

语法:void WriteFile (int fd, char *buffer, int nBytes)

参数:fd: 打开文件描述符

buffer: 需要写的内容所在的缓冲区

nBytes: 需要写的内容最大字节数

功能:将buffer缓冲区中的内容写nBytes到一个打开文件fd中。

实现:通过write系统调用。

返回:无。

注意:这和系统调用write不完全一样。write系统调用返回的是实际写入的字节数,

而WriteFile函数则必须写入nBytes,否则系统将退出。

1.7 Lseek 函数

语法:void Lseek (int fd, int offset, int whence)

参数:fd: 文件描述符

offset: 偏移量

whence: 指针移动的起始点

功能:移动一个打开文件的读写指针,含义同lseek系统调用;出错则退出系统。

实现:通过lseek 系统调用。

返回:无。

1.8 Tell 函数

语法:int Tell (int fd)

参数:fd: 文件描述符

功能:指出当前读写指针位置

实现:通过lseek 系统调用。

返回:返回当前指针位置。

1.9 Close 函数

语法:void Close (int fd)

参数:fd: 文件描述符

功能:关闭当前打开文件fd,如果出错则退出系统。

实现:通过close系统调用。

返回:无。

1.10 Unlink 函数

语法:bool Unlink (char *name)

name: 文件名

参数:

功能:删除文件。

实现:通过unlink系统调用。

返回:删除成功,返回TRUE;否则返回FALSE。

1.11 OpenSocket 函数

语法:int OpenSocket ()

参数:无

功能:申请一个socket。

实现:通过socket系统调用。

其中AF_UNIX参数说明使用UNIX内部协议。(Nachos是用SOCKET文件来模拟网

络节点,所以采用UNIX内部协议。向该文件读写内容分别代表从该节点读取内容和

向该网络节点发送内容)

SOCK_DGRAM参数说明采用无连接定长数据包型的数据链路。

返回:申请到的socket ID。

1.12 CloseSocket 函数

语法:void CloseSocket (int sockID)

参数:sockID: socket标识

功能:释放一个socket。

实现:通过close系统调用。

返回:无。

1.13 AssignNameToSocket 函数

语法:void AssignNameToSocket(char *socketName, int sockID)

参数:socketName: socket文件名

sockID: socket标识

功能:将一个文件名和一个socket标识联系起来,于是将一个SOCKET文件同一个Nachos 进程连接起来,使宿主机上该Nachos进程成为一个网络节点。

实现:通过bind系统调用。

返回:无。

1.14 DeAssignNameToSocket 函数

语法:void DeAssignNameToSocket(char *socketName)

参数:socketName: socket文件名

功能:将一个文件名删除,实际上是和相应的socket标识脱离关系。

实现:通过unlink系统调用。

返回:无。

1.15 PoolSocket 函数

语法:bool PoolSocket (int sockID)

参数:socketID: socket标识

功能:查询一个socket是否有内容可以读取。

实现:调用PoolFile。在UNIX中socket标识和普通的文件标识没有本质的区别,可以采用

相同的方式操作;Nachos中的网络收发信息的模拟实际上是文件操作。

返回:socket中有内容,返回TRUE;否则返回FALSE。

1.16 ReadFromSocket 函数

语法:void ReadFromSocket (int sockID, char *buffer, int packetSize)

参数:socketID: socket标识

buffer: 读取内容的暂存空间

packetSize: 读取数据包的大小

功能:从一个socket标识中读取packetSize大小的数据包,放在buffer缓冲中。

实现:通过recvfrom系统调用。

返回:无。

1.17 SendToSocket 函数

语法:void SendToSocket (int sockID, char *buffer, int packetSize, char *toName)

参数:socketID: socket标识

buffer: 发送内容的暂存空间

packetSize: 发送数据包的大小

toName: 要接收数据包的Nachos虚拟机模拟网络文件的文件名

功能:向socket标识中发送packetSize大小的数据包。

实现:通过sendto系统调用。

Nachos的网络处理中断程序会检查和自己相连的模拟网络SOCKET文件中是否有内

容可读。

当Nachos需要向其它节点发送信息时,需要指明其它节点的地址,实际上就是和其它

节点相连的模拟网络SOCKET文件名。

返回:无。

1.18 CallOnUserAbort 函数

语法:void CallOnUserAbort (V oidNoArgFunctionPtr func)

参数:func: 函数指针

功能:设定一个函数,在用户强制退出系统时调用。

实现:通过signal系统调用。

返回:无。

1.19 Delay 函数

语法:void Delay (int seconds)

参数:seconds: 需要延迟的秒数

功能:系统延迟一定的时间。

实现:通过sleep系统调用。

返回:无。

1.20 Abort 函数

语法:void Abort ()

参数:无

功能:退出系统(非正常退出)。

实现:通过abort系统调用。

返回:无。

1.21 Exit 函数

语法:void Exit (int exitCode)

参数:exitCode: 向系统的返回值

功能:退出系统。

实现:通过exit系统调用。

返回:无。

1.22 RandomInit 函数

语法:void RandomInit (unsigned seed)

参数:seed: 随机数产生魔数

功能:初始化随机数发生器。

实现:通过srand系统调用。

返回:无。

1.23 Random 函数

语法:int RandomInit ()

参数:无

功能:产生一个随机整数。

实现:通过rand系统调用。

返回:产生的随机整数。

1.24 AllocBoundedArray 函数

语法:char * AllocBoundedArray (int size)

参数:size: 需要申请的空间大小

功能:申请一个受保护的存储空间。

实现:通过mprotect的系统调用,申请一块比size较大的空间,并且在要申请空间两头区域的属性设置成不可访问;当用户使用不当时(使用到受保护范围之外时),系统会接收

到SIGSEGV信号。不是每个操作系统都支持这样的内存申请,如果支持的话,对监

测内存的使用是否恰当非常有用。

返回:申请成功后指针,该指针指向可以访问的申请空间,而不是指向受限区域的开始。

1.25 DeallocBoundedArray 函数

语法:void DeallocBoundedArray (char *ptr, int size)

参数:ptr: 要释放空间的指针

size: 申请的空间大小

功能:将受保护的存储空间释放。

实现:通过mprotect系统调用;释放的空间包括头尾受限区域,所以必须知道原来申请区域的大小。

返回:无。

2. 中断模块分析(文件https://www.360docs.net/doc/0f17462121.html, interrupt.h)

中断模块的主要作用是模拟底层的中断机制。可以通过该模拟机制来启动和禁止中断(SetLevel);该中断机制模拟了Nachos系统需要处理的所有的中断,包括时钟中断、磁盘中断、终端读/终端写中断以及网络接收/网络发送中断。

中断的发生总是有一定的时间。比如当向硬盘发出读请求,硬盘处理请求完毕后会发生中断;在请求和处理完毕之间需要经过一定的时间。所以在该模块中,模拟了时钟的前进。为了实

现简单和便于统计各种活动所占用的时间起见,Nachos规定系统时间在以下三种情况下前进:

●执行用户态指令

执行用户态指令,时钟前进是显而易见的。我们认为,Nachos执行每条指令所需时间是固定的,为一个时钟单位(Tick)。

●重新打开中断

一般系统态在进行中断处理程序时,需要关中断。但是中断处理程序本身也需要消耗时间,而在关闭中断到重新打开中断之间无法非常准确地计算时间,所以当中断重新打开的时候,加上一个中断处理所需时间的平均值。

●就绪队列中没有进程

当系统中没有就绪进程时,系统处于Idle状态。这种状态可能是系统中所有的进程都在等待各自的某种操作完成。也就是说,系统将在未来某个时间发生中断,到中断发生的时候中断处理程序将进行中断处理。在系统模拟中,有一个中断等待队列,专门存放将来发生的中断。在这种情况下,可以将系统时间直接跳到中断等待队列第一项所对应的时间,以免不必要的等待。

当前面两种情况需要时钟前进时,调用OneTick方法。OneTick方法将系统态和用户态的时间分开进行处理,这是因为用户态的时间计算是根据用户指令为单位的;而在系统态,没有办法进行指令的计算,所以将系统态的一次中断调用或其它需要进行时间计算的单位设置为一个固定值,假设为一条用户指令执行时间的10倍。

虽然Nachos模拟了中断的发生,但是毕竟不能与实际硬件一样,中断发生的时机可以是任意的。比如当系统中没有就绪进程时,时钟直接跳到未处理中断队列的第一项的时间。这实际情况下,系统处于Idel状态到中断等待队列第一项发生时间之间,完全有可能有其它中断发生。由于中断发生的时机不是完全随机的,所以在Nachos系统中运行的程序,不正确的同步程序也可能正常运行,我们在此需要密切注意。

Nachos线程运行有三种状态:

●Idle状态

系统CPU处于空闲状态,没有就绪线程可以运行。如果中断等待队列中有需要处理的除了时钟中断以外的中断,说明系统还没有结束,将时钟调整到发生中断的时间,进行中断处理;否则认为系统结束所有的工作,退出。

●系统态

Nachos执行系统程序。Nachos虽然模拟了虚拟机的内存,但是Nachos系统程序本身的运行不是在该模拟内存中,而是利用宿主机的存储资源。这是Nachos操作系统同真正操作系统的重要区别。

●用户态

系统执行用户程序。当执行用户程序时,每条指令占用空间是Nachos的模拟内存(见第五章)。

Nachos需要处理的中断种类有:

TimerInt: 时钟中断

DiskInt: 磁盘(读/写)中断

ConsoleWriteInt: 终端写中断

ConsoleReadInt: 终端读终端

NetworkSentInt: 网络发送中断

NetworkRecvInt: 网络接收中断

中断等待队列是Nachos虚拟机最重要的数据结构之一,它记录了当前虚拟机可以预测的将在未来发生的所有中断。当系统进行了某种操作可能引起未来发生的中断时,如磁盘的写入、向网络写入数据等都会将中断插入到中断等待队列中;对于一些定期需要发生的中断,如时钟中断、终端读取中断等,系统会在中断处理后将下一次要发生的中断插入到中断等待队列中。中断的插入过程是一个优先队列的插入过程,其优先级是中断发生的时间,也就是说,先发生的中断将优先得到处理。

当时钟前进或者系统处于Idle状态时,Nachos会判断中断等待队列中是否有要发生的中断,如果有中断需要发生,则将该中断从中断等待队列中删除,调用相应的中断处理程序进行处理。图2.3是中断等待队列的操作示意图。

图2.3 对中断等待队列的操作

中断处理程序是在某种特定的中断发生时被调用,中断处理程序的作用包括可以在现有的模拟硬件的基础上建立更高层次的抽象。比如现有的模拟网络是有丢失帧的不安全网络,在中断处理程序中可以加入请求重发机制来实现一个安全网络。

2.1 PendingInterrupt类

class PendingInterrupt {

public:

PendingInterrupt (VoidFunctionPtr func,int param,int time,IntType kind);

VoidFunctionPtr handler; // 中断对应的中断处理程序int arg; // 中断处理程序的参数

int when; // 中断发生的时机

IntType type; // 中断的类型,供调试用

};

这个类定义了一个中断等待队列中需要处理的中断。为了方便起见,所有类的数据和成员函数都设置为public的,不需要其它的Get和Set等存取内部数据的函数。初始化函数就是为对应的参数赋值。

《操作系统原理》信管专业实验指导书资料

《操作系统原理》实验指导书 班级:_______________ 学号:_______________ 姓名:_______________ 山东建筑大学管理工程学院 信息管理与信息系统教研室

目录 引言 (1) 实验题目一 (2) 实验题目二 (4) 实验题目三 (6) 实验题目四 (8) 实验题目五 (10) 实验题目六 (12)

引言 操作系统是信息管理与信息系统专业一门重要的专业理论课程,了解和掌握操作系统的基本概念、功能和实现原理,对认识整个计算机系统的工作原理十分重要。 操作系统实验是操作系统课程的一个重要组成部分,通过试验环节的锻炼使同学们不仅能够对以前的所学过的基础知识加以巩固,同时能够通过上机实验,对操作系统的抽象理论知识加以理解,最终达到融会贯通的目的,因此,实验环节是同学们理解、掌握操作系统基本理论的一个重要环节。 本实验指导书,根据教材中的重点内容设定了相应的实验题目,由于实验课程的学时有限,我们规定了必做题目和选做题目,其中必做题目必须在规定的上机学时中完成,必须有相应的预习报告和实验报告。选做题目是针对有能力或感兴趣的同学利用课余时间或上机学时的剩余时间完成。

实验题目一:模拟进程创建、终止、阻塞、唤醒原语 一、题目类型:必做题目。 二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进 程控制功能的理解,掌握操作系统模块的设计方法和工作原理。 三、实验环境: 1、硬件:PC 机及其兼容机。 2、软件:Windows OS ,Turbo C 或C++、VC++、https://www.360docs.net/doc/0f17462121.html, 、Java 等。 四、实验内容: 1、设计创建、终止、阻塞、唤醒原语功能函数。 2、设计主函数,采用菜单结构(参见后面给出的流程图)。 3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供 随时查看各队列中进程的变化情况。 五、实验要求: 1、进程PCB 中应包含以下内容: 2、系统总体结构: 其中: 进程名用P1,P2标识。 优先级及运行时间:为实验题目二做准备。 状态为:就绪、运行、阻塞,三种基本状态。 指针:指向下一个PCB 。

机器人技术实验指导书

工业机器人实验指导书实验一、工业机器人的安装与调试 一、实验学时:2学时 二、实验目的: 1、学习并掌握六自由度工业机器人的结构特点。 2、能根据安装说明书对机器人套件进行安装调试 三、实验设备: 1、六自由度工业机器人套件 2、LOBOT机器人舵机控制板 3、计算机一台 四、实验原理: 六自由度机械手臂是一套具有6个自由度的典型串联式小型关节型机械手臂, 带有小型手抓式;主要由机械系统和控制系统两大部分组成,其机械系统的各部分采用模块化结构,每个部分分别由一个伺服电动机来带动,每个电动机在根据控制要求以及程序的要求来运动从而实现运动要求。 此六自由度机械手臂的特点:1.手部和手腕连接处可拆卸,手部和手腕连接处为机械结构。b.手部是机械手臂的末端操作器,只能抓握一种工件或几种在形状、尺寸、质量等方面相近似的工件,只能执行一种作业任务。c.手部是决定整个机械手臂作业完成好坏,作业柔性好坏的关键部件之一。此机械手臂的手爪是机械钳爪式类别中的平行连杆式钳爪。

五、实验步骤: 1.首先,先熟悉一下需要用到的螺丝及铜柱 2.取1 个圆盘和1 个金属舵盘 3.用4 个M3*6 螺丝的将金属舵盘装在圆盘上面。 4.再取出1 个圆盘和1 个多功能支架,用M4*15 螺丝和螺母,将其固定 5.取2 个圆环+大轴承+双通铜柱(长15mm)+4 个M4*80 螺丝。 6.将螺丝穿入圆环。2 个圆环中间是轴承,下面用铜柱锁紧。(越紧越好)。 7.取出方孔圆盘+1 个MG996R 舵机,用4 个M4*8 螺丝和M4 螺母将舵机固 定在圆盘上。注意方向不要搞错,舵机输出轴在圆盘中心位置。这个舵机要调到90 度(中间)的位置,即往左往右都可以控制旋转90 度。 8.取出之前装好的带有金属舵盘的圆盘。将其固定在舵机输出轴上,注意 图中的位置,将小圆盘上2 个孔之间连线和方孔大圆上2 个孔之间的连线处于平行状态。 9.将之前装好的这两个部分,连到一起 10.方孔大圆盘下面用M4 螺母锁紧。 11.将另一个小圆盘,放上去,孔位和下面对准,取出4 个M4*20螺丝及螺丝, 将上下两个圆盘锁紧,越紧越好!(上螺丝的时候,手指可以抵着M4 螺

实验指导书(六自由度)

实验一:6SPT-1六自由度液压伺服平台综合实验、实验目的: 1、掌握电液位置伺服控制系统的基本原理; 2、掌握六自由度平台的结构解算的概念及其软件实现; 3、掌握VB6.0软件与下位机PAC通过以太网通信的方法; 4、掌握6SPT-1六自由度液压伺服平台复现指令信号的实施方法。 、预备知识: 1、熟练掌握PLC的梯形图语言(LD)编程和结构化文本语言(ST)编 程; 2、熟练掌握VB6.0编程,能使用VB6.0实现以太网通信; 3、有一定的矩阵计算能力。 二、试验原理: 1、电液位置伺服控制系统的基本原理 电液位置伺服控制系统以液体作为动力传输和控制介质,利用电信号进行控制输入和反馈。只要输入某一规律的输入信号,执行元件就能启动、快速并 准确地复现输入量的变化规律。控制系统结构图如图3.1所示: 图3.1电液位置伺服控制系统结构图 2、六自由度平台逆解算法

图3.2 空间机构位置关系示意图 六自由度平台又称为Stewart平台,其结构如图3.2所示,Stewart平台由 上、下两个平台、六个驱动关节和连接球铰组成,上平台为运动平台,下平台为基座,上、下平台的六个铰点分别组成一个六边形,连接6个液压缸作为驱动关节,每个液压缸两端各连接一个球铰。六个驱动关节的伸缩运动是独立的由液压比例压力阀控制各液压缸作伸缩运动,从而改变各个驱动缸的长度,使 动平台在空间的位置和姿态发生变化。因此该平台是通过六个驱动杆的协调动 作来实现三个线性移动及三个转动共六个自由度的运动。 S tewart平台机构的空间位置关系是指运动平台的六个自由度与六个驱动杆长度的关系,是研究该并联机构最基本的任务,也是机构速度、加速度、误差分析、工作空间分析、动力分析等的基础。 对于6-SPS平台机构,其特点是动静平台铰点共面,考虑到工作空间的对称性要求,将平台的6个铰点分成3组,三组铰点沿圆周120。均布,动、静平台的相邻两边到中心的夹角分别为30。和90° o 为求解六自由度平台的空间位置关系,首先在静、动平台上分别建立静、动坐标系。如图3.3所示,静坐标系XYZ原点0位于静平台的中心,X-Y平面

操作系统实验指导书

实验前准备工作:Linux的安装 一. 实验目的 1.掌握Red Hat Linux操作系统的安装步骤。 2.掌握启动、关闭操作系统的方法。 二.实验准备 Red Hat Linux操作系统既可以单独安装在一个计算机系统中;也可以与其它操作系统如windows操作系统一起安装在一个计算机系统中,但注意在安装时要先装windows操作系统,再装Linux;或者利用主机的资源(如CPU、内存、硬盘),模拟出的一台新计算机。然后在虚拟机中安装windows、Linux等系统,使用虚拟机对主机的要求比较高,建议内存512MB以上。 1.硬盘分区 理解硬盘、分区的名称: ?IDE硬盘名称: /dev/hda, /dev/hdb …… ?SCSI硬盘名称:/dev/sda, /dev/sdb …… 分区名称:/dev/hda1, /dev/hda2 …… 一个硬盘最多分4个主分区和扩展分区,扩展分区最多只能建1个,扩展分区不能直接放数据,还必须建立逻辑分区才能使用。 安装Red Hat Linux至少需要两个硬盘分区:一个或多个―Linux native‖类型的分区,一个―Linux swap‖类型的分区。即使将Linux安装在一个专门的硬盘上,或者一台不安装其他操作系统的计算机上,仍然需要为其创建分区。在安装过程中,会提示用户为Red Hat Linux 创建分区,必须保证有足够的硬盘空间来创建分区。推荐以下分区配置: (1)一个根分区 (2)一个交换分区 (3)一个/usr分区 (4)一个/home分区。 2. 安装类型 Red Hat Linux提供了三种类型的安装: (1)客户机类型安装(workstation) (2)服务器类型安装(server system) (3)自定义类型的安装(custom system) 三.实验内容 请在虚拟机中安装Linux。 1. 安装虚拟机软件 常用的虚拟机软件有Vmware和VPC,如果主机性能较好,还能同时虚拟出多台虚拟机;一台虚拟机对应主机上的一个目录,删除该目录就删除了虚拟机;该目录拷到其它电脑

土工实验指导书及实验报告

土工实验指导书及实验报告编写毕守一 安徽水利水电职业技术学院 二OO九年五月

目录 实验一试样制备 实验二含水率试验 实验三密度试验 实验四液限和塑限试验 实验五颗粒分析试验 实验六固结试验 实验七直接剪切试验 实验八击实试验 土工试验复习题

实验一试样制备 一、概述 试样的制备是获得正确的试验成果的前提,为保证试验成果的可靠性以及试验数据的可比性,应具备一个统一的试样制备方法和程序。 试样的制备可分为原状土的试样制备和扰动土的试样制备。对于原状土的试样制备主要包括土样的开启、描述、切取等程序;而扰动土的制备程序则主要包括风干、碾散、过筛、分样和贮存等预备程序以及击实等制备程序,这些程序步骤的正确与否,都会直接影响到试验成果的可靠性,因此,试样的制备是土工试验工作的首要质量要素。 二、仪器设备 试样制备所需的主要仪器设备,包括: (1)孔径0.5mm、2mm和5mm的细筛; (2)孔径0.075mm的洗筛; (3)称量10kg、最小分度值5g的台秤; (4)称量5000g、最小分度值1g和称量200g、最小分度值0.01g的天平;

(5)不锈钢环刀(内径61.8mm、高20mm;内径79.8mm、高20mm或内径61.8mm、高40mm); (6)击样器:包括活塞、导筒和环刀; (7)其他:切土刀、钢丝锯、碎土工具、烘箱、保湿器、喷水设备、凡士林等。 三、试样制备 (一)原状土试样的制备步骤 1、将土样筒按标明的上下方向放置,剥去蜡封和胶带,开启土样筒取土样。 2、检查土样结构,若土样已扰动,则不应作为制备力学性质试验的试样。 3、根据试验要求确定环刀尺寸,并在环刀内壁涂一薄层凡士林,然后刃口向下放在土样上,将环刀垂直下压,同时用切土刀沿环刀外侧切削土样,边压边削直至土样高出环刀,制样时不得扰动土样。 4、采用钢丝锯或切土刀平整环刀两端土样,然后擦净环刀外壁,称环刀和土的总质量。 5、切削试样时,应对土样的层次、气味、颜色、夹杂物、裂缝和均匀性进行描述。 6、从切削的余土中取代表性试样,供测定含水率以及颗粒分析、界限含水率等试验之用。

操作系统原理实验-系统内存使用统计5

上海电力学院 计算机操作系统原理 实验报告 题目:动态链接库的建立与调用 院系:计算机科学与技术学院 专业年级:信息安全2010级 学生姓名:李鑫学号:20103277 同组姓名:无 2012年11 月28 日上海电力学院

实验报告 课程名称计算机操作系统原理实验项目线程的同步 姓名李鑫学号20103277 班级2010251班专业信息安全 同组人姓名无指导教师姓名徐曼实验日期2012/11/28 实验目的和要求: (l)了解Windows内存管理机制,理解页式存储管理技术。 (2)熟悉Windows内存管理基本数据结构。 (3)掌握Windows内存管理基本API的使用。 实验原理与内容 使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。 实验平台与要求 能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。 操作系统:Windows 2000或Windows XP 实验平台:Visual Studio C++ 6.0 实验步骤与记录 1、启动安装好的Visual C++ 6.0。 2、选择File->New,新建Win32 Console Application程序, 由于内存分配、释放及系统存储 空间使用情况均是Microsoft Windows操作系统的系统调用,因此选择An application that support MFC。单击确定按钮,完成本次创建。 3、创建一个支持MFC的工程,单击完成。

操作系统实验-实验指导书

3 《操作系统》实验指导书 实验学时:16 适用专业:计算机科学与技术,软件技术 操作系统上机实验 一、实验目的 主要目的是配合操作系统课程的学习,模拟实现操作系统的功能,有助于对操作系统的理解,同时加强学生对系统设计、程序编写、代码调试、软件开发过程基本技能的掌握。 上机作业应作到:覆盖讲授的所有原理内容,使得学生通过上机实践对原理有更深的理解;每一道上机作业,都要求学生必须完成一个完整的、可运行的小型软件,籍此提升基本的软件开发技能。 二、实验要求 (1)上机实验之前,学生应当为每次上机的内容作好充分准备。对每次上机需要完成的题目进行认真的分析,选择合适的算法,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。 (2)按照实验目的和实验内容以及思考题的要求进行上机操作。录入程序,编译调试,反复修改,直到使用要求的算法,使程序正常运行,得出正确的输出结果为止。 (3)上机作业要求提交原始代码、设计文档和可运行程序。以完整的作业包的形式提交。实验报告应当包括:实验题目,程序清单,运行结果,所选取的算法及其优缺点以及通过上机取得了哪些经验。程序清单要求格式规范,注意加注释(包含关键

字、方法、变量等),在每个模块前加注释,注释不得少于20% 三、实验内容 上机实验包括:操作系统使用、SHELL编程、进程管理、进程调度、死锁处理、存储管理、文件系统几个部分。 实验1: SHELL编程 实验目的 熟悉linux常用命令,为以后的实验打下良好基础; 熟悉vi编辑器的使用; 了解Shell程序的语法规则,能编写简单的Shell程序。 实验内容 1、使用常用的Linux命令,主要包括如下命令: date, mail, write, man, ls, cat, mv, grep, tail, head, cp, wc, pwd, who等; 2、使用vi编辑器编辑文件,熟悉vi编辑器的各种操作模式和常用命令。 3、使用vi编辑器编写一段Shell程序,取名为mycal,实现与Linux中cal命令类 似的功能,当输入: $mycal [月份名] 年时,屏幕输出指定的年月的月历。例如: $mycal October 2009 屏幕输出2009年10月的月历。 注:参数可以是英文或者是数字。 实验2:观察Linux的行为 实验目的 了解Linux proc文件系统; 加深对Linux系统的理解; 增强Linux系统管理知识。 实验内容 在Linux中,proc文件系统提供了一套在用户态检查内核状态和系统特征的机制。proc文件系统将进程的地址空间、系统的硬件信息、系统相关机制(中断、I/O)等内容全部设置为虚拟的Linux文件,为访问系统内核数据的操作提供接口。 1、以root登录系统,并进入/proc目录,键入ls命令,查看/proc下的内容,同时 查看每个文件的读写权限。 2、根据/proc下的信息,回答:CPU的类型和型号、当前Linux版本、从启动到当 前时刻所经过的时间、当前内存状态。

实验五实验六指导书

实验五 MATLAB 实现DFT MATLAB 为计算数据的离散快速傅时叶变换,提供了一系列丰富的数学函数,主要有fft 、ifft 、fft2、ifft2和czt 等。当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。所以,要尽可能使所要处理的数据长度为2幂次或者用添零的方式来添补数据使之成为2的幂次。 1.fft 和ifft 函数 调用格式是: (1)()X fft Y = 如果X 是向量,则采用傅时叶变换来求解X 的离散傅里叶变换;如果X 是矩阵,则计算该矩阵每一列的离散傅里叶变换;如果X 是()D N *维数组,则是对第一个非单元素的维进行离散傅里叶变换。 (2)()N X fft Y ,= N 是进行离散傅里叶变换的X 的数据长度,可以通过对X 进行补零或截取来实现。 (3)[]()dim ,,X fft Y =或()dim ,,N X fft Y = 在参数dim 指定的维上进行离散傅里叶变换;当X 为矩阵时,dim 用来指定变换的实施方向:dim=1,表明变换按列进行;dim=2,表明变换按行进行。 函数ifft 的参数应用与函数fft 完全相同。 2.fft2和ifft2函数 调用格式是: (1)()X fft Y 2= 如果X 是向量,则此傅里叶变换即变成一维傅里叶变换fft ;如果X 是矩阵,则是计算该矩阵的二维快速傅里叶变换;数据二维傅里叶变换fft 2(X )相当于()()''X fft fft ,即先对X 的列做一维傅里叶变换,然后再对变换结果的行做一维傅里叶变换。 (2)()N M X fft Y ,,2= 通过对X 进行补零或截断,使得X 成为()N M *的矩阵。 函数ifft2的参数应用与函数fft2完全相同 fftn 、ifftn 是对数据进行多维快速傅立变换,其应用与fft2、ifft2类似;在此,不再叙述。 3.czt 函数 调用格式是: ()A W M X czt X ,,,= 式中X 是待变换的时域信号()n x ,其长度设为N ,M 是变换的长度,W 确定变换的步

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

计算机网络实验指导书(6个实验)

实验一交换机的基本配置 一.实验原理 1.1以太网交换机基础 以太网的最初形态就是在一段同轴电缆上连接多台计算机,所有计算机都共享这段电缆。所以每当某台计算机占有电缆时,其他计算机都只能等待。这种传统的共享以太网极大的受到计算机数量的影响。为了解决上述问题,我们可以做到的是减少冲突域类的主机数量,这就是以太网交换机采用的有效措施。 以太网交换机在数据链路层进行数据转发时需要确认数据帧应该发送到哪一端口,而不是简单的向所有端口转发,这就是交换机MAC地址表的功能。 以太网交换机包含很多重要的硬件组成部分:业务接口、主板、CPU内存、Flash、电源系统。以太网交换机 的软件主要包括引导程序和核心操作系统两部分。 1.2以太网交换机配置方式 以太网交换机的配置方式很多,如本地Console 口配置,Telnet远程登陆配置,FTP TFTP配置和哑终端方式 配置。其中最为常用的配置方式就是Console 口配置和Telnet远程配置。 1.3以太网交换机基本配置方法 1.3.1交换机的用户界面交换机有以下几个常见命令视图: (1)用户视图:交换机开机直接进入用户视图,此时交换机在超级终端的标识符为。 (2)系统视图:在用户视图下输入实system-view命令后回车,即进入系统视图。在此视图下交换机的标识符 为:。](3)以太网端口视图:在系统视图下输入interface命令即可进入以太网端口视图。在此视图下交换 机的标识符为:。 (4)VLAN配置视图:在系统视图下输入vlan vlan —number即可进入VLAN配置视图。在此视图下交换机的标识符为:。 (5)VTY用户界面视图:在系统视图下输入user-interface vty number 即可进入VTY用户界面视图。在此视图下交 换机的标识符为:。 进行配置时,需要注意配置视图的变化,特定的命令只能在特定的配置视图下进行。 1.3.2交换机的常用帮助在使用命令进行配置的时候,可以借助交换机提供的帮助功能快速完成命令的查找和配置。 (1)完全帮助:在任何视图下,输入?”获取该视图下的所有命令及其简单描述。 (2)部分帮助:输入一命令,后接以空格分隔的?”,如果该位置为关键字,则列岀全部关键字及其描述;如果该位置为参数,则列岀有关的参数描述。 在部分帮助里面,还有其他形式的帮助,如键入一字符串其后紧接?”,交换机将列岀所有以该字符串开头的命令; 或者键入一命令后接一字符串,紧接?”,列岀命令以该字府串开头的所有关键字。 实验内容:交换机配置方法

Linux操作系统实验指导书

《Linux系统管理与维护》实验指导书 实验一初识Linux操作系统 一实验名称 初识Linux操作系统 二实验目的与要求 掌握Linux的启动、登录与注销。 三实验内容 1.以root用户和普通用户两种不同身份登录Linux,说出其登录后得差异。 2.图形模式下的注销、重启与关机。 3.学会在虚拟机上登录和注销Linux。 四操作步骤与结果分析 五问题与建议

实验二Linux的桌面应用 一实验名称 Linux的桌面应用 二实验目的与要求 熟悉Linux操作系统桌面环境 熟悉Linux文件系统及常用的操作 掌握Linux下使用外部存储设备、网络设备 掌握Linux下安装应用程序 三实验内容 1.查看GNOME提供的“应用程序”、“位置”或者“系统”菜单,运行其中的应用程 序和工具。 2.查看Linux文件目录结构,学会常用的文件目录操作,如复制、粘贴、移动、删 除、更名、创建文档、创建文件夹等。 3.练习在Linux下使用光盘和U盘。 4.学会网络配置,使计算机能够进行网络浏览等操作。 5.学会在Linux下安装新的应用软件。 四操作步骤与结果分析 五问题与建议

实验三Linux操作系统的安装 一实验名称 Linux操作系统的安装 二实验目的与要求 掌握安装Linux操作系统 三实验内容 1.通过学习《项目五Linux操作系统的安装及远程服务》的内容,学会如何安装Linux。 环境:windows 系统、vmware虚拟机、Redhat Linux镜像光盘。 通过安装向导将安装分为两步:1、基本安装,2、配置及具体安装。 在第一阶段重点如何分区,在第二阶段重点掌握如何设置密码及安装桌面环境。四操作步骤与结果分析 五问题与建议

(修改后) 系统仿真综合实验指导书(2011[1].6)

系统仿真综合实验指导书 电气与自动化工程学院 自动化系 2011年6月

前言 电气与自动化工程学院为自动化专业本科生开设了控制系统仿真课程,为了使学生深入掌握MATLAB语言基本程序设计方法,运用MATLAB语言进行控制系统仿真和综合设计,同时开设了控制系统仿真综合实验,30学时。为了配合实验教学,我们编写了综合实验指导书,主要参考控制系统仿真课程的教材《自动控制系统计算机仿真》、《控制系统数字仿真与CAD》、《反馈控制系统设计与分析——MATLAB语言应用》及《基于MATLAB/Simulink的系统仿真技术与应用》。

实验一MATLAB基本操作 实验目的 1.熟悉MATLAB实验环境,练习MATLAB命令、m文件、Simulink的基本操作。 2.利用MATLAB编写程序进行矩阵运算、图形绘制、数据处理等。 3.利用Simulink建立系统的数学模型并仿真求解。 实验原理 MATLAB环境是一种为数值计算、数据分析和图形显示服务的交互式的环境。MATLAB有3种窗口,即:命令窗口(The Command Window)、m-文件编辑窗口(The Edit Window)和图形窗口(The Figure Window),而Simulink另外又有Simulink模型编辑窗口。 1.命令窗口(The Command Window) 当MATLAB启动后,出现的最大的窗口就是命令窗口。用户可以在提示符“>>”后面输入交互的命令,这些命令就立即被执行。 在MATLAB中,一连串命令可以放置在一个文件中,不必把它们直接在命令窗口内输入。在命令窗口中输入该文件名,这一连串命令就被执行了。因为这样的文件都是以“.m”为后缀,所以称为m-文件。 2.m-文件编辑窗口(The Edit Window) 我们可以用m-文件编辑窗口来产生新的m-文件,或者编辑已经存在的m-文件。在MATLAB 主界面上选择菜单“File/New/M-file”就打开了一个新的m-文件编辑窗口;选择菜单“File/Open”就可以打开一个已经存在的m-文件,并且可以在这个窗口中编辑这个m-文件。 3.图形窗口(The Figure Window) 图形窗口用来显示MATLAB程序产生的图形。图形可以是2维的、3维的数据图形,也可以是照片等。 MATLAB中矩阵运算、绘图、数据处理等内容参见教材《自动控制系统计算机仿真》的相关章节。 Simulink是MATLAB的一个部件,它为MATLAB用户提供了一种有效的对反馈控制系统进行建模、仿真和分析的方式。 有两种方式启动Simulink:

操作系统原理实验报告(终版)

操作系统原理实验报告(终版)

————————————————————————————————作者:————————————————————————————————日期:

[键入文字] XX学校 实验报告 课程名称: 学院: 专业班: 姓名: 学号: 指导教师: 2011 年3 月

目录 实验1 进程管理 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验要求 (3) 四、程序说明和程序流程图 (4) 五、程序代码 (5) 六、程序运行结果及分析 (7) 七.指导教师评议 (8) 实验2 进程通信 (9) 一、实验目的 (9) 二、实验内容 (9) 三、实验要求 (9) 四、程序说明和程序流程图 (9) 五、程序代码 (11) 七.指导教师评议 (14) 实验3 存储管理 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验要求 (15) 四、程序说明和程序流程图 (16) 六、程序运行结果及分析 (23)

七.指导教师评议 (23) 实验4 文件系统 (24) 一、实验目的 (24) 二、实验内容 (24) 三、实验要求 (24) 四、程序说明和程序流程图 (24) 五、程序代码 (26) 六、程序运行结果及分析 (26) 七.指导教师评议 (27)

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

《计算机操作系统》实验指导书

《计算机操作系统》 实验指导书 (适合于计算机科学与技术专业) 湖南工业大学计算机与通信学院 二O一四年十月

前言 计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。 为了收到良好的实验效果,编写了这本实验指导书。在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。 实验成绩考核: 实验成绩占计算机操作系统课程总评成绩的20%。指导教师每次实验对学生进行出勤考核,对实验效果作记录,并及时批改实验报告,综合评定每一次的实验成绩,在学期终了以平均成绩作为该生的实验成绩。有以下情形之一者,实验成绩为不及格: 1.迟到、早退、无故缺勤总共3次及以上者; 2.未按时完成实验达3次及以上者; 3.缺交实验报告2次及以上者。

Matlab实验指导书(实验六)

MATLAB实验指导书 编著:李新平 二零零八年三月十四日

实验六、数据插值和数据拟合 6.1 实验目的 1)掌握用 MA TLAB 计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点 的数目,对三种插值结果进行初步分析。 2)掌握用 MA TLAB 进行多项式最小二乘拟合,会选择合适的函数及转化为线性函数。 3)通过实例学习用数据插值和数据拟合解决实际问题。 6.2 分段线性插值 设给定一元未知函数 ) (x f y = 的 1 + n 个结点的数据 b x x a n = < < = L 0 对应的函数 值 n y y , , 0 L ,根据这些结点数据求其余 ) ( i j x j 1 点的函数值 j y ,可将相邻两个节点之间用 直线连接起来,如此形成的一条折线(见右图)构成的分段线性函数 ) (x I n 来近似表示未知函 数 ) (x f ,从而解决该插值问题的方法就称为分段线性插值。可用如下公式表示: ) ( ) ( ) ( 0 x f x l y x I n j j j n ? = ? = 其余 , 0 , , ) ( 1 1 1 1 1 1 + + + - - - £ £ - - £ £ - - ? ? ? ? ? í ì = j j j j j j j j j j j x x x x x x x x x x x x x x x l 可用 MA TLAB 命令 y=interp1(x0,y0,x)来实现, 其中参数 x0 为给定结点数据的横坐标向 量,参数 y0 为 x0 对应的函数值,参数 x 为要未知结点的横坐标向量,函数返回值 y 为参数 x 根据分段线性插值得到的函数值。 【例】插值求在[0,15]区间内步长为 0.1 的机床加工数据: >>x0=[0 3 5 7 9 11 12 13 14 15]? y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6]? >>x=0:0.1:15? % 插值点 >>y=inpert1(x0, y0, x) % 插值求得函数值 6.3 拉格朗日插值 设未知函数 ) (x g y = 是n 次多项式,给定该n 次多项式 1 + n 个结点的数据 ), , {( i i y x , } , , 0 n i L = 根据这些结点数据求其余 ) ( i j x j 1 点的函数值 j y ,可考虑如下构造:

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

Linux操作系统实验指导书-4磁盘

《Linux操作系统》实验指导书

实验四 实验题目:磁盘管理 实验目的:熟悉并掌握磁盘管理常用命令;掌握利用虚拟机增加新硬盘,使用fdisk对磁盘分区操作;熟悉和了解磁盘显示信息内容;掌握使用卷组进行磁盘管理操作。 实验类型:综合 实验要求:必修 仪器设备:计算机 实验内容、方法、步骤: 1,使用GUI方式建立用户user01,具体属性如下: 登录shell为/bin/bash, 主目录/user01, 用户id: 520, 用户组grp01 2,使用修改配置文件方式建立用户user02,具体属性如下: 登录shell为/bin/bash, 主目录/user02, 用户id: 530, 用户组grp02 3,使用命令方式建立用户user03,具体属性如下: 登录shell为/bin/bash, 主目录/user03, 用户id: 530, 用户组grp03,附属组grp02 4,对user01,user02,user03,设置密码并登录。 一、磁盘和分区信息查看 1 fdisk查看当前系统硬盘及分区情况,在实验报告中说明当前的磁盘容量,分区数量、名称和大小,分区挂载点,分区使用方式(卷组名称、逻辑卷名称和大小)。 步骤:fdisk –l 2 显示当前文件系统使用情况,在实验报告中说明当前主要文件系统信息及使用情况(包括主要文件系统名称、挂载点、容量、使用量及百分比等)

步骤:df –h 二、添加新硬盘 内容:关闭虚拟机操作系统,添加2块硬盘,大小分别为5G和10G。开机后查看新硬盘是否成功添加。 步骤: 1 关机:init 0 2 添加新硬盘:右键单击虚拟机,选择setting(设置)。在Add中按照要求添加2块新硬盘(HardDisk) 3 开机后,打开终端。输入命令fdisk –l 或ls /dev/sd*查看新硬盘是否添加成功。 三、对新添加硬盘进行分区 内容: 1. 将第二块硬盘sdb分区(5G),要求分区1(sdb1)为主分区,类型为swap (82),大小为500M;分区2(sdb2)为主分区,类型为linux(83),大小为2G;分区3为扩展分区(sdb3),大小为sdb所有剩余容量;分区5为逻辑分区,类型为lvm(8e),大小为2G。分区后,查看sdb新添加所有分区,将截图添加到实验报告中。 2. 将第三块硬盘sdc分区(10G),要求分区1(sdc1)为扩展分区,大小为10G;

小学六年级科学实验指导书要点

教材分析 本册共分四个单元,共32课。 第一单元工具和机械本单元介绍了常用工具杠杆、轮轴、滑轮、斜面的原理及在日常生活中的应用。尤其是结合常用工具和实验器材设置了许多和日常生活密切相关的探究活动,在探究活动中让学生掌握各类机械和工具的特点和作用。 第二单元形状和结构本单元介绍了各种建筑物中使用的形状和结构及其特点,从实验材料的选取到各种不同的设计都能切实培养学生的创新意识和创新实践能力。 第三单元能量本单元介绍了电能、水的三态变化、太阳能以及他们之间的联系,学生掌握自然界中的物质可以相互转化,能量可以相互转化的自然规律,使学生养成爱护大自然,保护环境的意识。 第四单元生物的多样性知道生物的种类多种多样。知道同种生物不同的个体各不相同。初步理解生物体不同的形态结构是与它们的生活环境相适应的。知道生物的多样性是人类生存的重要资源。能自己确定标准对生物进行分类,知道分类是研究生物的基本方法。会用制作生物分布图的方法描述某一区域的生物种类。

(一)研究杠杆的秘密 【实验目的】 用杠杆尺做实验、收集并整理数据,分析认识杠杆省力、费力、不省力也不费力的规律。 【实验材料】 杠杆尺25个、钩码25盒。 【实验方法】 在杠杆尺的左边挂上钩码当作被撬动的重物,右边挂上钩码当作撬动时我们用的力。 1.小组任意在杠杆尺两端挂钩码,记录下挂钩码的位置和数量,并记录下此时杠杆尺的状态。 2.重复几次实验,收集几组不同的数据。 3.将2-3个小组的实验数据进行整合,汇集成一个更大的数据库。 4.对这个数据库进行分析,将能省力的情况、费力的情况、不省力也不费力的情况进行统计,分析出杠杆在什么条件下省力?在什么条件下费力?在什么条件下不省力也不 费力? 【注意事项】 1. 在一大堆杂乱无章的数据中,寻找有用的数据来说明问题也是进行科学探究的一种方法。 2. 数据越多越能说明问题,所以在实验中要收集尽可能多的数据。 3.杠杆尺左右只选一个位置挂钩码。 (二)滑轮和滑轮组

操作系统原理实验2+岳青山+0907052247

《操作系统原理》实验报告 实验序号:2 实验项目名称: Windows 基本进程管理 1、实验目的 通过观察任务管理器,来观察各个进程的动态信息。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 ·任务管理器,了解用户计算机上正在运行的程序和进程的相关信息。 ·Windows环境中的编程。 相关内容参见本次实验参考资料部分。 4、基本实验 1)观察任务管理器 步骤一:进入WindowsXP。 步骤二:按Ctrl+Alt+Delete(或按Ctrl+Shift+Esc)键都可以调出任务管理器。 步骤三:单击“查看”→“选择列”选项,可以看到一些选项, 这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。 步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。 2)通过命令观察进程情况、 步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。 步骤二:输入tasklist。 步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。 3)通过命令来关闭一个进程 步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。 步骤二:输入tasklist后回车执行。 步骤三:继续输入taskkill/PID 208/T 5、实验编程 进行一个简单的Windows的图形用户接口(GUI)编程。 步骤一:进入WindowsXP。 步骤二:进入Microsoft Visual Studio C++6.0。 步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++Source File,选择路径(如D:\1.cpp),并命名为1.cpp。 步骤四:将下面的程序源代码输入。 步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。

相关文档
最新文档