在计算机刚诞生的时候,是没有操作系统这一概念的,我们程序员想要编写程序,首先要编写操作操作计算机硬件的程序,再在这个基础上去写我们的程序,这是一个很繁琐的活儿。
现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。
一般而言,现代计算机系统是一个复杂的系统。
- 如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率:全部掌握这些细节可能需要一万年…)
- 管理这些部件并加以优化使用,是一件极富挑战性的工作,于是,计算安装了一层软件(系统软件),称为操作系统。它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。
操作系统:简单来说,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。
操作系统两大功能:
- 隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
- 将应用程序对硬件资源的竞态请求变得有序化
操作新系统发展史
操作系统主要分这么几个阶段:
- 手工操作
程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。 - 批处理系统
批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。 - 多道程序系统
所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。 - 分时系统
分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。 - 实时系统
系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。 - 通用操作系统
具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。
详情点这里➡️操作系统简介
操作系统内核
内核(Kernel)
内核就是由一条条指令组成的庞大的指令集,就相当于一段代码。
如上所说,操作系统就是一个(一组)程序,这个程序的重点在于协调、管理和控制计算机硬件资源和软件资源。没有软件的计算机就相当于一堆废铁。操作系统的作用就是让CPU可以开始判断与计算,让内存可以读取数据,让硬盘可以被访问等。上面提到的这些都与操作系统的内核相关。一台计算机能做哪些事,不能做哪些事,全由内核进行控制。只有内核提供了相关功能,计算机才可以做相应的操作。举例来说:一台计算机的内核不支持TCP/IP协议,无论你买什么样的网卡,都无法进行上网操作。
内核在开机后就一直常驻在内存中,存放内核的这块内存区域是受保护的,用户无法直接访问。
内核具备的功能:
操作系统内核负责整个计算机系统相关的资源分配与管理,具有很强大的功能。
- 系统调用接口
方便程序员更轻松容易的调用硬件,对硬件资源进一步利用。 - 程序管理
内核必须能够控制多个任务,让CPU的资源分配变得更合理。 - 内存管理
当内存不足时,内核可以提供内存交换功能 - 文件系统管理
内核可以识别文件系统,这样我们才可以对文件进行增删改查。例如:mac os系统不识别ntfs格式的硬盘,所以我们无法直接使用。
内核是控制管理硬件的,那么内核一定要识别硬件才可以对其进行管理、控制。硬件的更新换代是特别迅速的,内核如何才能驱动一个新硬件呢
内核具有这么几个特性:
- 操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能。
- 一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序。
- 要使用新硬件功能,必须要安装厂商提供的驱动程序才行。
- 驱动程序是由厂商提供的,与操作系统开发者无关。
Linux发展史
早期的计算机多用于军事、科学领域及学术研究等,当时的操作系统还处于多道批处理系统阶段,使用起来相当不便。在20世纪60年代初,麻省理工学院开发了分时操作系统。
1965年前后,由贝尔实验室(bell)、麻省理工学院(MIT)、通用电气公司(GE)联合发起了Multics项目,该项目的目的是让大型主机可以同时提供300台以上的终端机连接使用。1969年左右,贝尔实验室退出该项目组。Ken Thompson,贝尔实验室中的一员,在项目组时收货颇多,回去以后,利用闲暇的一个月时间,使用汇编语言写了一组内核程序,以及一个小的文件系统。这就是UNIX的原型。
该文件系统有两个重要概念
- 所有的程序或系统装置都是文件(万物皆文件)
- 不管构建编辑器还是附属文件,所写的程序只有一个目的,就是要有效地完成目标。
1973年,Thompson与Ritchie合作将最初版本的文件系统改为使用更高级的语言编写,当时的高级程序语言有B语言,但是B语言所编译出来的内核性能不是很好,后来Dennis Ritchie将B语言重新改写为C语言,再以C语言重新改写编译内核,最后发行出UNIX的正式版本。
汇编语言需要与硬件有有密切的配合,所以最初的文件系统是不具备移植性的或者说移植性很差,UNIX是以高级语言C语言编写的导致其移植性变得很强大。
紧接着来到下一阶段,伯克利大学的Bill Joy创建了UNIX的一个重要分支——BSD,Bill Joy同时还是著名的Sun公司的创办者。Sun公司以BSD开发的内核进行自己的商业UNIX版本。
再后来,大学教授谭宁邦为了教学自己手写了Minix内核程序,这是一个UNIX Like的内核程序,为了避免版权纠纷,谭宁邦完全不看UNIX内核源码。唯一的缺点就是谭宁邦教授认为,Minix是用于教育的,所以对Minix只是点到为止,没有再进一步上升。
1991年,芬兰的赫尔辛基大学的Linus Torvalds在论坛上发布了一个小小小的内核程序,这个内核程序可以在Intel的386机器上面运行,让很多人对其产生兴趣,从此开始了Linux不平凡的旅程。