程序员都应该了解的操作系统知识


一、什么是操作系统

操作系统很难有一个精确的定义,因为它是一个复杂的软件,其外延边界并不固定,但是我们可以从功能的角度来理解操作系统。操作系统其实是站在管理者的角度,来为应用程序和底层的硬件提供相应的管理、控制、服务的功能。可以从对上和对下两个层面来理解。

1.1 向上理解

  • 从用户角度讲,操作系统是一个控制程序
    可以控制计算机系统中的应用程序如何运行;同时,限制不同的应用程序占用不同的资源。
  • 操作系统可以①管理应用程序、②为应用程序提供各种服务、③杀死应用程序
    如IO服务、声卡,网卡的访问等。

下图是站在用户角度看到的Windows10系统界面,提供了很方便的图形界面。
在这里插入图片描述

1.2 向下理解

  • 对内部资源来讲,操作系统是一个资源分配器
    在计算机系统中,有各种资源,例如,cpu是资源,内存是资源,外设也是资源。操作系统需要协调好各种资源,使资源的利用率和计算机的效率得到保障。

下图是操作系统把cpu、磁盘、内存三部分物理资源分别抽象为进程、文件、地址空间,从而给应用程序使用。

在这里插入图片描述

1.3 承上启下

  • 操作系统处于硬件之上、应用程序之下。
    操作系统是一种特殊的软件,被称之为系统软件。是直接面向硬件的,向下直接管理硬件资源,向上提供抽象的接口

  • 操作系统位于应用程序之下,为应用程序提供服务支持。

操作系统对外的接口叫做(外壳Shell),对内的接口叫做(内核Kernel),操作系统这门课更加关注的是操作系统的内部,即Kernel。

二、OS-Kernel操作系统内核

2.1 操作系统内部组件

操作系统内部组件,包括:

  • CPU调度器
  • 物理内存管理
  • 虚拟内存管理
  • 文件系统管理
  • 中断处理与设备驱动

操作系统是管理硬件资源的,计算机最重要的三大硬件资源分别是:CPU内存磁盘

①CPU的管理涉及:CPU的调度、进程线程的管理、

②内存的管理涉及:物理内存、虚拟内存。

③磁盘的管理涉及:disk是以磁盘块为基本单位读写单位,抽象出文件系统,以文件的形式为应用程序提供存储、访问的环境。

除了这三块,和底层打交道的还有④中断处理和IO设备驱动

2.2 OS-Kernel的特征

(1) 并发

计算机系统中同时存在多个运行的程序,需要OS管理和调度。

注意,并发的并行的区别:

  • 并发指的是,在一段时间内,多个程序可以运行;
  • 并行指的是,在一个时间点上,多个程序可以同时执行。

能够并行执行的程序,一般要求计算机系统存在多个CPU,若计算机只有一个CPU则无法完成并行的工作。

(2) 共享

"同时"访问,实际上是互斥共享

操作系统是一个资源管理器,它需要有效的让资源共享给不同的应用程序。

表面上看可以同时访问内存、IO等,但其实在操作系统的内部,这种“同时”是一种互斥共享访问,又称为“分时”访问。即在一个时间点上只有一个程序可以访问一个资源。

比如说,有一块内存,那么在一个时间点上,对于某一个内存单元只能有一个程序来访问。但是,如果把一块内存分为相互隔离的两半,那么就可以同时让两个程序同时访问不同的内存单元。

(3) 虚拟

  • 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务。

操作系统直接面对的是硬件,但是操作系统把硬件虚拟化了。例如,把CPU虚拟化为进程;把磁盘虚拟化为文件;把内存虚拟化为地址空间。这样就使得每一个应用程序(或者用户)感觉到自己独占一台计算机。

这也是多到程序设计中常见的方式:把一台物理机器,虚拟成多台机器,在操作系统支持之下,就可以完成相应的功能。

(4) 异步

  • 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知。
  • 但只要运行环境相同,OS需要保证程序运行的结果相同。

如果只有一个CPU,在任何一个时刻只能有一个程序在跑。下一个程序什么时候跑,取决于操作系统的调度。

三、操作系统实例

当前市面上有各种各样的操作系统,有面向桌面的、面向服务器的、面向移动终端的、面向工控领域等,下面介绍一些经典的操作系统实例。

1. UNIX家族

在这里插入图片描述

UNIX是在60年代,由肯•汤普森(Ken Thompson)丹尼斯•里奇(Dennis Ritchie)(C语言之父),完成的基于C语言的操作系统,从而改变了世界。
在这里插入图片描述

BSD是在UNIX操作系统之上,做了进一步改进和扩展,特别是在网络协议站上有独到之处,形成了UNIX-BSD(伯克利发行版)。随后,出现了各种版本的 UNIX-BSD 系统。

2. Linux家族

在这里插入图片描述

Linux是仿UNIX的操作系统,1991年由一个学生Linus发明。如今,Linux在智能终端领域得到了很大的发展,Google推出的Android操作系统也使用了Linux OS内核,当前Linux内核占据了最大的比例,远超苹果的IOS。

3. Windows家族

在这里插入图片描述

微软公司(microsoft)在90年代设计了WindowsOS,其前身是80年代DOS,在桌面领域,Windows占据绝对统治地位。但在服务器和终端领域,更多的是Linux操作系统。

Windows操作系统的出现,对计算机推广到千家万户起到了很大的作用。

四、操作系统的发展历史

  • 早期计算机使用纸带传输程序和数据,操作系统只起到加载作用。

CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用。

  • 批处理阶段

内存容量越来越大,可以存放多个程序,CPU执行多个程序。

  • 多道程序设计阶段

为了更好的利用计算机资源,更好的和用户交互,出现了分时系统。

  • 分时调度阶段

  • 个人电脑操作系统

如今,操作系统有两大热门发展方向:

①集成电路发展:一个CPU中可以集成多个CPU核,多核多处理。

②网速发展:出现分布式 操作系统。

随着物联网,大数据,云计算的发展。可以预见,将来一个人周围会有大量的嵌入式设备来提供感知,计算,服务。从早期的一群人围着一台计算机服务,逐步的发展演化到一群计算机为一个人服务。

原创文章 464 获赞 1541 访问量 53万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/105741823