当前位置:文档之家› 操作系统实验个人总结

操作系统实验个人总结

操作系统实验个人总结
操作系统实验个人总结

操作系统实验报告

班级:

姓名:

学号:

实验一进程控制与描述

一、实验目的

通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000中进程的“一生”。

二、实验环境

硬件环境:计算机一台,局域网环境;

软件环境:Windows 2000 Professional、Visual C++ 6.0企业版。

三、实验内容和步骤

第一部分:

程序1-1Windows 2000 的GUI 应用程序

Windows 2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI 应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。# include

# pragma comment(lib, “user32.lib” )

int APIENTRY WinMain(HINSTANCE /* hInstance */ ,

HINSTANCE /* hPrevInstance */,

LPSTR /* lpCmdLine */,

int /* nCmdShow */ )

{

:: MessageBox(

NULL,

“hello, Windows 2000” ,

“Greetings”,

MB_OK) ;

return(0) ; }

在程序1-1的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。

接着的pragma指令指示编译器/连接器找到User32.LIB库文件并将其与产生的EXE文件连接起来。这样就可以运行简单的命令行命令CL MsgBox.CPP来创建这一应用程序,如果没有pragma指令,则MessageBox() API函数就成为未定义的了。这一指令是V isual Studio C++ 编译器特有的。

接下来是WinMain() 方法。其中有四个由实际的低级入口点传递来的参数。hInstance 参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle() API函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值实际上是EXE文件映像的基地址,通常为0x00400000。下一个参数hPrevInstance 是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行(不包括程序的名称) 是lpCmdLine参数。另外,系统利用nCmdShow参数告诉应用程序如何显示它的主窗口(选项包括最小化、最大化和正常) 。

最后,程序调用MessageBox() API函数并退出。如果在进入消息循环之前就结束运行的话,最后必须返回0。

先分析程序功能,再写出运行结果:

操作系统将当前运行的应用程序看作是进程对象。利用系统提供的惟一的称为句柄(HANDLE) 的号码,就可与进程对象交互。这一号码只对当前进程有效。

在系统中运行的任何进程都可调用GetCurrentProcess() API函数,此函数可返回标识进程本身的句柄。然后就可在Windows需要该进程的有关情况时,利用这一句柄来提供。

程序1-2:获得和使用进程的句柄

# include

# include

void main()

{

HANDLE hProcessThis = :: GetCurrentProcess() ;

DWORD dwPriority = :: GetPriorityClass(hProcessThis) ;

std :: cout << “Current process priority: ” ;

switch(dwPriority)

{

case HIGH_PRIORITY_CLASS:

std :: cout << “High” ;

break;

case NORMAL_PRIORITY_CLASS:

std :: cout << “Normal” ;

break;

case IDLE_PRIORITY_CLASS:

std :: cout << “Idle” ;

break;

case REALTIME_PRIORITY_CLASS:

std :: cout << “Realtime” ;

break;

default:

std :: cout << “” ;

break;

}

std :: cout << std :: endl;

}

程序1-2中列出的是一种获得进程句柄的方法。对于进程句柄可进行的惟一有用的操作是在API调用时,将其作为参数传送给系统,正如程序1-2中对GetPriorityClass() API函数的调用那样。在这种情况下,系统向进程对象内“窥视”,以决定其优先级,然后将此优先级返回给应用程序。

OpenProcess() 和CreateProcess() API函数也可以用于提取进程句柄。前者提取的是已经存在的进程的句柄,而后者创建一个新进程,并将其句柄提供出来。

先分析程序功能,再写出运行结果:

程序1-3显示如何找出系统中正在运行的所有进程,如何利用OpenProcess() API函数来获得每一个访问进程的进一步信息。

程序1-3 利用句柄查出进程的详细信息

// proclist项目

# include

# include

# include

DWORD GetKernelModePercentage(const FILETIME & ftKernel,

const FILETIME & ftUser)

{

ULONGLONG qwKernel =

( ( (ULONGLONG) ftKernel.dwHighDateTime) << 32) +

ftKernel.dwLowDateTime;

ULONGLONG qwUser =

( ( (ULONGLONG) ftUser.dwHighDateTime) << 32) +

ftUser.dwLowDateTime;

ULONGLONG qwTotal = qwKernel + qwUser;

DWORD dwPct =

(DWORD) ( ( (ULONGLONG) 100*qwKernel) / qwTotal) ;

return(dwPct) ;

}

void main()

{

HANDLE hSnapshot = :: CreateToolhelp32Snapshot(

TH32CS_SNAPPROCESS,

0) ;

PROCESSENTRY32 pe;

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

pe.dwSize = sizeof(pe) ;

BOOL bMore = :: Process32First(hSnapshot, &pe) ;

while(bMore)

{

HANDLE hProcess = :: OpenProcess(

PROCESS_QUERY_INFORMA TION,

FALSE,

pe.th32ProcessID) ;

if (hProcess != NULL)

{ FILETIME ftCreation, ftExit, ftKernelMode, ftUserMode;

:: GetProcessTimes(

hProcess,

&ftCreation,

&ftExit,

&ftKernelMode,

&ftUserMode) ;

DWORD dwPctKernel = :: GetKernelModePercentage(

ftKernelMode,

ftUserMode ) ;

std :: cout << “Process ID: ” << pe.th32ProcessID

<< “, EXE file: ” << pe.szExeFile

<< “, % in kernel mode: ” << dwPctKernel

<< std :: endl;

:: CloseHandle(hProcess) ;

}

bMore = :: Process32Next(hSnapshot, &pe) ; }

}

程序1-3程序首先利用Windows 2000的新特性,即工具帮助库来获得当前运行的所有进程的快照。然后应用程序进入快照中的每一个进程,得到其以PROCESSENTRY32结构表示的属性。这一结构用来向OpenProcess() API函数提供进程的ID。Windows跟踪每一进程的有关时间,示例中是通过打开的进程句柄和GetProcessTimes() API来直询得到有关时间的。接下来,一个定制的帮助函数取得了几个返回的数值,然后计算进程在内核模式下消耗的时间占总时间的百分比。程序的其余部分比较简单,只是将有关信息显示给用户,清除进程句柄,然后继续循环,直到所有进程都计算过为止。

先分析程序功能,再写出运行结果:

第二部分:进程的“一生”(共三个程序)

1、创建进程

//创建子进程

# include

# include

# include

void StartClone(int nCloneID)

{

TCHAR szFilename[MAX_P ATH] ;

:: GetModuleFileName(NULL, szFilename, MAX_P ATH) ;

TCHAR szCmdLine[MAX_P A TH] ;

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

STARTUPINFO si;

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

si.cb = sizeof(si) ;

PROCESS_INFORMA TION pi;

BOOL bCreateOK = :: CreateProcess(

szFilename,

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)

{ :: 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) ;

}

:: Sleep(500) ;

return 0;

}

本程序展示的是一个简单的使用CreateProcess() API函数的例子。首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。大多数参数都可取缺省值,但是创建标志参数使用了:

____CREA TE_NEW_CONSOLE_____________________________

标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。

CreateProcess() 函数有____10____个核心参数?本实验程序中设置的各个参数的值是:a.__________szFilenam e___________________________;

b.__________szCmdLine_________________________;

c. __________NULL__________________________;

d.___________NULL________________________;

e. ___________FALSE____;

f.__________CREATE NEW CONSOLE________;

g.__________szCmdLine_________________________;

h. __________NULL__________________________;

i.___________&si________________________;

j. ___________&pi____;

程序运行时屏幕显示的信息是:

*(此图是最后出现的一个图,在此之前连续出现几个图。)

2、正在运行的进程.

使用进程和操作系统的版本信息

// version项目

# include

# include

void main()

{

DWORD dwIdThis = :: GetCurrentProcessId() ;

DWORD dwV erReq = :: GetProcessV ersion(dwIdThis) ;

WORD wMajorReq =( (WORD) dwV erReq > 16) ;

WORD wMinorReq = ((WORD) dwV erReq & 0xffff) ;

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

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

OSVERSIONINFOEX osvix;

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

osvix.dwOSVersionInfoSize = sizeof(osvix) ;

:: GetV ersionEx(reinterpret_cast < LPOSVERSIONINFO > (&osvix) ) ;

std :: cout << “Running on OS: “ << osvix.dwMajorV ersion << “.”

<< osvix.dwMinorV ersion << std :: endl;

if (osvix.dwPlatformId == VER_PLATFORM_WIN32_NT &&

osvix.dwMajorV ersion >= 5)

{

:: SetPriorityClass(

:: GetCurrentProcess() ,

HIGH_PRIORITY_CLASS) ;

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

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

}

}

