操作系统很难有一个精确的定义,因为它是一个复杂的软件,其外延边界并不固定,但是我们可以从功能的角度
来理解操作系统。操作系统其实是站在管理者的角度,来为应用程序和底层的硬件提供相应的管理、控制、服务的功能
。可以从对上和对下两个层面来理解。
控制程序
。管理应用程序
、②为应用程序提供各种服务
、③杀死应用程序
。下图是站在用户角度看到的Windows10系统界面,提供了很方便的图形界面。
资源分配器
。下图是操作系统把cpu、磁盘、内存三部分物理资源分别抽象为进程、文件、地址空间,从而给应用程序使用。
操作系统处于硬件之上、应用程序之下。
操作系统是一种特殊的软件,被称之为系统软件
。是直接面向硬件的,向下直接管理硬件资源
,向上提供抽象的接口
。
操作系统位于应用程序之下,为应用程序提供服务支持。
操作系统对外的接口叫做(外壳Shell),对内的接口叫做(内核Kernel),操作系统这门课更加关注的是操作系统的内部,即Kernel。
操作系统内部组件,包括:
操作系统是管理硬件资源的,计算机最重要的三大硬件资源分别是:CPU
、内存
、磁盘
。
①CPU的管理涉及:CPU的调度、进程线程的管理、
②内存的管理涉及:物理内存、虚拟内存。
③磁盘的管理涉及:disk是以磁盘块为基本单位读写单位,抽象出文件系统,以文件的形式为应用程序提供存储、访问的环境。
除了这三块,和底层打交道的还有④中断处理和IO设备驱动。
(1) 并发
计算机系统中同时存在多个运行的程序,需要OS管理和调度。
注意
,并发的并行的区别:
能够并行执行的程序,一般要求计算机系统存在多个CPU,若计算机只有一个CPU则无法完成并行的工作。
(2) 共享
"同时"访问,实际上是互斥共享
。
操作系统是一个资源管理器,它需要有效的让资源共享给不同的应用程序。
表面上看可以同时访问内存、IO等,但其实在操作系统的内部,这种“同时”是一种互斥共享访问,又称为“分时”访问。即在一个时间点上只有一个程序可以访问一个资源。
比如说,有一块内存,那么在一个时间点上,对于某一个内存单元只能有一个程序来访问。但是,如果把一块内存分为相互隔离的两半,那么就可以同时让两个程序同时访问不同的内存单元。
(3) 虚拟
多道程序设计技术
,让每个用户都觉得有一个计算机专门为他服务。操作系统直接面对的是硬件,但是操作系统把硬件虚拟化了。例如,把CPU虚拟化为进程;把磁盘虚拟化为文件;把内存虚拟化为地址空间。这样就使得每一个应用程序(或者用户)感觉到自己独占一台计算机。
这也是多到程序设计中常见的方式:把一台物理机器,虚拟成多台机器,在操作系统支持之下,就可以完成相应的功能。
(4) 异步
如果只有一个CPU,在任何一个时刻只能有一个程序在跑。下一个程序什么时候跑,取决于操作系统的调度。
当前市面上有各种各样的操作系统,有面向桌面的、面向服务器的、面向移动终端的、面向工控领域等,下面介绍一些经典的操作系统实例。
UNIX是在60年代,由肯•汤普森(Ken Thompson)
和丹尼斯•里奇(Dennis Ritchie)
(C语言之父),完成的基于C语言的操作系统,从而改变了世界。
BSD是在UNIX操作系统之上,做了进一步改进和扩展,特别是在网络协议站上有独到之处,形成了UNIX-BSD(伯克利发行版)
。随后,出现了各种版本的 UNIX-BSD 系统。
Linux是仿UNIX的操作系统,1991年由一个学生Linus发明。如今,Linux在智能终端领域得到了很大的发展,Google推出的Android操作系统也使用了Linux OS内核,当前Linux内核占据了最大的比例,远超苹果的IOS。
微软公司(microsoft)在90年代设计了WindowsOS,其前身是80年代DOS,在桌面领域,Windows占据绝对统治地位。但在服务器和终端领域,更多的是Linux操作系统。
Windows操作系统的出现,对计算机推广到千家万户起到了很大的作用。
CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用。
内存容量越来越大,可以存放多个程序,CPU执行多个程序。
为了更好的利用计算机资源,更好的和用户交互,出现了分时系统。
分时调度阶段
个人电脑操作系统
如今,操作系统有两大热门发展方向:
①集成电路发展:一个CPU中可以集成多个CPU核,多核多处理。
②网速发展:出现分布式 操作系统。
随着物联网,大数据,云计算的发展。可以预见,将来一个人周围会有大量的嵌入式设备来提供感知,计算,服务。从早期的一群人围着一台计算机服务,逐步的发展演化到一群计算机为一个人服务。