操作系统实验指导书2013原件

操作系统实验指导书2013原件
操作系统实验指导书2013原件

实验一熟悉Windows2000/XP中的进程和线程

一、实验目的

1、熟悉Windows2000/XP中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

二、实验内容与步骤

1、启动操作系统自带的任务管理器:

方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示:

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,

并完成下表(填满即可):

表一:统计进程的各项主要信息

3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结

束掉。再从任务管理器中分别找到下列程序:winlogon.exe、csrss.exe,试着结束它们,观察到的反应是,原因是。

在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。

实验二Windows编程_GUI应用程序

一、实验目的

利用C++ 编译器创建一个GUI应用程序,代码中包括了WinMain() 方法,这是GUI类型的应用程序的标准入口点。

二、实验内容与步骤

步骤1:运行Visual C++ 6.0,在“文件”菜单中依次点击“新建”-“工

程”-“Win32 Application”命令,输入工程名,例如“1”,点击“确定”进入下一个对话框,选择“An simple Win32 Application”,点击“完成”按钮,将建立一个GUI 应用工程。

步骤2:在工作区点击“FileView”,双击“1.cpp”,将清单1中的程序键入1.cpp 中。注:有的代码已经由VC++自动生成,用户只要添加必要的代码即可。

// 1.cpp : Defines the entry point for the application.

#include "windows.h"

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

// TODO: Place code here.

::MessageBox(

NULL, // 没有父窗口

"Hello, Windows xp", // 消息框中的文本

"Greetings", // 消息框标题

MB_OK) ; // 其中只有一个OK按钮

// 返回0以便通知系统不进入消息循环

return 0;

}

关于1.cpp的一些说明:

/*///////////////////////////////////////////////////////////////////////////////////

APIENTRY: 表示是windows的mian函数的入口,实际上APIENTRY是个宏,其定义为

#define APIENTRY WINAPI

而WINAPI也是个宏,其定义为

#define WINAPI __stdcall

这是个关于调用时压栈顺序的修饰符,表示参数压栈的顺序

先压第一个参数,接下来是第二个,依此类推。

当然,定义回调函数也可以用APIENTRY

////////////////////////////////////////////////////////////////////////////

WinMain函数的定义

WinMain函数的原型声明如下:

int WINAPI WinMain(

HINSTANCE hInstance, // handle to current instance

HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine, // command line

int nCmdShow // show state

);

WinMain函数接收4个参数,这些参数都是在系统调用WinMain函数时,传递给应用程序的。

第一个参数hInstance表示该程序当前运行的实例的句柄,这是一个数值。当程序在Windows下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。一个应用程序可以运行多个实例,每运行一个实例,系统都会给该实例分配一个句柄值,并通过hInstance参数传递给WinMain函数。第二个参数hPrevInstance表示当前实例的前一个实例的句柄。通过查看MSDN 我们可以知道,在Win32环境下,这个参数总是NULL,即在Win32环境下,这个参数不再起作用。

第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将D:\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Program arguments”编辑框中输入你想传递给应用程序的参数。

第四个参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数的值由该程序的调用者所指定,应用程序通常不需要去理会这个参数的值。

//LPSTR lpCmdLine lp前缀代表长指针。也可改为PSTR lpCmdLine,都是同一种类型,作为指向字符串的指针。

//另外前缀i 表示int,sz表示以零结束的字符串。

// #define WINAPI _stdcall 该语句指定一个约定,包括如何生成机器代码以及在堆栈中放置函数调用的参数,

//许多Windows函数调用声明为WINAPI

//HINSTANCE hInstance 实例句柄,该句柄唯一标识该程序。

//HINSTANCE hPrevInstance Windows早期版本中,同时运行同一程序多次时,您便创建了该程序的

// 多个实例。在32位Windows版本中,该概念已被抛弃。所以WinMain的第二个参数总是NULL(定义为0)

//LPSTR lpCmdLine 用于运行程序的命令行。某些Windows应用程序使用这个参数以在程序启动时将文件加载到内存。

//int nShowCmd 程序最初显示的方式。可以是正常地,或者是最大地,或者是最小化显示在任务列表栏中。

///////////////////////////////////////////////////////////////////////////////////////

为了显示提示信息给用户,Windows是提供了一个非常方便的API函数MessageBox给用户使用,使用这个API函数可以显示简单的文字信息出来,提醒或提示用户进行下一步操作。

函数声明如下:

WINUSERAPI

int

WINAPI

MessageBoxA(

__in_opt HWND hWnd,

__in_opt LPCSTR lpText,

__in_opt LPCSTR lpCaption,

__in UINT uType);

WINUSERAPI

int

WINAPI

MessageBoxW(

__in_opt HWND hWnd,

__in_opt LPCWSTR lpText,

__in_opt LPCWSTR lpCaption,

__in UINT uType);

#ifdef UNICODE

#define MessageBox MessageBoxW

#else

#define MessageBox MessageBoxA

#endif // !UNICODE

从上面可以看出,Windows的API是两种声明,一种是使用到ANSI编码,一种是使用到UNICODE编码的API函数。通过宏定义把这两种API名称统一到MessageBox的声明。这是一种使用选择不同API的技术,在今后的编程里,大多数都需要使用UNICODE编码了,因为可以适应不同国家的语言显示,可以国际化编程,特别对于中文支持更加需要UNICODE编程。

下面来解释一下参数的定义:

hWnd是指向父窗口的句柄,如果没有父窗口,可以把这个参数设置为NULL。lpText是需要显示的文字。显示字符串的起始地址。

lpCaption是在窗口上标题显示。

uType是窗口组合按钮和显示图标的类型。后面再详细说明。

返回值是一个整数,如果有取消按钮,并且按下ESC键就返回IDCANCEL。如果有其它按钮,并且按下,

就返回相应的值。主要的值如下:

IDABORT 放弃按钮

IDCANCEL取消按钮

IDCONTINUE 继续按钮

IDIGNORE 忽略按钮

IDNO 否按钮

IDOK 确定按钮

IDRETRY 重试按钮

IDTRYAGAIN 重试按钮

IDYES 是按钮

步骤3:点击”Compile”和”Build”按钮,对工程文件进行编译连接,创建1.exe文件。如果不能顺利进行编译连接,可根据提示信息进行更正。

步骤4:点击Execute按钮,可运行程序1.exe。运行结果:弹出图形窗口,输出的字符串:“Hello, Windows xp”,窗口标题为“Greetings”,按“OK”键结束程序的运行。

思考:可通过编辑程序修改窗口属性。

实验三 Windows中进程的创建、运行和终止

一、实验目的

理解Windows中进程的创建、运行和终止。

二、实验内容及步骤

Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。通常应用程序的框架负责调用ExitProcess() 函数。对于C++ 运行库来说,这一调用发生在应用程序的main() 函数返回之后。

1. 创建进程

CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。表

1-1详细地列出了每个参数的类型和名称。

表3-1 CreateProcess() 函数的参数

可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。

然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新进程什么行为。经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻暂停。当准备好时,应该使用ResumeThread() API来启动进程。另一个常用的标志是

CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口。这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间。

接着是CreateProcess() 函数调用所需要的三个通常使用缺省值的参数。第一个参数是lpEnvironment参数,指明为新进程提供的环境;第二个参数是lpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的特殊的当前目录;第三个参数是STARTUPINFO数据结构所必需的,用于在必要时指明新应用程序的主窗口的外观。

CreateProcess() 的最后一个参数是用于新进程对象及其主线程的句柄和ID的返回值缓冲区。以PROCESS_INFORMATION结构中返回的句柄调用CloseHandle() API 函数是重要的,因为如果不将这些句柄关闭的话,有可能危及主创进程终止之前

的任何未释放的资源。

2. 正在运行的进程

如果一个进程拥有至少一个执行线程,则为正在系统中运行的进程。通常,这种进程使用主线程来指示它的存在。当主线程结束时,调用ExitProcess() API函数,通知系统终止它所拥有的所有正在运行、准备运行或正在挂起的其他线程。当进程正在运行时,可以查看它的许多特性,其中少数特性也允许加以修改。

首先可查看的进程特性是系统进程标识符(PID) ,可利用GetCurrentProcessId() API函数来查看,与GetCurrentProcess() 相似,对该函数的调用不能失败,但返回的PID在整个系统中都可使用。其他的可显示当前进程信息的API函数还有GetStartupInfo()和GetProcessShutdownParameters() ,可给出进程存活期内的配置详情。

通常,一个进程需要它的运行期环境的信息。例如API函数GetModuleFileName() 和GetCommandLine() ,可以给出用在CreateProcess() 中的参数以启动应用程序。在创建应用程序时可使用的另一个API函数是IsDebuggerPresent() 。

可利用API函数GetGuiResources() 来查看进程的GUI资源。此函数既可返回指定进程中的打开的GUI对象的数目,也可返回指定进程中打开的USER对象的数目。进程的其他性能信息可通过GetProcessIoCounters()、GetProcessPriorityBoost() 、GetProcessTimes() 和GetProcessWorkingSetSize() API 得到。以上这几个API函数都只需要具有PROCESS_QUERY_INFORMATION访问权限的指向所感兴趣进程的句柄。

另一个可用于进程信息查询的API函数是GetProcessVersion() 。此函数只需感兴趣进程的PID (进程标识号) 。本实验程序清单3中列出了这一API函数与GetVersionEx() 的共同作用,可确定运行进程的系统的版本号。

3. 终止进程

所有进程都是以调用ExitProcess() 或者TerminateProcess() 函数结束的。但最好使用前者而不要使用后者,因为进程是在完成了它的所有的关闭“职责”之后以正常的终止方式来调用前者的。而外部进程通常调用后者即突然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为。

TerminateProcess() API函数只要打开带有PROCESS_TERMINATE访问权的进程对象,就可以终止进程,并向系统返回指定的代码。这是一种“野蛮”的终止进程的方式,但是有时却是需要的。

如果开发人员确实有机会来设计“谋杀”(终止别的进程的进程) 和“受害”进程(被终止的进程) 时,应该创建一个进程间通讯的内核对象——如一个互斥程序——这样一来,“受害”进程只在等待或周期性地测试它是否应该终止。

1. 创建进程

本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的

系统进程ID和它在进程列表中的位置。

步骤1:运行Visual C++ 6.0

步骤2:“文件”->“新建”->“C++ Source File”,建立源程序3-1.cpp。

清单3-1 创建子进程

// proccreate项目

# include

# include

# include

// 创建传递过来的进程的克隆过程并赋于其ID值

void StartClone(int nCloneID)

{

// 提取用于当前可执行文件的文件名

TCHAR szFilename[MAX_PATH] ;

:: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

// 格式化用于子进程的命令行并通知其EXE文件名和克隆ID

TCHAR szCmdLine[MAX_PATH] ;

:: sprintf(szCmdLine, “\”%s\” %d”, szFilename, nCloneID) ;

// 用于子进程的STARTUPINFO结构

STARTUPINFO si;

:: ZeroMemory(reinterpret_cast (&si) , sizeof(si) ) ;

si.cb = sizeof(si) ; // 必须是本结构的大小

// 返回的用于子进程的进程信息

PROCESS_INFORMATION pi;

// 利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质BOOL bCreateOK = :: CreateProcess(

szFilename, // 产生这个EXE的应用程序的名称 szCmdLine, // 告诉其行为像一个子进程的标志NULL, // 缺省的进程安全性

NULL, // 缺省的线程安全性

FALSE, // 不继承句柄

CREATE_NEW_CONSOLE, // 使用新的控制台

NULL, // 新的环境

NULL, // 当前目录

&si, // 启动信息

&pi) ; // 返回的进程信息

// 对子进程释放引用

if (bCreateOK)

{

:: CloseHandle(pi.hProcess) ;

:: CloseHandle(pi.hThread) ;

}

}

int main(int argc, char* argv[] )

{

// 确定进程在列表中的位置

int nClone(0) ;

if (argc > 1)

{

// 从第二个参数中提取克隆ID

:: sscanf(argv*1+ , “%d” , &nClone) ;

}

// 显示进程位置

std :: cout << “Process ID: “ << :: GetCurrentProcessId()

<< “, Clone ID: “ << nClone

<< std :: endl;

// 检查是否有创建子进程的需要

const int c_nCloneMax = 25;

if (nClone < C_nCloneMax)

{

// 发送新进程的命令行和克隆号

StartClone(++nClone) ;

}

// 在终止之前暂停一下(l/2秒)

:: Sleep(500) ;

return 0;

}

步骤3:点击”Compile”和”Build”按钮,对工程文件进行编译连接,创建3-1.exe 文件。如果不能顺利进行编译连接,可根据提示信息进行更正。

步骤4:点击Execute按钮,可运行程序3-1.exe。

步骤5:按Ctrl + S键可暂停程序的执行,按Ctrl + Pause (Break) 键可终止程序的执行。

2. 正在运行的进程

本实验的程序中列出了用于进程信息查询的API函数GetProcessVersion() 与GetVersionEx() 的共同作用,可确定运行进程的操作系统的版本号。

步骤6:建立源程序3-2.cpp。

清单3-2 使用进程和操作系统的版本信息

// version项目

# include

# include

// 利用进程和操作系统的版本信息的简单示例

void main()

{

// 提取这个进程的ID号

DWORD dwIdThis = :: GetCurrentProcessId() ;

// 获得这一进程和报告所需的版本,也可以发送0以便指明这一进程

DWORD dwVerReq = :: GetProcessVersion(dwIdThis) ;

WORD wMajorReq = (WORD) dwVerReq > 16) ;

WORD wMinorReq = (WORD) dwVerReq & 0xffff) ;

std :: cout << “Process ID: “ << dwIdThis

<< “, requires OS: “ << wMajorReq << wMinorReq << std :: endl ;

// 设置版本信息的数据结构,以便保存操作系统的版本信息

OSVERSIONINFOEX osvix;

:: ZeroMemory(&osvix, sizeof(osvix) ) ;

osvix.dwOSVersionInfoSize = sizeof(osvix) ;

// 提取版本信息和报告

:: GetVersionEx(reinterpret_cast < LPOSVERSIONINFO > (&osvix) ) ;

std :: cout << “Running on OS: “ << osvix.dwMajorVersion << “.”

<< osvix.dwMinorVersion << std :: endl;

// 如果是NTS (Windows 2000) 系统,则提高其优先权

/* if (osvix.dwPlatformld = = VER_PLATFORM_WIN32_NT &&

osvix.dwMajorVersion >= 5)

{

// 改变优先级

:: SetPriorityClass(

:: GetCurrentProcess() , // 利用这一进程

HIGH_PRIORITY_CLASS) ; // 改变为high

// 报告给用户

std :: cout << “Task Manager should now now indicate this”

“process is high priority.” << std :: endl;

}*/

}