分析程序,写出运行结果:

当前PID信息:_______1492______________________________________________

当前操作系统版本:___Running on OS:5.1_________________________________

系统提示信息:T ask Manager should now indiate this process is high priority.

____________________________________________________________________ ___

程序向读者表明了如何获得当前的PID和所需的进程版本信息。为了运行这一程序,系统处理了所有的版本不兼容问题。

接着,程序演示了如何使用GetV ersionEx() API函数来提取OSVERSIONINFOEX结构。这一数据块中包括了操作系统的版本信息。其中,“OS : 5.0”表示当前运行的操作系统是:____Windows2000_当前版本为_OS:5.0________________________________ 最后一段程序利用了操作系统的版本信息,以确认运行的是Windows 2000。代码接着将当前进程的优先级提高到比正常级别高。

单击Ctrl + Alt + Del键,进入“Windows任务管理器”,在“应用程序”选项卡中右键单击本任务,在快捷菜单中选择“转到进程”命令。

在“Windows任务管理器”的“进程”选项卡中,与本任务对应的进程映像名称是(为什么?) :

____________vcspawn.exe____________________________________________ 右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“高”后重新运行程序,屏幕显示有变化吗?为什么?

_____屏幕显示有变化。Process ID值由1492变为:3152________________

3、终止进程

指令其子进程来“杀掉”自己的父进程

// procterm项目

# include

# include

# include

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

void StartClone()

{

TCHAR szFilename [MAX_P ATH] ;

:: GetModuleFileName(NULL, szFilename, MAX_P ATH) ;

TCHAR szCmdLine[MAX_P A TH] ;

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

STARTUPINFO si;

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

si.cb = sizeof(si) ;

PROCESS_INFORMA TION pi;

BOOL bCreateOK = :: CreateProcess(

szFilename,

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 argc, char* argv[] )

{

if (argc >1&& :: strcmp(argv[1] , “child” ) == 0)

{ Child() ; }

else

{Parent() ;}

return 0;

}

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

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

在正常的终止操作中,进程的每个工作线程都要终止,由主线程调用ExitProcess()。接

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

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

先分析程序功能,再写出运行结果:

1) _第一次执行时,它创建一个子进程,其行为如同“父亲”。

表示:_ Creating the child process.

2) ______用Sleep() API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。

表示:Telling the child process to quit

在熟悉源代码的基础上,利用本实验介绍的API函数来尝试改进本程序(例如使用GetProcessTimes() API函数) 并运行。请描述你所做的工作:

____GetProcessTimes() API 可向主调者显示进程终止时间___________________

_

四、实验总结

进程具有的特征:结构特征、动态性、并发性、独立性和异步性。

对于进程的定义可以从不同的角度来说,其中较为典型的定义有:

(1)进程是程序的一次执行

(2)进程是一个程序及其数据在处理机上顺序执行时发生的活动

(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

对于传统os中的进程定义为:进程是进程实体的运行过程,使系统进行资源分配和调度的一个独立单位。

进程有三种基本状态:就绪状态、执行状态、阻塞状态。

创建一个进程:

(1)、申请空白的PCB

(2)为进城分配资源

(3)初始化进程控制块

(4)将进程插入就绪队列

终止一个进程:

(1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态

(2)若终止进程正处于执行状态,应立即中止该进程的执行,并置调度标志为真,用于

指示该进程被终止进程的后应该重新进行调度

(3)若该进程还有子孙进程,还应该将其所有的子孙进程终止,以防止他们成为不可

控的进程

(4)将终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统

(5)将终止进程PCB从所在队列中移除,等待其他程序来搜索信

通过实验更清楚的了解了进程,理解了进程的创建过程和终止过程

实验二并发与调度

一、实验目的

在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000线程同步的理解。通过分析实验程序,了解管理事件对象的API。了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。

在Linux Redhat 9.0操作系统平台上,用pipe()创建一个管道文件,然后用fork()创建两个生产进程和两个消费进程,它们之间通过pipe()传递消息。

二、实验环境

硬件环境:计算机一台,局域网环境;

软件环境:Windows 2000 Professional,Linux Redhat 9.0操作系统平台,Visual C++ 6.0企业版。

三、实验内容和步骤

第一部分:互斥体对象

本程序中显示的类CCountUpDown使用了一个互斥体来保证对两个线程间单一数值的访问。每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源(因而也就是共享资源) 。

利用互斥体保护共享资源

// mutex项目

# include

# include

class CCountUpDown

{

public:

CCountUpDown(int nAccesses) :

m_hThreadInc(INV ALID_HANDLE_V ALUE) ,

m_hThreadDec(INV ALID_HANDLE_V ALUE) ,

m_hMutexV alue(INV ALID_HANDLE_V ALUE) ,

m_nV alue(0) ,

m_nAccess(nAccesses)

{

m_hMutexV alue = :: CreateMutex(

NULL,

TRUE,

NULL) ;

m_hThreadInc = :: CreateThread(

NULL,

0,

IncThreadProc,

reinterpret_cast (this) ,

0,

NULL) ;

m_hThreadDec = :: CreateThread(

NULL,

0,

DecThreadProc,

reinterpret_cast (this) ,

0,

NULL) ;

:: ReleaseMutex(m_hMutexV alue) ;

}

virtual ~CCountUpDown()

{

:: CloseHandle(m_hThreadInc) ;

:: CloseHandle(m_hThreadDec) ;

:: CloseHandle(m_hMutexV alue) ;

}

virtual void WaitForCompletion()

{

if (m_hThreadInc != INV ALID_HANDLE_V ALUE &&

m_hThreadDec != INV ALID_HANDLE_V ALUE)

{

:: WaitForSingleObject(m_hThreadInc, INFINITE) ;

:: WaitForSingleObject(m_hThreadDec, INFINITE) ;

}

}

protected:

virtual void DoCount(int nStep)

{

while (m_nAccess > 0)

{

:: WaitForSingleObject(m_hMutexV alue, INFINITE) ;

m_nV alue += nStep;

std :: cout << “thread: ” << :: GetCurrentThreadId()

<< “value: ” << m_nV alue

<< “access: ” << m_nAccess << std :: endl;

--m_nAccess;

:: Sleep(1000) ; // 使显示速度放慢

:: ReleaseMutex(m_hMutexV alue) ;

}

}

static DWORD WINAPI IncThreadProc(LPVOID lpParam)

{

CCountUpDown* pThis =

reinterpret_cast < CCountUpDown* > (lpParam) ;

pThis -> DoCount(+1) ;

return(0) ;

}

static DWORD WINAPI DecThreadProc(LPVOID lpParam)

{

CCountUpDown* pThis =

reinterpret_cast (lpParam) ;

pThis -> DoCount(-1) ;

return(0) ;

}

protected:

HANDLE m_hThreadInc;

HANDLE m_hThreadDec;

HANDLE m_hMutexV alue;

int m_nV alue;

int m_nAccess ;

} ;

void main()

{ CCountUpDown ud(50) ;

ud.WaitForCompletion() ; }

分析程序的运行结果,可以看到线程(加和减线程) 的交替执行(因为Sleep() API允许Windows切换线程) 。在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。

1)请描述运行结果(如果运行不成功,则可能的原因是什么?)

50进程交替使用互斥资源,从50开始直到0,如上图所示

2)根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述

1、创建互斥体用于访问数值;

2、解除程序释放对对象的引用简单的等待方法,在两个线程终止之前可暂停主调者;

3、使用等待方法,在两个线程终止之前可暂停主调者;

4、确保所有对象都已准备好;

5、等待两者完成(顺序并不重要);

6、循环,知道所有的访问都结束为止。

第二部分线程通过文件对象发送数据

Windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。

演示线程通过文件对象发送数据

# include

# include

static LPCTSTR g_szFileName = “w2kdg.Fileobj.file.data.txt”;

