操作系统实验报告1

合集下载

操作系统实验实验报告

操作系统实验实验报告

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

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

二、实验环境本次实验使用的操作系统为 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 等进行文件的创建、读取和写入操作。

操作系统安全实验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、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。

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

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

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

操作系统教程实验指导书实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。

(2)掌握WINDOWS API的使用方法。

(3)编写测试程序,理解用户态运行和核心态运行。

2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。

步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。

创建一个新的控制台应用程序工程。

步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。

步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。

编译成可执行文件。

步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。

步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。

步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。

操作系统实验报告

操作系统实验报告

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

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

Windows操作系统实验一实验报告

Windows操作系统实验一实验报告

Windows操作系统C/C++ 程序实验
姓名:___庞一鹤_______________
学号:___1131000180____________
班级:___信工七班________________
院系:____信息工程_______________ ______2015___年___10__月__12___日
实验一Windows 2000/xp进程观测
一、背景知识
二、实验目的
通过对Windows 2000/xp编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000/xp的结构。

三、实验内容与步骤
1、C:\> CL Hello.cpp
来创建可执行的Hello.EXE。

操作能否正常进行?如果不行,则可能的原因是什么?
操作正常运行
步骤4:运行Hello.EXE程序,产生用户键入的一行文字。

运行结果(如果运行不成功,则可能的原因是什么?) :
也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?
可以,但文件保存的时候要以后缀“.cpp”命名。

C:\> CL 1-2.cpp
运行结果(试将其中的信息与清单1-1程序的运行结果进行比较) :
比较:1-2程序创建了一个图形用户化界面来显示输出内容。

2、C:\> CL 1-3.cpp
运行结果:
在“命令提示符”窗口运行CL.EXE,产生1-4.EXE文件:C:\> CL 1-4.cpp
运行结果:。

系统业务操作实验报告(3篇)

系统业务操作实验报告(3篇)

第1篇一、实验目的1. 熟悉系统业务操作流程;2. 掌握系统业务操作的基本方法;3. 提高实际操作能力,为今后的工作打下基础。

二、实验环境1. 操作系统:Windows 102. 浏览器:Chrome3. 实验系统:XX企业资源计划系统(ERP)三、实验内容1. 系统登录与退出2. 基础信息管理3. 财务管理4. 供应链管理5. 人力资源管理6. 实验总结与反思四、实验步骤1. 系统登录与退出(1)打开浏览器,输入实验系统网址,进入登录页面。

(2)输入用户名、密码,点击“登录”按钮。

(3)登录成功后,系统进入主界面。

(4)点击右上角“退出”按钮,退出系统。

2. 基础信息管理(1)点击主界面左侧菜单中的“基础信息管理”模块。

(2)查看基础信息列表,包括部门、岗位、人员等信息。

(3)新增部门信息:点击“新增”按钮,填写部门名称、负责人等基本信息,保存。

(4)修改部门信息:选中要修改的部门,点击“修改”按钮,修改相关信息,保存。

(5)删除部门信息:选中要删除的部门,点击“删除”按钮,确认删除。

3. 财务管理(1)点击主界面左侧菜单中的“财务管理”模块。

(2)查看财务报表,包括资产负债表、利润表、现金流量表等。

(3)新增报销单:点击“新增”按钮,填写报销单信息,提交审批。

(4)查看报销单:查看已提交的报销单,包括报销金额、报销日期、审批状态等信息。

(5)审批报销单:对报销单进行审批,同意或拒绝报销。

4. 供应链管理(1)点击主界面左侧菜单中的“供应链管理”模块。

(2)查看采购订单列表,包括采购订单号、供应商、采购金额等信息。

(3)新增采购订单:点击“新增”按钮,填写采购订单信息,提交审批。

(4)查看采购订单:查看已提交的采购订单,包括采购订单号、供应商、采购金额等信息。

(5)审批采购订单:对采购订单进行审批,同意或拒绝采购。

5. 人力资源管理(1)点击主界面左侧菜单中的“人力资源管理”模块。

(2)查看员工信息列表,包括姓名、部门、岗位、入职日期等信息。

厦门理工学院操作系统实验1

厦门理工学院操作系统实验1

