本文已经收录至个人GitHub,欢迎你们踊跃star 和 issues。git
https://github.com/midou-tech/articlesgithub
外甥上大一了,起初我还很是担忧他,担忧主要有两方面的缘由:算法
因而常常和他视频聊天,外甥小我没几岁,咱们常常以兄弟相称,聊起来天然和谐编程
从我这几回和他聊天能够看出,个人担心有些太过了网络
他好像从没刻意他的帅气,而是不断的充实本身的才华,篮球打得好、街舞跳的好、还去参加各类志愿者活动架构
关键是最近还对计算机产生了强烈的兴趣。并发
唉,帅就算了,还这么认真,这年轻人不讲武德啊分布式
上周末打电话,居然问我什么是操做系统? 为何要有操做系统?性能
因而就有了这篇文章,也准备把我外甥的计算机相关疑问所有承包了,喜欢我记得关注我 公号 龙跃十二学习
喜欢我几个关注我
说实话很难有一个准确的定义去描述操做系统,看了多本关于操做系统的书中是这样说的。
操做系统是一个运行在内核态的软件,该软件对底层各类硬件资源作了抽象和管理,并提供统一的API接口供应用程序去调用这些资源。
这句话涵盖了好几个知识点
撒是用户态,撒是内核态?你很喜欢剖根问底,这个后面再说
对各类底层硬件资源进行了抽象和管理
抽象了处理器、存储器、时钟、磁盘、网络接口、外设等底层硬件资源,把各类资源都抽象为一个个的文件描述符
设想一下,多核状况下,多个应用程序同时使用一种资源,就会形成混乱局面,此时操做系统就会扮演一个管理者去管理这些资源的使用者。
操做系统处在中间层,上面有各类系统应用程序、开发人员、用户,下面有各类计算机硬件资源。
怎么脑海中浮现了 上下为难 的表情包,哈哈哈有内味了
操做系统设计者和硬件编程人员能够直接去操做硬件资源
操做系统设计者这不用解释了,都懂的,都在设计操做系统了,总不至于不能操做硬件资源吧
硬件编程人员这个你们可能稍微陌生点,有一类开发人员是直接对硬件进行操做的,若是是你是学习电子信息相关专业的,应该很熟悉烧程序。
大学作实验的时候龙叔就常常把写好的汇编程序或者C语言程序编译完成了直接烧到计算机硬件上,这叫烧程序。
我写的程序里面有对硬件资源进行操做,好比操做某某管脚、某个串口等等
因此没有操做系统也是能够直接操做计算机硬件资源,也是能够跑程序的
那为啥还要操做系统呢?
上面已经说了,没有操做系统是能够操做计算机硬件资源的,那为何要有呢?
1)最先期计算机是没有操做系统的,每次要变动一下功能,都要手动去调整硬件,费时费力。
2)随着电子管技术的发展,各类硬件资源能够作成通用的,此时就急切须要一个操做系统去控制这些资源,每次改功能,只须要修改输入的信号便可。
3)提高计算机的功能性和灵活性
20世纪40-50年代,电子管技术获得了发展,诞生了第一台电子管计算机
因为零件的集成度过低,一台计算机必须用一个大house来放置
并且这台机器当时数百万美圆的标价,价格是真的贵,通常人用不起,都是一些豪横的组织才用得起
早期的计算机是没有操做系统的,操做人员直接和计算机硬件交互,相似下面这样
全部的操做在控制台上进行,控制台上有显示灯、触发器、输入输出设备
每次做业都须要有专门的的人员来操做,使用汇编语言写程序到纸片上,再穿孔成卡片,再将这些卡片交给专门的操做人员去操做,再花费时间等操做结果。
计算机成本高,操做过程复杂,时间还长
人们很天然就想到减小机器时间的浪费,因而就诞生了批处理系统。
到了20世纪50年代General Motors开发了批处理系统,那时候被称为 监控系统
监控系统是常住在内存中的,他作的事情就是
总结一下,监控程序主要主要完成调度功能,一批做业排队等待,处理器尽量的被充分利用,不让他有任何空闲时间。
监控程序很大程度上提升了处理器的利用率,减小了处理器空闲时间
批处理系统已经提升了程序的利用率,但仍是没最大化压榨
监控程序和用户程序须要来回切换转换控制权,这部分时间处理器闲置
监控程序在作IO操做时,因为IO是比较慢的,磁盘读写很慢的,此时处理器须要等待
为了更好的利用处理器的计算性能,大佬们搞出了多道系统
多道系统就是同时加载多个用户程序,当其中一个用户程序须要IO等待时,切换到另外一个不在等待IO的用户程序进行处理。
这就很好的减小处理器资源的浪费,同时提升了程序处理的效率。
多道系统会比单道系统复杂不少,好比 全部程序都在内存中,涉及到 内存管理
多个用户程序须要运行处理器先运行谁? 这涉及到 调度算法
固然 别慌张,这些知识都会在后面的文章中讲到。
多道系统已经解决了处理器资源合理且高效利用问题,可是随着计算机的发展,人们对于计算机又有了新的需求 交互式处理。
计算机须要具有多个用户同时访问、操做和处理用户程序,此时 分时系统 就应运而生了。
举个例子:程序A是一个很是消耗处理器资源的程序通常运行一次须要10分钟,程序B是一个简单计算程序,运行一次只须要1分钟。
在多道系统里,只能是程序A处理完了才能处理B,可是这B等着着急啊
因而就有了分时系统,CPU资源对用户程序是公平的,每个用户拥有的资源是公平的
利用上下文信息,去切换CPU执行的时间,作到尽量让每一个用户都平等拥有资源
在这个过程当中,处理器的性能并无提高,反而会由于调度切换下降利用率,可是对用户来讲提升了用户程序响应效率。
随机计算机的发展,终于到了我的电脑的出现,这时候计算机又增长了新的需求,多个计算机之间网络互连、多核利用等等
因而就诞生了分布式系统,分布式系统就是在网络的帮助下实现实时的计算和协同处理
操做系统是一种系统软件,在理解这个层次结构时能够结合软件设计的层次结构。
整个操做系统在内核以单一程序的方式运行
早期MS_DOS系统简单结构如上图所示,操做系统和应用程序以及设备驱动均可以操做硬件。
能够看出来没有很好的模块划分和分离,这种方式的好处是任意调用都比较高效,缺点是程序大而且复杂的调用会让操做系统变得笨拙且难以理解。
再来看看早起UNIX系统结构
能够看到早期Unix系统结构也是有限的结构化,主要是早期受到硬件限制
早期考虑操做系统设计的核心要素是 在最小的空间里面提供最多的功能
特别像互联网公司初期的系统架构,所有单体应用,全部服务在一块儿,随着业务复杂、并发增长
渐渐这种单体应用的优点会彻底被覆盖,公司不得不进行架构升级
单体结构的缺点在硬件不断发展和用户需求激增下愈来愈明显
相似公司规模不断增大,早期架构的一点点优点愈来愈敌不过缺点了,不得不进行架构升级
层次化结构的原则是:每一层只能使用下一层提供的服务
最先的层次化结构系统是Dijkstra大佬设计出来的,叫THE OS,他把整个系统分为了6层
这种层次化结构的显著优势:
固然也有显著的缺点:
微内核体如今一个微字, 怎么样来达到这个微呢?
整个操做系统由两部分组成,运行在核心态的内核和运行在用户态的而且以C/S模式提供服务
Windows NT就是以这种架构方式
微内核的显著优势:
内核精巧,内核提供核心功能 进程管理、存储管理、以及通讯功能
面向多处理机和分布式系统,基于微内核的系统在内核中引入了多处理机调度和管理机制,而且引入了线程,有了线程就有了并行执行,这可不得了啊。
基于C/S体系结构 微内核的任务通讯机制和消息机制采用CS模式向用户提供服务
现代操做系统的体系结构就是微内核与层次式结构的结合体
以上就是本期的主要内容,基本回答了外甥的问题,也但愿能解答你们的疑惑。
内容对你们有帮助的话,求分享、求转发、求点赞,一键三连就是对我最大的鼓励,感谢。
我是龙su,一个倾慕外甥帅气容颜的舅舅,一个半吊子架构师,咱们下期见。