操做系统(一):操做系统概述

好好学习,每天向上git

本文已收录至个人Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Stargithub

前言

以前一直没有系统地学过操做系统,感受本身在平时的学习过程当中对于某些概念理解得一塌糊涂,好比中断、内存、进程和线程等。因此打算系统的学习一下操做系统。一开始我是在B站看哈工大的李治军老师讲的,可是一上来就开始从汇编代码去分析开机的过程,虽然讲得挺好的,可是多是我太笨了吧,理解不了。因而我又在中国大学MOOC上看苏州大学的《操做系统》缓存

怎么说这也是个国家精品,虽然讲得也没多好,但挺容易接受的。我看的书是《操做系统概念第七版》性能

这个系列的文章就看成我学习操做系统的笔记,也但愿可以帮助到那些想学和正在学操做系统的小伙伴们。很少逼逼,下面开始正式的内容。学习

什么是操做系统

这是一张计算机系统组成部分的逻辑图,从图中能够看出,用户想让软件运行在计算机硬件上,就得借助操做系统。操做系统是计算机最底层的软件,是应用程序运行的基本支撑环境,不可或缺。但操做系统也并不必定是必须的,好比一些小型的计算机像单片机就算没有操做系统也能够运行程序。操作系统

那操做系统的意义何在呢?我以为对于普通用户和开发者而言就是 “方便”。printf("hello world!"); 你们都写过吧,为何这样一行代码就能在屏幕上输出一句话呢?是由于运行了这行代码后,就去调用操做系统的接口了,而后操做系统再去控制底层硬件进行相关操做,对于咱们而言,这些都是无感的,只不过是写了一行代码而已。线程

因此我对于操做系统的理解就是:操做系统就是管家,而计算机硬件就是大宅子,用户是大宅子的主人。好比当咱们想吃饭的时候,告诉管家能够烧饭了,而后管家就去调度了,去安排人买菜,作饭,而咱们只须要等待饭菜上桌就能够了。若是没有管家,那么这些事情都得本身干。因此有了操做系统,咱们才能够很温馨,高效地使用计算机。设计

多道程序设计和分时

如今的操做系统这么牛掰并非一开始就这样,而是通过了多个阶段的进化。code

无操做系统(手工操做)

最先期的计算机是没有操做系统的,好比ENIAC就是手动操做线缆来执行任务,效率极低。接口

批处理系统

当出现晶体管后,第二代计算机也随之诞生,体积,可靠性都大幅提升。为了可以更好地发挥计算机的性能,批处理系统也就出现了。批处理系统就是将一批做业交给操做系统,而后由常驻监控程序(Monitor)去控制做业的运行及调度,不须要人工的干预,极大地提升了计算机的工做效率。

有点相似于工厂的流水线,CPU就是工人。一批待加工的产品从传送带上传送过来,而后工人依次加工产品。

多道程序系统

批处理系统有个缺点就是没有考虑到程序运行的并行性,好比一个程序得等待I/O操做才能进行接着运行,等待的时候CPU也跟着在那干耗着,浪费时间。好比流水线上忽然停了一会,工人就在那儿歇着。为了可以更好地榨干CPU的性能,多道程序系统就出现了。

就是在内存中同时存在多个做业,在管理程序控制下相互穿插运行。当一个程序须要等待时,立刻切换到另外一个做业,提升了CPU的利用率。

从对比图中能够看出,多道程序系统中CPU运行的时间明显比单道程序系统的运行时间要多,几乎没得休息。因此说,多道程序系统就是黑心老板,充分榨干了CPU的劳动力,使得CPU苦不堪言。

分时系统

虽然说多道程序系统相对于批处理系统而言已经提升了CPU的利用率,但一次只能运行一个程序,仍是被老板嫌弃。多道程序系统便退出江湖,潜心修炼。待出山之时,世人早已忘却了多道程序系统的名号,被人熟知的只有那将无影手打得出神入化的分时系统