static DWORD WINAPI ThreadProc (LPVOID lpParam)

{

LONG nAdd = reinterpret_cast (lpParam) ;

TCHAR szFullName [MAX_PA TH] ;

:: GetTempPath(MAX_P ATH, szFullName) ; // 取得路径

:: strcat(szFullName, g_szFileName) ;

HANDLE hFile = :: CreateFile(

szFullName, // 文件的完全名称

GENERIC_READ | GENERIC_WRITE, // 具有所有的访问权

FILE_SHARE_READ, // 允许其他线程读取

NULL, // 缺省的安全性

OPEN_ALWAYS, // 创建或打开文件

FILE_ATTRIBUTE_NORMAL, // 普通文件

NULL) ; // 无模板文件

if (hFile != INV ALID_HANDLE_V ALUE)

{

LONG nV alue(0) ;

DWORD dwXfer(0) ;

:: ReadFile(

hFile, // 要读取的文件

reinterpret_cast (&nV alue) , // 缓冲区

sizeof(nV alue) , // 缓冲区容量

&dwXfer, // 读取的字节数

NULL) ; // 无重叠I/O

if (dwXfer == sizeof(nV alue) )

{

std :: cout << “read: ” << nV alue << std :: endl;

}

nV alue += nAdd;

:: SetFilePointer(hFile, 0, NULL, FILE_BEGIN) ;

:: WriteFile(

hFile, // 要写入的文件

reinterpret_cast (&nV alue) , // 数据

sizeof(nV alue), // 缓冲区容量

&dwXfer, // 写入的字节数

NULL) ; // 无重叠I/O

if (dwXfer == sizeof(nV alue) )

{

std :: cout <<“write: ”<< nV alue << std :: endl;

}

:: CloseHandle(hFile) ;

hFile = INV ALID_HANDLE_V ALUE;

}

return(0) ;

}

void main()

{

for (int nTotal = 100; nTotal > 0; --nTotal)

{

HANDLE hThread = :: CreateThread(

NULL, // 缺省的安全性

0, // 缺省的堆栈

ThreadProc, // 线程函数

reinterpret_cast (1) , // 增量

0, // 无特殊的创建标志

NULL) ; // 忽略线程id :: WaitForSingleObject(hThread, INFINITE) ;

:: Sleep(500) ;

:: CloseHandle(hThread) ;

hThread = INV ALID_HANDLE_V ALUE;

}

}

运行结果(如果运行不成功,则可能的原因是什么?) :

阅读和分析程序,请回答问题:

1) 程序中启动了多少个单独的读写线程?

__________________100个__________________________________________________

3)使用了哪个系统API函数来创建线程例程?

HANDLE hThread=::CreareThread()

3) 文件的读和写操作分别使用了哪个API函数?

ReadFile()和WriteFile()

每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。这个示例是很简单的通讯机制。可将这一示例用作编写自己的文件读/写代码的模板。

请注意程序中写入之前文件指针的重置。重置文件指针是必要的,因为该指针在读取结束时将处于前四个字节之后,同一指针还要用于向文件写入数据。如果函数向该处写入新数值,则下次进程运行时,只能读到原来的数值。那么:

4) 在程序中,重置文件指针使用了哪一个函数?

_____SetFilePointer()___________________________________________________

4)从输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:

1、创建一个进程,以子进程模式工作

2、创建一个事件或一个子进程,然后等待子进程在返回前向事件发出信号

3、子进程模式被调用,其功能只是向父进程发出终止信号

4、检查父进程或子进程是否启动

5、向父进程创建的事件发送信号

6、创建一个事件并等待子进程发出信号

2、演示使用映射文件的内存交换数据的线程

# include

# include

// 仲裁访问的互斥体

static HANDLE g_hMutexMapping = INV ALID_HANDLE_V ALUE;

// 增加共享内存中的数值的简单线程

static DWORD WINAPI ThreadProc(LPVOID IpParam)

{

// 将参数看作句柄

HANDLE hMapping = reinterpret_cast (IpParam) ;

// 等待对文件的访问

:: WaitForSingleObject(g_hMutexMapping, INFINITE) ;

// 映射视图

LPVOID pFile = :: MapViewOfFile(

hMapping, // 保存文件的对象

FILE_MAP_ALL_ACCESS, // 获得读写权限

0, // 在文件的开头处(高32位) 开始

0, // ... (低32位)

0) ; // 映射整个文件

if (pFile != NULL)

{

// 将数据看作长整数

LONG * pnData = reinterpret_cast (pFile) ;

// 改动数据

++(* pnData) ;

// 显示新数值

std :: cout << "thread: " << :: GetCurrentThreadId()

<< "value: "<< (* pnData) << std :: endl;

// 释放文件视图

:: UnmapViewOfFile(pFile) ;

pFile = NULL;

}

// 释放对文件的访问权

:: ReleaseMutex(g_hMutexMapping) ;

return(0) ;

}

// 创建共享数据空间

HANDLE MakeSharedFile()

{

// 创建文件映射对象

HANDLE hMapping = :: CreateFileMapping(

INV ALID_HANDLE_V ALUE, // 使用页式文件临时文件

NULL, // 缺省的安全性

PAGE_READWRITE, // 可读写权

0, // 最大容量(高32位)

sizeof(LONG) , // ... (低32位)

NULL) ; // 匿名的

if (hMapping != INV ALID_HANDLE_V ALUE)

{

// 在文件映射上创建视图

LPVOID pData = :: MapViewOfFile(

hMapping, // 保存文件的对象

FILE_MAP_ALL_ACCESS, // 获得读写权

0, // 在文件的开头处(高32位)开始

0, // ... (低32位)

0 ) ; // 映射整个文件

if (pData != NULL)

{

:: ZeroMemory(pData, sizeof(LONG) ) ;

}

// 关闭文件视图

:: UnmapViewOfFile(pData) ;

}

return (hMapping) ;

}

void main()

{

// 创建数据文件

HANDLE hMapping = :: MakeSharedFile() ;

// 创建仲裁的互斥体

g_hMutexMapping = :: CreateMutex(NULL, FALSE, NULL) ;

// 根据文件创建10个线程来读写

for (int nTotal = 10; nTotal > 0 ; --nTotal)

{

// 启动线程

HANDLE hThread = :: CreateThread(

NULL, // 缺省的安全性

0, // 缺省堆栈

ThreadProc, // 线程函数

reinterpret_cast (hMapping) , // 增量

0, // 无特殊的创建标志

NULL) ; // 忽略线程id // 等待最后的线程释放

if (nTotal ==1)

{

std :: cout << "all threads created, waiting..."<< std :: endl;

:: WaitForSingleObject(hThread, INFINITE) ;

}

:: Sleep(500) ; // 放慢显示速度,方便观察

// 释放指向线程的句柄

:: CloseHandle(hThread) ;

hThread = INV ALID_HANDLE_V ALUE;

}

// 关闭对象

:: CloseHandle(hMapping) ;

hMapping = INV ALID_HANDLE_V ALUE;

:: CloseHandle(g_hMutexMapping) ;

g_hMutexMapping = INV ALID_HANDLE_V ALUE;

}

程序运行结果:

阅读和分析程序,请回答:

1) 程序中用来创建一个文件映射对象的系统API函数是哪个?

CreateFileMapping( )_______________________________________________

2) 在文件映射上创建和关闭文件视图分别使用了哪一个系统函数?

a. __MapViewOfFile( )

b. ___ UnmapViewOfFile(pData)__________________________________________

3) 运行时,程序首先通过(CreateFileMapping( ) ) 函数创建一个小型的文件映射对象( hMapping ) ,接着,使用系统API函数(g_hMutexMapping ) 再创建一个保护其应用的互斥体(CreateMutex()) 。然后,应用程序创建100个线程,每个都允许进行同样的进程,即:通过互斥体获得访问权,这个操作是由语句:_ for (int nT otal = 100; nT otal > 0 ; -- nT otal)

