目录
1、概念
2、操作系统的结构
3、对操作系统的理解(管理角度)
4、OS对硬件是怎么管理的?
1、概念
 操作系统是一款进行软硬件资源管理的软件
广义的认识:操作系统的内核+操作系统的外壳周边程序(用户提供使用操作系统的方式)
 侠义的认识:操作系统的内核
2、操作系统的结构
 操作系统有很多功能,最核心的有四个:进程管理、文件系统、内存管理、驱动管理(硬件)
 为了协调软硬件的使用,即当各种硬件设备有了改动,相应的要改动操作系统
 改操作系统的时候,对应的也要改动硬件
 这个就比较扯,双方互相掣肘
 所以,为了协调双方,就再操作系统的软件层面和硬件层面多了一个驱动层
 这个驱动层就只是为了给硬件提供一个接口,方便操作系统从硬件读取数据
 因此,操作系统就不用直接跟硬件打交道,而是跟硬件自带的驱动程序打交道
 每个硬件对应的都有一个驱动程序(也有可能某些硬件公用一个驱动程序)
 一般硬件的驱动程序都是厂商自定义的


为什么会有操作系统呢?
 对软硬件进行管理(手段),为用户提供一个良好(稳定的、安全的、高效的)的运行环境(目的)
3、对操作系统的理解(管理角度)
 管理者对被管理者是如何进行管理的?
 例如校长对学生的管理:
 需要校长对人一对一吗?
 不需要,只需要知道学生的数据即可,例如年级、成绩、表现、记过、奖励等等
 校长知道了这个学生对应的数据,就可以做决策,是不管、是开除、是发奖学金、还是别的决定
 所以,本质上,管理一个人,本质上是对这个人的数据信息进行管理
 所以,管理,拿到数据才是目的
 国家主席对国家的调控,需要国家的数据
 总裁对企业进行管理,需要企业的数据
 同理,操作系统管理硬件,也是需要硬件的数据信息
因此,拿到数据是关键
 那么,拿什么数据?只需要拿到关键的属性数据即可
 例如,学生比较重要的数据有:姓名、籍贯、性别、年级、紧急联系人、记过、成绩、、、
 可是那么多学生,张三、李四、王五、赵六、田七、丘八、老九、、、假如说有5万名学生。形态各不相同,怎么管理?
 假如校长是一个程序员,而且他只会写C,那么有没有可以同时管理不同数据的东西呢?
 有,结构体。
 所以,他就可以用一个struct对这5万名学生进行管理
 可是,有5万个结构体,难道他要一个一个的struct吗?
 不可能,写完估计也就退休了。
 所以,这个时候,在一个又一个寂寞且孤单的夜晚,他在抽了一根又一根烟后,他想明白了。
 加一个next指针
 现在,校长对学生的管理,数据管理,就变成了链表的增删查改
 例如说,要找一个数学成绩最好的人,直接遍历,然后返回这个人即可
 张三智力超群,一年干完所有大学课程,直接毕业,这个时候只需要遍历链表,找到张三,改在学为毕业状态即可
 以上这个过程,就是对学生管理工作的计算机建模过程
因此,任何语言,六个字:先描述、再管理
C++:封装、继承、多态
 封装的本质是描述对象
 而STL提供了各种容器,这些容器用来封装对象,是对对象的一种组织方式,
 所以容器的本质就是数据结构
语言的精华:先描述、再组织
4、OS对硬件是怎么管理的?
 当检测到键盘、鼠标等硬件时,操作系统就读取对应硬件的数据属性,先描述对象,设置为节点,然后将各个硬件的对象节点给组织起来
用户不能绕过操作系统访问访问硬件
 因为硬件是操作系统管理的,如果你可以直接访问硬件你,绕过了操作系统,就有可能对操作系统的硬件管理产生影响
 同样,用户也不能直接访问绕过操作系统访问硬件的驱动程序等,因为非常有可能用户自己访问软硬件之后,
 不小心修改了一些核心数据,就可能导致整个操作系统的崩溃
 因此,为了保证操作系统的稳定性和安全性,在操作系统外,给用户提供了一层系统接口(system call)
 上面有诸多关于系统调用的接口,方便用户通过操作系统和底层的软硬件进行交互
 这个系统接口很像银行的柜台
但是系统接口,也是需要建立在对操作系统有一定理解的基础上才很好的使用
 例如,一些不识字的大爷大娘来银行办理业务,他们对银行的业务了解几乎为0
 在这种情况下,他是没有办法去使用系统接口的
 所以,银行为了照顾、方便大部分人,所以还设置了大堂经理
同样的,为了方便用户可以更好的与操作系统下的软硬件进行交互
 操作系统在提供系统接口的同时,在系统接口的上面一层还提供了一层软件层
 这一层的软件层将系统接口进行封装,用人们便于理解的方式描述接口
 这一层,就是我们用户操作接口
 例如,shell外壳、lib(C、C++标准库)、部分指令等
 再往上,就是编程语言
 所以,我们原来使用的printf、scanf就是经过封装过后的系统接口,用C语言描述成为我们便于理解的样式
 所以,库函数是对系统接口的封装
 因此,一切技术的发展,都会使得操作、理解方式越加的简单化、便于理解化
 操作系统存在的意义也同样如此,是为了让人能够更好的使用电脑这个工具
不同的操作系统提供的系统接口不一样
 因此,如果使用系统接口直接进行代码书写,不具备跨平台性
 但是C、C++写的代码却可以有跨平台性
 为什么?
 因为C、C++的标准库已经做好了跨平台的工作
 当你在windows下运行,提供的是windows的系统接口
 当你在linux下运行,提供的是linux的系统接口
因此,一个完整的操作系统,是包括系统软件进行各种管理加上系统接口
操作系统存在的意义,就是为了让人更好的使用工具,仅此而已



















