操作系统实验报告

目录

目录

实验一

一、实验结果

实验二 使用信号量实现进程互斥与同步

一、实验结果

1.  使用信号量实现有限缓冲区的生产者和消费者问题

2.  使用信号量实现读进程具有优先权的读者和写者问题

实验三 死锁和预防

一、实验要求

二、实验内容

三、实验结果

实验四 内存管理

一、实验要求

二、实验内容

三、实验结果

实验五 处理器调度

一、实验要求

二、实验内容

三、实验结果

实验六 文件管理

一、实验要求

二、实验内容

三、实验结果


   


实验一

一、实验结果

在终端提供的Linux环境下,使用gcc编译器运行程序

结果如下

从输出结果可以看出,父进程先执行,然后创建了两个子进程。两个子进程同时在执行,并打印出正在执行的信息。接着,父进程将两个子进程杀死,最后父进程结束。

整个程序运行结果表明了进程同步的概念和实现方式,特别是父进程和子进程的关系,以及父进程对子进程的控制。

实验二 使用信号量实现进程互斥与同步

一、实验结果

1.  使用信号量实现有限缓冲区的生产者和消费者问题

在Linux环境下使用gcc编译器来将C语言程序编译成可执行文件(即exec文件)。

步骤如下:

(1)创建C源代码文件:首先,创建一个C语言源代码文件,生产者与消费者.c,并在其中编写程序代码。

(2)使用GCC编译器编译源代码文件:在终端中输入了以下命令

gcc /Users/peach/Desktop/操作系统实验/生产者与消费者/生产者与消费者.c 

 -o program

其中-o选项后的program是生成的可执行文件的名称,而生产者与消费者.c 是我编写的源代码文件名及路径。

(3)运行可执行文件:终端中输入了以下命令运行生成的可执行文件:

./program

结果如下

根据输出结果,可以看出生产者和消费者线程已经在正确地工作了。首先,生产者线程生产了编号为0的物品,并将其放入缓冲区的第一个位置。然后,消费者线程从缓冲区中取出编号为0的物品,并在每个循环中从缓冲区中取出下一个物品,直到缓冲区为空。

接下来,生产者线程继续生产物品,并将它们依次放入缓冲区。一旦缓冲区已满,生产者线程就会等待,直到有空余的槽位可用。当消费者线程消费了一些物品后,缓冲区就会变得不再满,这时生产者线程就会被唤醒,并开始继续生产物品。

在本例中,生产者线程总共生产了19个物品,消费者线程总共消费了18个物品。这是因为,在生产者线程生产第19个物品之前,缓冲区已经满了,导致生产者线程进入休眠状态,直到消费者线程消费掉一些物品并释放出空余的槽位为止。

2.  使用信号量实现读进程具有优先权的读者和写者问题

操作步骤同1,文件路径如下

/Users/peach/Desktop/操作系统实验/读者写者/读者写者/main.c 

Linux环境下使用gcc编译器得到的运行结果如下:

现在对运行结果和执行过程作出一定的分析

初始状态,共有5个读者和2个写者线程,且共享数据的初值为0。

Writer 0 writes: 0

Reader 0 reads: 0

Reader 1 reads: 0

Reader 0 reads: 0

Reader 2 reads: 0

Reader 0 reads: 0

Reader 3 reads: 0

Reader 0 reads: 0

Reader 4 reads: 0

Reader 0 reads: 0

写者线程1开始执行,将共享数据的值改为1,并唤醒所有等待该数据的线程。

Writer 1 writes: 1

读者线程0开始执行,读取到共享数据的值为1,然后释放读者锁。

Reader 0 reads: 1

其他4个读者线程依次获得读者锁,并读取到共享数据的值为1,然后释放读者锁。

Reader 1 reads: 1

Reader 2 reads: 1

Reader 3 reads: 1

Reader 4 reads: 1

写者线程2开始执行,由于此时有读者线程持有读者锁,因此该写者线程需要等待所有读者线程完成读操作后才能进行写操作,即读者优先。

Writer 2 writes: 2

读者线程0开始执行,读取到共享数据的值为2,然后释放读者锁。

Reader 0 reads: 2

其他4个读者线程依次获得读者锁,并读取到共享数据的值为2,然后释放读者锁。

Reader 2 reads: 2

Reader 3 reads: 2

Reader 4 reads: 2

Reader 1 reads: 2

写者线程0开始执行,将共享数据的值改为0,并唤醒所有等待该数据的线程。

Writer 0 writes: 0

读者线程1开始执行,读取到共享数据的值为0,然后释放读者锁。

Reader 1 reads: 0

其他4个读者线程依次获得读者锁,并读取到共享数据的值为0,然后释放读者锁。