{

// 启动线程

HANDLE hThread = :: CreateThread(

NULL, // 缺省的安全性

0, // 缺省堆栈

ThreadProc, // 线程函数

reinterpret_cast (hMapping) , // 增量

0, // 无特殊的创建标志

NULL) ; // 忽略线程id

实现的。再通过函数

(MapViewOfFile( ) ) 操作将视图映射到文件,将高32位看作有符号整数,将该数值增加(即命令:MapViewOfFile(

hMapping, // 保存文件的对象

FILE_MAP_ALL_ACCESS, // 获得读写权

0, // 在文件的开头处(高32位)开始

0, // ... (低32位)

0 ) ; // 映射整个文件) ,再将新数值显示在控制台上。每个线程清除文件的视图并在退出之前释放互斥体释放互斥体的语句是___ CloseHandle(g_hMutexMapping) 。当线程完成时,应用程序关闭并退出。

5)将程序中的语句:: Sleep(500) ; 删除(例如在语句前面加上“//”) 后,重新编译运

行,结果有变化吗?为什么?

四、实验总结

进程控制是进程管理的基本内容,它用于创建一个进程,终止一个已完成的进程,或去终止一个因出现某事件而无法运行下去的进程,还可负责进程运行中的状态转换。

从程序的运行结果,可以看到线程(加和减线程) 的交替执行(因为Sleep() API允许Windows切换线程) 。在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行Windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。一定要注意程序中写入之前文件指针的重置。重置文件指针是必要的,因为该指针在读取结束时将处于前四个字节之后,同一指针还要用于向文件写入数据。如果函数向该处写入新数值,则下次进程运行时,只能读到原来的数值。

在以后的学习生活,要勤于思考,多动手,把理论应用于实践,要活学活用知识。培养自己较强的动手实践能力。

实验三存储管理

一、实验目的

通过实验了解Windows 2000内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。学习检查虚拟内存空间或对其进行操作;了解Windows 2000的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。

二、实验环境

硬件环境:计算机一台,局域网环境;

软件环境:Windows 2000 Professional,Visual C++ 6.0企业版。

三、实验内容和步骤

在Windows 2000环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB) 。

第一部分虚拟内存的检测

检测进程的虚拟地址空间

// 工程vmwalker

# include

# include

# include

# include

# pragma comment(lib, "Shlwapi.lib")

inline bool TestSet(DWORD dwTarget, DWORD dwMask)

{return ((dwTarget & dwMask) == dwMask) ;}

# define SHOWMASK(dwTarget, type) \

if (TestSet(dwTarget, PAGE_##type) ) \

{std :: cout << ", " << #type; }

void ShowProtection(DWORD dwTarget)

{

SHOWMASK(dwTarget, READONLY) ;

SHOWMASK(dwTarget, GUARD) ;

SHOWMASK(dwTarget, NOCACHE) ;

SHOWMASK(dwTarget, READWRITE) ;

SHOWMASK(dwTarget, WRITECOPY) ;

SHOWMASK(dwTarget, EXECUTE) ;

SHOWMASK(dwTarget, EXECUTE_READ) ;

SHOWMASK(dwTarget, EXECUTE_READWRITE) ;

SHOWMASK(dwTarget, EXECUTE_WRITECOPY) ;

SHOWMASK(dwTarget, NOACCESS) ;

}

void WalkVM(HANDLE hProcess)

{

SYSTEM_INFO si;

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

:: GetSystemInfo(&si) ;

MEMORY_BASIC_INFORMA TION mbi;

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

LPCVOID pBlock = (LPVOID) si.lpMinimumApplicationAddress;

while (pBlock < si.lpMaximumApplicationAddress)

{

if (:: V irtualQueryEx(

hProcess, // 相关的进程

pBlock, // 开始位置

&mbi, // 缓冲区

sizeof(mbi))==sizeof(mbi) ) // 大小的确认

{

LPCVOID pEnd = (PBYTE) pBlock + mbi.RegionSize;

TCHAR szSize[MAX_P ATH];

:: StrFormatByteSize(mbi.RegionSize, szSize, MAX_P ATH) ;

std :: cout.fill ('0') ;

std :: cout

<< std :: hex << std :: setw(8) << (DWORD) pBlock << "-"

<< std :: hex << std :: setw(8) << (DWORD) pEnd

<< (:: strlen(szSize)==7? " (" : " (") << szSize << ") " ;

switch(mbi.State)

{

case MEM_COMMIT:

std :: cout << "Committed" ;

break;

case MEM_FREE:

std :: cout << "Free" ;

break;

case MEM_RESERVE:

std :: cout << "Reserved" ;

break;

}

if (mbi.Protect==0 && mbi.State!=MEM_FREE)

{

mbi.Protect=PAGE_READONLY;

}

ShowProtection(mbi.Protect);

switch (mbi.Type)

{

case MEM_IMAGE:

std :: cout << ", Image" ;

break;

case MEM_MAPPED:

std :: cout << ", Mapped" ;

break;

case MEM_PRIV ATE:

std :: cout << ", Private" ;

break;

}

TCHAR szFilename [MAX_P ATH] ;

if ( :: GetModuleFileName (

(HMODULE) pBlock, // 实际虚拟内存的模块句柄

szFilename, // 完全指定的文件名称

MAX_P A TH)>0) // 实际使用的缓冲区大小

{

:: PathStripPath(szFilename) ;

std :: cout << ", Module: " << szFilename;

}

std :: cout << std :: endl;

pBlock = pEnd;

}

}

}

void main()

{ ::WalkVM(::GetCurrentProcess()); }

程序中显示一个WalkVM() 函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性。虚拟内存中的块由VirtualQueryEx() API定义成连续快或具有相同状态(自由区、已调配区等等) 的内存,并分配以一组统一的保护标志(只读、可执行等等) 。

分析运行结果

按committed、reserved、free等三种虚拟地址空间分别记录实验数据。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:

00010000 – 00012000 <8.00KB> Committed, READWRITE, Private

可描述为:具有READWRITE权限的已调配私有内存区。

将系统当前的自由区(free) 虚拟地址空间填入表中。

将系统当前的已调配区(committed) 虚拟地址空间填入表中。

将系统当前的保留区(reserved) 虚拟地址空间填入表5-8中。

第二部分虚拟内存操作

示例程序显示了如何分配一个大容量空间,将物理存储委托给其中的很小一部分(千分之一) 并加以使用。

分配和使用大块内存

// 工程largealloc

# include

# include

void FillZero(LPVOID pBlock, DWORD dwSize)

{

_try

{

BYTE* arFill = (BYTE *) pBlock;

for (DWORD dwFill = 0; dwFill < dwSize; ++dwFill)

{

实验室个人工作总结3篇

实验室个人工作总结3篇 实验室个人工作总结3篇 本文目录实验室个人工作总结机电实验室个人年度个人工作总结实验室个人年终工作总结 转眼间,xx年已经过去,回顾过去,从xx年3月7日开始实习,直至xx年1月上旬,大半年的时间里,在实验室与资产管理处的精密部署中,在机电学部的全力指导下,在管老师的悉心教导下一路走来,经历了风风雨雨,失去了点点滴滴,也获得了多多少少。下面就从以下几个方面对我过去几个月所完成的工作做一个概述 一、迎接评估工作,是今年上半年最重要的一项工作。 配合各教研室整理并上报实验室各项评估支撑材料。按照学院资产处的计划部署,整理、归位实验仪器及设备,完善、规范实验室名称,制作名称标牌并张贴到位,统一拆装实验室房间号牌并张贴到位,完善实验室功能简介、规章制度、室内标语并上墙。eda、arm、dsp综合实验室的相关实验箱检修;配合江苏启动计算机有限公司售后工作人员对计算机组成原理实验箱进行调试,对高频电子线路、电子电工实验室的模拟示波器全体进行更换保险丝管;地理信息系统实验室、计算机原理及应用实验室的网络进行维护等。完后就是进行日常的各个实验室管理及维护工作,发放实验耗材,更新库存并补充申购等以保障实验教学正常有序进行。 二、配合各教研室顺利完成xx届本科毕业生的毕业答辩工作。 实验室实验员应机械、电子与通信教研室各位毕业生指导教师的要求,作为答辩秘书,协助各教研室以完成xx届本科毕业生的毕业答辩的记录工作。 三、新建实验室的改造、扩建以及实验室搬迁等筹备工作。

按照学部主任的周密部署,动员各办公室,学工科,教研室对办公物品,电脑设备,存档资料进行打包,待开学前再搬至教三楼新办公室。打包完,清点文件柜及办公桌椅数量并报至资产处以便安排搬家工作相关事宜。暑假一到,各位老师均已离校。流火七月,教二楼实验楼的改造工作也如火如荼的相继展开。八月中旬,教室结构改造,两间并一间,墙面粉刷,铺设木地板等工作接近尾声,学部实验室老师放弃休息,早已到岗。在学院资产处老师的安排下,完成实验室搬迁、调整、扩建等相关工作。对搬迁后的实验室整理、打扫,重新布线,实验设备、仪器归位。完后对各办公室,学工科,教研室的办公家具搬迁至教三楼并调整归位。 四、机房实验室系统的安装调试,专业实验室的仪器检修等工作。 机电实验室包含三个专业机房,而学生多用u盘,机房系统容易感染病毒,再加上部分师生的使用方法不当,对计算机系统有损坏,以导致系统经常崩盘或者蓝屏,请计算机实训中心的吴海明老师对我们给予了指导工作。机械、通信电子专业实验室实验器材众多,尤其是实验箱和电子仪器设备容易损坏,针对所有损坏的实验器材,清理出来,联系厂家统一过来维修,另外请厂商对授课教师进行相关培训工作。以提高设备正常使用率,保障实验教学正常有序进行。 五、各实验室仪器配置,清洁卫生,制度上墙等以全新的面貌迎接开学工作。 按照实验室扩建方案的规划,将需搬迁的老实验室整体进行搬迁,进一步调整完善其配置,并进行维护,检修工作。对于新建的实验室,整合目前的实验室剩余的器材,加上补充申购的实验器材一并投入使用,做到实验资源优化配置。并对整个教二楼各实验室的卫生进行全面的打扫工作,并将所有的仪器设备擦拭干净,摆放整齐。并做好实验室门牌,实验室简介、规章制度上墙,统一规范等工作,以全新的面貌迎接新生。

操作系统实验心得

1-1:通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。 1-2:在实验过程中,使用VI编辑器虽然不能像window操作系统那样对文本进行熟练度编辑,但是,VI编辑器使用命令来操作,将可以锻炼我的记忆力、对键盘的熟练读,还能帮助我们尽快适应linux操作系统的操作。 1-3:原本对liunx下的编译和调试环境不是很熟悉,但通过这次的实验,让我熟悉了linux 下的编译器和调试器的使用。 实验中使用了gcc命令,gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(#include)、预编译语句(如宏定义#define等)进行分析。 当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的库中链接到合适的地方。 1-4:API 接口属于一种操作系统或程序接口。通过实验,我了解了Windows的这种机制,加深了对API函数的理解。 2-1:通过本次实验了解了一些常用进程管理命令的使用,例如ps、kill命令,了解到换个kill与killall的不同,对于linux操作系统下的进程的学习打下基础,更好的学习进程。 2-2:本次实验是熟悉掌握Linux 系统常用进程创建与管理的系统调用,linux下使用fork()创建子进程,与windows下CreateProcess()创建子进程完全不同,通过比较小组更好的理解和掌握了进程的创建,对于进程的管理的理解也有了清晰地认识。 实验中遇到fork函数返回2次结果,经过分析结果如下: 由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。 调用fork之后,数据、堆栈有两份,代码仍然为一份但是这个代码段成为两个进程的共享代码段都从fork函数中返回,箭头表示各自的执行处。当父子进程有一个想要修改数据或者堆栈时,两个进程真正分裂。 2-3:通过这次实验对熟悉掌握和了解windows平台常用进线程控制API,有了更深刻的认识,认识到API函数对windows编程的重要性,了解进程线程在内存中的执行,特别认识互斥体Mutex对象,API函数一定要多用,才能记得。 3-1:该程序的输入变量具有限制,若输入除0和1的数据,则将视为0处理.改进的方法为修改if 语句中的条件为:1,即只要输入为非零,则有效。即逻辑表达式的值为真。(在逻辑数学里非零则表示为真!) 为了能较好的实现进程的同步,可以另外设一个标志量,标志临界资源是否正被访问,当a,b,c

试验员工作年终总结报告5篇

试验员工作年终总结报告5篇 亲爱的朋友,很高兴能在此相遇!欢迎您阅读文档试验员工作年终总结报告5篇,这篇文档是由我们精心收集整理的新文档。相信您通过阅读这篇文档,一定会有所收获。假若亲能将此文档收藏或者转发,将是我们莫大的荣幸,更是我们继续前行的动力。 试验员工作年终总结报告1 本人自20xx年3月份进入公司以来,遵守公司及项目部的各项规章制度,积极服从领导的安排,为了争取集体荣誉,思想上要求进步,积极响应公司的文件指示精神和工作安排,认真做好本职工作,任劳任怨,认真学习相关试验知识,不断充实和完善自己。 回顾这将近一年的工作,我感觉这一年既是忙碌又是充实的,以前在学校课本上所学的知识都是理论性的知识,而从实践中点点滴滴积累起来的经验,才是我我一生的财富和珍藏。在这一年里,有困难也有收获,认真工作的结果,是完成了个人的职责,也加强了自身能力。现将工作简要总结如下: 一、政治、思想 本着强烈的主人翁意识,我从做好日常工作入手,从我做起,从现在做起,并持之以恒在本职工作中尽心尽力地做出成绩,我

要不断提高自己的岗位业务,精通本职位的岗位知识,做本职工作的骨干手,脚踏实地的做好本职工作。 二、工作态度 无论在工作还是生活当中,我一直相信一分耕耘,一分收获,所以我一直在努力,不断努力学习,不断努力工作。热爱自己的本职工作能够使我对待每一项工作,工作投入,按时出勤,有效利用工作时间,坚守岗位。工期紧,人员少,试验项目多,能够做到跟班作业,保证按时完成检验任务,保证工程检验畅通,表现出我们试验人员的动手能力强,发扬了我们试验人员连续工作、吃苦耐劳的精神。 三、岗位职责 认真贯彻国家有关标准化,质量管理体系,产品质量监督检验以及研究开发的方针政策,履行本岗位负责监督检测的工程产品的有关标准、试验方法及有关规定,做到所做每项检验都有章可依。做好委托单接受,项目检验,资料,反馈等工作,做好跟踪台帐,便于日后查阅。由于试验检验项目多,项目检验时间不一,提前将工作做到位,避免施工单位技术人员不了解工程检验要求及技术指标而延误工期,影响进度。作为试验人员,应本着贯彻质量方针,落实质量目标,遵守规章制度,全心全意服务与施工现场。

实验室个人年度工作总结【实用】

篇一 学校实验室是完成教学任务的重要场地,是根据实验教学大纲中要求培养学生初步的科学实验能力和开展科技活动的场所,并对开展实验教学,提高教学质量具有十分重要的作用。对于一个拥有各类实验室且实验仪器基本配套齐全的学校来讲,管理是关键,因为只有管理跟上去了,才能更合理、有效地使用好各类仪器设备。对此,作为一所中学的实验室人员,我们在长期的工作实践中做了如下几个方面的工作: 一、努力提高自身素质 实验人员是科学管理实验室的基本队伍,在整个实验室的管理和运作中起着决定性的作用。一个好的实验员,可以改变整个实验室的面貌,推动实验教学的发展;而一个差的实验员,可导致整个实验室变成脏、乱、差的劣境,从而使实验教学无法正常进行。因此,我们每一个实验员,一方面在平时加强政治学习,提高自身素质,使大家在平凡的点滴工作中认识到这项工作的重要性,从而更加热爱本职工作。另一方面,我们还不断去兄弟学校和单位进行学习交流,参加实验设备和成果展览。这不仅使我们开阔了视野,了解了实验仪器发展的新情况,更看到了兄弟单位的先进管理经验,有利于我们在今后的工作中加以借鉴和改进。同时学校还鼓励我们总结自己的经验,撰写论文,或进行业余进修,以增强我们在各方面的修养。由于平时有着严格的要求和业务考核,现有的每一位理、化、生实验员都能很好地胜任自己的工作,做到实验室整洁有序,实验准备快捷无误,从而保证了各项教学实验的顺利完成。 二、健全各项规章制度 俗话说没有规矩,不成方圆。我们学校根据上级的规定和本校的具体情况,制定了比较健全的规章制度:如《实验室管理守则》、《学生实验守则》、《实验室工作人员职责》、《实验室安全防护制度》等,进而做到使每项工作都有章可循,有据可查。除此以外,我们还对危险品的使用实行了“领用登记手续”,从而保证了对危险品的安全管理。由于各位实验员的同心协力,齐抓共管,保证了各项制度的顺利贯彻和实验室工作的正常开展。 三、科学管理仪器设备 仪器设备的规范管理是合理使用仪器的保证,为此我们做了以下的工作: 首先,我们根据建帐要求,设立了总帐、分类明细帐、低值易耗帐,并建立了橱卡,注明仪器的编号、名称、数量。平时对购进或调拨来的仪器设备物品都按统一编号顺序进行登记入帐,且对消耗掉的物品及时记入各分类记录薄上。每学期末都进行一次帐、物、卡核实,并把报废报损的仪器遣‘报损单”,经领导批审后销帐,最后把核查的数目转入总帐、分类帐上,这样就能做到巾长物卡三统一了。 其次,在仪器物品的存放上做到有系统、有条理。我们按国家教委新编的《中学理科教学仪器设备目录》进行分类保管。如物理仪器分为计量仪器、力学、热学、光学、声学等类;化学仪器分为仪器、玻璃器皿、药品类;生物仪器分为仪器类、模型类、标本类等。然后归类定橱,按照上轻下重、平直和悬挂原则,定层定位入橱存放。特别对于化学仪器中的易燃、

操作系统实验总结

操作系统实验总结 学号: 姓名: 班级:

在本学期的计算机操作系统这门课学习当中,为了更好的了解操作系统相关知识,我们通过OS Lab平台做了几个实验。在实验室的过程中,我对课堂上学到的操作系统的一些知识有了新的认识,同时还接触到了操作系统的相关源代码,而且通过实验的运行效果了解了平时我们看不到的操作系统的一些状况,收获还是很大的。下面先简要归纳在实验课上我做的几个实验的主要实验内容和实验步骤: 实验一:实验环境的使用 实验步骤: 1.1启动OS Lab OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。观察OS Lab主窗口的布局。OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。 1.2 学习OS Lab的基本使用方法 练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。 实验二:操作系统的启动 实验步骤: 2.1 准备实验 启动OS Lab,新建一个EOS Kernel项目,在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件,按F7生成项目,生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到由boot.asm生成的软盘引导扇区程序boot.bin文件,找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节。 2.2 调试EOS操作系统的启动过程 2.2.1 使用Bochs做为远程目标机 将调试时使用的远程目标机修改为Bochs 2.2.2 调试BIOS程序 按F5启动调试, Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断,从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的相关信息,然后查看CPU 在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据。 2.2.3 调试软盘引导扇区程序 练习从0x7c00处调试软盘引导扇区程序;查看boot.lst文件;调试过程——软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序; 2.2.4 调试加载程序 调试过程——Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行); 2.2.5 调试内核 2.2.6 EOS启动后的状态和行为 查看EOS的版本号;查看EOS启动后的进程和线程的信息;查看有应用程序运行时进程和线程的信息

实验室检测员个人工作总结

实验室检测员个人工作总结 一年来,我们中心试验室在主管领导的带领下,积极进取、努力工作,致力服务于各项目的施工生产,顺利的完成了本年度工作,现将本部门的人员情况、工作情况等方面进行总并汇报如下: 一、人员情况 中心试验室现有人员四名,其中主任一名,副主任二名,科员一名。具体分工如下:李茂杰负责全面工作,驻沈大项目任试验室主任,杨力、王杰负责各项目的试验,分别驻鸡牡、外环项目任试验室主任。杨力在鸡牡工程后调到沈大项目。马立波负责试验仪器管理及其他日常工作。 二、工作情况 今年在各项目开工后,中心试验室通过对各项目送来的样本进行试验,先后为鸡牡、尚阿、黑北、外环等项目确定了沥青砼、水泥砼配合比设计、在施工的质量上、各种材料合理使用上提供了基础数据。 施工期间,在处领导的委派下,我和两位副主任分别派驻沈大项目、鸡牡项目和外环项目任试验室主任,负责这三个项目的试验、检测等工作。无论是沥青砼目标配合比设计、施工配合比设计调整、检测、贯标、业主方面各种检查,均作了大量工作,并取得的令人满意的效果。

冬季休整期间,我们又对各项目的试验仪器配备、使用情况进行整理、汇总、归档,为试验仪器的统一管理、合理使用、调配等工作做好准备。同时又着手进行中心试验室资质申请,争取通过二级认证。 三、为领导决策提供参考信息情况 中心试验室及其派驻到各项目的人员通过对不同料源的质量检验,提供准确的施工配合比,在料源的选定、采购数量及成本管理等方面为各项目领导的决策提供依据,同时关注检、试验新方法、仪器等方面的有用信息以供参考,及时向领导提供有关本科室工作思路,为领导决策提供建议性意见。 四、育人、举人、培养人方面 首先,在冬季培训方面,中心试验室协助工程科对检、试验人员进行培训,中心试验室编制培训教材,由我讲课,对提高我处试验人员工作技能起到了一定的作用。 另外,在各项目担任试验室主任期间,我们对其试验人员在检、试验理论、试验方法、仪器操作等方面言传身教,对基础较好的人员着重培养,并向项目领导推荐,使其得到能够充分发展的岗位,经过培养,已有数人技术方面初步成型。 五、缺点和不足 1、试验室人员过少、派驻到各项目的人员往往由于工

操作系统实验报告

《操作系统原理》实验报告 实验项目名称:模拟使用银行家算法判断系统的状态 一、实验目的 银行家算法是操作系统中避免死锁的算法,本实验通过对银行家算法的模拟,加强对操作系统中死锁的认识,以及如何寻找到一个安全序列解除死锁。 二、实验环境 1、硬件:笔记本。 2、软件:Windows 7 , Eclipse。 三、实验内容 1.把输入资源初始化,形成资源分配表; 2.设计银行家算法,输入一个进程的资源请求,按银行家算法步骤进行检查; 3.设计安全性算法,检查某时刻系统是否安全; 4.设计显示函数,显示资源分配表,安全分配序列。 四、数据处理与实验结果 1.资源分配表由进程数组,Max,Allocation,Need,Available 5个数组组成; 实验采用数据为下表: 2.系统总体结构,即菜单选项,如下图

实验的流程图。如下图 3.实验过程及结果如下图所示

1.首先输入进程数和资源类型及各进程的最大需求量 2.输入各进程的占有量及目前系统的可用资源数量 3.初始化后,系统资源的需求和分配表 4.判断线程是否安全

5.对线程进行死锁判断 五、实验过程分析 在实验过程中,遇到了不少问题,比如算法无法回滚操作,程序一旦执行,必须直接运行到单个任务结束为止,即使产生了错误,也必须等到该项任务结束才可以去选择别的操作。但总之,实验还是完满的完成了。 六、实验总结 通过实验使我对以前所学过的基础知识加以巩固,也对操作系统中抽象理论知识加以理解,例如使用Java语言来实现银行家算法,在这个过程中更进一步了解了银行家算法,通过清晰字符界面能进行操作。不过不足之处就是界面略显简洁,对于一个没有操作过计算机的人来说,用起来可能还是有些难懂。所以,以后会对界面以及功能进行完善,做到人人都可以看懂的算法。

试验员个人工作总结

试验员个人工作总结 篇一:试验员年度工作总结 工作总结 尊敬的领导: 我是一名刚毕业的学生,转眼间已经工作快两年了,在师傅的教导与帮助下比较顺利的完成了各项工作。从对试验的一无所知,到可以独立完成试验方面的工作,少不了师傅对我的教导和帮助。 无论从事什么工作,都必须要认清自己的岗位职责,知道自己需要干什么,其次才是应该怎么去做。作为一个土建试验员,我觉得时间对于试验员是非常重要的。据例说明,标养的砼试块28天就要送检,如果遇上周末可以增加两天,但是如果超过30天,那么对不起,报告作废。再比如钢筋电渣压力焊、闪光对焊连接,如果送检不及时,等封模或者浇注完混凝土后再去送检,万一不合格,后果是很严重的。所以作为试验员必须按时送检。取报告。同时作为一名土建试验员也要按时并及时的对各种进场的材料进行取样及送检。 现在对将近一年工作做如下总结: 在工作中热爱本职工作,遵守项目部的管理规定,服从领导工作安排。刻苦学习专业技术,工作态度端正,认真负责,在不懂的地方,并不怕麻烦向师傅及领导请教、向同事学习、自己摸索实践在很短的时间内熟悉试验的工作,熟练掌握各种试验方法和步骤。认真填写各种试验台帐及

技术资料台帐,及时向施工现场提交试验资料。 在这将近一年的时间中热爱自己的本职工作,能够正确认真的对待每一项工作,工作投入,认真遵守劳动纪律,保证按时出勤,有效利用工作时间,监守岗位,需要加班完成工作按时加班加点,保证工作能按时完成。 我从做好本职工作和日常工作入手,从我做起,从现在做起,从身边小事做起并持之以恒,在本职工作中尽心尽力,孜孜不倦地作出成绩,我要不断的提高自己的岗位本领,努力精通本职的岗位知识,脚踏实地的做好本职工作。 在开展工作之前做好个人工作计划,有主次的先后及时的完成各项工作,达到预期的效果,保质保量的完成工作,工作效率高,同时在工作中学习了很多知识,也锻炼了自己,经过不懈的努力,使工作水平有了一定的进步。 尽管自己有了一定的进步,但在一些方面还存在着很多不足,个别工作做的还不够完善,这有待于今后的工作中加以改进与提高。 在以后的工作中,我将认真学习各项规章制度,服从领导安排。努力把工作做到最好。 最后我想说一点,现在我们不要怕犯错误,要大胆的去做,犯了错误一定要及时总结改正,多积累经验,争取早日成熟起来。 篇二:试验员年终总结

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

实验室个人年度工作总结(三篇)

实验室个人年度工作总结(三篇) S u m m a r y o f w o r k f o r r e f e r e n c e o n l y 撰写人:XXX 职务:XXX 时间:20XX年XX月XX日

2 实验室个人年度工作总结(三篇) 篇一 学校实验室是完成教学任务的重要场地,是根据实验教学大纲中要求培养学生初步的科学实验能力和开展科技活动的场所,并对开展实验教学,提高教学质量具有十分重要的作用。对于一个拥有各类实验室且实验仪器基本配套齐全的学校来讲,管理是关键,因为只有管理跟上去了,才能更合理、有效地使用好各类仪器设备。对此,作为一所中学的实验室人员,我们在长期的工作实践中做了如下几个方面的工作: 一、努力提高自身素质 实验人员是科学管理实验室的基本队伍,在整个实验室的管理和运作中起着决定性的作用。一个好的实验员,可以改变整个实验室的面貌,推动实验教学的发展;而一个差的实验员,可导致整个实验室变成脏、乱、差的劣境,从而使实验教学无法正常进行。因此,我们每一个实验员,一方面在平时加强政治学习,提高自身素质,使大家在平凡的点滴工作中认识到这项工作的重要性,从而更加热爱本职工作。另一方面,我们还不断去兄弟学校和单位进行学习交流,参加实验设备和成果展览。这不仅使我们开阔了视野,了解了实验仪器发展的新情况,更看到了兄弟单位的先进管理经验,有利于我们在今后的工作中加以借鉴和改进。同时学校还鼓励我们总结自己的经验,撰写论文,或进行业余进修,以增强我们在各方面的修养。由于平时有着严格的要求和业务考核,现有的每一位理、化、生实验员都能很好地胜任自己的工作,做到实验室整洁有序,实验准备快捷无误,从而保证 第2 页共9 页

计算机操作系统实验四

实验三进程与线程 问题: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位,具有动态性、并发性、独立性、异步性和交互性。然而程序是静态的,并且进程与程序的组成不同,进程=程序+数据+PCB,进程的存在是暂时的,程序的存在是永久的;一个程序可以对应多个进程,一个进程可以包含多个程序。当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 本次实验主要的目的是: (1)理解进程的独立空间; (2)加深对进程概念的理解,明确进程和程序的区别; (3)进一步认识并发执行的实质; (4)了解红帽子(Linux)系统中进程通信的基本原理。 (5)理解线程的相关概念。 要求: 1、请查阅资料,掌握进程的概念,同时掌握进程创建和构造的相关知识和线程创建和 构造的相关知识,了解C语言程序编写的相关知识; (1)进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内

存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 (2)进程的创建和构造: 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。新的进程通过克隆旧的程序(当前进程)而建立。fork() 和clone()(对于线程)系统调用可用来建立新的进程。 (3)线程的创建和构造: 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间的实验内容及步骤

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

实验室个人工作总结

实验室个人工作总结 [模版仅供参考,切勿通篇使用] 实验室个人工作总结 我叫丁胜利,自2019年2月25号到6月9号在**省海榆东线项目办上班,7月到9月中旬在沥青厂家监督生产,之后又来到北京试验室上班。 工作主要是在实验室--沥青实验室。做关于沥青混合料的试验及路面检测。每日必做的实验有用燃烧法测沥青含量及筛分、沥青混合料的马歇尔试验、理论最大相对密度及热料的筛分还有路面的取芯以测其压实度。有时还做新进沥青的三大指标;后来还接触了岩沥青的一些知识;当混合料不稳定时不紧要做矿料的筛分还要在去路面摊铺现场去看是否有离析现象、测摊铺温度等。 在工作中,能做到不怕吃苦、爱岗敬业。在接触了实验室及施工单位的一些先进的实验仪器对其进行了解并能够熟练的使用,当仪器出现些小毛病也能够根据仪器说明来解决及在实际操作中发现的问题自己解决;因为是刚刚走出校门的缘故而对于理论知识和专业度方面在与有经验的技术人员或领导深入交流中 发现自己的经验及专业知识是那么的匮乏;还有关于基层、底基层等方面我想这些是在今后中多多总结和学习的重点。

在生活中,我是一个乐观的人,热爱篮球及乒乓球的体育运动。([ ])由于上班之前都在北方生活所以在**与当地人交流时有些不太方便,但随着长时间的接触基本上能和当地工作人员顺利的沟通并完成领导交予的工作。我也认识到由于专业的需要以后肯定还会去其他的地方接触更多的人而不能因为说不能和当地人沟通而影响工作,所以要加强沟通和协调能力。 在思想认知上我认为还有很大的进步空间。步入岗位的那天就已经开始接触新的事物新的环境,也就是在这新的环境中让我知道光靠以在学校的思维方式来解决工作上及生活上的事情是不够的,更多的要考虑的公司的利益及形象,因为身为公司的员工我们有责任这样去做。尤其是在外要注意自己的一言一行,可能有些人不太会注意这些,但我认为公司未来的发展壮大及自己的发展这是最根本的也是最重要的。 对于在单位聚会中听到同事们的自我介绍都是研究生及在平时的交谈中发现自己处理事情的能力和想问题的思考方式做的还不周到。虽然自己对专业知识还不够深入专业的技能掌握的还不够全面,但我可以用乐观的积极进取的心态去一步一步的学下去、走下去。 针对我今年的工作和生活中出现的问题及本身工作的性质对今后做以下总结:第一我摸清了从事这个行业基本情况;第二

操作系统实验个人总结

操作系统实验个人总结 学号: 实验一进程控制与描述 一、实验目的通过对Windows2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows2000中进程的“一生”。 二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows2000 Professional、Visual C++ 6、0企业版。 三、实验内容和步骤第一部分:程序1-1Windows2000 的GUI 应用程序Windows2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。 # include # pragma comment(lib, “user 32、lib” ) int APIENTRY WinMain(HINSTANCE/* hInstance */ , HINSTANCE/* hPrevInstance */, LPSTR/* lpCmdLine */, int/* nCmdShow */ )

{ :: MessageBox( NULL, “hello, Windows2000” , “Greetings”, MB_OK) ; return(0) ; }在程序1-1的GUI应用程序中,首先需要Windows、h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。接着的pragma指令指示编译器/连接器找到User 32、LIB库文件并将其与产生的EXE文件连接起来。这样就可以运行简单的命令行命令CL MsgBox、CPP来创建这一应用程序,如果没有pragma指令,则MessageBox() API函数就成为未定义的了。这一指令是Visual Studio C++ 编译器特有的。接下来是WinMain() 方法。其中有四个由实际的低级入口点传递来的参数。hInstance参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle() API函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值实际上是EXE文件映像的基地址,通常为0x。下一个参数hPrevInstance是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行 (不包括程序的名称)

试验员个人年终工作总结doc

试验员个人年终工作总结 篇一:试验员工作总结 个人年度工作总结 转眼间我来到铁四院广大铁路监理项目部已经一个多月了,一个多月的工作是我熟练掌握了监理管理系统的使用及各类文件的字体格式,文件的归档整理,在项目部领导的教导与帮助下比较顺利的完成了各项工作。在工作期间我从一名文员转换为一名试验人员,从对试验的一无所知,到可以独立完成试验方面的工作,少不了主任对我的教导和帮助,下面对一个多月以来及这一年的工作做如下总结: 在工作中我热爱本职工作,遵守项目部的管理规定,服从领导工作安排。刻苦学习专业技术,工作态度端正,认真负责,在不懂的地方,不怕麻烦向领导请教、向同事学习、自己摸索实践在短时间内熟悉了试验的工作,不断学习掌握各种试验方法和步骤。了解工程所用材料技术性能,在监理工程师指导下,严格按操作规程对工程材料进行品质指标试验鉴定。掌握现场施工配比,矿料级配,控制好水泥剂量、含水量,按规定对施工原材料进行检测及资料整理。深入施工现场,监督检查工程质量。认真填写各种试验资料,及时向施工现场提交试验资料。收集、整理各项试验原始资料,分层建立资料档案。熟练掌握各种仪器设备操作规程及仪器的维修保养。

在这一个多月中我热爱自己的本职工作,能够正确认真的对待每一项工作,工作投入,热心为大家服务,认真遵守劳动纪律,保证按时出勤,有效利用工作时间,监守岗位,需要加班完成工作按时加班加点,保证工作能按时完成。我身着强烈的主人翁意识,随时关注本公司发展,切身想到本公司、项目部的利益,坚定本公司会不断的发展、壮大,对本公司的未来充满了热情与期望。坚持不懈地克服自身的缺点,弥补自己的不足。 我从做好本职工作和日常工作入手,从我做起,从现在做起,从身边小事做起并持之以恒,在本职工作中尽心尽力,孜孜不倦地作出成绩,我要不断的提高自己的岗位本领,努力精通本职的岗位知识,做本职工作的骨干和行家里手,脚踏实地的做好本职工作。 在开展工作之前做好个人工作计划,有主次的先后及时的完成各项工作,达到预期的效果,保质保量的完成工作,工作效率高,同时在工作中学习了很多知识,也锻炼了自己,经过不懈的努力,自己各方面的业务素质和综合能力有了进一步的提高。 总结一个多月的试验工作,尽管自己有了一定的进步,但在一些方面还存在着很多不足,个别工作做的还不够完善,这有待于今后的工作中加以改进与提高。在以后的工作中,我将认真学习各项规章制度,积极响应公司政策,服从领导

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

化学实验室个人工作总结

总结范本:_________化学实验室个人工作总结 姓名:______________________ 单位:______________________ 日期:______年_____月_____日 第1 页共7 页

化学实验室个人工作总结 实验室工作是一个繁琐的工作,每学期初制定初步工作计划,根据教师的教学进度表制定这一学期的分组实验和演示实验的安排表。利用时间认真钻研教材,明确教材中的每一个实验目的和要求、所用仪器、操作步骤,虚心向同行学习,及时总结改进实验,研究实验成败的原因。认真阅读实验杂志,取人之长,补己之短,不断扩展自己的视野,积累经验。根据大纲要求,能开足全部演示实验和分组实验,配合学校对学生加强素质教育,健全《仪器赔偿制度》、《学生实验守则》、《安全卫生制度》等。培养学生严警认真的实验态度,热爱学校、爱护公物的思想品德。面向全校学生开放实验室,使学生在实验室里充分施展其才能的空间,促使他们动手、动脑、活跃思维,并努力创造条件,使同学们课外的科研性实验,小制作等顺利开展。实验会考前全面开放实验室,利用课余时间对学生进行辅导。在初三全体任课教师的共同努力下,高标准的通过了实验会考。 认真学习现代教育教学技术,并运用于实验教学与实验管理上。各类台帐资料齐全,并每天填写实验日志,记录一天工作情况。订阅实验教学参考资料,并向学生开放查阅。定期对学生进行实验考核,发挥教学示范作用,指导其他学校开展实验教学。 年初,通阅教材中所有实验,估计全年所有实验所需药品及仪器的名称数量,加以统计,参考现有库存量,写出订购清单。当购置药品收到时,及时开列清单,送交总务处,并分类入帐,妥善存放。进一步改进工作方法,提高工作效率和实验室利用率。在本学期的工作中,为了提高学生化学实验能力,充分利用好现有的实验仪器、设备及药品,搞 第 2 页共 7 页

试验员个人工作总结

不知不觉,一年又过往了。回顾2013 年的工作,对我来讲2013 年既是繁忙又是充实的一年,在学校课本上所学的知都是理论性的知识,现在工作中一点一滴积累起来的实践经验,才是我一生享受不尽的宝躲。在这一年里,有困难也有收获,认真工作的结果,是完成了个人职责,也加强了本身能力。将这一年工作扼要工作总结范文以下: 一、政治、思想 我身着强烈的主人翁意识,我从做好本职工作和平常工作进手,从我做起,从现在做起,从身边小事做起并锲而不舍,在本职工作中尽心尽力,孜孜不倦地作出成绩,我要不断的进步自己的岗位本领,努力精通本职的岗位知识,做本职工作的骨干和行家内行,脚踏实地的做好本职工作。 二、工作态度 不管在工作还是生活当中,我一直相信一份耕耘,一份收获,所以我一直在努力,不断努力学习,不断努力工作。酷爱自己本职工作能够正确认真对待每项工作,工作投进,按时出勤,有效利用工作时间,坚守岗位。工期紧,职员少,任务繁多,能够做到跟班作业,保证按时完成检验任务,保证工程检验畅通,表现出我们试验职员责任心强,发扬了我们试验职员连续工作、吃苦刻苦精神。 三、岗位职责 认真贯彻国家有关标准化,质量管理体系,产品质量监视检验和研究开发的方针政策; 确切执行本岗位负责监视检测的工程产品的有关标准、试验方法及有关规定,做到所做每 项检验都有法可依。做好委托单接受,项目检验,资料,反馈等工作,做好跟踪台帐,便于往后查阅。由于试验检验项目多,项目检验时间不一,提早将工作做到位,避免施工单位技术职员不了解工程检验要求及技术指标而延误工期,影响进度。我们试验室职员坚持四项基本原则,贯彻质量方针,落实质量目标,遵守规章制度,全心全意服务于施工现场。 四、具体工作 我所从事的工作主要是对一些工程土建类材料(水泥、砂、石子、钢材、砖等)及成 品(钢筋焊件、混凝土试块等)进行试验、检验; 参与进行混凝土配合比试配检验;对搅拌站混凝土的搅拌进行监视控; 对现场混凝土及回填土进行控制工作等。 我刚参加工作时首先接触到的是回填土检验,回填土固然单一、枯燥,常人觉得那不就是垫点儿土,有甚么好做的,但我干了一段时间,实在其实不是那末简单:从土的材料要求开始,土壤击实定下, 它的控制指标; 甚么部位需要回填土,甚么部位需要回填砂石或是3:7 灰土都要有技术指标控制;回填机具的选用; 回填之前条件是不是具有?地下混凝土基础强度是不是到达规定要求,土的材料选用,密实度要求,虚展厚度及压实系数是不是已确定,回填夯实达不到要求,那就要造成塌方,下沉,乃至带来更大的危害。所以在后来逐步接触的其他材料检验前,在我心中已奠定干甚么事情都不是那末轻易,不容一丝含糊。 陆续的在试验室接触更多的项目检验,明确了工作程序,在具体工作中构成了一个比较清楚的工作 思路,能够顺利的展开工作,并熟练美满的完本钱职工作。 1、对原材料的控制:凡进进现场的原材料,每批都应出具生产厂家的质量保证书、检验合格

相关主题
文本预览
相关文档 最新文档