没错,分时系统就是多道程序系统的进阶版,本质上仍是做业的切换。但操做系统却给每一个程序分配了必定时间的CPU时间片,当一个程序的时间结束后立刻切换到另外一个程序。由于CPU的时间片足够短,切换的时间也足够快,使得用户感受不到程序的切换,误觉得是多个程序同时在运行。

操做系统操做

开发者在写代码的时候,多是无意之举,也多是有意而为之致使了程序出错,有的错误严重的会破坏其它程序或操做系统。因此操做系统在设计的时候就要确保错误程序或恶意程序不会影响到其它程序和操做系统的正常运行。

双重模式操做

双重模式将用户程序和系统程序分开,用户程序运行在用户模式下,系统程序则运行在内核模式下。若是用户程序出现了异常,就会当即切换到内核模式,交给操做系统去处理。那些可能会引发损害的指令被称做特权指令,用户模式下是执行不了特权指令的。当用户程序须要调用系统服务的时候,就必需要从用户模式切换到内核模式来运行。

这个模式位是在计算机硬件中的,有了它就能够区分用户程序和系统程序了。

I/O和内存保护

为了防止用户程序去执行非法的I/O操做,全部的I/O指令都是特权指令,用户模式下是执行不了I/O操做的,只能切换到内核模式下去执行,这样由操做系统去控制I/O就能够有效地减小非法I/O的出现。

在多道程序系统下,多个程序在内存中运行,为了保证应用程序不能非法访问其它应用程序的内存空间,就出现了内存保护机制。这须要有硬件的支持,好比基址寄存器和限长寄存器。

在这张图中,两个寄存器合做,限制了该程序只能访问300040~420940的内存空间。

定时器

若是如今有个程序发生了死循环,长时间霸占着CPU怎么办?这样控制权不就一直在用户程序手上么,这可不行。为了能确保CPU控制权在操做系统手上,能够采用定时器。定时器有固定定时器和可变定时器,在到达指定的时间后,产生中断,就从用户模式切换到内核模式,这样控制权就回到了操做系统手上,确保了系统的正常运行。

操做系统功能

进程管理

操做系统的核心目标就是运行程序,也就是如何管理CPU,一个运行中的程序被称之为进程。进程管理解决了程序的运行问题,操做系统负责的与进程管理相关的活动有如下几个:

  • 建立和删除用户和系统进程
  • 暂停和恢复进程
  • 提供进程同步机制
  • 提供进程通讯机制
  • 提供死锁处理机制

内存管理

只有进程是知足不了程序运行的须要,还须要内存。由于CPU只能直接访问寄存器、高速缓存和内存这三类存储设备,一个进程处理前和处理后的全部数据,执行的指令都在内存。操做系统负责的有关内存管理的活动有:

  • 记录内存的哪部分正在被使用及被谁使用
  • 当有内存空间时,决定哪些进程能够装入内存
  • 根据须要分配和释放内存空间

总结一下:内存管理提供了内存的分配、回收、地址转换、共享和保护等功能。提升了内存利用率和访问速度,从而提升计算机运行效率。

文件管理

进程管理和内存管理解决了程序的运行问题,可是内存并不能长时间保存数据,因此就有了文件,文件既然要存储就得把文件管理起来,因此文件管理解决了计算机的存储问题。现代操纵系统主要是以目录这种树形结构去进行文件管理的,操做系统主要负责如下和文件管理有关的活动:

  • 建立和删除文件
  • 建立和删除目录来组织文件
  • 提供操做文件和目录的原语(由若干条指令组成的程序段)
  • 将文件映射到磁盘等二级存储设备上
  • 在稳定存储介质上备份文件

I/O设备管理

操做系统的目的之一在于对用户隐藏具体硬件设备的特性。I/O设备管理负责管理种类繁多的各类I/O设备,解决计算机中信息
的输入和输出问题。

总结

这篇文章主要是简单介绍了一下操做系统,总共分为四个小节,前面两个小节探讨了什么是操做系统,介绍了操做系统的发展。后面两个小节介绍了操做系统的操做和功能,从宏观角度上了解操做系统能够作什么。

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

相关文章
相关标签/搜索