初步认识操作系统(Operator System)
目录
操作系统
设计操作系统的目的
操作系统之上之下分别有什么
操作系统如何管理软件:先描述,在组织
操作系统
简单来说,操作系统是一款进行软硬件资源管理的软件
设计操作系统的目的
- 与硬件交互,帮助用户管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境
操作系统之上之下分别有什么
实际上,只要是我们肉眼看到的计算机实物,也就是计算机底层使用的硬件结构体系,其实都遵守冯·诺依曼的组织形式
只有这些硬件是不够的,还需要有一个软件来对这些硬件进行管理。例如,内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这些都是由软件进行管理的,这个软件就是操作系统(Operator System)
此时有一个问题:难道操作系统直接和底层打交道吗?
举个例子,如果操作系统自己来完成键盘的读取操作,那么只要你的键盘读取方式进行了改变,那么操作系统的内核源代码就需要进行重新编译,这对操作系统来说,维护成本太高了。于是我们又在操作系统与底层硬件之间增加了一层驱动层,驱动层的主要工作就是单独区控制底层硬件的。例如,键盘有键盘驱动。驱动简单来说就是去访问某个硬件,访问这个硬件的读,写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关模块进行开发的(例如网卡)。
此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件解藕(将系统与组件之间的关系从相对紧密化为相对独立,可以提高系统的灵活和可维护性)
那操作系统究竟管理些什么呢?
操作系统主要进行以下四项的管理:
1.内存管理:内存分配,内存共享,内存保护以及内存扩张等等
2.驱动管理:对计算机设备驱动驱动程序的分类,更新,删除等操作
3.文件管理:文件存储空间的管理,目录管理,文件操作管理以及文件保护等等
4.进行管理:其工作主要是进程的调度
而操作系统在往上就是我们所处的位置,在这里我们就可以使用命令行或是图形化界面进行各种操作,这一层被称为用户层
但是操作系统为了保证自己的数据安全,也为了保证给用户提供服务,操作系统以接口的方式给用户提供了入口,来获取操作系统内部的数据,这一系列接口被称为系统调用接口
但这些系统调用接口对用户来说使用代价太大,因为要使用系统调用前提条件是你得对系统有一定的了解。所以在系统调用接口之上有构建出一批库,例如libc和libc++。实际上在语言级别上使用各种库,就是封装了系统调用接口的,我们就是通过调用这些库当中的各种函数(例如:printf 和 scanf)进行各种程序的编写
操作系统如何管理软件:先描述,在组织
要想学好操作系统,那么就必须正确的理解到底什么是管理
这里使用一个例子来让我们理解什么是管理,现在有三个角色:校长,辅导员,学生。在这些角色中很明显校长属于管理者,学生是被管理者,那么辅导员是什么呢?
不管是人还是计算机,完成一件事情都需要经历两个过程,首先是决定要不要做这件事情如何做这件事情(决策),然后去做这件事情(执行)。校长实际上就是那个做决策的人,但是校长做出来的决策并不是自己执行,而是让辅导员去执行,所以辅导员的主要任务就是执行管理者的决策,我们通常将其称为执行者
虽然说校长是管理学生的,但是我们在学校一般情况下是看不到校长本人的,那么校长是如何做到在不看到我们的情况下对我们进行管理的呢?
举个例子:
现在校长要求辅导员将计算机成绩排名前十的学生的共和中资料以及平时表现记录拿过来,它将从这十名同学之中选出三名学生参加本次的编程大赛,当辅导员将资料拿来后校长选出三名同学说 “就这三个了” ,你找个老师给它们做一下强化训练,然后本次的编程大赛校长就什么都不需要管了。
在这个过程中,校长根本没见过这三名同学的面,就对其进行了管理,其实从上面就可以看出,校长就是通过数据对其进行的管理
实际上学校将我们每个学生的各种信息都进行了管理,姓名,年纪,成绩信息以及健康信息等等
每一套信息就描述了一个学生,校长通过对这些信息的管理就能做到对学生的管理(在操作系统中其实就是使用结构体进行对信息的描述)。而这种方式在C语言中我们称之为:抽象结构体,而在C++中当中又叫做面向对象
当学生的数量多起来校长就可以将全部的学生的信息组织起来,而进行组织的方法有很多种(链表,顺序表,树等),每种组织方式都有自己的优势,假设校长使用的链表将数据进行组织
此时校长对学生的管理,实际上就变成了对链表的增删查改。当有新生入学时直接向该双链表加入一个结点,当学生毕业后直接在该链表中删除对应的学生信息就可以了
总结一下:
管理者管理被管理者,实际上就是对这个被管理者的各种信息进行描述,然后再将多个被管理者的描述信息通过某种数据结构进行组织起来,最后就会变成管理者管理被管理者实际上就是对对数据结构的增删查改