操作系统(二):操作系统结构

好好学习,天天向上

本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star

操作系统服务和接口

在上一篇文章中讨论什么是操作系统的时候我举了个例子,说操作系统就是帮我们管理大宅子的管家,既然是管家,那么肯定是有很多才能的,不然难以担此大任。正是管家有诸多才能,才可以更好地服务于我们,对于操作系统而言,这些才能就是操作系统服务。那么都有哪些操作系统服务呢?举几个例子:

· 用户界面
· 程序执行
· I/O 操作
· 文件系统操作
· 通信
· 错误检测
· 增值服务
· 资源分配
· 统计
· 保护和安全
· 操作系统服务
· 操作系统程序接口(系统调用)
· 操作系统用户界面
· 系统程序
  · · · · · 

既然操作系统有这么多的服务,那么我们平时是怎么去使用操作系统的呢,或者说,平时我们是怎么使唤管家为我们服务的呢?有两种方式。

第一种,给管家留张小纸条,告诉他下午去菜市场买几瓶82年的青岛啤酒,然后管家看到后就屁颠屁颠屁颠跑去了。这种方式俗称命令行,也就是黑乎乎的窗口,在黑窗口里面敲命令然后系统执行命令。这种方式用起来可不算简单,要是遇上个什么复杂的操作,敲键盘都得敲半天。

第二种就是指哪打哪,比如我看见花园里该除草了,就把管家喊过来,说:“你看这里杂草这么多,你去安排一下,把草除除吧”。然后管家又屁颠屁颠跑去干活了,这种方式就是图形化界面,比如咱们的Windows,MacOS。这种方式可比第一种简单多了,很多操作用鼠标随便点几下就可以完成了,舒服极了~~~

看起来操作系统好像也没什么吗, 作为普通用户而言,点点鼠标敲敲键盘就能完成很复杂的操作,就算对于开发者而言,调调常用的API就能完成需求。之所以我们可以很这么方便地使用操作系统,那是因为操作系统屏蔽了诸多实现细节。我们平时使用的叫做用户接口和系统程序,用户接口和系统程序是操作系统提供给用户的服务形式,那么谁为系统程序提供服务呢——系统调用。系统调用是操作系统提供给程序的服务程序。

由于系统调用的存在,大大简化了程序员的工作,上一篇文章中不是说过系统运行分为用户模式和内核模式吗,当我们调用一个系统API的时候,操作系统就会从用户模式切换到内核模式,然后去做一系列的工作。比如open()

当执行open的时候,CPU从用户模式切换到内核模式,操作系统根据名称 “open” 查表,找到系统调用的位置,再到系统调用向量表中找到入口地址,然后开始执行系统调用的代码,执行完后,CPU又切换到用户模式,将执行结果返回给应用程序。

系统调用大致分为五大类:进程控制文件管理设备管理信息维护通信

既然系统调用是为系统程序提供服务的,一般认为用于管理、维护操作系统的程序是系统程序。那么哪些属于系统程序呢?

  • 文件管理
  • 状态信息
  • 文件修改
  • 程序语言支持
  • 程序装入和执行
  • 通信

操作系统结构

