《操作系统》实验报告(一)

合集下载

操作系统实验报告(全)

操作系统实验报告(全)

操作系统实验报告书院系名称:电子工程学院电子指导教师:班级:学号:学生姓名:实验题目一:进程一、实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在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 等进行文件的创建、读取和写入操作。

操作系统安全实验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 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

在这个实验中,我们使用C++编写程序来创建和管理进程。

通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。

首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。

然后,使用等待函数来等待子进程的结束,并获取其返回值。

在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。

2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。

在这个实验中,我们研究了动态内存分配和释放的机制。

使用 C++中的 new 和 delete 操作符来分配和释放内存。

通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。

同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。

通过模拟内存访问过程,理解了页表的作用和地址转换的过程。

3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。

在这个实验中,我们对文件的创建、读写和删除进行了操作。

使用 C++的文件流操作来实现对文件的读写。

通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。

此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。

4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。

操作系统实验报告1 linux初步认知和生产者消费者问题

操作系统实验报告1 linux初步认知和生产者消费者问题

hierarchy
CLONE_SIGHAND 子进程与父进程共享相同的信号处理(signal handler)表
CLONE_PTRACE 若父进程被 trace,子进程也被 trace
CLONE_VFORK 父进程被挂起,直至子进程释放虚拟内存资源
CLONE_VM
子进程与父进程运行于相同的内存空间
CLONE_PID
#define inc(k) if(k < BUFFER_SIZE) k = k+1;else k=0//实现对缓冲区操作的
自增函数
并定义了如下实现问题的函数模块:
int insert_item(buffer_item item)
//将生产的产品放入缓冲区
int remove_item(buffer_item *item) //从缓冲区内移走一个产品
子进程在创建时 PID 与父进程一致
CLONE_THREAD 子进程与父进程共享相同的线程群
具体的实例如下图所示:
<4>生产者消费者问题的实现: 信号量 mutex 提供对缓冲池访问的互斥要求并初始化为 1,信号量 empty 和 full 分别用
来表示空缓冲项和满缓冲项的个数,信号量 empty 初始化为 n,信号量 full 初始化为 0。
进程是父进程的复制品且子进程装入另一个新程序;在第四章的结尾介绍了 clone()创建 线程的功能,linux 并不区分进程还是线程,clone()被调用时,它被传递一组标记以决定 父任务与子任务之间发生多少共享任务的数据结构,继而又从网上了解了其他的一些方 面区别,并进行了实验 <4>有限缓冲问题是一个经典的同步问题,可以通过信号量来实现进程同步。其中信号量 mutex 提供对缓冲池访问的互斥要求并初始化为 1,信号量 empty 和 full 分别用来表示空缓 冲项和满缓冲项的个数,信号量 empty 初始化为 n,信号量 full 初始化为 0

操作系统原理实验报告

操作系统原理实验报告

《操作系统原理》实验报告班级::学号:指导老师:目录:实验题目:实验一线程创建与撤销 (2)实验题目:实验二线程同步 (6)实验题目:实验三线程互斥 (11)实验题目:实验四进程通信 (17)实验题目:实验五读者-写者问题 (22)实验题目:实验六进程调度 (38)实验题目:实验七存储管理之动态库 (52)实验题目:实验八存储管理之存分配 (57)实验题目:实验九存储管理之页面置换算法 (70)实验题目:实验十设备管理 (85)实验题目:实验十一文件管理之文件读写 (99)实验题目:实验一线程创建与撤销完成人:XXX报告日期:2018年3月31日一、实验容简要描述(1)熟悉VC++、Visual Studio开发环境。

(2)使用相关函数创建和撤销线程。

(3)在一个进程中创建3个线程,名字分别为threada、threadb、threadc。

threada输出“hello world! ”。

threadb输出“My name is …”。

threadc输出“Please wait…”,然后sleep 5秒钟,接着输出“I wake up”。

二、程序设计1、设计思路该函数创建一个在调用进程的地址空间中执行的线程。

2、主要数据结构HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);VOID ExitThread(DWORD dwExitCode);VOID Sleep(DWORD dwMilliseconds);VOID Sleep(DWORD dwMilliseconds);三、实验结果1、基本数据lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。

操作系统实验报告

操作系统实验报告

操作系统实验报告专业:软件工程姓名:李程星学号:2011221104220092实验一操作系统的用户界面LINUX操作系统提供了图形用户界面和命令行界面,本实验主要熟悉命令行界面,为后续的实验编程做准备。

一、系统启动1. 开机,选择进入Linux系统,约40秒后系统启动成功,系统提示输入用户名:user输入口令:111111 然后进入Linux系统桌面。

2.进入Linux命令行方式单击小红帽图标,选择“系统工具”,单击“终端”图标,出现Linux的shell提示符.....@......$,,即可输入命令。

实验二进程管理一、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。

(2)进一步认识并发执行的实质。

二、实验内容1、进程的创建执行下面的程序,分析执行的结果。

#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i==0)printf("I am child.\n");elseif (i>0)printf("I am parent.\n");elseprintf("fork() failed.\n");printf("program end.\n");}输出结果:just 1 process.I am parent.program end.I am a child.program end.2、进程的同步执行下面的程序,分析执行的结果。

#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i>0){printf("I am parent.\n");wait();}elseif (i==0) {printf("I am child.\n");exit(1);}printf("program end.\n");}输出结果:just 1 process.I am parent.I am child.program end.3、进程的延迟执行下面的程序,分析执行的结果。

