文章目录
- ⭐1. 什么是操作系统
- 🌟2. 为什么要有操作系统
- 🌠3. 操作系统如何管理
⭐1. 什么是操作系统
先入为主,操作系统是一款管理软件
操作系统分为两部分
- 操作系统本身,主要做一些进程管理、内存管理、文件管理、驱动管理等工作,这种核心部分叫做内核
- 用户界面,计算机与用户进行交互的方式
🌟2. 为什么要有操作系统
整个计算机是层状结构:
-
底层硬件是以冯诺依曼的组织结构用总线所连接起来
-
所以的硬件要与操作系统匹配使用,就需要有对应的驱动程序
比如说,我们所使用的鼠标,当鼠标插入电脑的时候,可能需要等个一两秒,这个时间段,就是在加载鼠标所需的驱动程序
-
操作系统在这个中间,起到一个承上启下的作用
有了操作系统,就能帮助用户管理好下面的软硬件资源,给用户提供一个良好(安全、稳定、高效)的运行环节。
这里的用户,其实并不是指的广大普通用户,普通用户使用的各种软件,并不是真正意义上使用操作系统,这些软件都是程序员开发出来的。所以,要让程序员有一个良好的开发环境,才能在此基础上开发出各种优秀的软件。
-
不过,操作系统不相信任何用户(包括开发人员),但是为了给用户提供服务,所以以接口的方式给用户提供调用的入口,来获取内部的数据,这种方式就成为系统调用,所有访问操作系统的行为,就只能提供系统调用。
银行信任用户吗?答案是不信任,运送货币时采用武装押运、无死角的监控、保险柜,这些要保证银行的安全
但如果将银行全封闭,那怎么给用户提供存钱、取钱的服务呢?
所以在柜台就开了一个很小的窗口,存取钱的时候通过柜台这个小窗口,来为用户提供服务
对应操作系统也是一样,不信任用户,防止有用户恶意篡改数据,所以不会让用户直接访问里面的数据,但为了不妨碍为用户提供服务,所以提供了一些接口让用户来调用访问,这样既保证了操作系统的安全,也为用户提供了满足需求的服务
-
系统调用对应用户来说并不是那么容易,于是就有了
shell
外壳,操作系统提供给用户与操作系统交互的一种命令行接口。它是一个命令解释器,可以解释和执行用户输入的命令,并与操作系统进行通信(可以理解为媒婆)。除了
shell
,操作系统还有一些库,这些库就是对系统调用接口进行封装(C标准库、数学库、网咯库),更加方便于用户来调用
🌠3. 操作系统如何管理
打个比方:
在一所大学里面,谁是管理者?毫无疑问——校长
那谁是被管理者?学生
但是每次都是校长对接我们学生吗?那可不是,大学四年说不定都见不到校长一两面
那我们连管理者都见不到,我们还能被管理起来,这可以说明管理者和被管理者不一定是需要见面的
那校长是如何不通过见面,还能管理到我们的呢?其实校长只需要拿到我们学生的数据就能知道了,例如学生的成绩、是否违法校纪校规、是否获得表彰什么的,就能了解到学生的各方面,从而对学生进行管理。有时候会组织访谈,坐在会议室里面聊聊天,但这是真正意义上的聊天吗?本质上还是通过聊天获取到数据:最近过的好不好、学习有没有什么困难、有没有什么意见等等,这些都是通过聊天获取到的信息
所以,管理者只要能够将信息管理起来,就能通过这些信息做出决策,从而达到对人的管理
管理者和被管理者不见面,那这么拿到数据呢?这个一般就是通过辅导员来拿到各专业学生的数据
这里的辅导员,属不属于管理者呢?管理者和被管理者的区别就是一个做决策、一个执行决策
而辅导员,只是执行校长的决策,更多做的是执行层面的事情,所以真正意义上并不是管理者
在这个体系中,校长就相当于操作系统、辅导员相当于驱动程序、学生相当于软硬件资源
操作系统通过获硬件的状态数据来进行管理,这些数据由驱动程序来收集,然后再交给操作系统
但是一个大学,学生成千上万,辅导员将数据汇总到校长,面对大量的数据,校长肯定是难以对这些数据进行分析的。
假设校长懂技术,现在就将学生的各项信息描述起来:学院、学号、姓名、性别、专业、成绩等等
struct student
{
char faculty[]; // 院系
char stu_num[]; // 学号
char name[]; // 姓名
char gender[]; // 性别
char major[]; // 专业
char garde[]; // 成绩
struct sturdent* next;
};
那这样,就得到了一个描述学生信息的链表,从而管理好这个链表结构即可。如果要查找成绩最好的,只需要调用配套的统计成绩的方法。这就将学生的管理工作转变成了对链表的增删改查
那对于操作系统也是同理,管理任何软硬件资源对象,最终都可以转换成对某种数据结构的增删查改
校长虽然会处理这些数据,但是他也可以向辅导员发指令,比如说,某个学生违法校规,要开除,那这时候就可以和辅导员说,你哪个学生被开除了,然后再由辅导员去通知这个学生,校长只需要在这个链表中把这个学生的信息删除即可;如果新转来一个学生,辅导员把他的信息统计上来交给校长,然后校长往链表插入这个学生对象即可。
以上这些过程,都是先描述对象,再组织,这贯穿于整个编程过程,C++/Java/Python这些高级语言,都是面向对象编程,要写一个学生信息管理系统,首先肯定是定义出一个类,然后再用某种数据结构将这些对象组织起来,只不过组织这个过程,这些语言大部分已经帮我们完成了,例如C++的stl。
通过这些再来总结一下:六个字——先描述,在组织
- 管理者和被管理者不一定要交互
- 要做出管理,只需拿到数据即可
- 将数据进行描述,然后再组织起来(数据结构的增删查改)
- 操作系统将一个一个的软硬件设备描述起来,每个设备都有对应的结构体,根据其属性采用某种数据结构组织,所以操作系统内注定存在大量的数据结构
那本期的分享就到这里咯,如有不足欢迎指正,我们下期再见,如果还有下期的话