【Linux】学习之进程准备工作—浅谈操作系OS
OS的概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
-
内核(进程管理,内存管理,文件管理,驱动管理)
-
其他程序(例如函数库,shell程序等等)
操作系统本质上是一款软件,并且是计算机软件中最重要的一款软件。对操作系统的定位是他是一款对软硬件资源进行管理工作的软件。并且操作系统要在启动后,将软件数据和代码加载到内存中才能表现出他的意义。
因为计算机是为了给人提供服务的,而直接使用硬件和软件来操控计算机对人来说学习的成本太高太高了,是一件极小概率能完成的事,因此需要操作系统来帮助我们管理软硬件,降低学习成本。
设计OS的目的
- 与硬件交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境
如何理解管理?
首先,我们简化一下模型,比如一个学校中有三种角色:校长,辅导员,学生。
先举一个简单的例子:
由上图我们可以大概了解,所谓的管理,就是做出各种决策,只要校长掌握好学生的个人信息就能做出对应的判断并做出决策,所以校长就是属于管理者,而学生是被管理者。但是管理者与被管理者之间是不直接打交道的,因为这样会使管理者掌握的数据变得凌乱导致做出的决策又慢又困难。因此需要一个下手来帮助管理者聚合好个人数据,也就是中间人执行者,这样一来,管理者就在执行者的帮助下很好的完成了学校的管理工作。
OS是如何管理软硬件资源的?
现在我们已经知道,操作系统的目的,对上,是为了给用户提供良好的服务的。而对下,就是对软硬件进行管理的。而由上我们又知道了管理体系中不止有管理者这一个角色,那么在计算机的管理体系中,管理者是操作系统,被管理者是各种软硬件,那执行者又是谁呢,且管理者又需要做哪些决策呢?他们三者又是如何交互的呢?
我们再来总结一下管理过程:管理者拿到执行者收集的数据并做出决策后由执行者对被管理者做出相应的动作
管理者:操作系统
被管理者:软硬件资源
执行者:驱动程序
在计算机中,每一种硬件都几乎配有驱动程序,这是为了方便操作系统管理硬件资源。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。
在上一篇中,我们学习了冯诺依曼体系结构,知道了计算机的各种硬件是以冯诺依曼结构组织的,所以我们现在对计算机内部有了这样一个雏形:
这样一来已经简单的完成了对硬件资源的管理工作,我们知道操作系统是一款软件,不仅管理硬件还管理软件,而管理软件,有四大管理:内存管理,驱动管理,文件管理,进程管理。
因此模型进一步升级成这样:
到这里,我们仅仅只是知道了计算机中管理的三个角色,但我们还是不知道什么是管理以及如何管理,也就是这三者在计算机中是如何交互的。下面我们来谈一下:
我们在上一个Topic中知道了学校的管理体系:辅导员会聚合好学生的每个人信息数据,再交给校长,这样在数据量庞大的情况下,依旧可以快速的做出正确的决策。所以我们现在的问题就是,如何去聚合同一个学生的数据?
在这里就要用到面向对象的思想了,我们想要聚合好同一个学生的数据,我们只需要用一个类封装起来,类内放学生的各种属性信息就好了,因为Linux是有C语言写的,因此C语言的类也就是结构体。
现在解决了如何聚合同一个学生的数据,下面我们需要解决的是,若有成千上百个学生呢?如何有条不紊的管理好这么多个学生的数据呢?这就要用到我们所学的知识——数据结构。
我们只需将成千上百的学生的结构体当成数据结构中的一个一个的结点,那么对学生的管理,不就是对这个数据结构的增删查改了吗?(以双链表举例)
到此,其实我们已经完成管理工作了:
总结一下:什么是管理???
第一步:先描述!先描述管理对象!!!
第二步:再组织!将被管理对象使用特定的数据结构组织起来!!!
也就是对目标的管理转化成对数据的管理!!
OS如何会为用户提供功能?
为了保障安全,并不会让用户直接访问OS内部功能模块。要记住,操作系统不信任任何用户,但仍要提供服务。因此OS会对外提供接口,让上层用户通过系统调用的方式来完成功能调用。而系统调用接口对普通用户来说使用成本也高,至少要学习过操作系统,因此在系统调用接口之上又构建了库,用作用户操作的接口。
如内容有误,请及时批评指针,希望对你有用,感谢!