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

浅谈操作系统

我们前面谈到了一个可执行程序首先会到内存进行预先加载~而在我们的计算机中第一个被加载的软件就是操作系统~

操作系统的主要工作就是对软硬件资源进行管理~

这里我们先从操作系统下层开始讲起~

我们把操作系统类比为校长,驱动程序类比为辅导员,底层硬件类比为学生~

试问如果校长想要管理学生,需要和学生进行直接接触吗?——不需要,校长只需要得到学生的相关数据就行了~校长做出决策需要整理学生数据~辅导员落实决策,去收集学生的数据最后交给校长~

管理的本质从来都不是谁与谁去见面,而是获取到它的数据,然后对数据进行管理!

那么当校长获取到大量的数据时又应该如何去管理呢?——借助数据结构

校长不可能事无巨细去观察每一位学生的具体细节, 所以他需要一个能大概整体概括学生的基本数据~

而在我们学习的语言中,有这么一种方式是用来描述一类事物特征的——结构体~

我们通过结构体对学生进行描述,里面添加关于学生的基本信息。

然后结构体构造大量对象~每个对象基本属性一致但数据各不相同~这是描述过程

校长不可能只对一位学生作管理,所以需要像链表一样把所有学生的结构体对象都链接起来~这是组织过程,当然组织的形式有许多种,但无论哪一种背后都是利用容器(vector,list等等)进行组织!

先描述,再组织,最终形成对数据的增删查改,而这就是对数据的管理~

所以管理的本质就是对数据的管理,而实现的方法就是对数据进行描述再组织起来!

而操作系统会对驱动程序进行管理~也会对底层硬件进行管理~本质都是对数据进行管理!

 

接着我们再对操作系统的上层进行分析~

这里我们用银行来类比操作系统~

银行当前的功能就是帮助用户进行资产的管理~

那么是直接开放大门让用户进银行里面亲自存钱,取钱吗?——当然不可能,你怎么保证他会不会多取钱或者少存钱进行虚报呢?

所以银行设置了一批窗口~让用户到这些窗口填写个人的基本信息,由我们银行的工作人员进行信息核对,再替代用户进行用户对资产的管理!而这种窗口也称为系统调用窗口~用户想要去访问操作系统底下所管理的底层硬件就必须通过系统调用接口,实际上系统调用接口是操作系统为用户开发的公共类~它可以代替用户访问底层硬件~但它本质是归操作系统所管理~

可是不是所有人都会想到系统调用接口的,就比如一位80岁老大爷,他在银行窗口面前大字不识一个无从下手呀~而这时候银行的经理就会出现手把手来帮助大爷。而银行经理就是用户操作接口~

用户操作接口里面封装了系统调用接口,但从形式上会更加便捷~因为是他帮你调用系统接口,不是你自己来,你只需要调用用户操作接口就行了~而用户操作接口里面最经典的就有c语言标准库,我们平时使用的printf,scanf就相当于用户操作接口,而在printf,scanf内部则是封装了调用系统接口的函数~用户操作接口的出现可以减少系统调用接口的使用成本~

另外用户操作接口还可以根据你所在的平台不同而去调用不同平台的系统调用接口~

所以最后我们总结一下:为什么我们计算机中操作系统会是第一个被加载进内存的软件呢?

因为操作系统对下能够管理好硬件资源~对上能够提供出一个良好的运行环境!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python处理日期时间常用操作
  • 用Ollama 和 Open WebUI本地部署Llama 3.1 8B
  • 前端性能优化-Gzip工作原理
  • java之多线程篇
  • Nodjs编程-typeorm实体管理器
  • OpenCV||超详细的灰度变换和直方图修正
  • 从容应对技术面试:策略、技巧与成功案例
  • 众人帮蚂蚁帮任务平台修复版源码,含搭建教程。
  • C语言程序设计之基础易错题锦集2
  • Mybatis学习(3)
  • 数据结构 二叉树和堆总结
  • JavaEE: 进程和线程
  • 《云数据中心网络架构与技术》第四章:金融数据中心网络的总体架构与方案演进
  • 面壁发布端侧视觉理解模型 MiniCPM-V 2.6;ChatGPT 人形机器人二代正式发布丨 RTE 开发者日报
  • RabbitMQ高级特性 - 消息分发(限流、负载均衡)
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • ES6系统学习----从Apollo Client看解构赋值
  • gulp 教程
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript设计模式与开发实践系列之策略模式
  • Java反射-动态类加载和重新加载
  • Python打包系统简单入门
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 笨办法学C 练习34:动态数组
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 复杂数据处理
  • 基于游标的分页接口实现
  • 解决iview多表头动态更改列元素发生的错误
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 马上搞懂 GeoJSON
  • 巧用 TypeScript (一)
  • 如何编写一个可升级的智能合约
  • 如何胜任知名企业的商业数据分析师?
  • 一个完整Java Web项目背后的密码
  • gunicorn工作原理
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​ssh免密码登录设置及问题总结
  • #数据结构 笔记一
  • (1)常见O(n^2)排序算法解析
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (k8s中)docker netty OOM问题记录
  • (TOJ2804)Even? Odd?
  • (初研) Sentence-embedding fine-tune notebook
  • (二)pulsar安装在独立的docker中,python测试
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)EXC_BREAKPOINT僵尸错误
  • ***原理与防范
  • .a文件和.so文件
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net Core缓存组件(MemoryCache)源码解析