西北工业大学操作系统实验报告实验四
- 格式:docx
- 大小:53.90 KB
- 文档页数:6
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对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类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
西北⼯业⼤学操作系统实验_OS1(5)班级:10011007 学号:2010302541 姓名:陈⼀凡实验⼀Linux操作系统的安装及使⽤1. 实验⽬的学习Linux操作系统的安装,体会操作系统为了⽅便⽤户,不断改进的安装过程;熟悉Linux系统的登录和退出,并熟悉它常⽤命令的操作使⽤⽅法。
2. 实验内容1)Linux操作系统的安装(1) 收集硬件配置资料(硬盘空间⼤⼩、显卡类型、显存⼤⼩、⽹卡类型等基本信息);(2) 对于要安装Linux⽽⼜没有预留出⾃由空间,可利⽤Linux光盘⾃带的分区⼯具来拆分基本分区;也可以利⽤DOS下的调整分区程序PQMagic来拆分基本分区或逻辑分区,并将PQMagic安装在另⼀个分区中;(3) Linux对不同介质的安装⽅法(直接从光盘引导完成安装,要求CMOS和光盘都能⽀持光盘引导;从硬盘完成安装,可事先将Linux软件包拷⼊硬盘的⼀个分区,将Linux安装到硬盘的另⼀个分区;⽹络安装,通过⽹络⽂件系统NFS或FTP 并安装到硬盘。
);(4) 使⽤FDISK添加Linux主分区和交换分区(swap);(5) 格式化分区;(6) 选择安装内容;(7) 设置root⽤户的⼝令;(8) 设置⽹卡的中断向量号、I/O地址、DNS和⽹络的⼦⽹掩码等;(9) 安装LILO,实现操作系统的双引导。
2)Linux操作系统的使⽤(1) 登录、退出和关闭系统;(2) man命令的使⽤;(3) –help命令的使⽤;(4) dir(ls)命令的使⽤;(5) less(more)分页浏览⽂件命令的使⽤;(6) touch命令的使⽤;(7) whatis命令的使⽤;(8) apropos命令的使⽤;(9) locate命令的使⽤;(10) whereis命令的使⽤;(11) find命令的使⽤;(12) sort命令的使⽤;(13) tar命令的使⽤;(14) 解压缩归档⽂件命令的使⽤;(15) mc程序的使⽤;(16)cd改变⽬录;(17)pwd查看当前⽬录;(18)mkdir创建新⽬录;(19)cp⽂件拷贝;(20)cat在屏幕上显⽰⽂件内容3)C语⾔程序的编译Linux环境下C语⾔使⽤gcc编译器对程序进⾏编译。
#include<stdio.h>int main(){ BOOL rc;char lpName[]="\\\\.\\pipe\\myPipe";char InBuffer[50] = "";char OutBuffer[50] ="";DWORD BytesRead;int nRetCode = 0;int err = 0;while(1){ strcmp(InBuffer,"");strcmp(OutBuffer,"");printf("Input Data Please!\n");scanf("%s",InBuffer);rc = strcmp(InBuffer,"end");if ( rc == 0){rc = CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer),&BytesRead,NMPW AIT_USE_DEFAULT_WAIT);break;}rc = WaitNamedPipe(lpName,NMPW AIT_USE_DEFAULT_WAIT);if (rc == 0){err = GetLastError();printf("Wait Pipe Fail ! err = %d\n",err);exit(1);}else printf("Wait Pipe Success!\n");rc = CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer),&BytesRead,NMPW AIT_USE_DEFAULT_WAIT);if (rc == 0){err = GetLastError();printf("Pipe Call Fail! err = %d\n",err);exit(1);}else printf("Pipe Call Success!\nData from Server is %s\n",OutBuffer);rc = strcmp(OutBuffer,"end");if (rc == 0) break;}printf("Now Client to be End!\n");return nRetCode;}#include<stdio.h>int main(){ int nRetCode = 0;int err;BOOL rc;HANDLE hPipeHandle1;char lpName[]="\\\\.\\pipe\\myPipe";char InBuffer[50] = "";char OutBuffer[50] ="";DWORD BytesRead,BytesWrite;hPipeHandle1 = CreateNamedPipe((LPCTSTR)lpName,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED|WRITE_DAC,PIPE_TYPE_MESSAGE|PIPE_READMODE_BYTE|PIPE_W AIT,1,20,30,NMPW AIT_USE_DEFAULT_WAIT,(LPSECURITY_ATTRIBUTES)NULL);if ((hPipeHandle1 == INV ALID_HANDLE_V ALUE) || (hPipeHandle1 == NULL)){ err = GetLastError();printf("Server Pipe Create Fail! err = %d\n",err);exit(1); }else printf("Server Pipe Create Success!\n");while ( 1 ){ rc = ConnectNamedPipe(hPipeHandle1,(LPOVERLAPPED)NULL);if(rc == 0){ err = GetLastError();printf("Server pipe Connect Fail err = %d\n",err);exit(2);}else printf("Server pipe Connect Success \n");strcmp(InBuffer,"");strcmp(OutBuffer,"");rc = ReadFile(hPipeHandle1,InBuffer,sizeof(InBuffer),&BytesRead,(LPOVERLAPPED)NULL);if ( rc == 0 && BytesRead == 0){ err = GetLastError();printf("Server Read Pipe Fail! err = %d\n",err);exit(3);}else{ printf("Server pipe Connect Success \nDA TA from Client is = %s\n",InBuffer);}rc = strcmp(InBuffer,"end");if ( rc == 0 ) break;printf("Please Input Data to Send\n");scanf("%s",OutBuffer);rc = WriteFile(hPipeHandle1,OutBuffer,sizeof(OutBuffer),&BytesWrite, (LPOVERLAPPED)NULL);if (rc == 0) printf("Server Write Pipe Fail!\n");else printf("Server Write Pipe Success!\n");DisconnectNamedPipe(hPipeHandle1);rc = strcmp(OutBuffer,"end");if ( rc == 0 ) break;}printf ("Now Server be END!\n");CloseHandle(hPipeHandle1);return nRetCode;}。
实验四银行家算法(一)教学要求掌握处理死锁的方法,掌握银行家算法的实现(二)知识点提示死锁的概念,死锁产生的原因和条件,处理死锁的方法,银行家算法,安全状态和不安全状态,安全性算法(三)教学内容银行家算法的模拟实现实验步骤:(1)定义数据结构:allocation[][]; //分配矩阵available[]; //可用资源向量need[][]; //需求矩阵request[]; //资源请求向量(2)定义函数:void bank_arithmetic(int i, int request[]) //银行家算法void isSafe( ); //安全性算法主函数中对可用资源向量,分配矩阵和需求矩阵进行初始化(输入数据参照课本P113的例题),输入请求资源的进程编号以及请求的资源向量,通过调用银行家算法判断是否可以把资源分配给请求资源的进程。
(3)银行家算法的执行步骤:设Request i是进程P i的请求向量。
若Request i[j]=k,表示进程P i需要k个j类资源。
当P i 发出资源请求后,系统按下述步骤进行检查:①若Request i≤Need i,则转②;否则,认为出错。
因为它所需要的资源数已超过它所宣布的最大值。
②若Request i≤Available,则转③;否则,表示系统中尚无足够的资源,P i必须等待。
③系统试探把要求的资源分配给进程P i,并修改下面数据结构中的数值。
Available=Available – Request iAllocation i = Allocation i + Request iNeed i = Need i– Request i④系统执行安全性算法,检测此次资源分配后,系统是否处于安全状态。
若安全,才正式将资源分给进程P i;否则,将试探分配作废,恢复资源状态,让P i等待。
(4)安全性算法的执行步骤:①设置两个向量work和finish工作向量work,它表示系统可提供给进程继续运行的各类资源数,含有m个元素,其初始值为:work[j]=available[j]。
操作系统实验四实验过程及结果1、实验内容1、通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分2、将指令序列变换为页地址流设:页面大小为1K;用户内存容量4页到32页;用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0 条-第9 条指令为第0页(对应虚存地址为[0,9])第10条-第19条指令为第1页(对应虚存地址为[10,19])………………………………第310条-第319条指令为第31页(对应虚存地址为[310,319])3、计算并输出下述算法在不同内存容量下的命中率。
1)最佳淘汰算法(OPT)2)先进先出的算法(FIFO)3)最近最久未使用算法(LRU)命中率=(1-页面失效次数)/页地址流长度实验流程图核心代码/*先进先出算法total_pf:用户进程的内存页面数*/int FIFO(int total_pf){int i,j;pfc_type *p; /*中间变量*/initialize(total_pf); /*初始化相关页面控制用数据结构*/busypf_head=busypf_tail=NULL; /*忙页面队列头,队列尾链接*/for(i=0;i<total_instruction;i++){if(pl[page[i]].pfn==INV ALID) /*页面失效*/{diseffect+=1; /*失效次数*/if(freepf_head==NULL)/*无空闲页面*/{p=busypf_head->next;pl[busypf_head->pn].pfn=INV ALID;freepf_head=busypf_head;/*释放忙页面队列的第一个页面*/freepf_head->next=NULL;/*表明还是缺页*/busypf_head=p;}p=freepf_head->next;/*按照FIFO方式调新页面入内存页面*/ freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head;else{busypf_tail->next=freepf_head; /*free页面减少一个*/busypf_tail=freepf_head;}freepf_head=p;}}printf("FIFO:%6.4f\n",1-(float)diseffect/ 320);return 0;OPT(最佳置换算法)设计原理:需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。
华北电力大学实验报告||实验名称操作系统实验课程名称操作系统综合实验||专业班级:学生姓名:学号:成绩:指导教师:实验日期:华北电力大学实验报告工具包集合。
EOS SDK文件夹主要包括INC头文件、LIB文件夹导入库文件和BIN文件夹动态链接库,可执行程序,二进制文件。
EOS SDK包含的头文件有:eos.h负责导出API函数声明;eosdef.h负责导出函数类型的定义;error.h 负责导出错误码。
四.实验过程1.新建Windows控制台应用程序生成项目:执行项目:调试项目:2.使用断点终端执行:查看EOS SDK(Software Development Kit)文件夹:修改EOS应用程序项目名称:五.实验心得这次是验证性试验,具体步骤和操作方法都是与实验教程参考书上一致,实验很顺利,实验过程没有遇到困难。
通过这次实验,我掌握了OS Lab启动和退出操作;练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab 的基本使用方法新建项目、生成项目、调试项目等。
第页共页华北电力大学实验报告第页共页华北电力大学实验报告第页共页2. 当loop线程在控制台1中执行,并且在控制台2中执行suspend命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态?3. 在本实验3.2节中只调试了图5-3中显示的最主要的四种转换过程,对于线程由新建进入就绪状态,或者由任意状态进入结束状态的转换过程还没有调试,请读者找到这两个转换过程执行的源代码,自己练习调试。
4. 总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文(将线程控制块中的上下文恢复到处理器中,或者将处理器的状态复制到线程控制块的上下文中),哪些不需要使用,并说明原因。
5. 在本实验3.2节中总结的所有转换过程都是分步骤进行的,为了确保完整性,显然这些转换过程是不应该被打断的,也就是说这些转换过程都是原语操作(参见本书第2.6节)。
计算机操作系统实验报告一、实验目的本次计算机操作系统实验旨在深入了解计算机操作系统的工作原理和核心功能,通过实际操作和观察,增强对操作系统的认知和理解,提高解决实际问题的能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019硬件配置:Intel Core i5 处理器,8GB 内存,512GB 固态硬盘三、实验内容与步骤(一)进程管理实验1、创建进程使用 C++语言编写程序,通过调用系统函数创建新的进程。
在程序中,设置不同的参数和条件,观察进程的创建过程和资源分配情况。
2、进程调度编写模拟进程调度的程序,实现不同的调度算法,如先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
通过改变进程的到达时间、执行时间和优先级等参数,观察不同调度算法对系统性能的影响。
3、进程同步与互斥使用信号量和互斥锁等机制实现进程之间的同步与互斥。
编写多进程程序,模拟生产者消费者问题、读者写者问题等经典的同步互斥场景,观察程序的运行结果,分析同步互斥机制的有效性和性能。
(二)内存管理实验1、内存分配实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
通过模拟内存请求和释放的过程,观察不同算法下内存的使用情况和碎片产生的情况。
2、虚拟内存配置系统的虚拟内存设置,观察虚拟内存的工作原理。
编写程序访问超过物理内存大小的数据,观察系统如何利用虚拟内存进行数据交换和页面置换。
3、内存保护设置内存访问权限,编写程序尝试越界访问内存,观察系统的保护机制如何防止非法访问和错误操作。
(三)文件系统实验1、文件操作使用系统提供的文件操作接口,进行文件的创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件权限管理设置文件的访问权限,包括读取、写入、执行等权限。
通过不同用户身份访问文件,观察权限管理的效果和安全性。
3、磁盘调度实现不同的磁盘调度算法,如先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)等。
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。
同时,实现进程的正常终止和异常终止,并分析其对系统的影响。
2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。
通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。
(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。
(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。
(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。
2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。
(2)创建多个进程,模拟对共享资源的并发访问。
(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。
(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
计算机操作系统实验四实验四:文件系统<一>[背景知识]1. 选择文件系统文件系统决定了操作系统能够对磁盘进行的处理。
Windows xp支持的文件系统主要有:1) 文件分配表(File Allocation Table,FAT) 文件系统(FAT16)2) 保护模式FAT文件系统(FAT32)3) Windows NT文件系统(NTFS)FAT文件系统是早期文件系统之一,也是MS-DOS使用的原始文件系统。
它将文件信息储存在位于卷标开头处的文件分配表中,并保存两份文件分配表,以防其中的一个遭到破坏,见图7-1所示。
FAT文件系统最大的优点是MS-DOS、Windows 9x甚至OS/2都能访问FAT卷标;而其最大的弱点是随着FAT卷标尺寸的增长,最小的簇尺寸也随之增长。
对于大于512MB的硬盘而言,最小的簇尺寸为16KB;对于大于2GB 的硬盘,最小的簇尺寸为64KB。
这就导致磁盘空间的极大浪费,因为一个文件必须占用整数个簇。
因此,1KB的文件在2GB的硬盘上将占用64KB的磁盘空间。
FAT文件系统不支持尺寸大于4GB的卷标。
图7-1 FAT 文件系统的结构FAT32文件系统通过提供长文件名的支持来扩展FAT 文件系统,并与FAT16兼容。
FAT (16和32) 文件系统是支持可移动媒体 (例如软盘) 上的惟一的文件系统。
Windows NT 文件系统 (NTFS) 包括了FAT 文件系统的所有功能,同时又提供了对高级文件系统特征 (例如安全模式、压缩和加密) 的支持。
它是为在大磁盘上有效地完成文件操作而设计的。
与FAT 和保护模式FAT 文件系统不同,它的最小簇尺寸不超过4KB 。
但是,NTFS 卷标只能为Windows NT 、2000和XP 操作系统所访问。
Windows xp 提供的新特征 (NTFS 5.0) 使文件系统更安全、更可靠,比以往的Windows 版本更好地支持分布式计算。
Windows操作系统C/C++ 程序实验姓名:___________________学号:___________________班级:___________________院系:_________________________________年_____月_____日实验四Windows 2000/xp线程间通信一、背景知识二、实验目的三、工具/准备工作四、实验内容1. 文件对象步骤1:登录进入Windows 2000/xp Professional。
步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序4-1.cpp。
步骤4:单击“Build”菜单中的“Compile 4-1.cpp”命令,并单击“是”按钮确认。
系统对4-1.cpp进行编译。
步骤5:编译完成后,单击“Build”菜单中的“Build 4-1.exe”命令,建立4-1.exe可执行文件。
操作能否正常进行?如果不行,则可能的原因是什么?____________________________________________________________________ ________________________________________________________________________步骤6:在工具栏单击“Execute Program”按钮,执行4-1.exe程序。
运行结果(如果运行不成功,则可能的原因是什么?) :____________________________________________________________________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________阅读和分析程序4-1,请回答问题:1) 清单4-1中启动了多少个单独的读写线程?____________________________________________________________________2) 使用了哪个系统API函数来创建线程例程?____________________________________________________________________3) 文件的读和写操作分别使用了哪个API函数?____________________________________________________________________ ________________________________________________________________________每次运行进程时,都可看到清单4-3中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。
西北工业大学信号与线性系统实验报告学号姓名:实验三信号的合成1.实验内容在“信号与系统”中,周期性的函数(波形)可以分解成其基频分量及其谐波分量(如下图所示,基频与谐波的幅度与信号的特性紧密相关。
从上图中可以看出,一般周期性的信号,其谐波幅度随着谐波次数的增加相应该频点信号幅度会减少。
因而,对于一个周期性的信号,可以通过一组中心频率等于该信号各谐波频率的带通滤波器,获取该周期性信号在各频点信号幅度的大小。
同样,如果按某一特定信号在其基波及其谐波处的幅度与相位可以合成该信号。
理论上需要谐波点数为无限,但由于谐波幅度随着谐波次数的增加信号幅度减少,因而只需取一定数目的谐波数即可。
2.实验过程1、方波信号的合成:(1)按下面公式调整五路信号的幅度:∑∞=⋅⋅=1)cos()2sin(1)(ntnwnntfπ(2)逐步加入合成信号,观察输出信号波形的变化;2、周期锯齿信号的合成:(1)按下面公式调整五路信号的幅度:∑∞=⋅⋅-=1)sin(1)1()(n n tnw ntf(2)逐步加入合成信号,观察输出信号波形的变化;3、周期半波信号合成(不含直流信号):(1)按下面公式调整五路信号的幅度:∑∞=⋅⋅-⋅-=12)cos()2cos(11)1()(n n tnwnntfπ(2)逐步加入合成信号,观察输出信号波形的变化;3.实验数据(1)方波信号的合成首先让设备输出方波信号:当n=1时:当n=2时:当n=3时:当n=4时:当n=5时:n=1和n=3信号合成:n=1和n=3和n=5信号合成:(2)周期锯齿信号的合成首先让设备输出周期锯齿信号:当n=1时:当n=2时:当n=3时:当n=4时:当n=5时:n=1和n=2信号合成:n=1和n=2和n=3信号合成:n=1和n=2和n=3和n=4信号合成:n=1和n=2和n=3和n=4和n=5信号合成:(3)周期半波信号合成(不含直流信号):n=2时:n=4时:n=2和n=4信号合成:4.实验结果分析及思考分析:通常,随着合成的谐波次数的增加,方均误差逐渐减小,可见合成波形与原波形之间的偏差越来越小。
技术资料常州大学操作系统课程实验报告姓名 xxx专业班级计算机科学与技术学号 xxxxxx指导老师 xxx成绩实验时间2012年4月23日——2012年5月7日实验一 Windows XP 系统管理一实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;3)熟悉Windows操作系统的应用环境。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的“管理工具”中集成了许多系统管理工具,利用这些工具,管理员可以方便地实现各种系统维护和管理功能。
这些工具都集中在“控制面板”的“管理工具”选项下,用户和管理员可以很容易地对它们操作和使用。
在默认情况下,只有一些常用工具——如服务、计算机管理、事件查看器、数据源 (ODBC) 、性能和组件服务等——随Windows XP 系统的安装而安装。
四实验内容与步骤为了帮助用户管理和监视系统,Windows XP提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
步骤1:登录进入Windows XP。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) 本地安全策略:查看和修改本地安全策略,如用户权限和审核策略2) Internet信息服务:管理 IIS,Internet 和 Intranet 站点的 WEB服务器3) 服务:启动和停止服务4)计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程的计算机5)事件查看器:显示来自于 Windows 和其他程序的监视与排错消息6)数据源ODBC:添加、删除、以及配置 ODBC 数据源和驱动程序7)性能:显示系统性能图表以及配置数据日志和警报8)组件服务:配置和管理 COM+ 应用程序1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows XP管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
操作系统实验报告操作系统是计算机科学中十分重要的一门课程,本次实验是关于操作系统的,通过实验,我们可以更深入地了解操作系统的相关知识和操作。
本篇文章将着重介绍本次操作系统实验的内容和实验过程中的收获。
一、实验内容本次实验内容主要涉及操作系统的进程、线程和进程同步三部分。
具体内容包括:1. 进程的创建和管理2. 线程的创建和管理3. 进程同步的实现在实验过程中,我们将分别使用C语言和Linux操作系统实现上述功能。
二、实验过程1. 进程的创建和管理在这一部分实验中,我们要创建多个进程,实现进程的调度和管理功能。
我们采用了Linux系统下的fork()函数,用于创建子进程。
在程序运行时,首先创建一个父进程,然后使用fork()函数创建四个子进程,每个子进程都有自己的进程号(pid),并在屏幕上输出该进程号以示区分。
为了实现进程的调度功能,我们在代码中加入了sleep()函数,用于将进程挂起一段时间,然后再轮流执行其他进程。
2. 线程的创建和管理在这一部分实验中,我们使用了C语言的POSIX线程库pthread.h,实现多线程的功能。
同样地,我们采用了Linux系统下的fork()函数来创建线程。
在代码运行时,我们创建了两个线程,并在屏幕上输出线程号(tid)以示区分。
为了实现线程的调度和管理功能,我们在代码中加入了pthread_join()函数,用于等待线程的执行完成。
3. 进程同步的实现在这一部分实验中,我们使用了Linux系统下的进程同步工具——信号量(semaphore)。
在代码中,我们使用sem_init()函数创建信号量,使用sem_wait()函数阻塞进程或线程,使用sem_post()函数释放进程或线程。
为了更好地理解信号量的工作原理,我们将代码分为生产者和消费者两部分,其中生产者用于向缓冲区添加数据,消费者则用于删除数据。
在这个过程中,我们需要使用信号量控制生产者和消费者的数量,避免出现生产过多或消费过多的情况。
2016新编操作系统实验四报告-动态分区分配算法操作系统实验报告实验四动态分区分配算法学号:班级:姓名:【实验目的】通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。
【实验内容】问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。
假设内存中空闲分区个数为n,空闲分区大小分别为P, … ,P,在动态分区分配过程中需要分配的进程个数为m1n (m?n),它们需要的分区大小分别为S, … ,S,分别利用四种动态分区分配算1m法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求如下:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:空闲分区个数n,空闲分区大小P, … ,P,进程个数m,进程需要1n的分区大小S, … ,S,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳1m适应算法,4-最坏适应算法。
4)输出:最终内存空闲分区的分配情况。
实现提示:用C++语言实现提示:1)程序中变量定义参考(根据需要可添加)如下:const int MaxNumber=100;int FreePartition[MaxNumber];int FirstPartition[MaxNumber];int CycleFirstPartition[MaxNumber];int BestPartition[MaxNumber];int WorstPartition[MaxNumber];int ProcessNeed[MaxNumber];int PartitionNum,ProcessNum; 2)页面置换的实现过程如下:, 变量初始化;, 空闲分区个数n,空闲分区大小P, … ,P,进程个数m,进程需要的分区1n 大小S, … ,S,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳1m 适应算法,4-最坏适应算法;, 根据用户选择的算法进行动态分区分配;, 输出所有进程分配后的空闲分区分配情况。
模拟CMOS集成电路实验实验四实验四运放的仿真方法实验运放:仿真前,直流扫描,确定工作点sp文件(部分).GLOBAL VDDIREF VDD NET3 DC=25uM1 NET1 1 NET2 NET2 NMOS L=2u W=47uM2 VOUT 2 NET2 NET2 NMOS L=2u W=47uM3 NET1 NET1 VDD VDD PMOS L=2u W=22uM4 VOUT NET1 VDD VDD PMOS L=2u W=22uM5 NET2 NET3 GND GND NMOS L=2u W=20uM6 NET3 NET3 GND GND NMOS L=2u W=20uV1 1 VIN 0V2 2 VOUT 0VGND GND 0 0VVDD VDD 0 3.3VVIN VIN 0 0.DC VVIN 0 3.3 0.05.options post acct probe.probe V(Vout) I(M5).END结果如下图图1.运放直流工作点扫描工作点选定为 2.0VAMP文件.GLOBAL VDD GND.SUBCKT AMP1 GND VDD Vin+ Vin- VOUTIREF VDD NET3 DC=25E-6M1 NET1 Vin+ NET2 GND NMOS L=2E-6 W=47E-6M2 VOUT Vin- NET2 GND NMOS L=2E-6 W=47E-6M3 NET1 NET1 VDD VDD PMOS L=2E-6 W=22E-6M4 VOUT NET1 VDD VDD PMOS L=2E-6 W=22E-6M5 NET2 NET3 GND GND NMOS L=2E-6 W=20E-6M6 NET3 NET3 GND GND NMOS L=2E-6 W=20E-6.ENDS AMP1LIB文件**********************model NMOS**********************.MODEL NMOS NMOS(+LEVEL=1 VT0=0.7 GAMMA=0.45 PHI=0.9+NSUB=9e+14 LD=0.08e-6 U0=350 LAMBDA=0.1+TOX=9e-9 PB=0.9 CJ=0.56e-3 CJSW=0.35e-11 +MJ=0.45 MJSW=0.2 CGDO=0.4e-9 JS=1.0e-8)**********************model PMOS**********************.MODEL PMOS PMOS(+LEVEL=1 VT0=-0.8 GAMMA=0.4 PHI=0.8+NSUB=5e+14 LD=0.09e-6 U0=100 LAMBDA=0.2+TOX=9e-9 PB=0.9 CJ=0.94e-3 CJSW=0.32e-11 +MJ=0.5 MJSW=0.3 CGDO=0.3e-9 JS=0.5e-8)一、输入失调电压(Voltage Offset)的仿真1.sp文件.title test1.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1******************************************************VVDD VDD 0 3.3VVIN VIN 0 0.DC VVIN 0 3.3 0.05*.DC temp -40 120 1.options post acct probe.PROBE V(VOUT) *V(VIN) VOS=par‘V(VOUT)-V(VIN)’.op.END2.仿真结果温度对失调电压的影响1.sp文件.title test1.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1******************************************************VVDD VDD 0 3.3VVIN VIN 0 0*.DC VVIN 0 3.3 0.05.DC temp -40 120 1.options post acct probe.PROBE V(VOUT) *V(VIN) VOS=par‘V(VOUT)-V(VIN)’.op.END2.仿真结果二、开环增益的仿真1.sp文件.title test2.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1****************************************************** R0 VIN- VOUT 1GC0 VIN- 0 1GVVDD VDD 0 3.3VVIN VIN 0 DC=2 AC=1, 0.ac dec 100 0.001 10G.options post acct probe.probe Vdb(Vout) Vp(Vout).op.END2.仿真结果三、CMRR的仿真1.sp文件.title test3.include './lib.txt'.include './'XI1 0 VDD VIN VOUT1 VOUT1 AMP1XI2 0 VDD VIN VOUT2 VOUT2 AMP1******************************************************R0 VIN1- VOUT1 1GR1 VIN2- VOUT2 1GC0 VIN1- 0 1GC1 VIN VIN2- 1GVVDD VDD 0 3.3VVIN VIN 0 DC=2 AC=1, 0.ac dec 100 0.001 10G.options post acct probe.PROBE VDB(VOUT1) VDB(VOUT2) CMRR=Vdb(V out1)-Vdb(Vout2) ∠∮=Vp(V out1)-Vp(Vout2).op.END2.仿真结果四、PSRR的仿真1.sp文件.title test4.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1****************************************************** VVDD VDD 0 3.3 AC=1,0VVIN VIN 0 2.ac dec 100 0.001 10G.options post acct probe.PROBE VDB(VOUT) VP(VOUT).op.END2.仿真结果五、输出阻抗的分析1.sp文件.title test5.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1****************************************************** VVDD VDD 0 3.3 AC=1,0VVIN VIN 0 2I0 VOUT 0 DC=5U AC=1,0.ac dec 100 0.001 10G.options post acct probe.PROBE VDB(VOUT) VP(VOUT).op.END2.仿真结果六、SR及建立时间的仿真1.sp文件.title test6.include './lib.txt'.include './'XI0 0 VDD VIN VOUT VOUT AMP1****************************************************** VVDD VDD 0 3.3VVIN VIN 0 PULSE ( 2 3 5NS 0NS 0NS 50NS 100NS ) .TRAN 0.1NS 150NS 0NS.options post acct probe.PROBE V(VOUT) V(VIN).op.END2.仿真结果输入小信号10mv仿真结果:建立时间:5ns输入大信号1v仿真结果: 建立时间:4.2ns。
实验四 进程与线程
一、 实验目的
(1)理解进程的独立空间;
(2)理解线程的相关概念。
二、 实验内容与要求
1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知识,了解C语言程序编
写的相关知识;
2、理解进程的独立空间的实验内容及步骤
(1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并
输出每次操作后的结果;
(2)使用系统调用 fork()创建子进程,观察该变量的变化;
(3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变
化。
3、理解线程的实验步骤
(1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线
程并发运行的。输出每次操作后的结果;
(2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()
中和新线程shared进行循环加/减操作,观察该变量的变化;
(3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变
化。
4、对整个实验过程进行分析总结,给出详细步骤;
(1) 观察上述进程执行结果,并分析原因;
(2) 提交源程序清单,并附加流程图与注释。
三、 实验过程
1、进程的与线程的创建和构造
(1).进程的创建和构造
进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一
个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,
进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。
新的进程通过克隆旧的程序(当前进程)而建立。fork()?和?clone()(对于线程)系统调用可
用来建立新的进程。
(2)线程的创建和构造
线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有
它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间
的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。
线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们
看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着
它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更
容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。
线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同
的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理
器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之
间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一
个进程中可以包含多个线程。
2、理解进程的独立空间
流程图如下所示:
Y
N
Y
N
Y
(1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,
并输出每次操作后的结果
源程序如下所示:
#include <>
int main()
{
int shared=1;
shared++;
printf("%d\n", shared);
shared--;
printf("%d\n", shared);
shared++;
printf("%d\n", shared);
shared--;
printf("%d\n", shared);
return 0;
}
shared = 1
pid = fork()
ERROR
输出shared操作
输出shared操作
pid < 0
pid > 0
pid ==0
运行结果如图所示:
(2)使用系统调用 fork()创建子进程,观察该变量的变化
添加进程创建语句后,程序运行结果如下,子进程和父进程都执行了操作,且彼此之间对于同一
个变量shared的自加操作互不影响。
代码如下图所示:
运行结果如下图所示:
(3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变
化。
当把shared放到主函数之外时,运行结果和内部时相比,并未发生变化。
3、理解线程
流程图如下所示:
开始
结束
开始 设置全局变量
输出Shared的值
Shared++
Sleep 1 S
创建主进程
创建线程
开始
创建主进程
开始 设置全局变量
创建线程
(1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主
线程并发运行的。输出每次操作后的结果
源代码部分如下所示:
运行结果如下图所示:
原文链接:
(2)Linux开发模式与FreeBSD开发模式的比较。
(2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()
中和新线程shared进行循环加/减操作,观察该变量的变化
源代码如下所示:
运行结果如下图所示:
(3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变
化
部分代码截图如下:
在这种情况下,直接编译,会发生错误,截图如下:
四、 实验分析与总结
Sleep 1 S
Shared++
输出Shared的值
结束
1. 对于fork()语句的使用还是不够熟练和清楚,在使用的过程中过于心急,对 程序本真的
内在含义理解不清楚,还要在课后认真的学习和弥补不足。
2. 实验过程中,交流很重要,不过还是要加强自己的学习能力,提高对程序的 理解能力和
使用技巧。
3. 开始时不知道该如何构造线程,在查看了资料之后,开始稍微有些明白了,在后面慢慢的实践
过程中,逐步对线程的创建和使用等有了更加深入的了解。
4. 在理解线程的相关概念的实验中,应注意shared 的全局性和局部性,而且在作为局 部变量
时,应注意print_thread_id()函数和pthread_create()函数的使用,因为后者的第四个参数是
指针型变量,故在传递shared的值时应注意指针的使用。