操作系统实验报告

合集下载

操作系统实验报告(全)

操作系统实验报告(全)

操作系统实验报告书院系名称:电子工程学院电子指导教师:班级:学号:学生姓名:实验题目一:进程一、实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。

二、实验内容(1)补充POSIX 下进程控制的残缺版实验程序(2)回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。

进程怎样能主动退出?这两种退出方式哪种更好一些?三、实验步骤1.根据题意进入DOC环境中编写程序。

2.编译,链接,运行程序,进行调试。

3.分析实验结果及回答问题。

四、调试情况,回答问题及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。

2、在设计过程中的感受。

调试情况:回答上述实验内容中的问题1.预期结果:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际结果:与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。

随机输出0-9号进程,sleep(SLEEP_INTERV AL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。

分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。

操作系统实验实验报告

操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。

本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。

二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。

实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。

三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。

在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。

通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。

2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。

通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。

在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。

(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。

通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。

2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。

在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。

(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。

操作系统实验二实验报告

操作系统实验二实验报告

操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。

通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。

三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。

2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。

3、为新进程指定可执行文件的路径、命令行参数、进程属性等。

4、编写代码来等待新进程的结束,并获取其退出代码。

(二)进程同步实验1、设计一个生产者消费者问题的模型。

2、使用信号量来实现生产者和消费者进程之间的同步。

3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。

4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。

(三)进程通信实验1、选择使用管道来实现进程之间的通信。

2、创建一个匿名管道,父进程和子进程分别读写管道的两端。

3、父进程向管道写入数据,子进程从管道读取数据并进行处理。

四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。

通过观察进程的创建和执行过程,加深了对进程概念的理解。

(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。

分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。

(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。

数据能够准确地在进程之间传递,验证了管道通信的有效性。

五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。

通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。

(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。

操作系统安全实验1实验报告

操作系统安全实验1实验报告

操作系统安全实验1实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验设备为个人计算机。

三、实验内容与步骤(一)Windows 10 操作系统安全配置1、账户管理创建新用户账户,并设置不同的权限级别,如管理员、标准用户等。

更改账户密码策略,包括密码长度、复杂性要求、密码有效期等。

启用账户锁定策略,设置锁定阈值和锁定时间,以防止暴力破解密码。

2、防火墙配置打开 Windows 防火墙,并设置入站和出站规则。

允许或阻止特定的应用程序通过防火墙进行网络通信。

3、系统更新与补丁管理检查系统更新,安装最新的 Windows 安全补丁和功能更新。

配置自动更新选项,确保系统能够及时获取并安装更新。

4、恶意软件防护安装并启用 Windows Defender 防病毒软件。

进行全盘扫描,检测和清除可能存在的恶意软件。

(二)Linux(Ubuntu 2004)操作系统安全配置1、用户和组管理创建新用户和组,并设置相应的权限和归属。

修改用户密码策略,如密码强度要求等。

2、文件系统权限管理了解文件和目录的权限设置,如读、写、执行权限。

设置特定文件和目录的权限,限制普通用户的访问。

3、 SSH 服务安全配置安装和配置 SSH 服务。

更改 SSH 服务的默认端口号,增强安全性。

禁止 root 用户通过 SSH 登录。

4、防火墙配置(UFW)启用 UFW 防火墙。

添加允许或拒绝的规则,控制网络访问。

四、实验结果与分析(一)Windows 10 操作系统1、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。

严格的密码策略有效地增加了密码的安全性,减少了被破解的风险。

账户锁定策略在一定程度上能够阻止暴力破解攻击。

操作系统实验报告

操作系统实验报告

篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对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() 方法。

其中有四个由实际的低级入口点传递来的参数。

操作系统实验报告6

操作系统实验报告6

操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。

三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。

通过编写简单的C++程序,使用Windows API 函数创建多个进程。

在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。

2、进程间通信实现了进程间的管道通信和消息传递。

通过创建管道,让两个进程能够相互交换数据。

同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。

(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。

观察内存使用情况,了解内存碎片的产生和处理。

2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。

(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。

通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。

2、目录操作实现了目录的创建、删除、遍历等功能。

了解了目录结构在文件系统中的组织方式和管理方法。

四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。

2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。

3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。

操作系统Lab2实验报告

操作系统Lab2实验报告

深入学习 操作系统的原理和实 现细节,包括进程通 信、死锁处理、虚拟 化技术等。
实践应用
希望将所学的操作系 统知识应用到实际项 目中,提高自己的实 践能力。
持续学习
随着技术的不断发展 ,操作系统也在不断 更新和进步,需要保 持持续学习的态度。
探索新领域
对于新兴的操作系统 领域,如云操作系统 、物联网操作系统等 ,也希望有所涉猎和 探索。
学生将了解操作系统内核的组成和功能,以及操作系统如何通过内核 实现各种基本功能。
学生将通过实验深入了解操作系统的内部实现细节,提高自己对操作 系统设计和实现的认知水平。
02
实验内容
进程管理实验
总结词
理解进程状态及其转换、进程控制块PCB的组成、进程调度算法。
详细描述
通过实验,我们深入了解了进程的概念、状态及其转换。进程控制块PCB的组成,包括进程标 识符、进程状态、优先级、CPU寄存器内容等信息。此外,我们还学习了进程调度算法,如先 来先服务、最短作业优先、优先级调度等,并进行了模拟实验。
THANKS
感谢观看
操作系统Lab2实验 报告
汇报人:
202X-01-08
目录
• 实验目的 • 实验内容 • 实验结果与分析 • 问题与改进建议 • 总结与展望
01
实验目的
理解操作系统的基本概念
01
掌握核心概念
02
操作系统是计算机系统的核心软件,负责管理计算机硬件和软件资源 ,为用户提供便利的操作界面和高效的服务。
03
操作系统具有并发性、虚拟性、异步性和随机性的特点,这些特点决 定了操作系统在计算机系统中的重要地位和作用。
04
操作系统的基本功能包括进程管理、内存管理、文件管理和设备管理 ,这些功能是操作系统实现其核心目标的基础。

华科操作系统实验报告

华科操作系统实验报告

华科操作系统实验报告一、实验目的操作系统是计算机系统的核心组成部分,对于理解计算机的工作原理和提高计算机应用能力具有重要意义。

本次华科操作系统实验的主要目的是通过实际操作和实践,深入理解操作系统的基本概念、原理和功能,掌握操作系统的核心技术和应用方法,提高我们的实践能力和问题解决能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),开发工具包括 Visual Studio Code、GCC 编译器等。

实验硬件环境为个人计算机,配置为英特尔酷睿 i7 处理器、16GB 内存、512GB 固态硬盘。

三、实验内容1、进程管理进程创建与销毁进程调度算法模拟进程同步与互斥2、内存管理内存分配与回收算法实现虚拟内存管理3、文件系统文件操作与管理文件系统的实现与优化4、设备管理设备驱动程序编写设备分配与回收四、实验步骤及结果1、进程管理实验进程创建与销毁首先,使用 C 语言编写程序,通过系统调用创建新的进程。

在程序中,使用 fork()函数创建子进程,并在子进程和父进程中分别输出不同的信息,以验证进程的创建和执行。

实验结果表明,子进程和父进程能够独立运行,并输出相应的信息。

进程调度算法模拟实现了先来先服务(FCFS)、短作业优先(SJF)和时间片轮转(RR)三种进程调度算法。

通过模拟多个进程的到达时间、服务时间和优先级等参数,计算不同调度算法下的平均周转时间和平均等待时间。

实验结果显示,SJF 算法在平均周转时间和平均等待时间方面表现较好,而 RR 算法能够提供较好的响应时间和公平性。

进程同步与互斥使用信号量和互斥锁实现了进程的同步与互斥。

编写了生产者消费者问题的程序,通过信号量控制生产者和消费者对缓冲区的访问,避免了数据竞争和不一致的情况。

实验结果表明,信号量和互斥锁能够有效地实现进程间的同步与互斥,保证程序的正确性。

2、内存管理实验内存分配与回收算法实现实现了首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)三种内存分配算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验(设计)报告实习一处理器调度一、实习内容选择一个调度算法,实现处理器调度二、实习题目设计一个按时间片轮转法实现处理器调度的程序三、设计思想(1)设计思路①假定系统有5个进程,每个进程用一个PCB来代表。

PCB的结构为:·进程名——如Q1~Q5。

·指针——把5个进程连成队列,用指针指出下一个进程PCB的首地址。

·要求运行时间——假设进程需要运行的单位时间数。

·已运行时间——进程已运行的单位时间数,初始值为0。

·状态——假设两种状态,就绪和结束,用R表示就绪,用E表示结束。

初始状态都为就绪状态。

②每次运行之前,为每个进程任意确定它的“要求运行时间”。

③把5个进程按顺序排成循环队列,用指针指出队列连接情况。

用一个标志单元记录轮到运行的进程。

处理器调度总是选择标志单元指示的进程运行,对所指的进程,将其“已运行时间”加1。

④进程运行一次后,若“要求运行时间”等于“已运行时间”,则将状态改为“结束”,出队列,否则将继续轮转。

⑤若就绪队列为空,结束,否则转到(3)重复。

(2)主要数据结构定义进程:typedef struct node{ int Pname; //进程名int Rtime; //进程要求执行时间int rtime; //进程已执行时间char state; //进程状态struct node * next; //指针} Pnode;(3)主要代码结构·输入运行的进程数·先定义第一个进程·输出剩余的进程,输入时采用尾插法,最终建立一个循环链表·对循环链表根据算法思想进行相关的处理(4)代码段分析p=(Pnode *)malloc(sizeof(Pnode));p->Pname=1;p->state='R';p->rtime=0;printf("请输入进程%d需要运行的时间:\n",p->Pname);while(scanf("%d",&p->Rtime)!=1){fflush(stdin);printf("输入错误,请重新输入!\n"); } head=r=p;for(i=2;i<=n;i++){ p=(Pnode *)malloc(sizeof(Pnode));p->Pname=i;p->state='R';p->rtime=0;printf("请输入进程%d需要运行的时间:\n",p->Pname);while(scanf("%d",&p->Rtime)!=1)fflush(stdin);printf("输入错误,请重新输入!\n");}r->next=p;r=p;}p->next=head;while(p!=head){ printf("\n进程%d正在运行\n",head->Pname); t=head->next;if(t!=head){ printf("就绪队列中进程的排列为:\n");while(t!=head){printf("%d\t",t->Pname);t=t->next;}}elseprintf("就绪队列为空\n");head->rtime++;if(head->rtime==head->Rtime){ head->state='E';printf("\n进程%d结束\n",head->Pname); r=head;p->next=head->next;head=head->next;free(r);else{ p=head;head=head->next;}}for(i=head->rtime;i<head->Rtime;i++){ printf("\n进程%d正在运行\n",head->Pname);printf("就绪队列为空\n");}printf("\n进程%d结束\n",head->Pname);free(head);四、上机实习所用平台及相关软件WindowsXP,Dv-C++五、调试过程(测试数据设计、测试结果分析)(1) 测试数据设计测试的实验数据可根据自己的要求进行输入,输入的时候可能存在输入为负数或者输入的数据的类型错误的情况。

对于这几种情况,实验中都有相应的措施,避免程序进入死循环或错误状态。

在本次的测试实验数据中并没有对列出这种情况,但是在实际的调试过程中是可以完全测试出来的。

(2) 测试结果分析六、小结这次实验中我采用的是循环链表结构,在试验中对于当前结点的指针以及尾结点的指针的变换是实验中最主要的问题。

我在编码的过程中就遇到了这种情况,对于这种,情况要对照程序重新理清思路,尤其对于首尾指针。

实习二主存空间的分配和回收一、实习内容主存储器空间的分配和回收二、实习题目在分页管理方式下采用位示图来表示主存分配情况,实现主存分配和回收三、设计思想(1)设计思路①假定系统的主存被分成大小相等的64个块,用0/1对应空闲/占用。

②当要装入一个作业时,根据作业对主存的需求量,先查空闲块数是否能满足作业要求,若能满足,则查位示图,修改位示图和空闲块数。

位置与块号的对应关系为:块号=j*8+i,其中i表示位,j表示字节。

根据分配的块号建立页表。

页表包括两项:页号和块号。

③回收时,修改位示图和空闲块数。

(2)主要数据结构定义页表项PT,进程programtypedef struct{ int yh; //页号int kh; //块号}PT;typedef struct{ int pname; // 进程名int length; // 进程长度int hang[max]; // 进程所占位的行号int lie[max]; // 进程所占位的列号PT pagetable[max]; // 进程的页表}program;(3)主要代码结构申请内存空间:·输入请求输入内存空间的进程号和大小·如进程大于所剩余的全部的空间时,则输出剩余内存空间不够,否则继续·从第一个位开始查找,如当前位为1,则继续,当找到位值为0的位时,记录该位的行号和列号,总的空闲的位数减1。

这样查找所需内存的大小的位数。

最终空闲位数为原空闲位数减所申请的内存的大小。

释放进程时:·输入所要释放的进程的进程名·查找进程表,如果没有则输出不存在该进程,有则继续·将进程所占的所有位的行号和列号分别找出,并将该位置为0·将空闲的位数加上释放进程的大小(4)代码段分析输出页表和位示图:void print(){ int k,j;for(k=0;k<MAX;k++){if(PR[k].length!=0){ printf("进程%d页表是:\n",PR[k].pname);for(j=0;j<PR[k].length;j++)printf("页号%d,块号%d\n", PR[k].pagetable[j].yh,PR[k].pagetable[j].kh);printf("\n");}}printf("*****位示图如下所示:******\n");for(k=0;k<8;k++){for(j=0;j<8;j++)printf("%d\t",A[k][j]);printf("\n");}printf("空闲块数是:%d\n",count);}申请内存空间:void mcalloc( ) //申请内存空间{ int i,j,k,length,t=0;int count1=0;printf("出入请求内存的进程号及申请的空间:\n");while(scanf("%d",&i)!=1){fflush(stdin);printf("输入错误,请重新输入!\n");}while(scanf("%d",&length)!=1){fflush(stdin);printf("输入错误,请重新输入!\n");};if(i>=MAX) printf("出入的进程号太大,请重新输入!\n"); else{PR[i].pname=i;PR[i].length=length;if(PR[i].length>count){ printf("内存空间不足!\n");PR[i].length=0;}else {for(k=0;k<8;k++)for(j=0;j<8;j++)if(A[k][j]==0&&count1<PR[i].length){A[k][j]=1;count1++;count--;PR[i].hang[t]=k;PR[i].lie[t]=j;PR[i].pagetable[t].yh=t;PR[i].pagetable[t].kh=8*k+j;t++;}}}print();}释放内存空间:void cfree( ){int i,k,j,t=0;int m,n;printf("请输入释放内存的进程号:\n");scanf("%d",&i);if(PR[i].length==0)printf("不存在此进程!\n");else{ for(t=0;t<PR[i].length;t++){m=PR[i].hang[t];n=PR[i].lie[t];A[m][n]=0;count++;}PR[i].length=0;}print();}四、上机实习所用平台及相关软件WindowsXP,Dv-C++五、调试过程(测试数据设计、测试结果分析)(1) 测试数据设计在测试实验时,输入的测试数据应该满足个方面的需求,得到正确的结果。

此次实验中的实验数据应该包括情况:满足条件,当申请的内存不够,输入的数据错误时,释放的进程号错误等。

相关文档
最新文档