十几年前,还没有智能机,只有功能机,功能机性能有限,只能玩玩俄罗斯方块什么的。随着手机性能的不断进步,开始出现了Android和IOS这样的智能手机操作系统。早期的Android系统功能还很有限,界面也很丑,经过这么多年的发展,才有今天的局面。我认为推动操作系统结构发展的原因有两个,第一是在现有的硬件基础上优化系统结构从而提升性能,第二点是为了适应不断更新迭代的计算机硬件从而体现硬件的价值

  • 简单结构

    早期的计算机功能很简单,在开发操作系统的时候,根本不用去过多地考虑系统该怎么设计,直接干就完事儿了。就算有很好的设计,在计算机硬件的限制下,也不能很好地体现出它的价值。所以最开始的操作系都是规模小,功能简单的,一个人干几个月就能搞个操作系统出来,缺点就是不利于维护,随着计算机的发展,这样的操作系统就显得不太合适了。

  • 层次结构

    为了更好地设计操作系统,可以采用模块化的思想,层级结构就是一种模块化的思想。层次结构就和盖楼一样,最底层为硬件,最高层为用户层,每层只使用低层次的功能和服务,也就是说上层可以调用下层的服务但不可以调用其它层的服务。就像下图这样:

    这种结构带来的好处就是简化了系统设计,便于调试和升级维护。比如我可以先去调试第一层,当第一层没有问题后再去调试第二层。但同样的,这种设计也存在缺点,就是层的定义困难以及效率差。比如一个程序要进行I/O操作,需要经过I/O层,内存管理层,CPU调度层,然后传给硬件,每一层都会增加额外的开销,带来的结果就是比在非分层系统上执行要耗费更多的时间。

  • 微内核结构

    随着操作系统的进一步发展,功能不断地叠加,内核也随之扩大,所带来的问题就是管理起来越来越困难。就像一个人,越胖活动起来就越困难。所以就出现了微内核技术来优化模块化结构,就是将一些非核心的功能移到用户空间去,这种设计带来的好处就是方便扩展系统,所有新服务都可以在用户空间增加,内核基本不用去做改动。但是这也带来了一个问题,就是增加了用户空间和内核空间的通信的开销,所以引入了消息传递机制。

  • 模块化结构

    模块化结构将系统的功能划分为不同的模块,模块之间通过接口进行通信。模块化结构类似于分层结构,不同的是分层结构只能相邻两层之间进行通信,而模块化结构就不受此限制。

    模块化结构的一个特点就是用的时候才会被加载到内核,类似于我们平时用电脑的时候用到鼠标或者键盘才会将其插到电脑上一样,优点就是灵活,我们还可以自己去设计一个模块然后装载进系统。

  • 混合结构

    当系统设计者们不满于单一系统结构时,就会选择混合结构去满足性能、安全等多方面的需求,也就是多种结构并存的方式。例如Mac OS X

虚拟机

虚拟机我相信很多人都用过吧,虚拟机是一种通过软件模拟实现,具有完整硬件系统功能,并运行在一个完全隔离环境中的完整计算机系统。虚拟机也分为很多种,有高级语言虚拟机供特定语言运行使用的,还有在一台计算机上虚拟出多个操作系统的。

  • Java虚拟机

    学Java的都应该知道,Java的一大特点就是 “一次编写,多处运行”。为什么Java可以有这种特点呢?因为有Java虚拟机(JVM)的存在。Java程序都是跑在JVM里面的,不直接与电脑的操作系统和计算机硬件接触。所以只要在特定的平台安装特定的JVM,比如Linux版的,Windows版的,就可以实现一套代码到处运行。

  • 工作站虚拟机

    工作站虚拟机就是在一个宿主操作系统中安装很多个操作系统。比如我们可以在自己的电脑上安装一个VMWare,然后在VMWare中去安装不同的操作系统

    这种方式最大的好处就是方便,比如我平时需要在CentOS上使用Docker,要是我单独再去搞一台电脑装CentOS,不仅耗费金钱还很麻烦。如果采用安装虚拟机的方式就可以为我省下一大笔钱,甚至我还可以同时跑很多个CentOS做集群玩。

  • 服务器虚拟机

    服务器虚拟机和工作站虚拟机有点类似,但不同的是它是直接将将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,不需要宿主操作系统。有两种模式:

    一虚多:一台服务器虚拟成多台服务器虚拟机

    多虚一:多个独立物理服务器虚拟为一个服务器虚拟机

    我认为这种方式最大的好处就是提高了资源利用率,比如我们学校,有云机房也有传统机房。我最大的一个感受就是,有的实验室里面的电脑平时用的很少,可能也就上课的时候用一下,不用的时候就在那闲着。等过了几年,性能不够的时候用起来又有点卡,很不爽。而云机房这种服务器虚拟机就很不错,可以动态的扩容,提高了资源利用率。

总结

这篇文章先介绍了操作系统服务和接口,然后介绍了几种操作系统结构,如简单结构、层次结构、微内核结构等。最后介绍了几种虚拟机,有JVM,工作站虚拟机,服务器虚拟机。下一篇文章就开始将进程了~~~

码字不易,可以的话,给我来个点赞收藏关注

本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star

猜你喜欢

转载自blog.csdn.net/weixin_43461520/article/details/108545283