厦门理⼯学院操作系统实验1
《操作系统》实验报告
实验序号:1 实验项⽬名称:Linux操作系统及开发环境搭建
四、实验结果与数据处理
1.搭建虚拟机VMware Workstation下的Ubuntu操作系统环境(1)实验结果:图1:⽤户登录界⾯
图2:Ubuntu系统桌⾯
根据群⽂件中的Ubuntu安装与配置,我成功地在虚拟机VMware Workstation下搭建了Ubuntu操作系统环境,并注册了⾃⼰的⽤户账号,进⼊了Ubuntu桌⾯,并且可以正常进⾏操作。

2.搭建Ubuntu操作系统下的C语⾔编程环境,并⽤C语⾔实现N!程序,编译好并运⾏,采⽤函数调⽤的形式,模块化编程思想:
(1)实验结果:
图3:N!程序代码
图4:在终端运⾏程序
图5:打印学号姓名程序代码
图6:在终端运⾏相应程序。

哈工大《操作系统》实验1

哈工大《操作系统》实验1

(5)重新编写一个setup.s,然后将其中的显示的信息改为:“Now we are in SETUP”。

再次编译,重新用make命令生成BootImage,结合提示信息和makefile文修改build.c,具体将setup.s改动如下:mov cx,#27mov bx,#0x0007 ! page 0, attribute 7 (normal)mov bp,#msg1mov ax,#0x1301 ! write string, move cursorint 0x10dieLoop:j dieLoopmsg1:.byte 13,10,13,10.ascii "Now we are in SETUP".byte 13,10,13,10将build.c改动如下:if(strcmp("none",argv[3]) == 0)//添加判断return 0;if ((id=open(argv[3],O_RDONLY,0))<0)die("Unable to open 'system'");// if (read(id,buf,GCC_HEADER) != GCC_HEADER)// die("Unable to read header of 'system'");// if (((long *) buf)[5] != 0)// die("Non-GCC header of 'system'");for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c )if (write(1,buf,c)!=c)die("Write call failed");close(id);fprintf(stderr,"System is %d bytes.\n",i);if (i > SYS_SIZE*16)die("System is too big");return(0);(6)验证:用make是否能成功生成BootImage,运行run命令验证运行结果。

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

操作系统
实验报告
班号:1303107 学号:1130310726 姓名:蔡鹏
1.请简述head.s 的工作原理。

head.s实在32位保护模式下运行的。

我认为这段程序主要包括两个部分:1.初始化设置。

2.任务执行与切换。

初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3.
设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行
任务切换和执行包括了:1.任务0和任务1 ,
2.时钟中断,
3.系统中断
两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。

因此在线性地址空间中这个‚内核‛的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。

为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。

PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。

任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。

在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。

对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。

因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。

若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。

因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。

当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。

4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段
的起始与终止的内存地址。

5.简述Head.s 57~62行在做什么?简述iret执行后,pc如何找到下
一条指令?并记录iret执行前后,栈是如何变化的。

代码作用:
是在初始堆栈中人工设置返回环境。

57:把任务0当前局部空间数据段(堆栈段)选择符入栈
58:把堆栈指针入栈(也可以把ESP入栈)
59:把标志寄存器入栈
60:把当前局部空间代码段选择符入栈
61:把代码指针入栈
62:执行中断返回指令,从而切换到特权级3的任务0中执行
如何找到下一条指令:
执行iret之后,将推入堆栈的段地址和偏移地址弹出,使程序返回到原来发生中断的地方。

其作用是从中断中恢复中断前的状态,具体作用有如下三点:
1.恢复IP:(IP)←((SP)+1:(SP)),(SP)←(SP)+2
2.恢复CS:(CS)←((SP)+1:(SP)),(SP)←(SP)+2
3.恢复中断前的PSW(program status word),即恢复中断前的标志寄存器的状态。

(FR)←((SP)+1:(SP)),(SP)←(SP)+2
4.恢复ESP(返回权限发生变化)
5.恢复SS(返回权限发生变化)
PC根据弹出的cs查找其ldt表形成段基地址0x0000,然后再加上偏移地址eip得到下一条指令的地址0x10e0。

栈的变化:
其中,iret指令执行前后栈的内容如下:
执行前:
栈中的内容就是上面57-62行指令压入的内容。

