操作系统实验报告

合集下载

操作系统lab2实验报告

操作系统lab2实验报告

操作系统lab2实验报告实验目的:本实验的目的是通过设计和实现一个简单的操作系统内核,加深对操作系统基本概念和原理的理解。

具体实验内容包括进程管理、内存管理和文件系统的设计与实现。

实验环境:1.操作系统:Linux2.编程语言:C语言一、实验背景1.1 操作系统简介操作系统是计算机系统中的一个重要组成部分,负责管理和控制计算机的各种资源,提供用户和应用程序的接口,以及协调和调度各种任务的执行。

1.2 实验目标本实验的主要目标是设计和实现一个简单的操作系统内核,包括进程管理、内存管理和文件系统等功能。

二、实验内容2.1 进程管理①进程创建描述进程创建的过程和相关数据结构,包括创建新进程的系统调用、进程控制块等。

②进程调度描述进程调度的算法和实现方式,包括进程调度队列、调度算法等。

③进程同步与通信描述进程同步和通信的机制和方法,包括信号量、互斥锁、条件变量等。

2.2 内存管理①内存分配描述内存分配的算法和实现方式,包括连续内存分配、非连续内存分配等。

②页面置换描述页面置换的算法和实现方式,包括最优页面置换算法、先进先出页面置换算法等。

2.3 文件系统①文件操作描述文件操作的系统调用和相关数据结构,包括文件打开、读写、关闭等。

②文件系统结构描述文件系统的组织结构和实现方式,包括超级块、索引节点、块位图等。

三、实验步骤3.1 环境搭建搭建实验环境,包括安装Linux操作系统、编译器等。

3.2 进程管理实现根据设计要求,实现进程创建、调度、同步与通信等功能。

3.3 内存管理实现根据设计要求,实现内存分配、页面置换等功能。

3.4 文件系统实现根据设计要求,实现文件操作和文件系统结构。

3.5 测试与调试编写测试用例,对实现的操作系统内核进行测试和调试,并记录实验结果。

四、实验结果分析分析测试结果,评估实验过程中遇到的问题和解决方法,总结操作系统内核的性能和功能特点。

五、实验总结对实验过程中的收获和经验进行总结,提出改进和优化的建议。

南京邮电大学-操作系统实验报告

南京邮电大学-操作系统实验报告

课内实验报告课程名:操作系统任课教师:沈超专业:信息管理与信息系统学号:姓名:二○一六至二○一七年度第一学期南京邮电大学经济与管理学院Process[numberschedul].order=tempcounter;}程序结果截图:二、银行家算法(网上借鉴)银行家算法,当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有的资源能否满足进程需要。

若超过,则报错,若不能满足,则让该进程等待;否则进一步检查把资源分给该进程后系统能否出于安全状态,若安全,则分配,否则置该进程为等待资源状态。

算法实现过程:设进程i 提出请求REQUEST [j] ,则银行家算法按如下规则进行判断。

(1) 如果REQUEST [i] [j]<= NEED[i][j] ,则转(2) ;否则,出错。

(2) 如果REQUEST [i] [j]<= A V AILABLE[i][j] ,则转(3) ;否则,出错。