国开(电大)操作系统课程实验报告1

国开(电大)操作系统课程实验报告1

国开(电大)操作系统课程实验报告1
概要
该实验报告旨在记录国开(电大)操作系统课程实验1的过程和
结果。

本次实验的主要目标是熟悉操作系统的基本概念和任务管理。

实验过程
1. 阅读实验指南:仔细阅读了实验指南,了解了实验要求和流程。

2. 环境搭建:安装了虚拟机软件并创建了一个虚拟机,用于实
验的操作系统。

3. 实验步骤:
- 步骤1:启动虚拟机并登录操作系统。

- 步骤2:查看当前系统的任务列表。

- 步骤3:创建一个新的任务,并添加一些测试内容。

- 步骤4:查看更新后的任务列表,确认新任务的添加成功。

4. 实验结果:
- 成功完成了所有实验步骤。

- 通过查看任务列表,确认新任务的添加成功。

总结
通过本次实验,我进一步了解了操作系统的基本概念和任务管理。

实践操作系统的相关操作,加深了对操作系统的理解和熟悉度。

在实验过程中,我遵循实验指南,按照步骤进行操作,并取得了预
期的实验结果。

改进建议
对于下次实验,建议在实验过程中记录更多的细节和操作步骤,便于后续复和总结。

同时,对于实验中遇到的问题,可以记录下来
并尝试寻找解决方案,以便在以后的实验中更好地应对类似问题。

操作系统实验报告1

操作系统实验报告1

《操作系统》实验报告实验序号:01 实验项目名称:操作系统环境学号1107xxx 姓名xxx 专业、班级软件工程1103 实验地点计—502 指导教师徐冬时间2013.9.23 实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;由此,进一步熟悉Windows操作系统的应用环境。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Windows 操作系统的计算机。

实验内容与步骤1. 计算机管理2. 事件查看器3. 性能监视4. 服务5. 数据库 (ODBC)为了帮助用户管理和监视系统,Windows提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。

如图2所示。

图2 基于虚拟机的操作系统计算环境管理步骤1:登录进入Windows。

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

在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) Internet 信息服务;管理IIS,Internet 和Intranet站点的WEB服务器。

2) Server Extensions 管理器;Server Extensions管理器。

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

4)性能;显示系统性能图表以及配置数据日志和警报。

5)本地安全策略;查看和修改本地安全策略,如用户权限和审核策略。

6)事件查看器;显示来自于Windows和其他程序的监视与排错消息。

7)组件服务;配置和管理COM+应用程序。

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

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

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

《操作系统》系统进程实验报告

《操作系统》系统进程实验报告

《操作系统》系统进程实验报告
hongdingjin
实验一(写出最常见和感兴趣的10个)
1、explorer.exe
Windows资源管理器,它用于管理图形用户界面,包括开始菜单、任务栏、桌面和文件。

2、Svchost.exe
Windows操作系统进程,加载并执行系统服务指定的动态链接库文件。

3、smss.exe
Windows操作系统进程,调用对话管理子系统和负责操作系统对话。

4、lsass.exe
Windows操作系统的本地安全权限服务,控制Windows系统的安全机制。

5、sqlswevr.exe
Microsoft SQL Server服务套装的一部分,用于支持微软SQL基础服务。

6、mysqld.exe
Mysql中Windows mysql server数据库服务器相关程序,用于加载该系统相关数据库服务组件。

7、SPOOLSV.exe
将文件加载到内存中以便迟后打印。

8、Winlogon.exe
管理用户登录。

9、ismserv.exe
允许在 Windows Advanced Server 站点间发送和接收消息。

10、smlogsvc.exe
配置性能日志和警报。

实验二(自己下载Process Viewer等查看进程软件,查看某进程的进程树。


Process Viewer程序界面
查看360SE.exe的进程树
实验三(自己在网络搜索并下载进程分析软件,看是否有可疑进程。

)360安全卫士进程管理器是一个不错的查看进程分析软件。

经查,没有发现可疑进程。

计算机操作系统实验报告答案

计算机操作系统实验报告答案

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

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

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

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

2) 服务:启动和停止服务。

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

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

5) 数据源:添加、删除、以及配置 ODBC 数据源和驱动程序。

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

7) 组件服务:配置和管理 COM+ 应用程序。

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

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

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

在用于导航和工具选择的控制台目录树中有“系统工具”、“存储”及“服务和应用程序”等节点,窗口右侧“名称”窗格中显示了工具的名称、类型或可用的子工具等。

它们是:1)系统工具,填入表2-3中。

表2-3 实验记录2) 存储,填入表2-4中。

3) 服务和应用程序,填入表2-5中。

2. 事件查看器事件查看器不但可以记录各种应用程序错误、损坏的文件、丢失的数据以及其他问题,而且还可以把系统和网络的问题作为事件记录下来。

操作系统课内实验报告

操作系统课内实验报告

.. 西安交通大学实验报告操作系统实验报告2130505133计算机36班操作系统实验实验一:用户接口实验实验目的1)理解面向操作命令的接口Shell。

2)学会简单的shell编码。

3)理解操作系统调用的运行机制。

4)掌握创建系统调用的方法。

操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。

用户接口实验也因此而分为两大部分。

首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell 编程方法。

