热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发该软件的操作系统_外甥问我什么是操作系统?

我把自己以往的文章汇总成为了Github,欢迎各位大佬starhttps:github.comcrisxuanbestJavaer已提交此篇文章外甥上大一了ÿ

我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 starhttps://github.com/crisxuan/bestJavaer
已提交此篇文章

外甥上大一了,起初我还非常担心他,担心主要有两方面的原因:

  • 从小一直是校草,长的太帅,会不会天天谈恋爱去了
  • 担心在大学没能做好自己的规划

于是经常和他视频聊天,外甥小我没几岁,我们经常以兄弟相称,聊起来自然和谐

从我这几次和他聊天可以看出,我的担忧有些太过了

他好像从没刻意他的帅气,而是不断的充实自己的才华,篮球打得好、街舞跳的好、还去参加各种志愿者活动

关键是最近还对计算机产生了强烈的兴趣。

唉,帅就算了,还这么认真,这年轻人不讲武德啊

上周末打电话,竟然问我什么是操作系统? 为什么要有操作系统?

于是就有了这篇文章,也准备把我外甥的计算机相关疑问全部承包了,喜欢我记得关注我 公号 龙跃十二

5aa0739d1f6b59820d3c6e9a89914b77.png

喜欢我几个关注我

什么是操作系统?

说实话很难有一个准确的定义去描述操作系统,看了多本关于操作系统的书中是这样说的。

操作系统是一个运行在内核态的软件,该软件对底层各种硬件资源做了抽象和管理,并提供统一的API接口供应用程序去调用这些资源。

这句话涵盖了好几个知识点

  1. 操作系统是一个软件
  2. 操作系统软件运行在内核状态下的软件,不在用户态下,应用开发者开发的各种系统软件都是在用户态下运行的

撒是用户态,撒是内核态?你很喜欢剖根问底,这个后面再说

  1. 对各种底层硬件资源进行了抽象管理

抽象了处理器、存储器、时钟、磁盘、网络接口、外设等底层硬件资源,把各种资源都抽象为一个个的文件描述符

设想一下,多核情况下,多个应用程序同时使用一种资源,就会造成混乱局面,此时操作系统就会扮演一个管理者去管理这些资源的使用者。

  1. 提供统一对外访问的接口
3d3b16625ef91bf025322129aa982b5f.png

操作系统处在中间层,上面有各种系统应用程序、开发人员、用户,下面有各种计算机硬件资源。

怎么脑海中浮现了 上下为难 的表情包,哈哈哈有内味了

操作系统设计者硬件编程人员可以直接去操作硬件资源

操作系统设计者这不用解释了,都懂的,都在设计操作系统了,总不至于不能操作硬件资源吧

硬件编程人员这个大家可能稍微陌生点,有一类开发人员是直接对硬件进行操作的,如果是你是学习电子信息相关专业的,应该很熟悉烧程序

大学做实验的时候龙叔就经常把写好的汇编程序或者C语言程序编译完成了直接烧到计算机硬件上,这叫烧程序

我写的程序里面有对硬件资源进行操作,比如操作某某管脚、某个串口等等

所以没有操作系统也是可以直接操作计算机硬件资源,也是可以跑程序的

那为啥还要操作系统呢?

为什么要有操作系统?

上面已经说了,没有操作系统是可以操作计算机硬件资源的,那为什么要有呢?

1)最早期计算机是没有操作系统的,每次要变更一下功能,都要手动去调整硬件,费时费力。

2)随着电子管技术的发展,各种硬件资源可以做成通用的,此时就急切需要一个操作系统去控制这些资源,每次改功能,只需要修改输入的信号即可。

3)提升计算机的功能性和灵活性

操作系统的演变

串行处理

20世纪40-50年代,电子管技术得到了发展,诞生了第一台电子管计算机

123ae51fc5f2567ef4285816852cb8ea.png

由于零件的集成度太低,一台计算机必须用一个house来放置

而且这台机器当时数百万美元的标价,价格是真的贵,一般人用不起,都是一些豪横的组织才用得起

早期的计算机是没有操作系统的,操作人员直接和计算机硬件交互,类似下面这样

26885d8300e1f7d7926ffca55f2e7ddd.png

所有的操作在控制台上进行,控制台上有显示灯、触发器、输入输出设备

每次作业都需要有专门的的人员来操作,使用汇编语言写程序到纸片上,再穿孔成卡片,再将这些卡片交给专门的操作人员去操作,再花费时间等操作结果。

计算机成本高,操作过程复杂,时间还长

人们很自然就想到减少机器时间的浪费,于是就诞生了批处理系统

批处理系统

到了20世纪50年代General Motors开发了批处理系统,那时候被称为 监控系统

监控系统是常住在内存中的,他做的事情就是

  1. 加载用户程序到用户程序段
  2. 把控制权交给用户程序
  3. 读取用户程序指令交给处理器
  4. 将处理器的执行结果输出到设备
  5. 用户程序完成后交回控制权
  6. 进行下一个循环
e57d8f3785911938531888e539536bca.png

总结一下,监控程序主要主要完成调度功能,一批作业排队等待,处理器尽可能的被充分利用,不让他有任何空闲时间。

监控程序很大程度上提高了处理器的利用率,减少了处理器空闲时间

多道系统

批处理系统已经提高了程序的利用率,但还是没最大化压榨

监控程序和用户程序需要来回切换转换控制权,这部分时间处理器闲置

监控程序在做IO操作时,由于IO是比较慢的,磁盘读写很慢的,此时处理器需要等待

为了更好的利用处理器的计算性能,大佬们搞出了多道系统

d86d9fa0cfc8e891674cec64e1d1e4e3.png

