操作系统实验报告

news2024/11/14 19:51:39

目录

目录

实验一

一、实验结果

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

一、实验结果

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.coloradmin.cn/o/1398077.html

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

相关文章

list上

文章目录 初步了解list面试题:为什么会有list?vector的缺点:vector、list优点 list结构迭代器的分类list的简单运用insert、erase、迭代器失效(和vector的区别)erase class和structlist的迭代器为什么这个迭代器的构造…

go 语言(九)----struct

定义一个结构体 type Book struct {title stringauth string }结构体使用 package mainimport "fmt"//定义一个结构体 type Book struct {title stringauth string }func main() {var book1 Bookbook1.title "Golang"book1.auth "zhang3"fmt…

PSoc62™开发板之i2c通信

实验目的 使用模拟i2c接口读取温湿度气压模块BME280数据 实验准备 PSoc62™开发板温湿度气压模块BME280公母头杜邦线 板载资源 本次实验是通过模拟i2c时序的方式来进行通信,理论上可以有非常多的方式配置i2c引脚,不像硬件i2c那样芯片出厂引脚已经固…

Apache Doris (六十七): DataX DorisWriter - (1) - 源码编译及集成

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…

怎么移除WordPress后台工具栏的查看站点子菜单?如何改为一级菜单?

默认情况下,我们在WordPress后台想要访问前端网站,需要将鼠标移动到左上角的站点名称,然后点击下拉菜单中的“查看站点”才行,而且还不是新窗口打开。那么有没有办法将这个“查看站点”子菜单变成一级菜单并显示在顶部管理工具栏中…

数据分析-Pandas如何整合多张数据表

数据分析-Pandas如何整合多张数据表 数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据…

Qt拖拽组件与键盘事件

1.相关说明 1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明,NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制) 2.设置widget或view的放置动作函数setDefaultDropAct…

小周带你读论文-2之“草履虫都能看懂的Transformer老活儿新整“Attention is all you need(2)

书接前文:小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1) (qq.com) 上文书说到为什么我们要用casual-decoder架构,把Transformer的左边给省略了,于是得到下图这样的架构 上图是GPT-1的模…

leetcode2312卖木头块

其实不难&#xff0c;主要是你得一眼看出来这个问题缩小规模然后就可以用DP来做了 using ll long long; class Solution { public:long long sellingWood(int m, int n, vector<vector<int>>& prices) {ll f[m10][n10];ll p[m10][n10];memset(p,0,sizeof p)…

AI时代—ChatGPT-4.5的正确打开方式

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

数据结构——Java实现栈和队列

一、栈 Stack 1.特点 &#xff08;1&#xff09;栈是一种线性数据结构 &#xff08;2&#xff09;规定只能从栈顶添加元素&#xff0c;从栈顶取出元素 &#xff08;3&#xff09;是一种先进后出的数据结构&#xff08;Last First Out&#xff09;LIFO 2.具体实现 Java中可…

win系统环境搭建(十二)——Windows系统下使用docker安装redis

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十二&#xff09;——Windows系统下使用docker安装redis 文章目录 win系统环境搭建&#xff08;十二&#xff09;——Windows系统下使用docker安装redis1.创建文件夹2.docker-compose.yaml配置文件3.red…

《WebKit 技术内幕》之四(1): 资源加载和网络栈

第四章 资源加载和网络栈 使用网络栈来下载网页和网页资源是渲染引擎工作的第一步 1.WebKit 资源加载机制 1.1 资源 网页本身就是一种资源、网页还需要依赖很多其他的资源(图片、视频) &#xff08;1&#xff09;HTML 支持的资源主要包括以下几种类型&#xff1a; HTML 页…

【动态规划】【C++算法】741摘樱桃

作者推荐 【动态规划】【数学】【C算法】18赛车 涉及知识点 动态规划 LeetCode741 摘樱桃 给你一个 n x n 的网格 grid &#xff0c;代表一块樱桃地&#xff0c;每个格子由以下三种数字的一种来表示&#xff1a; 0 表示这个格子是空的&#xff0c;所以你可以穿过它。 1 表…

Golang 搭建 WebSocket 应用(六) - 监控

我在上一篇文章中&#xff0c;提到了目前的认证方式存在一些问题&#xff0c;需要替换为一种更简单的认证方式。 但是最后发现&#xff0c;认证这个实在是没有办法简单化&#xff0c;认证本身又是另外一个不小的话题了&#xff0c;因此关于这一点先留个坑。 本文先讨论一下另外…

前端开发必备 HTML的常用标签(二)

目录 一、HTML语言 二、水平线标签 三、字体样式标签 四、注释和特殊符号 一、HTML语言 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于创建网页的结构和内容。它由一系列的标签组成&#xff0c;这些标签定义了网页中各个元素的结…

商铺工厂119消防火灾SOS声光一键报警器平台联网

商铺工厂119消防火灾SOS声光一键报警器平台联网 1.设有火灾自动报警系统的建筑&#xff0c;宜选择符合相关现行国家技术标准的消防应急广播、火灾声光警报类产品&#xff0c;由火灾报警或消防联动控制器进行控制&#xff0c;在消防控制室应能一键启动全楼火灾声光警报或向全楼进…

阿里云腾讯七牛内容安全配置

一&#xff0c;阿里云 1&#xff0c;配置RAM角色权限 向RAM用户授权系统策略权限&#xff1a;AliyunYundunGreenWebFullAccess 2&#xff0c;内容安全控制台——授权访问OSS 不授权——会报错——no permission(not authorized about role AliyunCIPScanOSSRole)

Pytest插件“pytest-selenium” - 让自动化测试更简洁

在现代Web应用的开发中,自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具,以便于使用Python进行Web应用的自动化测试。本文将深入介绍 pytest-selenium 插件的基本用法和实际案例,助你轻松进入无忧的Web应用测试之…