步骤7:点击”Compile”和”Build”按钮,对工程文件进行编译连接,创建3-2.exe 文件。如果不能顺利进行编译连接,可根据提示信息进行更正。

步骤8:点击Execute按钮,可运行程序3-2.exe。

除了改变进程的优先级以外,还可以对正在运行的进程执行几项其他的操作,只要获得其进程句柄即可。SetProcessAffinityMask() API函数允许开发人员将线程映射到处理器上;SetProcessPriorityBoost() API可关闭前台应用程序优先级的提升;而SetProcessWorkingSet() API可调节进程可用的非页面RAM的容量;还有一个只对当前进程可用的API函数,即SetProcessShutdownParameters() ,可告诉系统如何终止该进程。

3. 终止进程

在清单3-3列出的程序中,先创建一个子进程,然后指令它发出“自杀弹”互斥体去终止自身的运行。

步骤9:建立源程序3-3.cpp。

清单3-3 指令其子进程来“杀掉”自己的父进程

// procterm项目

# include

# include

# include

static LPCTSTR g_szMutexName = “w2kdg.ProcTerm.mutex.Suicide” ;

// 创建当前进程的克隆进程的简单方法

void StartClone()

{

// 提取当前可执行文件的文件名

TCHAR szFilename [MAX_PATH] ;

:: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

// 格式化用于子进程的命令行,指明它是一个EXE文件和子进程

TCHAR szCmdLine[MAX_PATH] ;

:: sprintf(szCmdLine, “\” %s\ “ child” , szFilename) ;

// 子进程的启动信息结构

STARTUPINFO si;

:: ZeroMemory(reinterpret_cast < void* > (&si) , sizeof(si) ) ;

si.cb = sizeof(si) ; // 应当是此结构的大小

// 返回的用于子进程的进程信息

PROCESS_INFORMATION pi;

// 用同样的可执行文件名和命令行创建进程,并指明它是一个子进程

BOOL bCreateOK = :: CreateProcess(

szFilename, // 产生的应用程序名称(本EXE文件)

szCmdLine, // 告诉我们这是一个子进程的标志NULL, // 用于进程的缺省的安全性

NULL, // 用于线程的缺省安全性

FALSE, // 不继承句柄

CREATE_NEW_CONSOLE, // 创建新窗口,使输出更直观

NULL, // 新环境

NULL, // 当前目录

&si, // 启动信息结构

&pi ) ; // 返回的进程信息

// 释放指向子进程的引用

if (bCreateOK)

{

:: CloseHandle(pi.hProcess) ;

:: CloseHandle(pi.hThread) ;

}

}

void Parent()

{

// 创建“自杀”互斥程序体

HANDLE hMutexSuicide = :: CreateMutex(

NULL, // 缺省的安全性

TRUE, // 最初拥有的

g_szMutexName) ; // 为其命名

if (hMutexSuicide != NULL)

{

// 创建子进程

std :: cout << “Creating the child process.” << std :: endl;

:: StartClone() ;

// 暂停

:: sleep(5000) ;

// 指令子进程“杀”掉自身

std :: cout << “Telling the child process to quit. ” << std :: endl;

:: ReleaseMutex(hMutexSuicide) ;

// 消除句柄

:: CloseHandle(hMutexSuicide) ;

}

}

void Child()

{

// 打开“自杀”互斥体

HANDLE hMutexSuicide = :: OpenMutex(

SYNCHRONIZE, // 打开用于同步

FALSE, // 不需要向下传递

g_szMutexName) ; // 名称

if (hMutexSuicide != NULL)

{

// 报告正在等待指令

std :: cout << “Child waiting for suicide instructions. ” << std :: endl;

:: WaitForSingleObject(hMutexSuicide, INFINITE) ;

// 准备好终止,清除句柄

std :: cout << “Child quiting. ” << std :: endl;

:: CloseHandle(hMutexSuicide) ;

}

}

int main(int arqc, char* argv[] )

{

// 决定其行为是父进程还是子进程

if (argc > l && :: strcmp(ar gv*l+ , “child” ) = = 0)

{

Child() ;

}

else

{

Parent() ;

}

return 0;

}

清单3-3中的程序说明了一个进程从“生”到“死”的整个一生。第一次执行时,它创建一个子进程,其行为如同“父亲”。在创建子进程之前,先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。当创建子进程时,就打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用ReleaseMutex() API发出“死亡”信号。然后用Sleep() API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。

当调用ExitProcess() 时要小心,进程中的所有线程都被立刻通知停止。在设计应用程序时,必须让主线程在正常的C++ 运行期关闭(这是由编译器提供的缺省行为) 之后来调用这一函数。当它转向受信状态时,通常可创建一个每个活动线程都可等待和停止的终止事件。

在正常的终止操作中,进程的每个工作线程都要终止,由主线程调用ExitProcess()。接着,管理层对进程增加的所有对象释放引用,并将用GetExitCodeProcess() 建立的退出代码从STILL_ACTIVE改变为在ExitProcess() 调用中返回的值。最后,主线程对象也如同进程对象一样转变为受信状态。

等到所有打开的句柄都关闭之后,管理层的对象管理器才销毁进程对象本身。还没有一种函数可取得终止后的进程对象为其参数,从而使其“复活”。当进程对象引用一个终止了的对象时,有好几个API函数仍然是有用的。进程可使用退出代码将终止方式通知给调用GetExitCodeProcess() 的其他进程。同时,GetProcessTimes() API函数可向主调者显示进程的终止时间。

步骤10:点击”Compile”和”Build”按钮,对工程文件进行编译连接,创建3-3.exe 文件。如果不能顺利进行编译连接,可根据提示信息进行更正。

步骤11:点击Execute按钮,可运行程序3-3.exe。

实验四进程同步-生产者/消费者问题

一、实验目的

掌握临界区的概念及临界区的设计原则;掌握信号量的概念、PV操作的含义以及应用PV操作实现进程的同步与互斥;分析进程争用资源的现象,学习解决进程互斥的方法。

二、实验内容及步骤

1、生产者和消费者原理分析

在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。