栈指针esp=0x0bc4
具体截图如下:
执行后:
将上述内容全部弹出,使程序返回到原来发生中断的地方。

栈指针esp=0x0bd8
具体截图如下:
6.当任务进行系统调用时,即int 0x80时,记录栈的变化情况。

当执
行完system_interrupt函数,执行153行iret时,记录栈的变化情况。

此外,当进入和退出system_interrupt时,都发生了模式切换,请总结模式切换时,特权级是如何改变的?栈切换吗?如何进行切换的?
执行系统调用int 0x80前,栈为task0或者task1的用户栈,栈的内容:
具体截图如下:
执行系统调用int 0x80后,堆栈变为此任务的系统栈,而在这系统栈中自动压入了发生中断之前的ss、栈指针、标志寄存器、cs和下一条指令的eip。

栈的
内容如下:
当执行完system_interrupt函数,执行153行iret前,栈为任务0的系统栈:esp=0x0e4c,栈的内容是:
执行153行iret后,系统栈弹出下一条指令的地址以及各寄存器的值,弹完后系统栈为空。

栈变化为任务1的用户栈:esp=0x0bd8。

栈的内容是:
具体截图如下:
当进入和退出system_interrupt时,都发生了模式切换。

进入系统中断时,硬件将各寄存器的值压入系统栈后,查找其中断向量表后,根据描述符的格式,cs值变为0x08,此时,cs标志着由用户模式切换至内核模式,特权级也由3变为0,栈也切换至系统栈。

退出系统中断时,由于处于特权级0的代码不能直接把控制权转移到特权级3的代码中执行,但中断返回操作iret是可以的,可利用中断返回指令IRET来启动第一个任务。

具体实现方法是在初始堆栈init_stack中人工设置一个返回环境。

例,把任务0的TSS段选择符加载到任务寄存器LTR中、LDT段选择符加载到LDTR中以后,把任务0的用户栈指针(0x17: init_stack)和代码指针(0x0f: task0)以及标志寄存器值压入栈中,然后执行中断返回指令IRET。

该指令会弹出堆栈上的的堆栈指针作为任务0用户指针,恢复假设的任务0的标志寄存器内容,并且弹出栈中代码指针放入CS: EIP寄存器中,从而开始执行任务0的代码,完成了从特权级0到特权级3代码的控制转移,模式由内核模式转换为用户模式。

7.当时钟中断发生,进入到timer_interrupt程序,请详细记录从任务
0切换到任务1,以及又过了10ms,从任务1切换回到任务0,整个流程是怎样的?TSS是如何变化的?各个寄存器的值是如何变化的?请详细总结任务切换的过程。

从任务0切换到任务1:
1、硬件将任务0的各寄存器的值和状态保存到tss0中。

2、通过$TSS1_SEL选择符查找gdt的tss1和ldt1得到任务1的各寄
存器的值和任务1的局部代码段指针等,加载到对应各寄存器中,
3、然后跳转到任务1中。

此时,tss0中为任务0在跳转前的对应各寄
存器的值
跳转前的tss0:tss0的基地址位0xbf8
切换后,数据或指针加载到对应各寄存器后的tss0:
切换后各寄存器的值是tss1中对应的各寄存器的值:
tss1:基地址为0x0e78
各寄存器的值也是对应tss1中的值。

当过10ms后,从任务1切换到任务0:执行跳转指令时,
1、硬件将任务1的各寄存器的值和状态保存到tss1中。

2、通过$TSS0_SEL选择符查找gdt的tss0和ldt0,
3、将tss0对应值加载到寄存器中,其中eip的值是前面跳转到任务0时下一条指令的地址,即jmp 2f,栈切换为任务1的系统栈,
4、正常执行。

tss1中变为跳转前任务1的对应各寄存器的值。

任务1切换到任务0之前的tss1上图已给出,
切换之后的tss1:
各寄存器的值:(由任务0跳转到任务1后):
各寄存器的值:(由任务1跳转到任务0后):
请修改模板的文件名,并在第一页上填写你的个人信息,然后回答第二页上的5个问题,每个问题的回答都要新起一页,标清序号。

相关文档
最新文档