然后通过想Linux内核添加一个自己设计的系统调用,来理解系统调用的实现方法和运行机制。

在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。

实验内容1)控制台命令接口实验该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell编程。

➢查看bash版本。

在shell 提示符下输入:$echo $BASH_VERSION我们的版本是4.3.42(1)-release(2)建立bash 脚本,输出Hello word在编辑器中输入以下内容#!/bin/bashecho Hello World!执行脚本使用指令:$./script➢编写bash脚本,统计/my目录下c语言文件的个数通过bash 脚本,可以有多种方式实现这个功能,而使用函数是其中个一个选择。

在使用函数之前,必须先定义函数。

进入自己的工作目录,编写名为count 的文件脚本程序:#! /bin/bashfunction count{echo –n " Number of matches for $1: " #接收程序的第一个参数ls $1|wc –l #对子程序的第一个参数所在的目录进行操作}将count 文件复制到当前目录下,然后在当前目录下建立文件夹,在my 目录下建立几个c 文件,以便用来进行测试2)系统调用实验该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。

哈工大《操作系统》实验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命令验证运行结果。

操作系统实验

操作系统实验

操作系统实验报告(一)Linux基本操作与编程(验证性 2学时)1、实验目(de):1)熟悉Linux操作系统(de)环境和使用.2)了解LINUX系统(de)安装过程.(注:表示可选择)3)掌握Linux环境下(de)命令操作.2、实验内容:(1)完成LINUX系统(de)登录,启动终端.进行下列操作并记录结果(要求:结果以屏幕截图表示).1)运行pwd命令,确定你当前(de)工作目录.2)利用以下命令显示当前工作目录(de)内容: ls –l3)运行以下命令: ls –al4)使用mkdir命令建立一个子目录subdir.5)使用cd命令,将工作目录改到根目录(/)上.6)使用ls-l命令列出/dev(de)内容.7)使用不带参数(de)命令cd改变目录,然后用pwd命令确定你当前(de)工作目录是哪里8)使用命令cd ../..,你将工作目录移到什么地方(2)在LINUX下查看你(de)文件.1)利用cd命令,将工作目录改到你(de)主目录上.2)将工作目录改到你(de)子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中.3)使用cat命令查看file1文件(de)内容.4)利用man命令显示date命令(de)用法: man date5)将date命令(de)用法附加到文件file1(de)后面:man date >> file16)利用cat命令显示文件file1(de)内容.7)利用ls -l file1命令列出文件file1(de)较详细(de)信息.运行ls -l/bin 命令显示目录(de)内容.8)利用ls -l/bin|more命令行分屏显示/bin目录(de)内容.9)利用cp file1 fa命令生成文件file1(de)副本.然后利用ls -l命令查看工作目录(de)内容.10)用cd命令返回你(de)主目录,输入命令ls –l后,解释屏幕显示(de)第一列内容(de)含义.(3)编写能输出“Hello world”问候语(de)C程序,并在终端中编译、执行.要求记录所使用(de)命令及结果.操作步骤:1)在文本编辑器中,编写C程序如下:include ""main(){ printf("hello"); }2) 在终端中,用gcc命令进行编译,生成可执行文件a.gcc –o a3) 在终端中执行a (de)命令如下:./a(4)编写一个程序:显示信息“Time for Play”,并能在后台运行一段时间(自定义)后,弹出信息提醒用户.要求记录所使用(de)命令及结果.(提示:使用sleep(s)函数)3、实验结果分析:(对上述实验内容中(de)各题结果,进行分析讨论.并回答下列问题)(1)进程包括哪些特征间断性, 失去封闭性, 不可再现性, 动态性, 并发性, 独立性(2)在Linux中,如何设置前、后台命令和程序(de)执行命令后直接加 & ,这个命令就在后台执行;正在运行(de)命令,使用Ctrl+z ,就挂起; jobs命令,可以现实后台,包括挂起(de)命令;使用 bg %作业号就可以把挂起(de)命令在后台执行;使用 fg %作业号就可以把后台命令调到前台(3)你所使用(de)Linux系统(de)内核版本是多少用什么命令查看内核版本目前你所了解(de)各发行版本(de)情况如何Linux version (gcc version (Red Hat (GCC) ) 1 SMP Tue Jan 2911:48:01 EST 2013(4)你对Linux系统有什么认识linux是一款开放性(de)操作系统,也可以说成是开放(de)源代码系统,这些代码可以完全自由(de)修改可以再任何(de)计算机上去运行它,也就是“可移植性”,其次大家都知道,linux是由UNIX(de)概念所开发出来(de),所以它也继承了UNIX(de)稳定和效率(de)特点4、总结:你对本次实验有什么体会或看法.操作系统实验报告(二)文件访问权限设置与输入输出重定向(2学时)一、实验目(de)1、掌握linux(de)文件访问权限设置.2、熟悉输入输出重定向和管道操作.二、实验内容1、启动进入红帽linux系统2、设置文件权限:在用户主目录下创建目录test,进入test目录,用vi 创建文件file1,并输入任意(de)文字内容.用ls -l显示文件信息,注意文件(de)权限和所属用户和组.对文件file1设置权限,使其他用户可以对此文件进行写操作:chmod o+w file1.用ls -l查看设置结果.取消同组用户对此文件(de)读取权限:chmod g-r file1.查看设置结果.用数字形式来为文件file1设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行(de)权限:chmod 755 file1.设置完成后查看设置结果.3、输入、输出重定向和管道(1) 输出重定向用ls命令显示当前目录中(de)文件列表:ls –l.使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中:ls –l > list.查看文件list中(de)内容,注意在列表中会多出一个文件list,其长度为0. 这说明shell是首先创建了一个空文件,然后再运行ls命令:cat list.再次使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中.这次使用追加符号>>进行重定向:ls –l >> list.查看文件list(de)内容,可以看到用>>进行重定向是把新(de)输出内容附加在文件(de)末尾,注意其中两行list文件(de)信息中文件大小(de)区别:cat list.重复命令ls –l > list.再次查看文件list中(de)内容,和前两次(de)结果相比较,注意list文件大小和创建时间(de)区别.(2) 管道who |grep root命令(de)结果是命令ls –l |wc –l结果是4、退出linux系统操作步骤:在主菜单上选择“注销” ->关闭计算机.三、实验结果与讨论(根据实验结果回答下列问题)1. 文件(de)权限如下:-rw-r—r-- 1 root root 19274 Jul 14 11:00回答:-rw-r—r-- (de)含义是什么答:是LINUX/FTP(de)简易权限表示法:对应于本用户-所在组-其他人(de)权限,每一个用执行(x)-读取(r)-写入(w)如本题若是说自己可以读取写入不可以执行,所在组和其他人只能读取.2、文件(de)所有者添加执行权限(de)命令是答:chmod u+x 、赋予所有用户读和写文件权限(de)命令是四、答:chmod a+w,a+r 个人体会(你对本次实验有什么体会或看法)操作系统实验报告(三)文件和目录管理一、实验目(de)1) 掌握在Linux系统下(de)文件和文件系统(de)概念及命令;2) 掌握Linux系统下(de)目录操作.二、实验内容1. 进入linux终端后,用命令(de)操作结果回答下列问题:1)vi(de)三种工作模式是其中不能进行直接转换(de)是什么模式到什么模式命令模式、文本输入模式、末行模式命令模式不能直接到末行模式2)在vi中退出时,保存并退出(de)操作步骤是Ese:wq3)用vi 创建myfile1文件,并在其中输入任意文字一行,创建myfile2文件,任意输入文字3行.请问执行命令:cat <myfile1 >myfile2 后,myfile2中还有几行内容该命令(de)作用是用命令操作验证你(de)回答.myfile2中还有1行内容该命令(de)作用是替换myfile(de)内容4)请用至少两种不同(de)命令创建一个文本文件(),在其中写入“我是2014级学生,我正在使用Linux系统.”,记录命令及执行结果.1、Vi创建2、5)用___pwd________命令可查看所创建文件(de)绝对路径,写出它(de)绝对路径__/root_________;用___ls -l________命令查看该文件(de)类型及访问权限,其访问权限(数字和字母)分别是多少__-rw- r- - r- - 6 4 4______________.6)若将该文件(de)访问权限修改为:所有者有读写权限;其他用户只读;同组用户可读写,请写出命令,并记录结果.7)查找my开头(de)所有文件,可___find my_________命令,写出命令并记录结果8)在/home下创建子目录user,并在其中创建2个文件,名为file1和file2,file1(de)内容是/root目录(de)详细信息;file2(de)内容任意,最后将这两个文件合并为file3文件,请先写出命令序列,并在终端中验证,记录结果.2. 文件及目录操作,写出操作所使用(de)命令,并记录结果.在终端中完成下列命令操作,并记录结果在root用户主目录下创建一个mydir子目录和一个myfile文件,再在mydir下建立d1和d2两个子目录.查看mydir和myfile(de)默认权限查看当前myfile和mydir(de)权限值是多少将myfile文件分别复制到root 和dd1(de)主目录中将root主目录中(de)myfile改为yourfile通过从键盘产生一个新文件并输入I am a student查找文件是否包含student字符串三、实验结果与分析,回答下列问题:1、能够创建文件(de)命令有哪些vi 和cat>name2、能够查看当前目录(de)绝对路径(de)命令是pwd3、Linux中按用户属性将用户分成哪些类型根据文件(de)访问权限,用户又被分成哪些类型能够查看文件访问权限(de)命令是用户同组其他可读可写可执行 cat f1四、小结(本次实验(de)体会或小结)操作系统实验报告(四)作业调度算法模拟(验证性2学时)1、实验目(de):1)掌握作业调度(de)主要功能及算法.2)通过模拟作业调度算法(de)设计加深对作业管理基本原理(de)理解.3)熟悉Linux环境下应用程序(de)编程方法.2、实验内容:(1)作业调度算法(FCFS)编程模拟:编制一段程序,对所输入(de)若干作业,输入、输出数据样例如下表所示.按FCFS算法模拟调度,观察、记录并分析调度(de)输出结果情况.输入输出样例1:FCFS算法include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void fcfs(){ int i,j,t=0,tw=0,tt=0;for(i=0;i<SIZE-1;i++)for(j=i+1;j<SIZE;j++)if(job[i].tb>job[j].tb){x=job[i];job[i]=job[j];job[j]=x;}printf("FCFS调度结果:\n");printf("开始时间作业号到达时间运行时间完成时间等待时间周转时间\n");for(i=0;i<SIZE;i++){printf(" %d",t);t=t+job[i].tr;tw=t-job[i].tb-job[i].tr; b; o,job[i].tb,job[i].tr,t,tw,tt);}}void main(){load();fcfs();}(2)作业调度算法(SJF)编程模拟:编程实现由短作业优先算法,分别用下面两组输入、输出数据样例进行模拟,观察分析运行结果.输入输出样例2:SJF算法输入输出A 0 4B 0 3C 0 5D 0 2E 0 1A 0 6 10 10B 0 3 6 6C 0 10 15 15D 0 1 3 3E 0 0 1 1include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void sjf()n=i; pl[i].pfn=ERR;}for(i=1;i<total;i++){ pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1;}pfc[total-1].next=NULL;pfc[total-1].pfn=total-1;freepf_head=&pfc[0];}void FIFO(int total){ int i,j;pfc_type p,t;initialize(total);busypf_head=busypf_tail=NULL;for(i=0;i<page_len;i++){if(pl[page[i]].pfn==ERR){ diseffect+=1;if(freepf_head==NULL){p=busypf_head->next;pl[busypf_head->pn].pfn=ERR; freepf_head=busypf_head;freepf_head->next=NULL;busypf_head=p;}p=freepf_head->next;freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head; else{ busypf_tail->next=freepf_head;busypf_tail=freepf_head;}freepf_head=p;}}printf("FIFO:%d",diseffect);}main(){ int i; int k;printf(“请输入页(de)引用序列:\n”); for(k=0;k<page_len;k++)scanf("%d",&page[k]);for(i=4;i<=7;i++){printf("%2d page frames ",i);FIFO(i);}参考程序LRU算法,略三、实验结果分析:(对上述实验各题所使用(de)原始数据、调试数据与状态(包括出错)及最终结果进行记录并分析.)随着块数(de)增加,缺页数目也减少,4个实验中3个实验(de)块数增加到了5以后,即使块数再增加,缺页数目也是保持不变.只有实验4,块数增加到7以后,缺页数目又再次减少了四、总结:你对本次实验有什么体会或看法.。

操作系统实验报告 实验一 进程管理

操作系统实验报告  实验一  进程管理

实验一进程管理一、目的进程调度是处理机管理的核心内容..本实验要求编写和调试一个简单的进程调度程序..通过本实验加深理解有关进程控制块、进程队列的概念;并体会和了解进程调度算法的具体实施办法..二、实验内容及要求1、设计进程控制块PCB的结构PCB结构通常包括以下信息:进程名进程ID、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等..可根据实验的不同;PCB结构的内容可以作适当的增删..为了便于处理;程序中的某进程运行时间以时间片为单位计算..各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定..2、系统资源r1…r w;共有w类;每类数目为r1…r w..随机产生n进程P i id;s j;k;t;0<=i<=n;0<=j<=m;0<=k<=dt为总运行时间;在运行过程中;会随机申请新的资源..3、每个进程可有三个状态即就绪状态W、运行状态R、等待或阻塞状态B;并假设初始状态为就绪状态..建立进程就绪队列..4、编制进程调度算法:时间片轮转调度算法本程序用该算法对n个进程进行调度;进程每执行一次;CPU时间片数加1;进程还需要的时间片数减1..在调度算法中;采用固定时间片即:每执行一次进程;该进程的执行时间片数为已执行了1个单位;这时;CPU时间片数加1;进程还需要的时间片数减1;并排列到就绪队列的尾上..三、实验环境操作系统环境:Windows系统..编程语言:C..四、实验思路和设计1、程序流程图2、主要程序代码//PCB结构体struct pcb{public int id; //进程IDpublic int ra; //所需资源A的数量public int rb; //所需资源B的数量public int rc; //所需资源C的数量public int ntime; //所需的时间片个数public int rtime; //已经运行的时间片个数public char state; //进程状态;W等待、R运行、B阻塞//public int next;}ArrayList hready = new ArrayList;ArrayList hblock = new ArrayList;Random random = new Random;//ArrayList p = new ArrayList;int m; n; r; a;a1; b;b1; c;c1; h = 0; i = 1; time1Inteval;//m为要模拟的进程个数;n为初始化进程个数//r为可随机产生的进程数r=m-n//a;b;c分别为A;B;C三类资源的总量//i为进城计数;i=1…n//h为运行的时间片次数;time1Inteval为时间片大小毫秒//对进程进行初始化;建立就绪数组、阻塞数组..public void input//对进程进行初始化;建立就绪队列、阻塞队列{m = int.ParsetextBox4.Text;n = int.ParsetextBox5.Text;a = int.ParsetextBox6.Text;b = int.ParsetextBox7.Text;c = int.ParsetextBox8.Text;a1 = a;b1 = b;c1 = c;r = m - n;time1Inteval = int.ParsetextBox9.Text;timer1.Interval = time1Inteval;for i = 1; i <= n; i++{pcb jincheng = new pcb;jincheng.id = i;jincheng.ra = random.Nexta + 1;jincheng.rb = random.Nextb + 1;jincheng.rc = random.Nextc + 1;jincheng.ntime = random.Next1; 5;listBox1.Items.Add"产生进程ID:" + jincheng.id;listBox1.Items.Add"所需A资源数目:" + jincheng.ra;listBox1.Items.Add"所需B资源数目:" + jincheng.rb;listBox1.Items.Add"所需C资源数目:" + jincheng.rc;listBox1.Items.Add"所需时间片数:" + jincheng.ntime;if a - jincheng.ra >= 0 && b - jincheng.rb >= 0 && c - jincheng.rc >= 0{a = a - jincheng.ra;b = b - jincheng.rb;c = c - jincheng.rc;jincheng.state = 'W';hready.Addjincheng;//加入就绪队列}else{jincheng.state = 'B';hblock.Addjincheng;//加入阻塞队列}listBox1.Items.Add"当前进程状态:" + jincheng.state;}}//从数组起始地址开始输出该数组的内容public void dispArrayList list{ArrayList list1 = new ArrayList;list1 = list;if list1.Count > 0{for int j = 0; j < list1.Count; j++{pcb p = pcblist1j;listBox1.Items.Add" " + p.id.ToString + " " + p.state.ToString + " " + p.ra.ToString + " " + p.rb.ToString + " " + p.rc.ToString+" " + p.ntime.ToString + " " + p.rtime.ToString + " \r\n";}}else{listBox1.Items.Add"\r\n\t 该队列中没有进程\r\n";}}//输出就绪数组和阻塞数组的信息public void outputall{listBox1.Items.Add"当前就绪队列的信息";listBox1.Items.Add"进程ID 进程状态A资源数B资源数C资源数所需时间片已运行时间片";disphready;listBox1.Items.Add"当前就阻塞列的信息";listBox1.Items.Add"进程ID 进程状态A资源数B资源数C资源所需时间片已运行时间片";disphblock;}//运行就绪数组的头进程;运行一个时间片;轮转一个时间片;时间片轮转调度算法public void running{ArrayList hready1 = new ArrayList;hready1 = hready;pcb p1 = new pcb;p1=pcbhready10;p1.state='R';p1.rtime= p1.rtime + 1;h=h+1;listBox1.Items.Add"\r\n~~~~~~~当前正在运行进程ID是:" +p1.id + "~~~~~~~~\r\n";listBox1.Items.Add"\r\n进程ID 进程状态A资源数B资源数C资源数所需时间片已运行时间片\r\n";listBox1.Items.Addp1.id + " " +p1.state+ " " + p1.ra + " " + p1.rb + " " + p1.rc + " " + p1.ntime + " " + p1.rtime;if p1.ntime==p1.rtime{listBox1.Items.Addp1.id.ToString+"的进程已经完成\r\n";a = a + p1.ra;b = b + p1.rb;c = c + p1.rc;hready.RemoveAt0;}else{p1.state='W';hready1.Addp1;hready.RemoveAt0;}}//检测当前资源数目是否满足阻塞数组里进程的需求public void testblock{ArrayList hblock1 = new ArrayList;hblock1 = hblock;for int m = 0; m < hblock1.Count; m++{p1 = pcbhblock1m;if a - p1.ra >= 0 && b - p1.rb >= 0 && c - p1.rc >= 0{p1.state='W';hready.Addp1;a = a - p1.ra;b = b - p1.rb;c = c - p1.rc;listBox1.Items.Add"ID号为:"+p1.id + "的进程由阻塞队列转入就绪队列~~\r\n";hblock.RemoveAtm;m--;}}}//检测是否有新的进程产生;随机产生新进程public void testnew{int t;if r>0//r为随机产生的进程数目{t = random.Next9 + 1;if t <= 7{listBox1.Items.Add"\r\n有新的进程申请加入:~~";pcb jincheng = new pcb;jincheng.id = i++;jincheng.ra = random.Nexta + 1;jincheng.rb = random.Nextb + 1;jincheng.rc = random.Nextc + 1;jincheng.ntime = random.Next1; 5;jincheng.rtime = 0;listBox1.Items.Add"产生进程ID:" + jincheng.id;listBox1.Items.Add"所需A资源数目:" + jincheng.ra;listBox1.Items.Add"所需B资源数目:" + jincheng.rb;listBox1.Items.Add"所需C资源数目:" + jincheng.rc;listBox1.Items.Add"所需时间片数:" + jincheng.ntime;if a - jincheng.ra >= 0 && b - jincheng.rb >= 0 && c - jincheng.rc >= 0{a = a - jincheng.ra;b = b - jincheng.rb;c = c - jincheng.rc;jincheng.state = 'W';listBox1.Items.Add"进程状态为:" + jincheng.state;hready.Addjincheng;//加入就绪队列listBox1.Items.Add"资源满足新进程请求;该进程进入就绪队列~~\r\n";else{jincheng.state = 'B';hblock.Addjincheng;//加入阻塞队列listBox1.Items.Add"进程状态为:" + jincheng.state;listBox1.Items.Add"资源不满足新进程请求;该进程进入阻塞队列~~\r\n";}}}r = r - 1;}//系统三类资源变化情况的显示public void rescore//系统三类资源变化情况的显示{if a > a1 { textBox1.Text = a1.ToString; }if a < 0 { textBox1.Text = "0"; }if a >= 0 && a < a1 { textBox1.Text = a.ToString; }if b > b1 { textBox2.Text = b1.ToString; }if b < 0 { textBox2.Text = "0"; }if b >= 0 && b <= b1 { textBox2.Text = b.ToString; }if c > c1 { textBox3.Text = c1.ToString; }if c < 0 { textBox3.Text = "0"; }if c >= 0 && c <= c1 { textBox3.Text = c.ToString; }}//时间片轮转调度算法先来先服务FCFS算法public void runFcfs{if hready.Count>0{outputall;running;testblock;testnew;rescore;}else{timer1.Enabled = false;textBox1.Text = a1.ToString;textBox2.Text = b1.ToString;textBox3.Text = c1.ToString;listBox1.Items.Add"\r\n<<<<<<<<所有进程都已经运行结束>>>>>>>~\r\n";}//计时器触发时间片轮转调度算法private void timer1_Tickobject sender; EventArgs erunFcfs;}//开始模拟按钮单击执行函数private void button1_Clickobject sender; EventArgs e {runmain;button1.Enabled = false;textBox1.Enabled = false;textBox2.Enabled = false;textBox3.Enabled = false;textBox4.Enabled = false;textBox5.Enabled = false;textBox6.Enabled = false;textBox7.Enabled = false;textBox8.Enabled = false;textBox9.Enabled = false;}//清除屏幕按钮单击执行函数private void button2_Clickobject sender; EventArgs e {textBox1.Text = "";textBox2.Text = "";textBox3.Text = "";textBox4.Text = "";textBox5.Text = "";textBox6.Text = "";textBox7.Text = "";textBox8.Text = "";textBox9.Text = "";listBox1.Items.Clear;textBox4.Enabled = true;textBox5.Enabled = true;textBox6.Enabled = true;textBox7.Enabled = true;textBox8.Enabled = true;textBox9.Enabled = true;button1.Enabled = true;}//运行的主函数public void runmain{input;imer1.Enabled = true;3、运行界面和运行结果界面中;可以任意设定需要模拟的进程总数如5;初始化进程个数如3;还有A、B、C三类资源的总数如10、10、10..为了方便显示;还可以设定时间片的长度如500毫秒..除此之外;在运行过程中;所有的资源都是随机生成的;并且其中新进程的产生也是随机的;但是产生的进程总数不会多于开始设定的模拟的进程总数;以防止不断产生新进程;程序不断运行..在显示窗口的上方;还会实时显示资源的变化情况;方便对运行的观察..当运行结束后;可以通过工具栏中的显示选项中的保存结果按钮;将结果保存成txt文件格式;方便运行后的结果分析..五、心得体会本次实验;我的任务是设计一个允许n个进程并发运行的进程管理模拟系统..该系统包括有简单的进程控制、同步与通讯机构;系统在运行过程中能显示各进程的状态及有关参数的变化情况;从而观察诸进程的运行过程及系统的管理过程;我是用C写的;在我的电脑能够运行通过;虽不能尽善尽美;但也基本能实现老师的要求..两个星期的实验;虽然时间有点短;但我也收获不少;这次实验;加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施..也让我认识到自己的不足;操作系统的有些知识;我知道的还不多;没有掌握好;还需要多多学学;不断提升自己的能力..实验中;我们小组分工合作;共同学习;虽然在实验中遇到了一些问题;但在老师和同学的细心指导和热心帮助下解决了..同时;了解到团队精神的重要性;也为以后的学习和工作打下了坚实的基础;同时积累了宝贵的经验..。

操作系统实验报告

操作系统实验报告

操作系统实验报告一、实验目的本次操作系统实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理和关键机制,包括进程管理、内存管理、文件系统以及设备管理等方面。

同时,培养我们解决实际问题的能力,提高对操作系统相关知识的综合运用水平。

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

三、实验内容及步骤(一)进程管理实验1、进程创建与终止在 Windows 系统中,使用 C++语言编写程序,通过调用系统 API函数创建新的进程,并观察进程的创建和终止过程。

在 Linux 系统中,使用 C 语言编写程序,通过 fork()系统调用创建子进程,并通过 wait()函数等待子进程的终止。

2、进程调度观察Windows 和Linux 系统中进程的调度策略,包括时间片轮转、优先级调度等。

通过编写程序模拟进程的执行,设置不同的优先级和执行时间,观察系统的调度效果。

(二)内存管理实验1、内存分配与释放在 Windows 系统中,使用 C++语言的 new 和 delete 操作符进行内存的动态分配和释放,并观察内存使用情况。

在 Linux 系统中,使用 C 语言的 malloc()和 free()函数进行内存的分配和释放,通过查看系统的内存使用信息来验证内存管理的效果。

2、虚拟内存管理研究 Windows 和 Linux 系统中的虚拟内存机制,包括页表、地址转换等。

通过编写程序访问虚拟内存地址,观察系统的处理方式和内存映射情况。

(三)文件系统实验1、文件操作在 Windows 和 Linux 系统中,使用编程语言对文件进行创建、读取、写入、删除等操作。

观察文件的属性、权限设置以及文件在磁盘上的存储方式。

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

研究目录结构和文件路径的表示方法。

山大操作系统实验 1

山大操作系统实验 1

山大操作系统实验1 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN操作系统原理实验报告——实验一张咪软件工程四班一、实验目的加深对于进程并发执行概念的理解。

实践并发进/线程的创建和控制方法。

观察和体验进程的动态特性。

进一步理解进程生命期期间创建、变换、撤销状态变换的过程。

掌握进程控制的方法,了解父子进程间的控制和协作关系。

练习Linux系统中进/线程创建与控制有关的系统调用的编程和调试技术。

二、实验要求编写一个多进程并发执行程序。

父进程每隔3秒重复建立两个子进程,首先创建的让其执行ls命令,之后创建执行让其执行ps命令,并控制ps命令总在ls 命令之前执行。

三、实验软硬件环境实验环境均为Linux操作系统,开发工具为gcc和g++。

四、实验思路调用fock()创建子进程。

创建键盘中断信号后,使用pause()可以暂停子进程执行,继续创建新的子进程。

子进程并发执行子进程可以首先通过键盘中断信号唤醒子进程。

通过exec()调用族装入一个新的执行程序。

在建立子进程2并且唤醒子进程1后子进程sleep(seconds = 5)。

这样就可以先执行ps后执行ls。

最后就是父进程的结束,程序结束。

五、实验模型六、调试排错1、首先遇到的问题是,对linux的操作不熟悉,不太明白makefile怎么使用,直接用了gcc2、在创建多个子进程上遇到了问题,在fock()后又直接跟了一个fork(),这样创建的子进程是子进程的子进程,而不是父进程创建的第二个子进程。

所以应该在else语句块后面,也就是主进程执行段继续创建。

一般情况下,fork()按如下规则编程:main(){ pid_t pid;pid=fork();if(pid<0){n",getpid());}}}}}return (EXIT_SUCCESS);}#include<sys/>#include<>#include<>#include<>#include<>#include<>typedef void(*sighandler_t)(int);void sigcat(){printf("Process continue\n");}。

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

《操作系统》实验报告(一)
Linux基本操作与编程(验证性 2学时)
1、实验目的:
1)熟悉Linux操作系统的环境和使用。

2)* 了解LINUX系统的安装过程。

(注:*表示可选择)
3)掌握Linux环境下的命令操作。