多道系统就是同时加载多个用户程序,当其中一个用户程序需要IO等待时,切换到另一个不在等待IO的用户程序进行处理。

这就很好的减少处理器资源的浪费,同时提高了程序处理的效率。

多道系统会比单道系统复杂很多,比如 所有程序都在内存中,涉及到 内存管理

多个用户程序需要运行处理器先运行谁? 这涉及到 调度算法

当然 别慌张,这些知识都会在后面的文章中讲到。

分时系统

多道系统已经解决了处理器资源合理且高效利用问题,但是随着计算机的发展,人们对于计算机又有了新的需求 交互式处理

计算机需要具备多个用户同时访问、操作和处理用户程序,此时 分时系统 就应运而生了。

举个例子:程序A是一个非常消耗处理器资源的程序一般运行一次需要10分钟,程序B是一个简单计算程序,运行一次只需要1分钟。

在多道系统里,只能是程序A处理完了才能处理B,但是这B等着着急啊

于是就有了分时系统,CPU资源对用户程序是公平的,每一个用户拥有的资源是公平的

e967ba4c478fbfce860cefb22ccf2bb1.png

利用上下文信息,去切换CPU执行的时间,做到尽可能让每个用户都平等拥有资源

在这个过程中,处理器的性能并没有提升,反而会因为调度切换降低利用率,但是对用户来说提高了用户程序响应效率。

分布式系统

随机计算机的发展,终于到了个人电脑的出现,这时候计算机又增加了新的需求,多个计算机之间网络互连、多核利用等等

于是就诞生了分布式系统,分布式系统就是在网络的帮助下实现实时的计算和协同处理

操作系统的体系结构

操作系统是一种系统软件,在理解这个层次结构时可以结合软件设计的层次结构。

单体系统

整个操作系统在内核以单一程序的方式运行

c444c115e7a58d9fdedb326ace375d97.png

MS_DOS系统简单结构

早期MS_DOS系统简单结构如上图所示,操作系统应用程序以及设备驱动都可以操作硬件。

可以看出来没有很好的模块划分和分离,这种方式的好处是任意调用都比较高效,缺点是程序大并且复杂的调用会让操作系统变得笨拙难以理解

再来看看早起UNIX系统结构

710b01c3d156a5148b9ff9e6b6ea6706.png

早期UNIX系统结构

可以看到早期Unix系统结构也是有限的结构化,主要是早期受到硬件限制

早期考虑操作系统设计的核心要素是 在最小的空间里面提供最多的功能

特别像互联网公司初期的系统架构,全部单体应用,所有服务在一起,随着业务复杂、并发增加

渐渐这种单体应用的优势会完全被覆盖,公司不得不进行架构升级

层次式系统

单体结构的缺点在硬件不断发展和用户需求激增下越来越明显

类似公司规模不断增大,早期架构的一点点优势越来越敌不过缺点了,不得不进行架构升级

层次化结构的原则是:每一层只能使用下一层提供的服务

最早的层次化结构系统是Dijkstra大佬设计出来的,叫THE OS,他把整个系统分为了6层

3c6bbd1883ff6378c3be1618bdb2b21f.png

THE OS系统

这种层次化结构的显著优点:

  • 底层和高层 甚至于每层只要按照规则 都可以分别实现,便于扩充
  • 上层的错误不会影响下层,便于调试、功能的增删改
  • 调用关系清楚,上层对下层的单向依赖,避免递归调用,保证了设计和实现的正确性
  • 可移植性非常好

当然也有显著的缺点:

  • 系统中所有进程的控制转移、通信等任务都交给系统的核心去管理,代价较大
  • 层次的划分和安排,要保证不出现双向依赖关系

微内核

微内核体现在一个微字, 怎么样来达到这个微呢?

  1. 通过划分系统程序和用户程序,把所有不必要的部分移除内核,形成一个小内核
  2. 微内核提供最少量的进程管理、存储管理、以及通信功能
55ff1f2a0bc7f90bc28618353c05d96f.png

微内核结构

整个操作系统由两部分组成,运行在核心态的内核和运行在用户态的并且以C/S模式提供服务

Windows NT就是以这种架构方式

微内核的显著优点:

内核精巧,内核提供核心功能 进程管理、存储管理、以及通信功能

面向多处理机和分布式系统,基于微内核的系统在内核中引入了多处理机调度和管理机制,并且引入了线程,有了线程就有了并行执行,这可不得了啊。

基于C/S体系结构 微内核的任务通信机制和消息机制采用CS模式向用户提供服务

现代操作系统的体系结构就是微内核层次式结构的结合体

以上就是本期的主要内容,基本回答了外甥的问题,也希望能解答大家的疑惑。

内容对大家有帮助的话,求分享、求转发、求点赞,一键三连就是对我最大的鼓励,感谢。

我是龙su,一个倾慕外甥帅气容颜的舅舅,一个半吊子架构师,我们下期见。

唯有坚韧者始能遂其志

来源:https://www.cnblogs.com/zhonglongbo/p/14040302.html

另外,cxuan 肝了六本 PDF,公号回复 cxuan ,领取作者全部 PDF

你也可以在下方链接获取

链接: https://pan.baidu.com/s/1mYAeS9hIhdMFh2rF3FDk0A 密码: p9rs



推荐阅读
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • 推荐几款高效测量图片像素的工具
    本文介绍了几款适用于Web前端开发的工具,这些工具可以帮助用户在图片上绘制线条并精确测量其像素长度。对于需要进行图像处理或设计工作的开发者来说非常实用。 ... [详细]
  • Vue 开发与调试工具指南
    本文介绍了如何使用 Vue 调试工具,包括克隆仓库、安装依赖包、构建项目以及在 Chrome 浏览器中加载扩展的详细步骤。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
author-avatar
_MIN_Y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有