2、生产者与消费者功能描述

1)生产者功能描述

在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。

2)消费者功能描述

消费者线程从缓冲区中获得物品,然后释放缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。

3)程序结构图

3、数据结构及信号量定义说明

(1) CreateThread

●功能——创建一个在调用进程的地址空间中执行的线程

●格式

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,

DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParamiter,

DWORD dwCreationFlags,

Lpdword lpThread );

●参数说明

lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。

dwStackSize——定义原始堆栈大小。

lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。lpParamiter——定义一个给进程传递参数的指针。dwCreationFlags——定义控制线程创建的附加标志。

lpThread——保存线程标志符(32位)

(2) CreateMutex

●功能——创建一个命名或匿名的互斥量对象

●格式

HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,

BOOL bInitialOwner,

LPCTSTR lpName);

●参数说明

lpMutexAttributes——必须取值NULL。

bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。lpName——互斥量名称。

(3) CreateSemaphore

●功能——创建一个命名或匿名的信号量对象

●格式

HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

LONG lInitialCount,

LONG lMaximumCount,

LPCTSTR lpName );

●参数说明

lpSemaphoreAttributes——必须取值NULL。

lInitialCount——信号量的初始值。该值大于0,但小于lMaximumCount指定的最大值。

lMaximumCount——信号量的最大值。

lpName——信号量名称。

(4) WaitForSingleObject

●功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间

●格式

DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);

●参数说明

hHandle——信号量指针。

dwMilliseconds——等待的最长时间(INFINITE为无限等待)。

(5) ReleaseSemaphore

●功能——对指定信号量加上一个指定大小的量。成功执行则返回非0值

●格式

BOOL ReleaseSemaphore(HANDLE hSemaphore,

LONG lReleaseCount,

LPLONG lppreviousCount );

●参数说明

hSemaphore——信号量指针。

lReleaseCount——信号量的增量。

lppreviousCount——保存信号量当前值。

(6) ReleaseMutex

●功能——打开互斥锁,即把互斥量加1。成功调用则返回0

●格式

BOOL ReleaseMutex(HANDLE hMutex);

●参数说明

hMutex——互斥量指针。

(7) InitializeCriticalSection

●功能——初始化临界区对象

●格式

VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

●参数说明

lpCriticalSection——指向临界区对象的指针。

(8) EnterCriticalSection

●功能——等待指定临界区对象的所有权

●格式

VOID enterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

●参数说明

lpCriticalSection——指向临界区对象的指针。

(9) LeaveCriticalSection

●功能——释放指定临界区对象的所有权

●格式

VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

●参数说明

lpCriticalSection——指向临界区对象的指针。

4、实验步骤

(1) 打开VC,选择菜单项file->new,选择projects选项卡并建立一个名为" 4"的win32 console applicatoin工程;创建时注意指定创建该工程的目录;

(2) 在工程中创建源文件" 4.cpp",加入工程。

(3)编译,连接,运行。

5、生产者与消费者实现代码

#include

#include

const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度

unsigned short ProductID = 0; //产品号

unsigned short ConsumeID = 0; //将被消耗的产品号

unsigned short in = 0; //产品进缓冲区时的缓冲区下标

unsigned short out = 0; //产品出缓冲区时的缓冲区下标

int g_buffer[SIZE_OF_BUFFER]; //缓冲区是个循环队列

bool g_continue = true; //控制程序结束

HANDLE g_hMutex; //用于线程间的互斥

HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待

HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待

DWORD WINAPI Producer(LPVOID); //生产者线程

DWORD WINAPI Consumer(LPVOID); //消费者线程

int main()

{

//创建各个互斥信号

g_hMutex = CreateMutex(NULL,FALSE,NULL);

g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);

g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);

//调整下面的数值,可以发现,当生产者个数多于消费者个数时,

//生产速度快,生产者经常等待消费者;反之,消费者经常等待

const unsigned short PRODUCERS_COUNT = 3; //生产者的个数

const unsigned short CONSUMERS_COUNT = 1; //消费者的个数

//总的线程数

const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT;

HANDLE hThreads[PRODUCERS_COUNT]; //各线程的handle

DWORD producerID[CONSUMERS_COUNT]; //生产者线程的标识符

DWORD consumerID[THREADS_COUNT]; //消费者线程的标识符

//创建生产者线程

for (int i=0;i

hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);

if (hThreads[i]==NULL) return -1;

}

//创建消费者线程

for (i=0;i

hThreads[PRODUCERS_COUNT+i]=CreateThread(NULL,0,Consumer,NULL,0,&consum erID[i]);

if (hThreads[i]==NULL) return -1;

}

while(g_continue){

if(getchar()){ //按回车后终止程序运行

g_continue = false;

}

}

return 0;

}

//生产一个产品。简单模拟了一下,仅输出新产品的ID号

void Produce()

{

std::cerr << "Producing " << ++ProductID << " ... ";

std::cerr << "Succeed" << std::endl;

}

//把新生产的产品放入缓冲区

void Append()

{

std::cerr << "Appending a product ... ";

g_buffer[in] = ProductID;

in = (in+1)%SIZE_OF_BUFFER;

std::cerr << "Succeed" << std::endl;

//输出缓冲区当前的状态

for (int i=0;i

std::cout << i <<": " << g_buffer[i];

if (i==in) std::cout << " <-- 生产";

if (i==out) std::cout << " <-- 消费";

std::cout << std::endl;

}

}

//从缓冲区中取出一个产品

void Take()

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

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

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

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

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

基础工业工程实验指导书(完整版)

实验1 流程程序分析 一、实验目的 1、学会用程序分析符号、记录并绘制某产品(或零件、服务)的流程程序图。 2、学会用“5W1H”分析(完成了什么?何处做?何时做?由谁做?如何做?为什么要这样做?)技术发掘问题,用“ECRS”原则来改进程序。 二、实验说明 1、流程程序分析是以产品或零件的加工全过程为对象,运用程序分析技巧对整个流程程序中的操作、搬运、贮存、检验、暂存五个方面加以记录和考查、分析。流程程序分析是对生产现场的宏观分析,但它比工艺流程更具体、内容更详细,用途更广泛。 2、运用“5W1H”提问技术,对“操作”、“搬运”、“贮存”、“检验”、“暂存”五个方面进行考查、逐项提问,从而达到考查、分析、发掘问题的目的。 3、在发掘问题的基础上,应用取消、合并、重排、简化四大原则来建立新的程序。 三、实验器材 电子天平、电子秒表、计算器、胶带台、胶带、胶水、记录板、A4纸、包装纸、物流箱等。 四、实验分组 5~6人一组,1人模拟顾客,1人模拟邮局业务员,1人使用记录板记录,1人使用电子秒表测时,其他人认真观察,做些辅助工作。 五、实验内容及步骤 本实验模拟邮局邮包发送流程,可参考下列流程进行: (1)顾客到达。(流程分析起点); (2)询问业务; (3)等待顾客填单; (4)从顾客手中接邮包和填好的包裹单;

