前言

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

操作系统(一):操作系统概述-LMLPHP

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

操作系统(一):操作系统概述-LMLPHP

这个系列的文章就当作我学习操作系统的笔记,也希望能够帮助到那些想学和正在学操作系统的小伙伴们。不多逼逼,下面开始正式的内容。

什么是操作系统

操作系统(一):操作系统概述-LMLPHP

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

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

所以我对于操作系统的理解就是:操作系统就是管家,而计算机硬件就是大宅子,用户是大宅子的主人。比如当我们想吃饭的时候,告诉管家可以烧饭了,然后管家就去调度了,去安排人买菜,做饭,而我们只需要等待饭菜上桌就可以了。如果没有管家,那么这些事情都得自己干。所以有了操作系统,我们才可以很舒适,高效地使用计算机。

多道程序设计和分时

现在的操作系统这么牛掰并不是一开始就这样,而是经过了多个阶段的进化。

无操作系统(手工操作)

最早期的计算机是没有操作系统的,比如ENIAC就是手动操作线缆来执行任务,效率极低。

操作系统(一):操作系统概述-LMLPHP

批处理系统

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

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

多道程序系统

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

就是在内存中同时存在多个作业,在管理程序控制下相互穿插运行。当一个程序需要等待时,马上切换到另一个作业,提高了CPU的利用率。

操作系统(一):操作系统概述-LMLPHP

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

操作系统(一):操作系统概述-LMLPHP

分时系统

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

操作系统(一):操作系统概述-LMLPHP

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

操作系统操作

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

双重模式操作

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

操作系统(一):操作系统概述-LMLPHP

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

I/O和内存保护

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

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

操作系统(一):操作系统概述-LMLPHP

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

定时器

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

操作系统功能

进程管理

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

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

内存管理

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

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

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

文件管理

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

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

I/O设备管理

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

总结

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

操作系统(一):操作系统概述-LMLPHP

09-06 11:41