当前位置: 首页 > news >正文

操作系统实验报告

目录

目录

实验一

一、实验结果

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

一、实验结果

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编译器运行程序

运行结果如下

文件分配

相关文章:

操作系统实验报告

目录 目录 实验一 一、实验结果 实验二 使用信号量实现进程互斥与同步 一、实验结果 1. 使用信号量实现有限缓冲区的生产者和消费者问题 2. 使用信号量实现读进程具有优先权的读者和写者问题 实验三 死锁和预防 一、实验要求 二、实验内容 三、实验结果 实验四 内…...

IPv6--ACL6(IPv6访问控制列表--基本ACL6配置)

ACL基本原理 ACL由一系列规则组成,通过将报文与ACL规则进行匹配,设备可以过滤出特定的报文。 ACL的组成 ACL编号: 在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同,这个后面具体讲。 规则: 前面提到了,一个AC…...

C和指针课后答案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 第八章课后答案 提示:以下是本篇文章正文内容,下面案例可供参…...

C语言——大头记单词

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 每一发奋努力的背后,必有加…...

根据自己修改后的容器制作镜像并上传docker hub

要将自己的镜像上传到Docker Hub,可以按照以下步骤进行操作: 首先,确保已经在本地构建好了需要上传的 Docker 镜像。如果还没有构建,可以使用 docker build 命令来创建镜像。 登录到 Docker Hub 账号。打开终端或命令提示符&…...

Maven 基础安装配置及使用

大家好我是苏麟 , 今天聊聊Maven . Maven Maven , 是Apache公司下基于Java开发的开源项目 . 我们构建一个项目需要用到很多第三方的类库,需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一…...

redis 持久化机制

client redis[内存] -----> 内存数据- 数据持久化-->磁盘 Redis官方提供了两种不同的持久化方法来将数据存储到硬盘里面分别是: RDB 快照(Snapshot) AOF (Append Only File) 只追加日志文件 1 快照(Snapshot) 1. 特点 这种方式可以将某一时刻的所有数据都写入硬盘中…...

MySQL(视图,存储函数,存储过程)

作业1: 作业实现: 首先创建学生表,课程表,以及学生选课表。 CREATE TABLE Student (Sno INT PRIMARY KEY,Sname VARCHAR(20) NOT NULL,Ssex CHAR(1) CHECK (Ssex IN (男, 女)),Sage INT,SDept VARCHAR(20) DEFAULT 计算机 );CRE…...

rockchip 平台 linux FIT 打包格式介绍

1 基础介绍 FIT(flattened image tree)是U-Boot⽀持的⼀种新固件类型的引导⽅案,⽀持任意多个image打包和校 验。FIT 使⽤ its (image source file) ⽂件描述image信息,最后通过mkimage⼯具⽣成 itb (flattened image tree blob) …...

虚拟机安装宝塔的坑

问题: 在虚拟机中centos7和centos8中安装宝塔之后,无法访问面板。 解决: 1.先关闭防火墙(如果本机能够ping通相关端口,则不用关闭防火墙) 2.最新的宝塔会自动开启ssl协议,需要手动关闭。…...

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …...

【分布式监控】zabbix与grafana连接

1.在zabbix- server服务端安装grafana,并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍,很详细的教程 yum install -y https://dl.grafana.com/ent…...

02-编程猜谜游戏

本章通过演示如何在实际程序中使用 Rust,你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题:猜谜游戏。 工作原理如下:程序将随机生成一个介于 1 和 100 之间的整数。然后,程序…...

Web3解密:区块链技术如何颠覆传统互联网

随着区块链技术的崛起,Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构,而是通过去中心化、透明、安全的特性,为用户带来更为开放和公正的互联网体验。本文将深入解密Web3,揭示区块链技术如何颠覆传统互联网的基…...

java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)

一、效果 二、代码 2.1 Acount类 package com.demo1;public class Acount {public static void main(String[] args) {String details "收支\t账户金额\t收支金额\t说 明\n"; //通过字符串来记录收入明细int balance 10000;boolean loopFlag true;//控制循…...

域环境权限提升

Windows系统配置错误 在Windows系统中,攻击者通常会通过系统内核溢出漏来提权,但是如果碰到无法通过系统内核溢出漏洞法国提取所在服务器权限的情况,就会系统中的配置错误来提权。Windows系统中常见哦欸之错误包括管理员凭证配置错误&#x…...

【Debian】非图形界面Debian10.0.0安装xfce和lxde桌面

一、安装 1. Debian10.0.0安装xfce桌面 sudo apt update sudo apt install xfce4 startxfce4 2. Debian10.0.0安装lxde桌面 sudo apt-get install lxde安装后重启电脑。 二、说明 XFCE、LXDE 和 GNOME 是三个流行的桌面环境,它们都是为类 Unix 操作系统设计…...

极狐GitLab 线下『 DevOps专家训练营』成都站开班在即

成都机器人创新中心联合极狐(GitLab)隆重推出极狐GitLab DevOps系列认证培训课程。该课程主要面向使用极狐GitLab的DevOps工程师、安全审计人员、系统运维工程师、系统管理员、项目经理或项目管理人员,完成该课程后,学员将达到DevOps的专家级水平&#x…...

片外存储器_FLASH的页、扇区、块介绍

目录标题 1、什么是FLASH存储器?2、Flash中页、扇区、块是什么意思?有什么区别?2.1、芯片内部框图2.2、页2.3、扇区2.4、块2.5、包含示意图 3、使用FLASH 时候,必须知道的事。 1、什么是FLASH存储器? FLASH属于广义的ROM&#x…...

Python——字符串的基本操作

⼀、 创建 s1 lenovo s2 "QF" s3 """hello lenovo""" s4 hello 亮 s5 """hello shark """ s6 hello world ⼆、简单使⽤ 1.\ 转义符 testimony This shirt doesn\t fit me words hello \ns…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...