2、实验内容:
(1)完成LINUX系统的登录,启动终端。

进行下列操作并记录结果(要求:结果以屏幕截图表示)。

1)运行pwd命令,确定你当前的工作目录。

2)利用以下命令显示当前工作目录的内容: ls –l
3)运行以下命令: ls –al
4)使用mkdir命令建立一个子目录subdir。

5)使用cd命令,将工作目录改到根目录(/)上。

6)使用ls-l命令列出/dev的内容。

7)使用不带参数的命令cd改变目录,然后用pwd命令确定你当前的工作目录是哪里?
8)使用命令cd../..,你将工作目录移到什么地方?
(2)在LINUX下查看你的文件。

1利用cd命令,将工作目录改到你的主目录上。

2)将工作目录改到你的子目录subdir,然后运行命令: date > file1 将当
前日期和时间存放到新建文件file1中。

3)使用cat命令查看file1文件的内容。

4)利用man命令显示date命令的用法: man date
5)将date命令的用法附加到文件file1的后面:man date >> file1
6)利用cat命令显示文件file1的内容。

7)利用ls -l file1命令列出文件file1的较详细的信息。

运行ls -l/bin命令显示目录的内容。

8)利用ls -l/bin|more命令行分屏显示/bin目录的内容。

9)利用cp file1 fa命令生成文件file1的副本。

