北京大学操作系统实习JOS Lab3实验报告
- 格式:pdf
- 大小:2.35 MB
- 文档页数:21
操作系统实验报告3一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理以及文件系统等核心概念和相关技术,并通过实际的实验操作,提高对操作系统原理的理解和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10,开发工具为 Visual Studio 2019。
三、实验内容及步骤(一)进程管理实验1、创建进程使用 C++语言编写程序,通过调用 Windows API 函数`CreateProcess`来创建一个新的进程。
在创建进程时,设置进程的优先级、环境变量等参数,并观察进程的创建过程和相关的系统资源使用情况。
```cppinclude <windowsh>include <iostream>int main(){STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));sicb = sizeof(si);ZeroMemory(&pi, sizeof(pi));//设置进程的优先级为 HIGH_PRIORITY_CLASS DWORD priorityClass = HIGH_PRIORITY_CLASS;//创建进程if (!CreateProcess(NULL, //应用程序名称"notepadexe",//命令行参数NULL, //进程安全性NULL, //线程安全性FALSE, //不继承句柄priorityClass, //进程优先级NULL, //环境变量NULL, //当前目录&si,&pi)){std::cout <<"CreateProcess failed Error code: "<<GetLastError()<< std::endl;return 1;}//等待进程结束WaitForSingleObject(pihProcess, INFINITE);//关闭进程和线程的句柄CloseHandle(pihProcess);CloseHandle(pihThread);return 0;}```2、进程同步与互斥编写一个多线程程序,模拟生产者消费者问题。
操作系统实践报告模板一、实践概述本次实践主要是对操作系统的基本原理和功能进行了解和实际操作。
通过搭建实验环境、学习和调试代码,加深对操作系统的理解和掌握。
本报告将从实践目的、实验环境搭建、实验过程和实验结果等方面进行详细介绍。
二、实践目的1. 理解操作系统的基本概念和原理2. 学习操作系统的实际应用和调试技术3. 掌握操作系统的基本功能和操作方法三、实验环境搭建1. 硬件环境:Intel处理器的PC机2. 软件环境:Linux操作系统、GNU编译器、调试器等四、实验过程1. 熟悉操作系统的基本原理和功能通过阅读相关的教材和资料,对操作系统的基本概念和原理进行了解和学习,包括进程管理、内存管理、文件系统等内容。
2. 搭建实验环境在实验室环境中搭建了Linux操作系统的实验环境,安装了必要的软件和工具,准备好进行实际操作。
3. 编写和调试实验代码编写了一些简单的操作系统代码,进行了编译和调试,通过调试器对代码进行了逐步调试,查看代码执行过程和结果,加深了对操作系统的理解。
4. 实际操作和测试运行编写的操作系统代码,测试各个功能的正常性,包括进程的创建和调度、内存的分配和释放、文件的读写等操作,对实验结果进行了记录和分析。
五、实验结果1. 成功搭建了实验环境,完成了对操作系统的编写和调试2. 实现了基本的操作系统功能,操作系统能够进行进程管理、内存管理和文件系统的操作3. 通过实际操作,加深了对操作系统的理解和掌握六、实践反思1. 实践中遇到了一些问题,如代码的调试和错误处理等,通过查阅资料和请教老师解决了这些问题,提高了解决问题和自学能力2. 实践让我更加深入地了解了操作系统的运行原理和机制,对操作系统的重要性和应用价值有了更清晰的认识3. 实践的过程中锻炼了动手能力和团队合作意识,对操作系统的实际应用能力有了更强的提升七、总结通过本次操作系统实践,我对操作系统的理论知识和实际应用有了更深入的了解和掌握,对操作系统的重要性和功能有了更清晰的认识。
操作系统-ucore-lab3操作系统实验报告题⽬:虚拟内存管理⽬录⼀、内容 (2)⼆、⽬的 (3)三、实验流程 (3)四、实验环境与结果分析 (3)五、实验体会和思考题 (10)⼀、内容本次实验是在实验⼆的基础上,借助于页表机制和实验⼀中涉及的中断异常处理机制,完成Page Fault异常处理和FIFO页替换算法的实现,结合磁盘提供的缓存空间,从⽽能够⽀持虚存管理,提供⼀个⽐实际物理内存空间“更⼤”的虚拟内存空间给系统使⽤。
这个实验与实际操作系统中的实现⽐较起来要简单,不过需要了解实验⼀和实验⼆的具体实现。
实际操作系统系统中的虚拟内存管理设计与实现是相当复杂的,涉及到与进程管理系统、⽂件系统等的交叉访问。
如果⼤家有余⼒,可以尝试完成扩展练习,实现extended clock页替换算法。
练习1:给未被映射的地址映射上物理页(需要编程)完成do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页。
设置访问权限的时候需要参考页⾯所在VMA的权限,同时需要注意映射物理页时需要操作内存控制结构所指定的页表,⽽不是内核的页表。
注意:在LAB2EXERCISE1处填写代码。
执⾏make qemu后,如果通过check_pgfault函数的测试后,会有“check_pgfault() succeeded!”的输出,表⽰练习1基本正确。
请在实验报告中简要说明你的设计实现过程。
请回答如下问题:请描述页⽬录项(Pag Director Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在⽤处。
如果ucore的缺页服务例程在执⾏过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?练习2:补充完成基于FIFO的页⾯替换算法(需要编程)完成vmm.c中的do_pgfault函数,并且在实现FIFO算法的swap_fifo.c中完成map_swappable和swap_out_vistim函数。
操作系统实践报告操作系统实践报告⒈引言本报告旨在详细介绍操作系统实践的过程、方法及结果。
操作系统是计算机科学中的重要领域,它扮演着管理计算机系统资源和提供用户接口的关键角色。
通过实践操作系统的设计与实现,我们可以深入理解其原理和功能,并掌握操作系统的开发技术。
⒉背景知识在开始操作系统实践之前,我们需要掌握一些背景知识,包括计算机体系结构、计算机网络、编程语言和数据结构等。
了解这些知识可以帮助我们更好地理解操作系统的工作原理,并优化设计与实现过程。
⒊实践目标本次操作系统实践的目标是设计和实现一个简单的操作系统原型。
我们将重点关注以下方面:⑴进程管理:包括进程创建、调度和终止等功能。
⑵内存管理:实现内存分配和回收机制,保证系统的稳定性和效率。
⑶文件管理:设计文件系统,实现文件的创建、读写和删除等操作。
⑷用户接口:提供方便易用的用户界面,使用户能够方便地操作系统。
⒋实践步骤本次实践可以划分为以下几个步骤:⑴确定系统需求:明确操作系统的功能和性能要求,为后续设计与实现提供指导。
⑵设计系统架构:根据需求分析,设计操作系统的组成部分和各个模块之间的交互关系。
⑶实现系统核心功能:依据系统架构,逐步实现进程管理、内存管理、文件管理等核心功能。
⑷测试和调试:对系统进行全面测试和错误调试,确保系统的正确性和稳定性。
⑸优化性能和安全性:针对系统存在的性能和安全问题进行优化和改进,提升系统的整体质量。
⒌实践结果通过以上步骤的实践,我们最终得到了一个简单而高效的操作系统原型。
该操作系统具备良好的用户界面和稳定的性能,能够满足基本的计算和文件管理需求。
未来可以进一步扩展和优化该操作系统,使其适用于更复杂的应用场景。
⒍附件本文档涉及以下附件:- 操作系统实践代码- 操作系统实践测试数据- 操作系统实践报告附属资料⒎法律名词及注释本文档所涉及的法律名词及其注释如下:- 版权:指对作品拥有的独占权力,授予著作权人对作品的操纵、经济利益的追求和其他权利。
《操作系统》实验报告
实验序号:3 实验项目名称:作业调度的实现
return 0;
}
具体实现步骤:
1.将实验指导目录中linux下的os3中的src 放在桌面上。
2.打开终端1,输入以下指令:
【cd ./桌面/src】
【gcc job.c error.c –ojob】
【gcc enq.c error.c -oenq】
【gcc deq.c error.c -odeq】
【gcc stat.c error.c -ostat】
3.编写123.c和456.c两个死循环程序,编译运行无误,并改名生成程序P1,
P2。
4.执行./job &指令将p2添加到p1中。
5.打开终端2
输入【cd ./桌面/src】指令
执行【./stat】指令查看进程状态
反复调用【./stat】指令
6.交替执行指令【./enq】和【./deq】指令删除p1,p2并再次添加并调用【./stat】
指令查看进程变化。
7.实验完成后调用【kill】指令结束进程。
运行截图如下:。
操作系统实验报告心得体会范文大全(8篇)操作系统实验报告心得体会范文大全篇一:通过这一学期学习,才慢慢接触专业课。
刚开始觉得挺难得我都有点不想学这个专业了,慢慢的我觉得有趣多了。
虽然我学的不是很好,最起码我能给自己装系统了。
我给自己的电脑装过window7、xp系统。
从一开始连个cmos设置都不会进去,到现在能装各种机型的系统。
让我最高兴的事是我会建立网站了,以及能制作出复杂点的,漂亮的网页了。
从刚开始学装windowserver20xx时,我真的懵懵懂懂的,那开始是真的不想学这个专业了,那段时间还学java编程,我真的快崩溃了,后悔自己干嘛学这个专业,我根本就是没有天赋,感觉大学这四年完蛋了,大一大二还没有感觉,现在真实的感受到了,但后来发现,我是越来越感觉有兴趣了,只要肯付出课后肯钻研,就一定会有一点收获的。
通过这次网页课程设计激发学习兴趣,调动学习的自觉性,自己动脑、动手,动口,运用网络资源,结合教材及老师的指导,通过自身的实践,创作出积聚个人风格、个性的个人网页。
总体来说,整个学期的学习过程,我学会了很多知识,在此次网页设计中,我充分利用了这次设计的机会,全心全意投入到网页世界,去不断的学习,去不断的探索;同时去不断的充实,去不断的完善自我,在网络的天空下逐渐的美化自己的人生!做好页面,并不是一件容易的事,它包括个人主页的选题、内容采集整理、图片的处理、页面的排版设置、背景及其整套网页的色调等很多东西。
本次课程设计不是很好,页面过于简单,创新意识反面薄弱,这是我需要提高的地方。
需要学的地方还有很多,需要有耐心、坚持,不断的学习,综合运用多种知识,才能设计出好的web页面。
总体来说,通过这次的对网页和网站课程设计,有收获也有遗憾、不足的地方,但我想,我已经迈入了网页设计的大门,只要我再认真努力的去学习,去提高,凭借我对网页设计的热情和执着,我将来设计出的网页会更加专业,更完善。
操作系统实验报告心得体会范文大全篇二:转眼间,学习了一个学期的计算机操作系统课程即将结束。
操作系统实验报告——实验三:进程管理(一)实验内容:1.分别从至少三个虚拟终端登录,以树状形式列出你的系统中当前运行的所有进程及其PID。
找出你当前运行进程的所有祖先进程,并说明其各自的作用。
分析Linux系统中的进程的家族关系。
●实验室里:当前运行进程的所有祖先进程是init进程,init是Linux系统操作中不可缺少的程序之一,是内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。
所以,init始终是第一个进程(其进程编号始终为1)。
init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程,用pstree 命令就看到进程之间的关系了,所有进程都是由最开始的init创建的,父进程逐个创建子进程。
●个人电脑:所有进程的祖先进程为systemd,其是linux下的一种init软件。
Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。
Linux系统配置使用Systemd引导程序,取替了传统的SysV init,启动过程将交给systemd处理。
Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。
Systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进行交互。
Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。
处于不同控制组的进程之间可以通过内核来互相通信。
systemd处理开机启动进程的方式非常漂亮,和传统基于init的系统比起来优化了太多。
终端一:tty3///在实验室的电脑上操作终端二:tty5///在实验室的电脑上操作终端三:tty1///在实验室的电脑上操作实验室三个终端:tty3 tty5 tty1终端四:tty4///在个人电脑上操作终端五:tty3 ///在个人电脑上操作个人电脑两个终端:tty3 tty5 tty12.执行下列命令和操作:解释命令的作用:$sleep180 //执行挂起(睡眠)180秒^Z(ctrl+Z)//强制当前进程转为后台,使之挂起(暂停)$jobs //查看后台运行的程序及运行状态$sleep 240& //以后台方式启动挂起(睡眠)240秒$sleep 300& //以后台方式启动挂起(睡眠)300秒$sleep 330& //以后台方式启动挂起(睡眠)330秒$sleep 630& //以后台方式启动挂起(睡眠)630秒$jobs //查看后台运行的程序及运行状态$fg 4 //将第四个任务切换到前台^C(ctrl+C)//强制结束当前进程$bg 1 //将第一个任务切换到后台运行$kill 5 //结束后台任务5执行结果截图:3.利用/proc文件系统,选择一个进程,如-bash,列出并解释/proc/$PID/cmdline, /proc/$PID/stat, /proc/$PID/status文件的内容。
操作系统实践报告在当今数字化的时代,操作系统作为计算机系统的核心组成部分,对计算机的性能和用户体验起着至关重要的作用。
为了更深入地理解操作系统的工作原理和功能,我进行了一系列的实践操作,并在此向大家分享我的实践成果和心得体会。
首先,让我们来了解一下操作系统的基本概念。
操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。
它负责合理地分配资源,为用户提供一个方便、高效、稳定的工作环境。
常见的操作系统有 Windows、Linux、Mac OS 等。
在实践过程中,我选择了 Windows 操作系统作为主要的研究对象。
通过对其系统设置、文件管理、进程管理等方面的操作,我对操作系统的功能有了更直观的认识。
在系统设置方面,我深入研究了控制面板中的各项功能。
例如,通过调整显示设置,我可以改变屏幕分辨率、刷新率和色彩模式,以适应不同的工作需求和视觉体验。
在电源选项中,我可以设置计算机的休眠时间、待机时间和电源计划,从而达到节能和延长电池寿命的目的。
此外,还可以对声音、网络、用户账户等进行个性化的设置,以满足个人的使用习惯。
文件管理是操作系统的重要功能之一。
在 Windows 中,资源管理器为我们提供了方便的文件操作工具。
我学会了如何创建、复制、移动、删除文件和文件夹,以及如何对文件进行重命名和属性设置。
同时,还掌握了搜索文件的技巧,能够快速找到所需的文件。
另外,了解了文件的扩展名及其含义,有助于我们正确地识别和处理不同类型的文件。
进程管理是操作系统确保系统稳定运行的关键环节。
通过任务管理器,我可以查看当前正在运行的进程和程序,了解它们所占用的CPU、内存等系统资源。
在遇到某些程序无响应或占用资源过多的情况时,可以通过任务管理器强制结束进程,以恢复系统的正常运行。
此外,还可以设置进程的优先级,让系统更合理地分配资源。
除了 Windows 操作系统,我也对 Linux 操作系统进行了一定的探索。
操作系统安全实验3一、实验目的1、了解Windows操作系统的安全性2、熟悉Windows操作系统的安全设置3、熟悉MBSA的使用二、实验要求1、根据实验中的安全设置要求,详细观察并记录设置前后系统的变化,给出分析报告。
2、采用MBSA测试系统的安全性,并分析原因。
3、比较Windows系统的安全设置和Linux系统安全设置的异同。
三、实验内容1、配置本地安全设置,完成以下内容:(1)账户策略:包括密码策略(最小密码长度、密码最长存留期、密码最短存留期、强制密码历史等)和账户锁定策略(锁定阈值、锁定时间、锁定计数等)(2)账户和口令的安全设置:检查和删除不必要的账户(User用户、Duplicate User用户、测试用户、共享用户等)、禁用guest账户、禁止枚举帐号、创建两个管理员帐号、创建陷阱用户(用户名为Administrator、权限设置为最低)、不让系统显示上次登录的用户名。
(3)设置审核策略:审核策略更改、审核账户登录事件、审核账户管理、审核登录事件、审核特权使用等(4)设置IP安全策略(5)其他设置:公钥策略、软件限制策略等2、Windows系统注册表的配置(1)找到用户安全设置的键值、SAM设置的键值(2)修改注册表:禁止建立空连接、禁止管理共享、关闭139端口、防范SYN攻击、减少syn-ack包的响应时间、预防DoS攻击、防止ICMP重定向报文攻击、不支持IGMP协议、禁止死网关监控技术、修改MAC地址等操作。
建立空连接:“Local_Machine\System\CurrentControlSet\Control\ LSA-RestrictAnonymous”的值改成“1”即可。
禁止管理共享:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters项对于服务器,添加键值“AutoShareServer”,类型为“REG_DWORD”,值为“0”。
第1篇一、摘要本报告针对操作系统课程实践考核进行总结,通过实践操作,加深了对操作系统基本原理和实际应用的理解。
报告从实验目的、实验内容、实验步骤、实验结果与分析、实验总结等方面进行阐述,旨在提高自身对操作系统知识的掌握程度。
二、实验目的1. 熟悉操作系统的基本原理和功能;2. 掌握操作系统的常用命令和操作方法;3. 培养动手实践能力,提高问题解决能力;4. 深入理解操作系统在实际应用中的重要性。
三、实验内容1. 操作系统概述2. 文件系统操作3. 进程管理4. 内存管理5. 设备管理6. 网络管理四、实验步骤1. 操作系统概述(1)了解操作系统的定义、分类、功能和特点;(2)熟悉常见操作系统(如Windows、Linux、MacOS)的基本操作。
2. 文件系统操作(1)学习文件系统的基本概念和结构;(2)掌握文件系统的常用命令,如创建、删除、复制、移动、重命名等;(3)学习文件权限管理。
3. 进程管理(1)了解进程的基本概念和特点;(2)掌握进程的创建、调度、同步、通信等操作;(3)学习进程优先级管理。
4. 内存管理(1)了解内存的基本概念和结构;(2)掌握内存分配、回收、交换等操作;(3)学习内存保护机制。
5. 设备管理(1)了解设备的基本概念和分类;(2)掌握设备驱动程序、中断处理等操作;(3)学习设备分配与回收。
6. 网络管理(1)了解网络的基本概念和结构;(2)掌握网络配置、通信、安全等操作;(3)学习网络故障排除。
五、实验结果与分析1. 操作系统概述实验结果:成功运行Windows、Linux、MacOS操作系统,熟悉了基本操作。
2. 文件系统操作实验结果:熟练掌握了文件系统的基本操作,如创建、删除、复制、移动、重命名等。
3. 进程管理实验结果:成功创建、调度、同步、通信进程,掌握了进程优先级管理。
4. 内存管理实验结果:掌握了内存分配、回收、交换等操作,熟悉了内存保护机制。
5. 设备管理实验结果:熟悉了设备驱动程序、中断处理等操作,学会了设备分配与回收。
《操作系统安全》课程实验报告实验题目:隐蔽通道实验三姓名:学号:日期:2016/4/25原创声明本人郑重声明:所呈交的实验报告,是本人根据实验指导材料的要求,独立进行实验所取得的成果。
本文不含任何其他人的实验成果。
如果存在抄袭他人成果之情形,一切后果由本人承担。
一、实验目的1、熟悉隐蔽通道原理;2、熟悉隐蔽通道的实现。
二、实验内容信道名称:消息队列信道信道类型:持久变量型中介变量:msg_ids存在条件:系统中的各个进程共享同一个消息队列列表,并且这个队列大小是有限制的。
创建一个消息队列时,系统将消耗消息队列列表的一项。
如果该表被耗尽,则创建操作就不能成功。
发送方动作:发送方读取机密文件,然后,根据该文件内容的当前字节的ASIIC码决定创建的消息队列数目,待接收方读取该信息后,删除这些消息队列。
接受方动作:创建消息队列,得到消息队列空槽数目,可以知道其它进程创建的消息队列数目。
解释所得到的信息。
噪音情况:高噪音。
系统中存在的任何其它进程都可能创建消息队列,从而导致接收方错误解释所得到的信息。
如果再安排在其它用户不工作的时刻(比如午夜12点)传递信息,就可能获得较大带宽。
带宽估计:最大可以达到30比特/秒。
处理措施:采用加入Idle进程,该进程随机创建消息队列。
或者采用审计法。
三、实验过程、结果实验步骤:采用sleep(秒)/usleep(微秒)制造同步。
当一个进程sleep时,就将cpu的控制权交给其他进程,直到sleep时间已到,重新获得cpu的控制权。
分析:这种同步技术容易实现,适于演示。
但是由于进程发送不同字符所用时间不同,而sleep时间一旦指定就是固定的,不能在程序运行期间更改,因此这种同步必然造成时间浪费。
实验结果:1.权限不够2.设置消息队列最大个数3.测试ipcs –q指令4.发送过程5.成功传输消息程序代码:发送方代码:四、实验总结花了加起来7、8个小时做隐蔽通道的实验,中间失败过10多次,做出来的一瞬间心情特别好。
操作系统实验报告操作系统是计算机科学中十分重要的一门课程,本次实验是关于操作系统的,通过实验,我们可以更深入地了解操作系统的相关知识和操作。
本篇文章将着重介绍本次操作系统实验的内容和实验过程中的收获。
一、实验内容本次实验内容主要涉及操作系统的进程、线程和进程同步三部分。
具体内容包括: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()函数释放进程或线程。
为了更好地理解信号量的工作原理,我们将代码分为生产者和消费者两部分,其中生产者用于向缓冲区添加数据,消费者则用于删除数据。
在这个过程中,我们需要使用信号量控制生产者和消费者的数量,避免出现生产过多或消费过多的情况。