Reader 2 reads: 0

Reader 3 reads: 0

Reader 4 reads: 0

Reader 1 reads: 0

实验三 死锁和预防

一、实验要求

加深对银行家算法的理解。

二、实验内容

给出进程需求矩阵 C、资源向量 R 以及一个进程的申请序列。

使用进程启动拒绝和资源分配拒绝(银行家算法)模拟该进程组的执行情况。 要求:

1.  初始状态没有进程启动

2.  计算每次进程申请是否分配?如:计算出预分配后的状态情况(安全状 态、不安全状态),如果是安全状态,输出安全序列。

3.  每次进程申请被允许后,输出资源分配矩阵 和可用资源向量 V 4.  每次申请情况应可单步查看,如:输入一个空格,继续下个申请。

三、实验结果

在Linux环境下使用gcc编译器完成本次实验

测试结果如下

序列判断

输入资源需求量

结束运行

实验四 内存管理

一、实验要求

熟悉存储器管理系统的设计方法,加深对所学各种内存管理方案的了解。 

二、实验内容

随机给出一个页面执行序列, 如:1,5,3,4,2,1,3,4,5,7,9   .要求计算以下几种 置换算法的缺页数、缺页率和命中率。

1.  先进先出算法 FIFOFirst In First Out

2.  最近最少使用算法 LRULeast Recently Used

3.  最佳置换算法 OPTOptimal

三、实验结果

在Linux环境下使用gcc编译器完成本次实验

1.首先用户输入数据

包括计算机可以分配给进程的页面数量、执行过程中访问页面的序列及序列长度。

2.分别利用FIFO、LRU、OPT算法进行缺页数、缺页率和命中率的计算。

经分析,运行结果与实际一致。

实验五 处理器调度

一、实验要求

熟悉使用各种单处理器调度(短程调度)的各种算法。

二、实验内容

随机给出一个进程调度实例,如:

进程

到达时间

服务时间

A

0

3

B

2

6

C

4

4

D

6

5

E

8

2

模拟进程调度, 给出按照算法先来先服务(FCFS)、轮转(RR)q=1)、最短进 程优先(SPN)进行调度各进程的完成时间、周转时间、响应比的值。

三、实验结果

1.在终端提供的Linux环境下使用gcc编译器完成本次实验

2.进行进程初始化

3.选择调度算法

(1)FCFS算法

(2)短进程优先算法

(3)高优先级算法

(4)时间片轮转算法

省略轮转过程……

实验六 文件管理

一、实验要求

熟悉二级存储管理中的文件分配策略。

二、实验内容

给出一个磁盘块序列: 1 2 3 …… 500,初始状态所有块为空的,每块的大小为 2k。选择使用位表、链式空闲区、索引和空闲块列表四种算法之一来管理空闲块。对于基于块的索引分配执行以下步骤:

1.  随机生成 2k- 10k的文件 50 个, 文件名为 1.txt2.txt ……50.txt,按照上述算法存储到模拟磁盘中。

2.  删除奇数.txt1.txt 3.txt  …… 49.txt)文件

3.  新创建 个文件(A.txt B.txt C.txt D.txt E.txt),大小为:7k 5k 2k 9k 3.5k,按照与步骤 相同的算法存储到模拟磁盘中。

4.  给出文件 A.txt B.txt C.txt D.txt E.txt 的文件分配表和空闲区块的状态。

三、实验结果

在终端提供的Linux环境下使用gcc编译器运行程序

运行结果如下

文件分配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中高德地图如何自身所在城市

直接上代码 <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"initial-scale1.0, user-scalableno, wi…

Linux中的新建用户、切换用户

目录 一、Linux系统中有哪些用户 二、新建普通用户 三、root账号与普通账号的切换 一、Linux系统中有哪些用户 1.root 超级管理员&#xff08;不受权限约束&#xff09; 2.其他用户 普通用户&#xff08;受到权限约束&#xff09; 二、新建普通用户 创建新用户 sudo user…

如何删除Windows密码,看这篇文章就够了

删除Windows帐户的密码一点也不困难。删除密码后,当计算机启动时,你就不再需要登录到Windows。 在你删除密码后,家里或办公室里的任何人都可以完全访问你电脑上的所有内容,所以这样做并不是一件非常注重安全的事情。 ​注意:如果你忘记了密码,那么你将无法使用下面的方…

Oracle 12CR2 RAC部署翻车,bug避坑经历

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【AI】ChatGPT和文心一言那个更好用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】序列文章&#xff0c;这一次的话题是《自然语言处理的发展》 文章将以博主的角度进行讲述&#xff0c;理解和水平有限&#xff0c;不足之处&#xff0c;望指正。 目录 背景自我介绍面试题…