然后利用ls -l命令查看工作目录的内容。

10)用cd命令返回你的主目录,输入命令ls –l后,解释屏幕显示的第一列内容的含义。

- 为文件类型
((3)编写能输出“Hello world!”问候语的C程序,并在终端中编译、执行。

要求记录所使用的命令及结果。

操作步骤:
1)在文本编辑器中,编写C程序a.c如下:
#include "stdio.h"
main()
{ printf("hello"); }
2) 在终端中,用gcc命令进行编译,生成可执行文件a。

gcc a.c –o a
3) 在终端中执行a 的命令如下:
./a
(4)编写一个程序:显示信息“Time for Play!”,并能在后台运行一段时间(自定
义)后,弹出信息提醒用户。

要求记录所使用的命令及结果。

(提示:使用sleep(s)函数)
#include "stdio.h"
main()
{ printf("hello");
sleep(10);
}
3、实验结果分析:
(对上述实验内容中的各题结果,进行分析讨论。

并回答下列问题)
(1)进程包括哪些特征?
动态性、并发行、独立性、异步性、结构特征
(2)在Linux中,如何设置前、后台命令和程序的执行?
命令后直接加& ,这个命令就在后台执行;
正在运行的命令,使用Ctrl+z ,就挂起;
jobs命令,可以现实后台,包括挂起的命令;
使用bg %作业号就可以把挂起的命令在后台执行;
使用fg %作业号就可以把后台命令调到前台
(3)你所使用的Linux系统的内核版本是多少?目前你所了解的各发行版本的情况如何?
Linux version 2.6.32-358.el6.i686 (mockbuild@) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jan 29 11:48:01 EST 2013
(4)你对Linux系统有什么认识?
linux是一款开放性的操作系统,也可以说成是开放的源代码系统,这些代码可以完全自由的修改可以再任何的计算机上去运行它,也就是“可移植性”,其次大家都知道,linux是由UNIX的概念所开发出来的,所以它也继承了UNIX的稳定和效率的特点!
4、总结:你对本次实验有什么体会或看法。

同时具有:
对于硬件的需求很低
还有就是我上面说的架构开放
继承了UNIX的稳定性
安全性能强
是一款免费的操作系统
通过本次实验对linux有了一些的基本的认识,对于linux的一些指令也有了一定的了解,对linux增加了些许的好奇。

通过不断的学习,将会对linux的运用将会更加熟练。

也会慢慢地更加喜欢这个系统!。

相关文档
最新文档