操作系统(Operator System)
1-1 概念
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
• 内核(进程管理,内存管理,⽂件管理,驱动管理)
• 其他程序(例如函数库,shell程序等等)
简单来说,操作系统就是一款进行软硬件资源管理的软件。
1-2 设计OS的⽬的
• 对下,与硬件交互,管理所有的软硬件资源
• 对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境
1-3 核⼼功能
• 在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件
底层硬件
- 位置与组成:处于最底层,是计算机系统的物理基础,包含网卡、硬盘以及其他硬件设备(如 CPU、内存芯片、显卡等 )。这些硬件是计算机进行数据处理、存储和传输等操作的物质载体。
- 作用:为上层软件提供运行的物理环境,所有的软件操作最终都要通过硬件的运行来实现,例如网卡负责网络数据的收发,硬盘用于数据的长期存储。
驱动程序
- 位置与组成:位于底层硬件之上,包含网卡驱动、硬盘驱动以及其他硬件对应的驱动程序。驱动程序是一种特殊的软件,由硬件制造商或操作系统开发团队编写。
- 作用:作为硬件与操作系统之间的桥梁,负责将操作系统的指令转换为硬件能够理解的操作,同时也将硬件的状态和数据反馈给操作系统。例如网卡驱动程序负责管理网卡与操作系统之间的数据传输,使操作系统能够通过网卡进行网络通信。
操作系统
- 位置与组成:在驱动程序之上,是系统软件的核心部分,主要包括内存管理、进程管理、文件管理和驱动管理等功能模块。
- 作用:
- 内存管理:负责分配、回收和保护内存资源,确保各个进程能够合理使用内存,避免内存冲突和泄漏,提高内存使用效率。
- 进程管理:对进程的生命周期进行管理,包括进程的创建、调度、终止等操作,通过合理的进程调度算法,使 CPU 资源得到高效利用,保证系统中多个进程能够有序运行。
- 文件管理:对文件的存储、检索、修改等操作进行管理,维护文件系统的目录结构,保障文件的安全性和完整性,方便用户对文件进行操作。
- 驱动管理:对各种硬件驱动程序进行管理,包括驱动程序的加载、卸载、更新等操作,确保硬件设备能够稳定、正常地工作。
system call(系统调用接口)
- 位置与定义:处于操作系统之上,是操作系统提供给用户程序的接口,允许用户程序请求操作系统提供的服务。
- 作用:它是用户程序与操作系统内核之间的通信桥梁,用户程序通过系统调用接口可以执行一些特权操作,如创建文件、读写磁盘等,而无需了解底层硬件和操作系统内核的具体实现细节,同时也保证了操作系统的安全性和稳定性,防止用户程序对系统资源的非法访问。
用户操作接口
- 位置与组成:在系统调用接口之上,包含 shell 外壳、lib(库文件)以及部分指令。其中,shell 外壳是用户与操作系统交互的一种命令行界面(如 Linux 系统中的 bash ),用户可以通过输入命令来执行各种操作;lib 是一些封装好的函数库,如 C 语言中的标准库,为用户程序提供了常用的功能实现;部分指令则是系统提供的一些可直接执行的命令。
- 作用:为用户提供了便捷的操作方式,降低了用户与操作系统交互的难度。用户可以通过 shell 外壳输入简单的命令来完成复杂的任务,利用 lib 中的函数来实现特定的功能,而无需直接调用系统调用接口,提高了用户操作的效率和便利性。
用户
- 位置与行为:处于最上层,是计算机系统的使用者,包括进行指令操作(如在命令行输入命令 )、开发操作(编写和运行应用程序 )、管理操作(如管理文件、设置系统参数 )等不同类型操作的用户。
- 作用:通过用户操作接口与计算机系统进行交互,利用计算机系统提供的各种功能来完成自己的任务,如办公、娱乐、软件开发等,是整个计算机系统存在的意义和服务对象。
1-4 如何理解 "管理"
• 管理的例⼦ - 学⽣,辅导员,校⻓
• 描述被管理对象
• 组织被管理对象
这里我们举一个实际的例子来谈谈管理,现在给出三个角色:学生、辅导员和校长。很明显,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色呢?
仔细想想,实际上完成任何一件事都要经过两个过程,首先是决定要不要做这件事或是如何做这件事(决策),然后就是去做这件事情(执行)。校长作为管理者来管理学生,校长实际上就是那个做决策的人,但是校长作出决策后并不需要自己来执行,而是让辅导员去执行,所以辅导员的主要任务就是执行管理者的决策,我们通常将其称为执行者。
虽然说校长是管理学生的,但是我们在学校一般情况下是看不到校长本人的,那么校长是如何做到在不看到我们的情况下对我们进行管理的呢?
举个例子,现在校长要求辅导员将计算机成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的编程大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的编程大赛。”然后校长就什么也不管了。
在这个过程中,校长根本没有见过这三名同学,就对其进行了管理,他根据的是什么?没错,他根据的是数据。
实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。
每这么一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。这么一套信息在C语言当中我们称之为抽象结构体,而在C++当中又叫做面向对象。
当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
此时校长对各个学生的管理,实际上就变成了对这个双链表的增删查改。当有新生时直接向该双链表加入一个结点,当学生毕业后直接将学生信息从该双链表当中移除即可。