git本地分支的合并

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a;1.4&#xff09;报错分析 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit2.2&#xf…

Spring Security的使用条件

Spring Security要求使用Java 8或更高版本的运行时环境。 由于Spring Security旨在以自包含的方式运行&#xff0c;因此您无需在Java运行时环境中放置任何特殊的配置文件。特别是&#xff0c;您无需配置特殊的Java认证和授权服务&#xff08;JAAS&#xff09;策略文件&#xf…

“盲盒+互联网”模式下的盲盒小程序带来了哪些机遇?

近几年&#xff0c;盲盒逐渐兴起&#xff0c;深受大众的喜爱。盲盒中拥有各类随机商品&#xff0c;包括玩偶手办等&#xff0c;让消费者无法自拨。盲盒拥有神秘感和不确定性&#xff0c;消费者在购买前并不知道盲盒中是什么商品&#xff0c;因此具有较大的惊喜感&#xff0c;能…

绑定class,条件渲染,列表过滤,列表排序

目录​​​​​​​ 绑定class 条件渲染 列表过滤 列表排序 绑定class <div class"normal" :class"mood" click"changename">111{{name}}</div><div class"normal" :class"arr">111{{name}}</div…

mysql第五次作业

一、 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, …

node.js(expree.js )模拟手机验证码功能及登录功能

dbconfig.js const mysql require(mysql) module.exports {// 数据库配置config: {host: localhost, // 连接地址port: 3306, //端口号user: root, //用户名password: wei630229, //密码database: exapp2, //数据库名}, // 连接数据库&#xff0c;使用mysql的连接池连接方式…

MetaGPT-打卡-day2,MetaGPT框架组件学习

文章目录 Agent组件实现一个单动作的Agent实现一个多动作的Agent技术文档生成助手其他尝试 今天是第二天的打卡~昨天是关于一些概念的大杂烩&#xff0c;今天的话&#xff0c;就来到了Hello World环节。 从单个Agnet到多个Agent&#xff0c;再到组合更复杂的工作流来解决问题。…

【MCAL】SPI模块详解

目录 前言 正文 1. SPI通信协议介绍 2. AUTOSAR架构下的SPI模块 2.1 SPI模块介绍 2.2 关键概念理解 2.3 SPI模块详细设计 2.3.1 SPI可扩展功能 2.3.2 SPI Channel Job Sequence 2.2.3 通道缓存功能 2.2.4 同步和异步调用 2.4 SPI模块重要数据类型 2.4.1 Spi_Confi…

flink学习之水位线

什么是水位线 在事件时间语义下&#xff0c;我们不依赖系统时间&#xff0c;而是基于数据自带的时间戳去定义了一个时钟&#xff0c; 用来表示当前时间的进展。于是每个并行子任务都会有一个自己的逻辑时钟&#xff0c;它的前进是靠数 据的时间戳来驱动的。 我们可以把时钟也以…

matlab多元线性回归

1.matlab多元回归示例如下&#xff1a; 解决问题&#xff1a;油价预测 方法&#xff1a;多元线性回归 实现&#xff1a;matlab regress()函数 技巧&#xff1a;通过增加X1^2&#xff0c;X2^2&#xff0c;或者X1*X2等构造的特征项&#xff0c;可以提高回归模型的拟合准确度&…

基于SpringBoot Vue自习室管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Mybatis面试题(四)

MyBatis 面试题 26、Mapper 编写有哪几种方式&#xff1f; 第一种&#xff1a;接口实现类继承 SqlSessionDaoSupport&#xff1a;使用此种方法需要编写mapper 接口&#xff0c;mapper 接口实现类、mapper.xml 文件。 1、在 sqlMapConfig.xml 中配置 mapper.xml 的位置 <m…

Bit.Store 加密卡集成主流 BRC20 ,助力 BTC 生态 Token 的流动性与消费

“Bit.Store 首创性的将包括 ORDI、SATS、以及 RATS 在内的主流 BRC20 资产集成到其加密卡支付中&#xff0c;通过以其推出的加密银行卡为媒介&#xff0c;助力 BTC 生态 Token 的流动性与消费。” 比特币网络在被设计之初&#xff0c;就是以一种去中心化、点对点的现金系统为定…

R2DBC-响应式数据库

简单查询 基于全异步,响应式,消息驱动 用法: 1.导入驱动:导入连接池(r2dbc-pool),导入驱动(r2dbc-mysql) 2. 使用驱动提供的api操作 pom.xml <properties><r2dbc-mysql.version>1.0.5</r2dbc-mysql.version> </properties><dependencies><d…

黑马 Javaweb - MySQL 精华篇

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…