(5)包装邮寄物; (6)称重; (7)使用计算器计算邮资;(2元起价,含200克,200克以上按1分/克计算邮资) (8)向顾客收取邮资; (9)登帐(实为计算机操作,这里用手工记账代替); (10)贴包裹单; (11)贴邮票; (12)将包裹放入邮件暂存箱; (13)把包裹单第二联交顾客; (14)顾客离开,服务结束。 实验时,先模拟1~2遍,然后负责记录的同学使用流程图符号记录“邮局业务员”的实际工作流程,绘制流程程序分析简图。同时记录时间和移动距离等参考数据。 六、实验报告要求 使用实习报告纸或课程设计纸书写。实验报告应包含以下内容: (1)实验目的;(2)实验器材;(3)实验分组;(4)实验内容与步骤; (5)5W1H分析过程;(6)ECRS改善过程;(7)规范的以为人主的流程程序图(含现行方法和改善方法)。(8)对分析改善进行总结。

园艺植物育种学实验指导书(2013.3)

园艺植物育种学总论实验指导书 黄桂香编著 广西大学农学院园艺系 2013年3月

目录 实验一园艺植物花粉生活力测定(3h) (3) (一)果树花粉生活力测定 (3) (二)蔬菜花粉生活力测定 (6) 实验二、三园艺植物开花习性观察及有性杂交育种(6h) (7) (一)果树开花习性观察及有性杂交育种 (7) (二)蔬菜开花习性观察及有性杂交育种 (8) 实验四、园艺植物品种描述及鉴别(3h) (10) (一)番茄品种描述及鉴别 (10) (二)荔枝品种描述及鉴别 (13) 实验五、种胚分离培养技术(3h) (16) 实验六、园艺植物选择育种(3h) (17) 实验七、园艺植物品种调查及育种方案的制订(6h) (20) 实验八、园艺植物花粉单核期观察(3h) (20)

实验一、园艺植物花粉发芽试验及生活力测定 内容一:果树花粉发芽试验及花粉生活力测定 一、目的要求 练习并掌握果树花粉发芽试验及花粉生活力测定技术 二、材料用具 供试花粉、氯化钙、硼酸、琼脂、蔗糖、凹玻片、棉花、染色瓶、蒸馏水、显微镜、计数器、天平、载玻片、盖玻片、烧杯、镊子、水浴锅、玻璃杯、玻棒、冰箱、温箱、干燥器等。联苯胺、α—萘酚、碳酸钠、酒精、过氧化氢、氯化三苯基四氮吡、磷酸氢二钠、磷酸二氢钾、量筒、量瓶、滴瓶等。 安全提示:因联苯胺、α—萘酚、氯化三苯基四氮唑为易制毒化学品,操作时要按规范要求,避免人体直接接触,注意安全。 三、说明 在有性杂交工作中,常因杂交亲本组合的花期不遇,或亲本植株异地而必须预先收集父本花粉,花粉应贮藏在低温(0—4℃),干燥(相对湿度0—4%)不受阳光直射(或黑暗)的环境下,可以较长时间地保持花粉的生活力,经贮藏或外地采来的花粉,在授粉之前,必须检验花粉的生活力,以确定花粉发芽的可靠程度,这对检验杂交后的效果,具有重要意义。 花粉人工发芽的效果与培养基的配制是否适合有很大关系,培养基常用不同浓度的蔗糖和琼脂1%及蒸馏水配制而成,不同果树的花粉对蔗糖浓度要求不同。一般柑桔花粉要求蔗糖浓度以10—15%为宜;苹果及梨以10—15%为宜,桃以10%为宜。通过控制蔗糖浓度的高低可调节培养基的渗透压,防止播种的花粉在培养基上发生破裂现象。培养基一般以微酸性为宜,pH值相应调整在6—5.2之间,发芽温度控制在20—25℃,并需要空气和较高的湿度。如在培养基中加入少量,更可促进花粉发芽。 的硼酸和维生素B 1 测定花粉生活力,同样是检查花粉的质量,因为做花粉发芽试验时,操作较复杂,设备要求较高,需时也较长。为了简易而迅速地测定花粉的生活力,也有用化学染色的方法测定花粉生活力,但此种方法有一个很大的缺点,就是不能真实地反映出有发芽力的花粉究竟有多少,因为即使染上色的花粉也不一定都具有生活力。所以一般常用而且较为可靠的方法仍然是采用花粉发芽试验,而染色法作为一种粗略的快速测定,还是比较简便的。 四、方法和步骤 (一)花粉发芽试验 (1)培养基的配制:在100毫升蒸馏水中,加入琼脂1克,蔗糖(按果树花粉种类不同的比例加入)和0.01g的硼酸共同置于烧杯中加热煮沸,使琼脂和蔗糖等充分溶解于水中,在加热过程中,由于水分蒸发,必须加入失去的水分,才能保持准确的浓度,然后将烧杯置于水浴锅中(或盛热水的烧杯中)备用,以防培养基冷却凝固 (2)发芽床的装置:用玻棒将冷却前(约50℃)的培养基滴入凹玻片的凹孔中(1—2滴),要求培养基表面必须园正,待其凝固后用作播种花粉之发芽床。 (3)播种花粉用接种丝或头发沾上花粉(花粉事先收集使之干燥,贮藏于干燥器中置于冰箱内)少许,均匀地播种于培育基表面,播种时要防止花粉成团堆集

(完整版)离散数学实验指导书及其答案