(3) 系统试探分配资源,修改相关数据:A V AILABLE[j]-=REQUEST[i][j];ALLOCATION[i][j]+=REQUEST[i][j];NEED[i][j]-=REQUEST[i][j];(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

Check()关键代码:{int k, f, no=0;int work[M],a[M];char finish[M];anquan=1;for(i=0;i<n; i++) finish[i]='F';for(j=0;j<m; j++) work[j]=available[j]; k=n;do{ for (i=0;i<n; i++){if (finish[i]=='F'){ f=1;for (j=0;j<m; j++)if (need[i][j]>work[j]) printf("处于安全状态.");printf("安全序列号:");for (i=0;i<n;i++) printf ("%d ",a[i]); printf("\n");printf("进程");printf(" ");printf(" Max ");rintf(" ");rintf("allocation");printf(" ");printf("need");printf(" ");f=0;if (f==1)//找到还没完成的且需求数小于可提供进程继续运行的{ finish[i]='T';a[no++]=i;//记录安全序列号for (j=0;j<m; j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源available[j] =work[j];}}}k--; }while(k>0);f=1;for (i=0;i<n; i++)//判断有没有进程没完成{ if (finish[i]=='F'){f=0;break; }} if (f==0) {printf("不安全状态!\n");anquan=0;} else {printf("available");printf("\n");for (i=0;i<n; i++){ printf("%2d",i);printf(" ");for(j=0;j<m; j++)printf("%2d",max[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",allocation[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",need[i][j]);printf(" ");for(j=0;j<m; j++){if(i>0)break;printf("%2d",available[j]);}printf("\n");}}}程序结果截图:三、实验总结:这次上机模拟了进程调度过程和解决了死锁问题,让我对短作业优先调度算法和银行家算法有了比在课堂上更深刻的认识。

操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告一、实验目的处理机调度是操作系统中的核心功能之一,本次实验的主要目的是通过模拟不同的处理机调度算法,深入理解操作系统对处理机资源的分配和管理策略,比较不同调度算法的性能差异,并观察它们在不同负载情况下的表现。

二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 Python 38。

实验中使用了 Python 的相关库,如`numpy`、`matplotlib`等,用于数据生成、计算和图形绘制。

三、实验原理1、先来先服务(FCFS)调度算法先来先服务算法按照作业到达的先后顺序进行调度。

先到达的作业先被服务,直到完成或阻塞,然后再处理下一个到达的作业。

2、短作业优先(SJF)调度算法短作业优先算法选择预计运行时间最短的作业先执行。

这种算法可以有效地减少作业的平均等待时间,但可能导致长作业长时间等待。

3、时间片轮转(RR)调度算法时间片轮转算法将处理机的时间分成固定长度的时间片,每个作业轮流获得一个时间片的处理时间。

当时间片用完后,如果作业还未完成,则将其放入就绪队列的末尾等待下一轮调度。

4、优先级调度算法优先级调度算法为每个作业分配一个优先级,优先级高的作业先被执行。

优先级可以根据作业的性质、紧急程度等因素来确定。

四、实验内容与步骤1、数据生成首先,生成一组模拟的作业,包括作业的到达时间、预计运行时间和优先级等信息。

为了使实验结果更具代表性,生成了不同规模和特征的作业集合。

2、算法实现分别实现了先来先服务、短作业优先、时间片轮转和优先级调度这四种算法。

在实现过程中,严格按照算法的定义和规则进行处理机的分配和调度。

3、性能评估指标定义了以下性能评估指标来比较不同调度算法的效果:平均等待时间:作业在就绪队列中的等待时间的平均值。

平均周转时间:作业从到达系统到完成的时间间隔的平均值。

系统吞吐量:单位时间内完成的作业数量。

4、实验结果分析对每种调度算法进行多次实验,使用不同的作业集合,并记录相应的性能指标数据。

操作系统接口实验报告

操作系统接口实验报告

操作系统接口实验报告一、实验目的本次实验旨在深入理解操作系统接口的概念、功能和使用方法,通过实际操作和编程实践,掌握操作系统提供的接口在程序开发中的应用,提高对操作系统的认知和编程能力。

二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、文件操作接口创建、打开、读取和写入文件文件属性的获取和设置文件的复制、移动和删除2、进程管理接口创建和终止进程获取进程的信息,如进程 ID、内存使用等进程间的通信,如管道、消息队列等3、线程管理接口创建和终止线程线程同步机制,如互斥锁、条件变量等线程的优先级设置和调度4、内存管理接口动态内存分配和释放内存映射文件的使用虚拟内存的操作四、实验步骤1、文件操作接口实验使用`CreateFile` 函数创建或打开一个文件。

通过`ReadFile` 和`WriteFile` 函数进行文件的读写操作。

利用`GetFileAttributes` 函数获取文件属性,并使用`SetFileAttributes` 函数设置文件属性。

运用`CopyFile` 、`MoveFile` 和`DeleteFile` 函数实现文件的复制、移动和删除。

2、进程管理接口实验调用`CreateProcess` 函数创建一个新的进程,并获取进程的 ID 和句柄。

使用`GetProcessMemoryInfo` 函数获取进程的内存使用情况。

通过管道或消息队列实现进程间的通信。

3、线程管理接口实验使用`CreateThread` 函数创建线程,并设置线程的执行函数。

利用互斥锁和条件变量来实现线程间的同步,确保数据的一致性和正确性。

调整线程的优先级,观察线程调度的效果。

4、内存管理接口实验运用`malloc` 和`free` 函数进行动态内存的分配和释放。

使用`CreateFileMapping` 和`MapViewOfFile` 函数实现内存映射文件。

操作系统windows 2000实验报告

操作系统windows 2000实验报告

《操作系统》实验报告专业:年级:学号:提交日期:_______________________实验一:操作系统环境1.1 Windows 2000 系统管理(实验估计时间:60分钟)实验内容与步骤1、计算机管理2、事件查看器3、性能监视4、服务5、数据库(ODBC)为了帮助用户管理和监视系统,Windows 2000提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。

步骤1:登录进入Windows 2000 Professional。

步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。

在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1.本地安全策略:查看和修改本地安全策略,诸如用户权限和审计策略。

2.服务:启动和停止由Windows系统提供的各项服务。

3.计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程计算机。

4.事件查看器:显示来自于Window和其他程序的监视与排错信息。

例如,在“系统日志”中包含各种系统组件记录的事件,如使用驱动器失败或加载其他系统组件;“安全日志”中包含有效与无效的登录尝试及与资源使用有关的事件,如删除文件或修改设置等,本地计算机上的安全日志只有本机用户才能查看;“应用程序日志”中包括由应用程序记录的事件等等。

5.数据源(ODBC):即开放数据库连接。

添加、删除以及配置ODBC数据源和驱动程序,通过ODBC可以访问来自多种数据库管理系统的数据。

6.性能:显示系统性能图表以及配置数据日志和警报。

7.组建服务:配置并管理COM+ 应用程序。

1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows 2000管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。

步骤3:在“管理工具”窗口中,双击“计算机管理”图标。

“计算机管理”使用的窗口与“Windows资源管理器”相似。

操作系统存储管理实验报告

操作系统存储管理实验报告
4 / 37
操作系统实验·报告
typedef struct pfc_struct pfc_type; (2)模块结构 (伙伴系统) # define Inital 1024 //初始时的总内存
NODE root=(memory_node *)malloc(1*sizeof(memory_node));//根节点 int chip=0; // 记录总的碎片大小
total = 256 use =127 remain_max = 0 flag = 0 pid =0
total = 256 use = 0 remain_max = 256 flag = 0 pid =-1
total = 1024 use = 0 remain_max = 512 flag = 1 pid =-1
total = 512 use = 0 remain_max = 512 flag = 0 pid =-1
total = 512 use = 267 remain_max = 0 flag = 0 pid = -1
6 / 37
操作系统实验·报告
三、实验理论分析
7 / 37
操作系统实验·报告
(伙伴算法) Buddy System 是一种经典的内存管理算法。在 Unix 和 Linux 操作系统中都有用到。其 作用是减少存储空间中的空洞、减少碎片、增加利用率。避免外碎片的方法有两种: a.利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。 b.开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的 请 求而把大块的空闲块进行分割。 基于下面三种原因,内核选择第二种避免方法: a.在某些情况下,连续的页框确实必要。 b.即使连续页框的分配不是很必要,它在保持内核页表不变方面所起的作用也是不容 忽视的。假如修改页表,则导致平均访存次数增加,从而频繁刷新 TLB。 c.通过 4M 的页可以访问大块连续的物理内存,相对于 4K 页的使用,TLB 未命中率降 低,加快平均访存速度。 Buddy 算法将所有空闲页框分组为 10 个块链表,每个块链表分别包含 1,2,4,8,16,32,64,128,256,512 个连续的页框,每个块的第一个页框的物理地址是该块 大小的整数倍。如,大小为 16 个页框的块,其起始地址是 16*2^12 的倍数。 例,假设要请求一个 128 个页框的块,算法先检查 128 个页框的链表是否有空闲块, 如果没有则查 256 个页框的链表,有则将 256 个页框的块分裂两份,一 份使用,一份 插入 128 个页框的链表。如果还没有,就查 512 个页框的链表,有的话就分裂为 128, 128,256,一个 128 使用,剩余两个插入对应链 表。如果在 512 还没查到,则返回 出错信号。 回收过程相反,内核试图把大小为 b 的空闲伙伴合并为一个大小为 2b 的单独块,满足 以下条件的两个块称为伙伴: a.两个块具有相同的大小,记做 b。 b.它们的物理地址是连续的。 c.第一个块的第一个页框的物理地址是 2*b*2^12 的倍数。 该算法迭代,如果成功合并所释放的块,会试图合并 2b 的块来形成更大的块。 为了模拟 Buddy System 算法,我采用了数的数据结构,并使用了结构体,来记录各项 数据与标记,虽然不是真正的操作系统使用的方法,但成功模拟了插入和回收的过程。 在回收时我采用物理上的合并——即删除实际的物理节点,释放空间。然而实际中可 能根据需要仅仅是删除了标记项,使之标记成没用过的,从而避免了合并,会提高下 一次的插入操作。 碎片百分比 = 碎片总大小/总内存大小 (置换算法)

操作系统实验报告(2)

操作系统实验报告(2)

计算机实验报告(2)操作系统部分一、基本要求和内容1.了解操作系统的基本功能.2.认识WINDOWS桌面的各部分组成,掌握基本的桌面操作.3.掌握各种基本操作对象的操作方法.4.学会使用WINDOWS帮助.5.了解基本的DOS命令和基本的命令行操作方法.6.熟练掌握文件操作方法.7.掌握对图标的操作方法(移动/拖曳/单击/双击/右击等等).8.熟悉资源管理器窗口和”我的电脑”(“计算机”)窗口.9.掌握启动控制面板的方法,了解控制面板的主要功能,掌握使用控制面板对软硬件进行设置的方法。

10.掌握“运行”对话框的使用方法。

11.了解“任务管理器”的简单使用方法。

12.熟悉“画图”“记事本”“计算器”“写字板”等常用应用程序。

13.开始POWERPOINT的基本使用.二、通过上机实验解决下列问题1. CTRL+ALT+DEL 组合键的功能是:打开【任务管理器】窗口2.全角和半角的区别是:半角是一个字符,全角是两个字符3. CTRL+A组合键的功能是:全部选中CTRL+C组合键的功能是:复制CTRL+V组合键的功能是:粘贴CTRL+X组合键的功能是:剪切CTRL+Z组合键的功能是: 撤销ALT+PRINTSCREEN组合键的功能是:复制当前窗口、对话框或其他对象到剪贴板中任务栏隐藏时通过什么组合键可以看到任务栏:Ctrl+Alt+Del进行窗口切换的组合键是:ALT+Tab4.“画图”应用程序默认保存文件类型是:*.png“记事本”应用程序默认保存文件类型是: *.txt.DOC是什么文件类型Word文档.EXE是什么文件类型可执行文件(程序文件)5.鼠标的基本操作方法包括:指向、单击、双击和拖动鼠标指针附近有漏沙钟表示当前的状态是: 沙漏是等待,因为程序先是从硬盘上读取,然后再到内存,芯片在其期间进行运算,再没真正的打开程序时,系统认为它没正真的启动6.资源管理器左下角窗格(即”文件夹”窗口)显示的是:系统中的所有资源以分层树型的结构显示出来7.一般情况下,对文件进行重命名时,不应该修改文件的扩展名,因为: 如果修改了后缀名则会导致文件属性更改,文件无法打开8.文件的属性主要包括哪些:“只读”、“存档”、“隐藏”9.选择多个连续的文件可以采用哪些方法:使用鼠标先选定第一个文件或文件夹,然后按住Shift键,用鼠标单击最后一个文件或文件夹,这样在第一个对象和最后一个对象之间的所有文件或文件夹将全部被选中,包括第一个和最后一个文件或文件夹。

实验windows系统的操作实验报告

实验windows系统的操作实验报告

实验windows系统的操作实验报告
《实验报告:Windows系统操作实验》
实验目的:通过实际操作,掌握Windows系统的基本操作方法,提高对Windows系统的熟练度。

实验内容:
1. Windows系统的基本操作
- 开机与关机:按下电源按钮开机,点击“开始”菜单选择“关机”进行关机。

- 桌面操作:通过鼠标点击桌面图标进行程序的打开和关闭。

- 文件操作:在资源管理器中创建、复制、粘贴、删除文件和文件夹。

2. Windows系统的高级操作
- 系统设置:调整屏幕分辨率、更改桌面背景、设置系统语言等。

- 程序安装与卸载:通过控制面板安装和卸载程序。

实验步骤:
1. 打开计算机,进入Windows系统桌面。

2. 点击“开始”菜单,打开“资源管理器”,进行文件操作练习。

3. 调整屏幕分辨率和更改桌面背景,熟悉系统设置操作。

4. 在控制面板中安装一个新的程序,并进行卸载操作。

实验结果与分析:
通过本次实验,我对Windows系统的基本操作和高级操作有了更深入的了解。

在实际操作中,我成功地进行了文件操作、系统设置和程序安装与卸载,提高了对Windows系统的熟练度。

结论:
本次实验使我更加熟悉了Windows系统的操作方法,提高了我的计算机应用能力。

在今后的学习和工作中,我将能够更加灵活地运用Windows系统,提高工作效率。

通过这次实验,我对Windows系统有了更深入的了解,提高了我的实际操作能力。

希望今后能够更加熟练地运用Windows系统,为工作和学习提供更多便利。

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

实验四进程与线程 实验目的(1)理解进程的独立空间; (2)
理解线程的相关概念。 实验内容与要求1、掌握进程创建和构造的
相关知识和线程创建和构造的相关知识, 2、了解C 语言程序编写
的相关知识; 3、理解进程的独立空间的实验内容及步骤 4、理解线
程的实验步骤 5、对整个实验过程进行分析总结,给出详细步骤; 实
验过程1、进程的与线程的创建和构造 进程简单来说就是在操作系
统中运行的程序,它是操作系统资源管理的最小单位。新 的进程通
过克隆旧的程序(当前进程)而建立。fork() clone()(对于线程)系
统调用可用来建立新的进程。 2、理解进程的独立空间 流程图如下
所示: (1)编写一个程序,在其main()函数中定义一个变量 shared,
对其进行循环 加/减操作,并输出每次操作后的结果 源程序如下所
示: #include int main() intshared=1; shared++; shared
fork()ERROR 输出shared 操作 输出shared 操作 pid
printf("%d\n",shared); shared--; printf("%d\n", shared);
shared++; printf("%d\n", shared); shared--; printf
shared);return (2)使用系统调用fork()创建子进程,观察该变
量的变化 (3)修改程序把 shared 变量定义到 main()函数之外,
重复第(2)步操作,观察该 变量的变化。 (4)当把shared 放到
主函数之外时,运行结果和内部时相比,并未发生变化。
一. 实验目的及实验环境
(一) 实验环境
Linux 操作系统
(二)实验目的
实验1 掌握Linux基本命令 和开发环境

掌握常用的Linux shell命令;
掌握编辑环境VIM;
掌握编译环境gcc及跟踪调试工具gdb。
实验2 进程
通过观察、分析实验现象,深入理解进程及进程在调度执行和内
存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的
功能和使用。

实验3 线程
通过观察、分析实验现象,深入理解线程及线程在调度执行和内
存空间 等方面的特点,并掌握线程与进程的区别。掌握POSIX 规范
中 pthread_create() 函数的功能和使用方法。

实验4 互斥
通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌
握在POSIX 规范中的互斥函数的功能及使用方法。

二.实验内容
实验2
1.你最初1认为运行结果会怎么样?

会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进
程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际的结果什么样?有什么特点?试对产生该现象的原因进
行分析。

实际的结果跟预期差不多,当输入20时,程序会自动判断,大
于10就以10来创建进程。随机输出0~9号进程,
sleep(SLEEP_INTERVAL),循环输出,输入数字键,则会杀死该数字
对应的进程,直到输入q退出循环,然后杀死本组所有进程。
分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储
在proc_number,然后调用死循环函数do_something(),输出该
进程的代号proc_number; 当输入数字键时,主进程会执行
kill(pid[ch-'0'],SIGTERM),从而杀死(ch - ’0’)号进程。当输入q
时循环退出,kill(0,SIGTERM),杀死本组所有进程。程序退出。

3.proc_number这个全局变量在各个子进程里的值相同吗?为
什么?
proc_number这个全局变量在各个子进程里的值相同,因为子
进程相互独立资源互不影响。

4.kill 命令在程序中使用了几次?每次的作用是什么?执行后
的现象是什么?

2次;第一次是杀死该进程号pid[ch-’0’],执行后接下来的
结果中不会有该进程号,打开另一个终端,使用命令ps aux | grep
process查看进程状态,子进程先于父进程退出,则被杀死的进程为
僵死状态,加了行代码wait(&pid[ch-'0']),就会使该子进程真正结
束。
第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。
执行后程序退出,进程结束。

5.使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退
出?这两种退出方式哪种更好一些?

进程在main函数中return,或调用exit()函数都可以正常退出。
而使
用kill命令则是异常退出。当然是正常退出比较好;若在子进程
退出前 使用kill命令杀死其父进程,系统会让init进程接管子进程。
当用kill 命令使得子进程先于父进程退出时,而父进程又没有调用
wait函数等待 子进程结束,子进程处于僵死状态,并且会一直保持
下去,直到系统重 启。子进程处于僵死状态时,内核只保存该进程
的必要信息以被父进程 所需,此时子进程始终占着资源,同时减少
了系统可以创建的最大进程 数,当僵死的子进程占用资源过多时,
很可能导致系统卡死。

相关文档
最新文档