操作系统实验报告
- 格式:docx
- 大小:22.43 KB
- 文档页数:18
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 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实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。
二、实验环境本次实验使用的操作系统为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() 方法。
其中有四个由实际的低级入口点传递来的参数。
《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
操作系统进程控制实验报告一、实验目的操作系统进程控制是操作系统中的重要概念和核心功能之一。
本次实验的目的在于深入理解操作系统中进程的概念、状态及其转换,掌握进程创建、终止、阻塞和唤醒等操作的实现原理和方法,通过实际编程和调试,观察进程的行为和特性,从而提高对操作系统原理的理解和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验原理(一)进程的概念进程是操作系统中进行资源分配和调度的基本单位,它包含了程序代码、数据、堆栈等资源。
进程具有独立性、动态性和并发性等特点。
(二)进程的状态进程的状态通常包括就绪态、运行态和阻塞态。
就绪态表示进程已具备运行条件,等待被调度;运行态表示进程正在 CPU 上执行;阻塞态表示进程因等待某个事件而暂停执行。
(三)进程控制的基本操作1、进程创建:通过系统调用创建新的进程,为其分配资源并初始化。
2、进程终止:当进程完成任务或出现异常时,结束其执行并回收资源。
3、进程阻塞:进程在等待某个事件时,主动进入阻塞态。
4、进程唤醒:当等待的事件发生时,将阻塞的进程唤醒,使其进入就绪态。
四、实验内容与步骤(一)进程创建1、编写 C++程序,使用系统提供的函数创建新的进程。
2、在新进程中执行特定的任务,例如打印输出信息。
```cppinclude <windowsh>include <iostream>int main(){STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));sicb = sizeof(si);ZeroMemory(&pi, sizeof(pi));//创建新进程if (!CreateProcess(NULL, //应用程序名称"C:\\Path\\To\\Your\\ChildProcessexe",//命令行参数NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)){std::cerr <<"CreateProcess failed Error code: "<<GetLastError()<< std::endl;return 1;}//等待子进程结束WaitForSingleObject(pihProcess, INFINITE);//关闭进程和线程句柄CloseHandle(pihProcess);CloseHandle(pihThread);return 0;}```(二)进程终止1、在创建的进程中设置条件,当满足条件时主动终止进程。
《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(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. 掌握操作系统安装的基本方法。
2. 熟悉操作系统安装过程中的注意事项。
3. 提高动手操作能力,为以后使用操作系统打下基础。
二、实验环境1. 硬件环境:- CPU:Intel Core i5- 内存:8GB- 硬盘:500GB- 显卡:NVIDIA GeForce GTX 1050- 主板:华硕PRIME H310M-E2. 软件环境:- 操作系统:Windows 10- 安装工具:Windows 10安装镜像三、实验步骤1. 准备安装镜像- 将Windows 10安装镜像烧录到U盘或光盘上。
2. 设置BIOS启动顺序- 进入主板BIOS设置界面,将U盘或光盘设置为第一启动设备。
3. 启动计算机- 重启计算机,从U盘或光盘启动。
4. 开始安装操作系统- 进入Windows 10安装界面,点击“现在安装”按钮。
5. 选择安装类型- 选择“自定义:仅安装Windows(高级)”选项。
6. 选择安装磁盘- 在“驱动器选项”下,选择要安装Windows的磁盘分区,点击“新建”按钮创建新的分区,然后将所有磁盘空间分配给新分区。
7. 格式化磁盘- 在弹出的窗口中,选择“将磁盘格式化为NTFS文件系统”,点击“下一步”按钮。
8. 安装操作系统- 等待操作系统安装完成,期间会自动重启计算机。
9. 设置账户信息- 在安装完成后,根据提示设置用户名、密码等信息。
10. 安装驱动程序- 根据需要安装显卡、网卡等驱动程序。
11. 安装常用软件- 安装Office、QQ、浏览器等常用软件。
四、实验结果与分析1. 实验结果- 成功安装Windows 10操作系统,并完成了基本配置。
2. 实验分析- 本次实验中,按照步骤顺利完成操作系统安装,但在安装过程中遇到了以下问题:(1)在设置BIOS启动顺序时,需要根据主板型号进行设置,否则无法从U 盘或光盘启动。
(2)在格式化磁盘时,需要注意选择合适的文件系统,以免影响系统性能。
第1篇一、实验目的1. 了解办公系统应用的基本功能与操作。
2. 熟练掌握办公系统软件的使用方法,提高工作效率。
3. 通过实验,培养学生动手实践能力,为今后工作奠定基础。
二、实验环境1. 操作系统:Windows 102. 办公系统软件:Microsoft Office 20163. 实验设备:个人电脑三、实验内容1. Word文档编辑2. Excel表格制作3. PowerPoint演示文稿制作4. Outlook邮件管理四、实验步骤及结果1. Word文档编辑(1)步骤:打开Word软件,创建一个新的文档,输入文字内容,进行格式设置,如字体、字号、段落等。
(2)结果:成功创建一个包含文字、图片、表格的Word文档。
2. Excel表格制作(1)步骤:打开Excel软件,创建一个新的工作簿,输入数据,设置单元格格式,如数字、日期、文本等,制作图表。
(2)结果:成功创建一个包含数据、图表的Excel表格。
3. PowerPoint演示文稿制作(1)步骤:打开PowerPoint软件,创建一个新的演示文稿,添加幻灯片,输入文字内容,设置动画、切换效果,插入图片、表格等。
(2)结果:成功制作一个包含文字、图片、动画的PowerPoint演示文稿。
4. Outlook邮件管理(1)步骤:打开Outlook软件,创建一个新的邮件,填写收件人、主题、正文,发送邮件。
(2)结果:成功发送一封邮件。
五、实验总结通过本次实验,我掌握了以下内容:1. Word、Excel、PowerPoint、Outlook等办公系统软件的基本操作。
2. 学会了如何利用这些软件提高工作效率。
3. 培养了动手实践能力,为今后工作奠定了基础。
在实验过程中,我发现以下几点:1. 在使用Word、Excel、PowerPoint等软件时,要熟悉各个功能键,提高操作效率。
2. 在制作表格、图表、演示文稿时,要注重数据的准确性和美观性。
3. 在使用Outlook进行邮件管理时,要注意邮件的格式和发送时间。
操作系统原理实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理和控制计算机的硬件和软件资源,为用户和应用程序提供一个方便、高效、稳定的运行环境。
本次实验的目的在于通过实际操作和观察,深入理解操作系统的核心原理和关键机制,包括进程管理、内存管理、文件系统管理、设备管理等方面,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C++。
三、实验内容及步骤(一)进程管理实验1、进程创建与终止编写程序,使用系统调用创建一个新的进程,并在新进程中执行特定的任务,如打印一段文本。
观察新进程的创建过程和资源分配情况。
编写程序,实现父进程等待子进程终止,并获取子进程的退出状态。
2、进程调度编写程序,模拟多个进程的并发执行,设置不同的优先级和时间片。
观察进程的调度顺序和执行时间,分析调度算法的效果。
(二)内存管理实验1、内存分配与释放编写程序,使用动态内存分配函数(如 malloc、new 等)申请一定大小的内存空间,并进行读写操作。
观察内存的分配和释放过程,检查是否存在内存泄漏。
2、内存分页与分段了解操作系统的内存分页和分段机制。
编写程序,模拟内存分页和分段的过程,展示地址转换和页面置换算法的效果。
(三)文件系统管理实验1、文件创建与读写编写程序,创建一个新文件,并向文件中写入一定的数据。
读取文件中的数据,并进行验证。
2、文件目录操作编写程序,实现对文件目录的创建、删除、遍历等操作。
观察文件目录的结构和变化。
(四)设备管理实验1、设备驱动程序了解设备驱动程序的基本概念和工作原理。
编写一个简单的设备驱动程序,实现对特定设备的控制和数据传输。
2、设备中断处理模拟设备中断的产生和处理过程。
编写中断处理程序,处理设备中断事件。
四、实验结果与分析(一)进程管理实验结果与分析1、进程创建与终止成功创建了新进程,并在新进程中打印出指定的文本。
课程设计(综合实验)报告( 2014-- 2015年度第一学期)名称:操作系统综合实验题目: OS lab 综合实验院系:计算机系班级:计科1202学号:学生姓名:指导教师:赵文清王新颖设计周数:第八、九周成绩:日期:2014 年 10月29日实验3 进程的创建一、实验目的练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。
调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。
二、实验内容1 准备实验2 练习使用控制台命令创建EOS应用程序的进程3 练习通过编程的方式让应用程序创建另一个应用程序的进程4 调试CreateProcess函数5 调试PsCreateProcess函数6 练习通过编程的方式创建应用程序的多个进程三、问题答案及参考代码1. 在源代码文件提供的源代码基础上进行修改,要求使用同时创建10个进程。
提示:可以使用PROCESS_INFORMATION类型定义一个有10个元素的数组,每一个元素对应一个进程。
使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。
STARTUPINFO StartupInfo;PROCESS_INFORMATION ProcInfo[10];ULONG ulExitCode;INT nResult=0;。
int i,j;.\n\n");= GetStdHandle(STD_INPUT_HANDLE);= GetStdHandle(STD_OUTPUT_HANDLE);= GetStdHandle(STD_ERROR_HANDLE);for(i =0; i < 10; i++)if(CreateProcess("A:\\",NULL,0,&StartupInfo,&ProcInfo[i ]));else {for(j = 0; j < i; j++){WaitForSingleObject(ProcInfo[j].ProcessHandle,INFINITE);GetExitCodeProcess(ProcInfo[j].ProcessHandle, &ulExitCode); printf("\nThe process %d exit with %d.\n",j,ulExitCode);CloseHandle(ProcInfo[j].ProcessHandle);CloseHandle(ProcInfo[j].ThreadHandle); }printf("CreateProcess Failed,Error code:0x%X.\n", GetLastError());nResult = 1;return nResult; }for(i=0;i<10;i++){WaitForSingleObject(ProcInfo[i].ProcessHandle, INFINITE);GetExitCodeProcess(ProcInfo[i].ProcessHandle, &ulExitCode); }for(i=0i<10;i++){printf("\nThe process %d exit with %d.\n",i,ulExitCode);CloseHandle(ProcInfo[i].ProcessHandle);CloseHandle(ProcInfo[i].ThreadHandle); }return nResult;}3. 在PsCreateProcess函数中调用了PspCreateProcessEnvironment 函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,学习这些函数的主要功能。
能够交换这些函数被调用的顺序吗思考其中的原因。
PspCreateProcessEnvironment 的主要功能是创建进程控制块,并且为进程创建了地址空间和分配了句柄表。
PspLoadProcessImage 是将进程的可执行映像加载到了进程的地址空间中。
PspCreateThread 创建了进程的主线程。
这三个函数被调用的顺序是不能够改变的。
就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间,这样才能够确定可执行映像可以被加载到内存的什么位置。
在创建主线程之前必须已经加载了可执行映像,这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。
因此不能交换他们的顺序。
实验4 线程的状态和转换一、实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。
通过为线程增加挂起状态,加深对线程状态的理解。
二、实验内容1 准备实验2 调试线程状态的转换过程(阻塞—就绪、运行—就绪、就绪—运行、运行—阻塞)3 为线程增加挂起状态三、问题答案及参考代码PsResumThread(IN HANDLE hThread){STATUS Status;BOOL IntState;PTHREAD Thread;Status=ObRefObjectByHandle(hThread,PspThreadType,(PVOID*)&Thread);if (EOS_SUCCESS(Status)){IntState = KeEnableInterrupts(FALSE);if (Zero == Thread->State) {ListRemoveEntry(&Thread->StateListEntry);PspReadyThread(Thread);PspThreadSchedule();Status = STATUS_SUCCESS;}else{Status = STATUS_NOT_SUPPORTED; } KeEnableInterrupts(IntState);考一下,在本实验中,当loop线程处于运行状态时,EOS中还有哪些线程,它们分别处于什么状态。
可以使用控制台命令pt查看线程的状态。
2.当loop线程在控制台1中执行,并且在控制台2中执行suspend 命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态答:当在控制台2 中执行suspend命令时,实质上是优先级为24的控制台2线程抢占了处理器,也就是控制台2线程处于运行状态,所以此时loop线程处于就绪状态了。
4. 总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文(将线程控制块中的上下文恢复到处理器中,或者将处理器的状态复制到线程控制块的上下文中),哪些不需要使用,并说明原因。
答:一个进程在运行过程中或执行系统调用,或产生了一个中断事件,处理器都进行一次模式切换,操作系统接收控制权,有关系统例程完成必须的操作后,或恢复被中断进程或切换到新进程。
当系统调度新进程占有处理器时,新老进程随之发生上下文切换,因此,进程的运行被认为是在进程的上下文中执行,这时的控制权在操作系统手中,它在完成必要的操作后,可以恢复被中断的进程或切换到别的进程。
实验5 进程的同步一、实验目的使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。
调试跟踪EOS信号量的工作过程,理解进程同步的原理。
修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。
二、实验内容1 、准备实验2 、使用EOS的信号量解决生产者-消费者问题3 、调试EOS信号量的工作过程4、修改EOS的信号量算法if(Semaphore->Count>0){?Semaphore->Count--;?flag=STATUS_SUCCESS;}/while((!ListIsEmpty(&Semaphore->WaitListHead))&&(ReleaseCou nt)){?PspWakeThread(&Semaphore->WaitListHead,STATUS_SUCCESS);?PspThreadSchedule();?ReleaseCount--;}Semaphore->Count=mm+ReleaseCount;结合线程调度执行的时机,说明在ThreadFunction函数中,为什么可以使用“关中断”和“开中断”的方法来保护控制台这种临界资源。
一般情况下,应该使用互斥信号量(MUTEX)来保护临界资源,但是在ThreadFunction函数中却不能使用互斥信号量,而只能使用“关中断”和“开中断”的方法,结合线程调度的对象说明这样做的原因。
答:关中断后CPU就不会响应任何由外部设备发出的硬中断(包括定时计数器中断和键盘中断等)了,也就不会发生线程调度了,从而保证各个线程可以互斥的访问控制台。
这里绝对不能使用互斥信号量(mutex)保护临界资源的原因:如果使用互斥信号量,则那些由于访问临界区而被阻塞的线程,就会被放入互斥信号量的等待队列,就不会在相应优先级的就绪列中了,而时间轮转调度算法是对就绪队列的线程进行轮转调度,而不是对这些被阻塞的线程进行调度,也就无法进行实验了。
使用“关中断”和“开中断”进行同步就不会改变线程的状态,可以保证那些没有获得处理器的线程都在处于就绪队列中。
3.使用低优先级线程也能获得执行机会的调度算法:在ke/文件中的ConsoleCmdRoundRobin函数调用Sleep函数语句的后面添加下面的语言,即可以演优先级线程抢占处理器后,低优先级线程无法运行的情况,待高优先级线程结束后,低优先级线程才能够继续运行。
HANDLE ThreadHandle;THREAD_PARAMETER ThreadParameter;_asm(“cli”);=20;=StdHandle;ThreadParameter=(HANDLE)CreateThread{0,ThreadFunction,(PVOID)&ThreadParameter,0,NULL); PsSetThreadPriority(ThreeadHandle,9);_asm(“sti”);Sleep(10*1000);TerminateThread(ThreadHandle,0);CloseHandle(ThreadHandle);Sleep(10*1000);解决该问题的最简单的方法是实现动态优先级算法。
动态优先级是指在创建进程时所赋予的优先级,可以随线程的推进而改变,以便获得良好的调度性能。