实验一命题逻辑公式化简 【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。 【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。 实验用例:用化简命题逻辑公式的方法设计一个 5 人表决开关电路,要求 3 人以上(含 3 人)同意则表决通过(表决开关亮)。 【实验原理和方法】 (1)写出5人表决开关电路真值表,从真值表得出5 人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。 (2)上面公式中的每一个联结词是一个开关元件,将它们定义成 C 语言中的函数。 (3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。 (4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。 参考代码: #include int vote(int a,int b,int c,int d,int e) { // 五人中任取三人的不同的取法有10种。 i f( a&&b&&c || a&&b&&d || a&&b&&e || a&&c&&d || a&&c&&e || a&&d&&e || b&&c&&d || b&&c&&e || b&&d&&e || c&&d&&e) return 1; else return 0; } void main() { i nt a,b,c,d,e; printf(" 请输入第五个人的表决值(0 或1,空格分开):"); scanf ("%d%d%d%d%d",&a,&b,&c,&d,&e); i f(vote(a,b,c,d,e)) printf(" 很好,表决通过!\n"); else printf(" 遗憾,表决没有通过!\n"); } // 注:联结词不定义成函数,否则太繁 实验二命题逻辑推理 【实验目的】加深对命题逻辑推理方法的理解。【实验内容】用命题逻辑推理的方法解决逻辑

VCO实验指导书-2013版

VCO 压控振荡器电路设计指导书 一 实验目的 1 了解变容二极管原理,掌握高频LC 振荡器与压控振荡器电路的设计要点; 2 按要求设计一个VCO 电路,掌握高频电路设计、组装和调试步骤与方法。 二 设计要求 1 设计一个改进型电容三点式压控振荡器,实现无明显失真的正弦波输出,改变变容二极管静态工作电压调整输出频率; 2 电源电压:+12V ;输出频率调节范围:17.5MHz-22MHz ;输出信号幅度范围:3.0V-1.1V ; 三 实验原理 1 变容二极管原理 当PN 结外加反偏电压时,势垒电容随外加电压的增加而减小。变化曲线如图1所示。 当变容二极管结电容作为振荡器振荡电容的一部分时,改变 变容管反偏电压可以达到改变振荡频率的目的。变容二极管 及其应用请参考《通信电路实验与设计》3.3节内容。 改进型电容三点式振荡器具有电路简单、起振容易、频率稳定性高的特点。在工程实践中获得广泛应用。 2 原理电路 改进型电容三点式振荡器原理和电路参照教材《通信电 路实验与设计》2.4节内容。本实验设计参考电路如图2所示。 四 设计报告要求请参照实验教材附录A 图1 变容管曲线 GND GND GND 图2 设计参考电路 五 元件清单 三极管9018一个,变容管BB910一个(反偏电压0.5V-30V 时,电容范围2.3p-38p),电阻5.1k 、2k 各2个,1k 、100k 各1个,电容27p 、100p (331)、680p(681)、1000p(102)、0.01u(103)、0.1u(104)、10u 各1个,电感2.2uH 一个,电位器50k 、10k 各1个。 C j V C

操作系统实验指导书

实验前准备工作: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,如果主机性能较好,还能同时虚拟出多台虚拟机;一台虚拟机对应主机上的一个目录,删除该目录就删除了虚拟机;该目录拷到其它电脑

电力电子实验指导书完全版范本

电力电子实验指导 书完全版

电力电子技术实验指导书 目录 实验一单相半波可控整流电路实验........................... 错误!未定义书签。实验二三相桥式全控整流电路实验........................... 错误!未定义书签。实验三单相交流调压电路实验 .................................. 错误!未定义书签。实验四三相交流调压电路实验 .................................. 错误!未定义书签。实验装置及控制组件介绍 ............................................ 错误!未定义书签。

实验一单相半波可控整流电路实验 一、实验目的 1.熟悉单结晶体管触发电路的工作原理及各元件的作用; 2.对单相半波可控整流电路在电阻负载及电阻电感负载时的工作做全 面分析; 3.了解续流二极管的作用; 二、实验线路及原理 熟悉单结晶体管触发电路的工作原理及线路图,了解各点波形形状。将单结晶体管触发电路的输出端“G”和“K”端接至晶闸管的门极和阴极, 即构成如图1-1所示的实验线路。 图1-1 单结晶体管触发的单相半波可控整流电路 三、实验内容 1.单结晶体管触发电路的调试; 2.单结晶体管触发电路各点电压波形的观察; 3.单相半波整流电路带电阻性负载时Ud/U2=f(α)特性的测定; 4.单相半波整流电路带电阻电感性负载时续流二极管作用的观察;

四、实验设备 1.电力电子实验台 2.RTDL09实验箱 3.RTDL08实验箱 4.RTDL11实验箱 5.RTDJ37实验箱 6.示波器; 7.万用表; 五、预习要求 1.了解单结晶体管触发电路的工作原理,熟悉RTDL09实验箱; 2.复习单相半波可控整流电路的有关内容,掌握在接纯阻性负载和阻 感性负载时,电路各部分的电压和电流波形; 3.掌握单相半波可控整流电路接不同负载时Ud、Id的计算方法。 六、思考题 1.单相桥式半波可控整流电路接阻感性负载时会出现什么现象?如何 解决? 七、实验方法 1.单相半波可控整流电路接纯阻性负载 调试触发电路正常后,合上电源,用示波器观察负载电压Ud、晶闸管VT两端电压波形U VT,调节电位器RP1,观察α=30o、60o、90o、120o、150o、180o时的Ud、U VT波形,并测定直流输出电压Ud 和电源电压U2,记录于下表1-1中。

微机原理及接口技术实验指导书2013本(SH51-Keil版)讲解

微机原理及接口技术实验指导书 北京联合大学机电学院 2013年4月

目录 实验指南 GCMCU单片机实验箱简介 Keil集成开发环境使用简介 实验一、数据传送及输入输出接口实验实验二、常用数据处理程序设计 实验三、外部中断实验 实验四、定时器/计数器的应用 实验五、机电设备控制实验 实验六、LED显示器实验 实验七、模/数转换实验 实验八、串行通讯实验 附录I、预习报告格式 附录II、实验报告格式

实验指南 千里之行,始于足下。如果你想成为一个优秀的应用型性工程技术人员首先应该重视实验课程,重视实验过程。养成良好的工作作风和习惯。 为了使实验安全、可靠、准确地进行,为了避免造成实验失误,实验之初应该仔细地了解你所使用设备的各种性能和要求,认真思考。绝不可草率从事或操之过急马马虎虎。应该做到细心、耐心,逐渐培养严肃认真,一丝不苟的工作作风。请注意以下几点: 1.根据授课教师给出的时间范围,到实验室申请实验时间。 2.实验之前认真阅读实验指导书,严格按照实验内容和实验要求撰写预习报告,设计实验程序。 3.使用各种实验设备之前,必须了解测量所用的范围、额定值。应将输出量程置于最小,输入量程置于最大。 4.熟悉操作设备的各项功能和作用,做到心中有数,如有疑问应立即向教师提出。 5.实验时严格按照实验要求和实验步骤进行实验。 6.连接线路后应仔细检查,确保无误后才能开启电源。 7.各种开关不能用力硬扳,各种接插头不得硬插,各种连线应避免拉扯使用。 8.特别注意各输出引线(尤其是电源输出引线),不要与地或通过机壳造成短路。 9.实验过程中应仔细观察、记录各种状态的微小变化。 10.实验结束后应先将电源关闭,再撤除连线。清理实验台后才能离开。要做到有始有终。 11.实验完成后认真编写实验报告,不要就事论事,应该对实验结果深入进行分析讨论,提出自己的看法和评价。

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

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版本、从启动到当 前时刻所经过的时间、当前内存状态。

优化设计实验指导书(完整版)

优化设计实验指导书 潍坊学院机电工程学院 2008年10月 目录

实验一黄金分割法 (2) 实验二二次插值法 (5) 实验三 Powell法 (8) 实验四复合形法 (12) 实验五惩罚函数法 (19)

实验一黄金分割法 一、实验目的 1、加深对黄金分割法的基本理论和算法框图及步骤的理解。 2、培养学生独立编制、调试黄金分割法C语言程序的能力。 3、掌握常用优化方法程序的使用方法。 4、培养学生灵活运用优化设计方法解决工程实际问题的能力。 二、实验内容 1、编制调试黄金分割法C语言程序。 2、利用调试好的C语言程序进行实例计算。 3、根据实验结果写实验报告 三、实验设备及工作原理 1、设备简介 装有Windows系统及C语言系统程序的微型计算机,每人一台。 2、黄金分割法(0.618法)原理 0.618法适用于区间上任何单峰函数求极小点的问题。对函数除“单峰”外不作 其它要求,甚至可以不连续。因此此法适用面相当广。 0.618法采用了区间消去法的基本原理,在搜索区间内适当插入两点和,它们把 分为三段,通过比较和点处的函数值,就可以消去最左段或最右段,即完成一次迭代。 然后再在保留下来的区间上作同样处理,反复迭代,可将极小点所在区间无限缩小。 现在的问题是:在每次迭代中如何设置插入点的位置,才能保证简捷而迅速地找到极小点。 在0.618法中,每次迭代后留下区间内包含一个插入点,该点函数值已计算过,因此以后的每次迭代只需插入一个新点,计算出新点的函数值就可以进行比较。 设初始区间[a,b]的长为L。为了迅速缩短区间,应考虑下述两个原则:(1)等比收缩原理——使区间每一项的缩小率不变,用表示(0<λ<1)。 (2)对称原理——使两插入点x1和x2,在[a,b]中位置对称,即消去任何一边区间[a,x1]或[x2,b],都剩下等长区间。 即有 ax1=x2b 如图4-7所示,这里用ax1表示区间的长,余类同。若第一次收缩,如消去[x2,b]区间,则有:λ=(ax2)/(ab)=λL/L 若第二次收缩,插入新点x3,如消去区间[x1,x2],则有λ=(ax1)/(ax2)=(1-λ)L/λL

神经网络实验指导书2013版[1]

神经网络实验指导书2013版[1]

北京信息科技大学自编实验讲义 神经网络实验指导书 许晓飞陈雯柏编著

找其映射是靠学习实践的,只要学习数据足够完备,就能够描述任意未知的复杂系统。因此前馈神经网络为非线性系统的建模和控制提供了有力的工具。 输入层隐层输出层 图1 前馈型神经网络结构 2.BP算法原理 BP(Back Propagation)神经网络是一种利用误差反向传播训练算法的前馈型网络,BP学习算法实质是求取网络总误差函数的最小值问题[2]。这种算法采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数,它是梯度下降法在多层前馈网络中的应用。具体学习算法包括两大过程,其一是输入信号的正向传播过程,其二是输出误差信号的反向传播过程。 1.正向传播 输入的样本从输入层经过隐层单元一层一层进行处理,通过所有的隐层之后,则传向输出

层;在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。 2.反向传播 反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。网络各层的权值改变量,则由传播到该层的误差大小来决定。 3.BP算法的特点 BP神经网络具有以下三方面的主要优点[3]:第一,只要有足够多的隐含层和隐层节点,BP 神经网络可逼近任意的非线性映射关系;第二,BP学习算法是一种全局逼近方法,因而它具有较好的泛化能力。第三,BP神经网络具有一定的容错能力。因为BP神经网络输入输出间的关联信息分布存储于连接权中,由于连接权的个数总多,个别神经元的损坏对输入输出关系只有较小影响。 但在实际应用中也存在一些问题,如:收敛

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

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

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

(完整word版)安全人机工程学综合实验指导书20131

《安全人机工程学》实验指导书 杨轶芙编 实验学时:6学时

目录 实验一手指灵活性测试 ................................................................... - 1 -实验二动觉方位辨别能力的测定 ..................................................... - 3 -实验三暗适应测试实验 ..................................................................... - 5 -实验四明度适应测试 ......................................................................... - 8 -实验五选择、简单反应时测定实验............................................... - 10 -实验六听觉实验 ............................................................................... - 15 -实验七动作稳定性测试 ................................................................... - 22 -

实验一手指灵活性测试 『实验目的』 测定手指、手、手腕灵活性以及手眼协调能力。 『实验仪器』 采用EP707A型手指灵活性测试仪。 该仪器的主要技术参数如下: 1、手指灵活性测试100孔 2、指尖灵活性测试M6、M5、M4、 M3螺栓各25个 3、计时范围0~9999.99秒 4、电源电压220V 50HZ 5、消耗功率10W 6、外形尺寸505×310×48 7、重量3.5千克(净重) 『实验内容』 (一)手指灵活性测试(插孔插板) 1、使用者接上电源打开电源开关,此时计时器即全部显示为0000. 00。然后插上手指灵活性插板(有100个φ 1.6mm 孔),按复位按键被试即可进行测试。 2、被试用优势手拿住镊子钳住φ1.5针,插入开始位,计时器开始计时 3、依次用镊子(从左至右,从上至下)钳住φ1.5针插满100个孔,最后插终止位,计时会自动结束,记录下插入100个棒所需要的时间; 4、每次重新开始需按“复位”键清零。 (二)指尖灵活性测试 1、使用者接上电源打开电源开关,此时计时器即全部显示为0000. 00。然后插上指尖灵活性插板(M6、M5、M4、M3螺栓各25个),按复位按键被试即可进行测试。 2、当被试用优势手放入起始点第一个M6垫圈起,计时器开始计时,然后

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、配置及具体安装。 在第一阶段重点如何分区,在第二阶段重点掌握如何设置密码及安装桌面环境。四操作步骤与结果分析 五问题与建议

(完整版)汽车构造实验指导书(精)

汽车构造实验指导书 李国政编 青岛大学机电工程学院车辆工程系 2006年2月

前言 汽车整车拆装实训课是汽车专业的重要实践环节,它与课堂讲授课密切配合,共同完成教学大纲规定的教学任务。通过实训课,使同学们建立汽车整车构造的实物概念,进一步巩固课堂讲授的知识,更深入的了解汽车各总成部件构造细节及名称,熟悉汽车部件的拆装及操作工艺,为后继专业课程及专业性实习打下基础。 实训课的目的是配合课堂教学、结合实物系统的分解观察掌握汽车主要零部件的功能、组成、结构、类型和工作原理。 实训课的教学内容包括实物讲授和拆装观察分析两部分。 实物讲授是由于有些内容受条件限制,在课堂上难以讲清,故安排在实验课中结合实物进行讲授。 拆装观察是对完整的实物或重要总成分解成零件,然后分析观察零件的形状,安装定位基准,各部件的关系,调整方法和装配工艺,培养学生的实际动手能力和思考分析能力。 为使实训课顺利进行,对学生提出以下要求: 1.实训前要全面复习课堂讲授的有关内容,记住其主要内容。 2.实训中听从教师指导、严格遵守实验室各项规章制度,注意安全。 3.爱护实训教具及设备,与实验课无关的设备不要乱动。 4.在实训中要认真观察分析各零部件,要勤学多问,总结实训收获,认真完成实训报告。 实训地点:车辆实验室

实训一汽车及发动机的总体构造 一、目的 1.通过实训对汽车的组成、总布置型式以及各总成有一个初步认识; 2.了解各组成部分的基本功用及在结构上的相互联系; 3.初步了解不同类型的汽车的结构特征。 二、基础知识 1.汽车总体构造 汽车由许多不同的装置和部件组成,其结构型式和安装位置多种多样。汽车所用的动力装置不同时,其总体构造差异很大。汽车主要由发动机、底盘、车身和电气设备等四部分组成。小轿车还装有空调和其他附属设备。 (1)发动机 使供入其中的燃油燃烧产生动力,是汽车行驶的动力源泉。 (2)底盘 接受发动机的动力,使汽车正常行驶。由传动系、行驶系、转向系和制动系组成。 行驶系—安装部件、支承全车并保证行驶。由车架、车桥、车轮和悬架等组成。 转向系—保证汽车按驾驶员选定的方向行驶。由转向器和转向传动机构组成。 制动系—使汽车能减速行驶以至停车,并保证汽车能可靠停驻。 (3)车身 用以安置驾驶员、乘客或货物。客车和轿车是整体车身;普通货车 车身由驾驶室和货箱组成。 (4) 电气设备 由电源和用电设备组成,包括发电机、蓄电池、起动系、点火系以及汽车的照明、信号装置和仪表等。此外,在现代汽车上愈来愈多装用的各种电子设备:微处理机、中央计算机系统及各种人工智能装置(自诊、防盗、巡航、防抱死、车身高度自调等),显著地提高了汽车的使用性能。 三、实训内容 1.长安6331A型微型客车及日本五十铃的总体结构。 2.北内109发动机、天津夏利轿车发动机及日本皇冠3.0发动机的总体构造。 3.CA1091及桑塔纳汽车模型及部件模型的观察。 四、实训报告 汽车的布置型式通常有几种,各有何优点?实验中各车采取何种布置型式?试述原因。

2013《数据库技术及应用》实验指导书资料

《数据库技术及应用》实验指导书

实验环境 1.软件需求 (1)操作系统:Windows 2000 Professional,或者Windows XP (2)数据库管理系统:SQL Server2000 (3)应用开发工具:Delphi7.0 (4)其它工具:Word 2.硬件需求 (1)PC机 (2)网络环境

基本需求信息 一、对某商场采购销售管理进行调研后,得到如下基本需求信息: 该商场有多名工作人员(主要是采购员和销售员),主要负责从供应商处采购商品,而后将商品销售给客户。采购员主要负责根据商场的销售情况确定要采购的商品,并与供应商联系,签订采购单。销售员主要负责将采购来的商品销售给客户,显然一个客户一次可能购买多种商品。一个供应商可以向该商场供应多种商品,而一种商品也可以由多个供应商供应。 商场的管理者每个月需要对该月已采购的商品和已销售的商品进行分类统计,对采购员和销售员的业绩进行考核,对供应商和客户进行等级评定,并计算商场利润。 二、E-R图 三、需要建立的数据表如下 1.供应商表:供应商ID,供应商名称,地区,信誉等级 2.供应表:供应商ID,商品ID,商品单价 3.商品表:商品ID,商品名称,商品库存量,商品均价 4.采购单表:采购单ID,采购员ID,供应商ID,采购总金额,签订日期 5.采购明细表:采购单ID,商品ID,采购数量,商品单价 6.销售单表:销售单ID,销售员ID,客户ID,销售总金额,签订日期 7.销售明细表:销售ID,商品ID,销售数量,商品单价,单价折扣 8.客户表:客户ID,客户名称,联系电话,客户等级 9.职员表:职员ID,职员姓名,职员类型

管理信息系统课程实验指导书2017版

《管理信息系统》课程 上机指导书 学生姓名 指导教师 所属学院 专业班级 经济与管理学院 2017年2月16日

实验一 认识管理信息系统 一、实验目的 (1)能够对管理信息系统有初步的认识; (2)通过网络了解管理信息系统的应用动态。 二、实验内容 (1)网络搜索管理信息系统的动态,以一个系统为主,熟悉该系统的功能 (2)分析各模块中应设计的数据表。 (5)提交书面实验报告。 四、实验步骤 1、根据网上搜索,选定一个具体管理信息系统作为对象(如淘宝平台,本校图书管理系统,教务管理系统); 2、了解各模块的功能并分析各模块中具有的数据表。 五、实验环境(硬/软件要求):微机:每人1台 六、实验报告要求 (1)每个学生完成一份实验报告; (2)实验报告的内容包括:实验内容及目的,操作步骤及运行结果; (3)在实验报告的最后写明实验体会和实验中存在的问题。

实验一 ***管理信息系统规划 一、实验目的 通过对*管理信息系统开发,让学生了解管理信息系统规划工作的重点,掌握系统规划报告说明书的写作能力。 二、实验内容 (1)根据网上搜索了解管理信息系统的应用动态(如淘宝平台,本校图书管理系统,教务管理系统),选定一个具体管理信息系统作为后续研发对象。 (2)进行***管理信息系统总体规划工作:以整个系统为分析对象,确定系统的总体目标、总要求、主要功能结构、性能要求、投资规模、资源分配、可行性等,对系统进行全面规划。本规划内容要求完成以下内容: (1)背景 (2)现行业务状况,存在的问题 (3)说明项目开发的目标(功能、服务范围和质量) (4)项目的可行性分析 (5)拟采用的信息系统的方法 (6)项目小组的角色分配 (7)项目开发过程时间进度、人员、资金安排 三、实验环境 硬/软件要求:微机:每人1台;软件:Windows XP,Office2003或以上(包括Access)四、实验报告 学生提交一份***管理信息系统系统规划书 规划书提交要点: 一、背景 二、现行业务状况,存在的问题 三、说明项目开发的目标和约束 四、项目的可行性分析 五、拟采用的信息系统的方法 六、项目小组的角色分配 七、项目开发过程时间进度、人员、资金安排

操作系统实验指导书2013原件

实验一熟悉Windows2000/XP中的进程和线程 一、实验目的 1、熟悉Windows2000/XP中任务管理器的使用。 2、通过任务管理器识别操作系统中的进程和线程的相关信息。 二、实验内容与步骤 1、启动操作系统自带的任务管理器: 方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示: 2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息, 并完成下表(填满即可): 表一:统计进程的各项主要信息

3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结 束掉。再从任务管理器中分别找到下列程序:winlogon.exe、csrss.exe,试着结束它们,观察到的反应是,原因是。 在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。 实验二Windows编程_GUI应用程序 一、实验目的 利用C++ 编译器创建一个GUI应用程序,代码中包括了WinMain() 方法,这是GUI类型的应用程序的标准入口点。 二、实验内容与步骤 步骤1:运行Visual C++ 6.0,在“文件”菜单中依次点击“新建”-“工 程”-“Win32 Application”命令,输入工程名,例如“1”,点击“确定”进入下一个对话框,选择“An simple Win32 Application”,点击“完成”按钮,将建立一个GUI 应用工程。 步骤2:在工作区点击“FileView”,双击“1.cpp”,将清单1中的程序键入1.cpp 中。注:有的代码已经由VC++自动生成,用户只要添加必要的代码即可。 // 1.cpp : Defines the entry point for the application. #include "windows.h"

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;

相关文档
最新文档