游戏开发者的操作系统课设的正确打开方式(Unity3D)

在网页中交互unity3d 1、在unity3d中调用网页js函数        如果在html中有脚本函数,则在unity3d中我们可以使用Application.ExternalCall调用js函数,改方法只适合在web3D环境下使用。 该方法支持基本类型的传递和数组传递,任何类型都会转换成字符串类型使用。 例子代码         Application.ExternalCall("SayHello", 阅读详情

目录

前言:

课设要求:

      运行一览图:

一、项目总体结构

1、ipnut2,output2文件夹

2、Materials,Prefabs,Scenes

3、SimulationSystem

二、较为详细的介绍

1、仿真系统

2、场景演示

3、GUI

(1)日志输出

(2)内存占用

(3)页表信息

(4)死锁检测

(5)实时监控

(6)按钮控制

4、事件系统

三、成果展示

四、总结

五、源码和可执行文件下载地址



前言:

        虽然我的兴趣是游戏开发,将来也打算从事这个行业。但是因为某些不可抗原因,我的大学专业和游戏开发关联性并不是很大。所以,我必须得学很多以后实际上并不怎么会用到的专业课知识。

        比如操作系统。

        上个学习操作系统的考试有多BT这里就不多说了,这个学期还有个折磨人的操作系统课设——并发环境以及进程低级调度的仿真实现。


课设要求:

       (由于某些原因课设要求文档无法在这里全部发出,这里仅简要阐述需要完成的功能)

  1. 裸机仿真设计基础(CPU、内存、时钟中断、输入输出设备中断、地址变换机构(MMU)、CPU 与寄存器的仿真设计、时钟中断、作业请求的输入输出中断、缺页中断的仿真、内存)。
  2. 并发作业请求文件的设计。
  3. 用户程序指令文件的设计。
  4. 作业运行及调度详细记录的文件保存。
  5. 进程控制块 PCB 设计
  6. 仿真实现进程控制原语
  7. 仿真实现作业管理(Linux2.6调度算法)与虚页存储管理(选题)

        课设的主要要求包括但不局限于以上内容。而本文不会对以上各条目的实现进行详细讲解,只会对项目各模块进行大概介绍,以及运行结果的展示。

      运行一览图:


一、项目总体结构

        采用了Unity引擎主要做可视化的内容,同时操作系统核心代码也借助了协程的机制。

        项目结构如下:

      

1、ipnut2,output2文件夹

        分别存储了 输入指令文件,输出日志结果文件。

2、Materials,Prefabs,Scenes

        分别存储了材质,预制体,场景(和可视化部分有关,与仿真系统核心无直接关联)

3、SimulationSystem

        存储了操作系统核心代码。

        在实现中,操作系统内核部分和可视化演示以及GUI界面部分是分离的。我是先写好并调试测试好仿真系统的代码,然后再写演示场景以及GUI部分(留出可以供外部调用的接口函数),然后再在仿真系统代码中相应的地方调用这些接口;同时为了防止循环调用等问题,还写了一个简易的事件系统,GUI界面的按钮触发信号通过事件系统传达给操作系统,从而作为用户的输入之一

(如下图)。


二、较为详细的介绍

        下面开始对这个项目的各个部分进行进一步的介绍。

1、仿真系统

        这部分涉及太多的专业知识,全讲清楚的话估计要新开个专栏。这里只是简单略讲一下大致实现代码吧。

        课设要求文件中有五个主要线程要实现:

        (在具体实现中这五个线程都被抽象为了全局单例类)

        而在具体实现中,我并没有用线程,而是借用了协程(所以他们每帧执行是有顺序的,这个地方有点投机取巧,不过有些线程安全问题就不用操心了)。          

        而这五个线程,在实际的实现中的关系,实际上类似于一个星形拓扑结构。核心的Linux2.6进程调度算法在ProcessScheduling_thread线程中实现,以这个线程为中心,通过调用其它线程的相关接口函数达到线程间的通信。

(部分代码图)

        下面几句话简单介绍一下其它四个线程:

JobRequest_thread:用于新作业请求中断的仿真,常用鼠标双击事件而发生:假设计算机每10 秒查询一次外部是否有新作业的执行请求,在“并发作业请求文件”中判读是否有新进程请求运行。

InputBlock_thread:阻塞队列的唤醒线程。外设输入变量造成进程进入阻塞态,如键盘给变量赋值。

OutputBlock_thread:阻塞队列的唤醒线程。外设输出变量造成进程进入阻塞态, 如显示器显示。

PageInterruption_thread:处理缺页中断(LRU页面置换算法的实现)。

2、场景演示

        这部分主要用来可视化直观展示各个进程的调度过程。主要形式为固定视角的3D模型动画:

        

        其中,每一个方块实体都代表一个进程,其上方会有红色的数字标注进程(作业)号。并且每个方块都会被随机分配一个颜色。

        场景中主要有五个区域:最上方用来显示场景中现有的作业和进程的方块(如果新的作业进入后备队列就会在这一栏增加一个对应的方块,如果进程运行完毕退出系统则会在这一栏删除对应的进程)。下面从左往右如文字标注,分别是后备队列,就绪队列组,CPU,阻塞队列。

(如下图)

        方块在这五个区域的实时行动轨迹则直观反映了进程在被调度过程中的周转轨迹。

        此外还有个小细节,在方块预制体上放置了一个粒子系统,用来显示方块最近 一小段时间的行动轨迹(类似拖尾):

(同时拖尾的颜色和方块的颜色一致)

3、GUI

图形用户交互界面分为六个板块,如下图:

 

下面开始逐一介绍。

(1)日志输出

        系统运行时各事件的日志信息都会输出在这里。

(2)内存占用

        按要求,这个仿真系统采用页式存储管理,一共有16个内存块,每个进程分配4个,对于某个进程所分配的内存块,在这里都会实时用对应进程的方块的颜色填充:

(3)页表信息

        这里显示了每个正在并发中的进程所对应的四个内存块中存储的页号信息,如果为-1则表示空(因为页号从0开始)。这里也是实时显示的,所以可以方便用来测试页面置换算法是否正确。

(4)死锁检测

        实时自动检测,如果方块为绿色则没有死锁,为红色则发生了死锁。

(5)实时监控

        对应标注的信息会实时在这里显示,这个没啥好解释的叭。

(6)按钮控制

         开始按钮按了后会变为Disabled防止重复开始,结束按钮只有在开始按钮按完后才能按,同时也是只能按一次(因为结束后会对进程周转信息进行结算)。实时作业请求按钮是在运行过程中实时新增作业用的。然后滑动条是用来控制系统运行速度的(实际上就是调了一下timeScale)。

4、事件系统

        事件系统非常的简陋,主要就是写了一个Event基类:

using System;
namespace OS
{
    /// <summary>
    /// 事件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Event<T> where T : Event<T>
    {
        private static Action mOnEvent;

        public static void Register(Action onEvent)
        {
            mOnEvent += onEvent;
        }
        public static void UnRegister(Action onEvent)
        {
            mOnEvent -= onEvent;
        }
        public static void Trigger()
        {
            mOnEvent?.Invoke();
        }
    }

}

然后需要什么事件就写一个类继承这个基类,比如这样:

 然后事件的注册注销和触发就全局调用事件对应的派生类即可。


三、成果展示

        最后运行一下整个流程吧:

一位游戏开发者的仿真操作系统课设


四、总结

游戏开发真香!


五、源码和可执行文件下载地址

文件 · master · 最爱番茄的土豆 / 操作系统课设_Unity3D · GitCode

        

         

        

        

Unity3D游戏开发初探 【狗刨学习网】 一、Unity3D平台简介   Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等 阅读详情

相关推荐

Unity3D 中正确调用CUDA程序详解

Unity3D 是一款强大的游戏开发引擎,可以实现各种各样的游戏效果。然而,在某些情况下,使用CPU来处理游戏中的复杂计算任务可能会导致性能瓶颈。为了解决这个问题,我们可以利用CUDA来使用GPU进行并行计算,从而提高游戏的性能。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀本文将详细介绍如何在Unity3D中正确调用CUDA程序,并给出技术详解和代码实现。一、CUDA简介。

weixin_49669470的博客 1467

浏览器在本地打开Unity3D开发的webGL的项目

1、打开火狐firefox浏览器,在地址栏内输入 about:config ,出现Firefox配置信息,“三思而后行”点击“接受风险并继续”。3、搜索 security.fileuri.strict_origin_policy ,双击设置为false,允许加载本地资源。2、在最上面的搜索栏中搜索 webgl.force-enabled,双击,设置为true,强制开启webgl支持。4、关闭Firefox,然后重新启动,就可以打开本地的webgl文件了。搜索 webGL,把找到的结果的状态由。

qq_41263535的博客 2510

Unity3D | 经典游戏Xiaoxiaole

❥你的关注是博主坚持创作的伟大动力❥ ☀️前言 Explanation: 之前用的ScreenToGif录屏,因为上传的.gif最大不超过5MB,所以做了不少删帧和色彩弱化等处理,这才导致色彩看上去不是很舒服,不要盯着它看太久,不然会有点难受... 由于使用的素材是现成的,没有花时间精力去扒,所以细节方面可能不是做的很好 ☀️项目效果展示 ☀️项目概况 ⭐️整体布局 ⭐️场景展示 ⭐️玩法介绍 ⭐️场景元素 开始按钮(玩家通过点击开始按钮,进入新的一局游戏......

米莱虾 6223

打开unity3d工程

一、目的: 1、想多知道几种打开U3D的方法 二、步骤 1、方法1: a、进入Unity软件主界面,点击菜单栏上的“File”按钮,子啊弹出来的下拉列表中选中“Open Project” b、再弹出来的“OPen Project”窗口中点击“OPen Other”按钮,选择游戏工程的根目录。 ①总结:good:最方便;but:麻烦 2、方法二 进去Assets文件夹,双...

qq_40544338的博客 1万+

2018年Unity3D游戏开发前景预测

随着移动手机游戏盛行,游戏开发人才供不应求,如何成为一名优秀的开发者?掌握Unity3D开发技术是不可跳过的一环。随着移动互联网的发展,移动端游戏日益盛行,据了解,Unity全球开发者超过300万,1/4在中国,超过5000家游戏公司和工作室在使用Unity3D开发。学习Unity3D游戏开发,未来职业发展前景非常可观。Unity 3D是什么?Unity 3D到底是什么?如此受欢迎,市场占有率如此

码农王也的博客 1万+

基于unity3d的塔防游戏的设计与实现

塔防,即炮塔防御(Tower Defence),也统称TD ,指一类通过在地图上建造炮塔或类似建筑物,以阻止游戏中敌人进攻的策略型游戏,要有阵图。塔防受众很广,游戏模式简单而且可玩性极强,时至今日,塔防在游戏应用中依然是最热门的下载类型之一,比较经典的像《植物大战僵尸》。本设计使用当前流行的跨平台游戏引擎Unity3d,编程语言为C#。在游戏中,玩家可以在任何空白的地块上建造各种防御塔用于攻击不同类型的怪物,怪物会按照预定的路线前进,当进入目的地的怪物到达一定数量后游戏会失败;

weixin_112233的博客 2892

Unity3d二 如何打开unity3d工程

如何打开unity3d工程 -方法一: 1。进入Unity软件主界面,点击菜单栏上的“File”按钮,子啊弹出来的下拉列表中选中“Open Project”   2。再弹出来的“OPen Project”窗口中点击“OPen Other”按钮,选择游戏工程的根目录。 -方法二: 进去Assets文件夹,双击场景文件(后缀为.unity的文件),我这里的场景文件为scene.unity -方

QQ18334373taikongyi的专栏 1万+

Unity3D——PlayerPrefs 游戏存档

unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs。在游戏会话中储存和访问游戏存档。这个是持久化数据储存,比如保存游戏记录。 Mac OS在Mac OS X上PlayerPrefs是存储在~/Library/Preferences文件夹,名为unity.[company name].[product name].plist

virus2014的专栏 3380

Unity3d课设

跑酷游戏分析 设计思想 本课设的设计思想来源于我们课上的一个游戏-飞机大战。当时老师在给我们讲授飞机大战这个游戏的时候,我就在想是不是可以自己也做一个类似于这样的游戏。游戏主要由三部分组成:小球、障碍物、跑道。点击键盘左右键可以移动小球,来躲避障碍物。这个作品中用到了预制体、添加材质、碰撞体等技术。 开发步骤 1、先新建一个Cube,然后将这个Cube的Z轴设置为1000,然后再新建一个球体,用于移动。再新建一个Cube,设置其Scale为3,作为障碍物。障碍物我们可以通过预制体的方式来制作,以..

qq_42239440的博客 1802

【Unity3D】二、制作滚球游戏学习Unity3D(上)

从创建项目开始 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者云端项目,点击New project或者右上角的New都可以新建项目。 然后在1处填写创建项目的名称,2处选择创建地址,3处选择Template(模板),可以选中3D或者2D。 稍等片刻即可进入unity的主页面。 保存Scene并管理Assets 进入unity之后,可以看到已经预设的SampleSc...

超级超级小天才的博客 3479

Unity3d 制定游戏循环的策略

在使用Unity3d开发游戏的时,我们总会涉及Unity内置的生命周期函数。弄清这些函数的调用顺序和特性十分重要,因为这影响到逻辑的执行顺序,例如:初始化要在使用之前,注册回调要在响应之前等等。 通常说来,在大型商业项目中,我们需要自制一套游戏循环,来满足多变的游戏玩法。哪些现有的生命周期函数可以使用?哪些需要被替换掉?这些取舍贯穿了整个游戏开发过程。 生命周期 Unity3d的函数调用有固...

阿修罗道 2577

Unity3D 转换微信小游戏指引 01 环境流程

Unity3D 转换微信小游戏指引系列(第一期)

2301_76984003的博客 5304

Unity3D打开本地文件夹(PC)

打开本地文件夹,也就是打开自己电脑上的文件夹,来进行选择文件到unity系统中使用,可以是模型,也可以是图片,视频啊等等等等,具体使用看情况哦大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。下面就让我们进入正文吧!提示:以下是本篇文章正文内容,下面案例可供参考直接上方法,自行打印即可//获取本地文件夹里所有模型文件i++)//忽略关联文件continue;//Debug.Log("文件名:" + files[i].Name);

心疼你的一切博客 5209

如何成为一位Unity3D游戏开发者:对游戏开发抱有热情

如何成为一位Unity3D游戏开发者:对游戏开发抱有热情

蓝鸥_嘟嘟的小屋的博客 1716

Unity3D游戏开发之游戏读/存档功能在Unity3D中的实现

大家好,我是秦元培,欢迎大家关注我的博客。近期博客的更新频率基本直降到冰点,因为这段时间实在是忙得没有时间来写博客了。今天想和大家分享的内容是RPG游戏中游戏存档的实现,因为最近在做一个RPG游戏的项目,所以遇到这个问题就随时记录下来,在对知识进行总结的同时可以将这种思路或者想法分享给大家,这是一件快乐而幸运的事情。我讨厌写按部就班的技术教程,因为我觉得学习是一种自我的探索行为,如果一切都告诉你了,探索的过程便

素履独行 | 元培的个人博客 4万+

【Unity3D开发小游戏】《塔防游戏》Unity开发教程

文章目录一、前言二、版本三、开始1、游戏规则2、艺术风格3、摄像机设置4、光线设置5、地面设置6、建筑物设置7、城堡设置8、怪物设置9、生成怪物10、子弹设置11、防御塔设置12、内容拓展 一、前言 在本教程中,我们将创建一个小的三维塔防御游戏与一个完全独特的图形风格。该游戏将非常容易制作,将不需要任何三维建模技能,没有动画,没有什么是复杂的。 二、版本 Unity5.3.1f1 较新的版本也应该...

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 8536

基于Unity3D的塔防游戏

课题主要内容 设计建议塔防游戏,实现规定敌人移动路线,在塔的基座的基础上升级塔、卖掉塔、更换塔,来射击敌人。 要求:1、基于c#编程语言实现; 2、发射子弹攻击敌人; 记录分数,判定游戏成功与否。 课题研究方案 基于Android平台进行开发,开发工具使用Unity3D 3.7 、 PhotoshopCS6、Visual Studio 2019。 游戏UI设计与制作主要用PhotoshopCS6,...

weixin_46237892的博客 3641

Unity3D游戏开发实战:从课设源码到模块化古庙探险游戏

模块化设计是软件工程的核心思想,旨在通过高内聚、低耦合的组件构建可维护、易扩展的系统。在游戏开发领域,这一理念尤为重要,Unity3D的组件化架构天然支持模块化开发,通过C#脚本实现功能解耦。其技术价值在于提升代码复用性、简化团队协作,并加速迭代过程。应用场景广泛覆盖从简单课设到商业游戏的各类项目,尤其适合探索解谜、角色控制等玩法类型。本文以一份古庙探险游戏源码为例,深入解析其玩家控制、交互谜题、场景管理等核心模块的实现原理,并探讨如何通过事件驱动设计和有限状态机等模式进行优化扩展,为开发者提供从理解现有项

weixin_34246826的博客 294
上一篇: GameFrameWork框架(Unity3D)使用笔记(一)Entry
下一篇: GameFrameWork框架(Unity3D)使用笔记(二)ProcedureChangeScene
咖啡咖_CoffCa
博客等级 码龄6年 116粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡咖_CoffCa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值