目录
操作系统的定位
简单的说,操作系统就是一款进行软硬件资源管理的软件.
设计操作系统的目的
- 与硬件进行交互,管理所有的软件资源.
- 为用户程序(应用程序)提供一个良好的运行环境.
操作系统的划分
首先,我们肉眼可见的就是计算机实物,也就是计算机底层的硬件.这些硬件看似是一个一个罗列出来的,但是底层都遵循冯诺依曼的组织形式,
而单单只有这些硬件资源是不够的,还需要有一个软件来对这些硬件进行管理,例如,内存和时从输入设备读取数据呢?读多少数据呢?内存何时刷新缓冲区到输入设备呢?是按行刷新还是全刷新?这些都是由软件进行管理的,而这个软件就是操作系统(operator system).
操作系统难道直接和底层软件打交道吗?
如果操作系统自己来完成键盘的读取操作,那么只要你的键盘读取方式进行了改变,那么操作系统的内核源代码就需要进行重新编译,这对操作系统来说维护成本太高了.于是我们又在操作系统与底层硬件之间加了一层驱动层,驱动层的主要目的就是单独控制底层硬件的.列如,键盘有键盘的驱动层,网卡有网卡的驱动层,硬盘有硬盘的驱动层,磁盘有磁盘的驱动层.驱动层简单来说就是去访问某个硬件,访问硬件的读写以及硬件的当前状态等等,驱动层就是直接和硬件打交道的.而驱动层一般是由硬件制造厂商提供的.此时操作系统就只关系何时读取数据而不再关系是如何读取数据的了,也就是完成了操作系统以硬件之间的解耦.
那操作系统究竟管理什么呢?
- 内存管理:内存分配,内存共享,内存保护
- 驱动管理:对计算机设备的驱动程序的分类,更新删除等操作.
- 文件管理:文件存储空间的管理,目录管理,文件操作管理以及文件保护等等.
- 进程管理:进程的调度.
而在操作系统之上就是我们所处的位置,在这里我们可以使用各种命令或是图形化界面,这一层被称为用户层.
但操作系统为了保护自己,对上层只暴露了一些接口,而不会让用户直接访问操作系统,这一系列接口被称为系统调用接口.
但这些系统调用接口对我们普通用户来说使用成本太高了,因为要使用系统调用接口的前提是你要对系统有一定的了解.所以在系统调用接口之上又构建出了一批库,列如libc,libc++.实际上在语言级别上使用各种库,就是封装了系统调用接口,我们就是通过调用这些接口中的各种库函数进行各种程序的编写.
操作系统的管理
操作系统的管理总结出来就一句话,先描述在组织.
举例谈谈操作系统的管理,现在给出三个角色:学生,辅导员和校长,很明显,在这三个人中校长是管理者,学生是被管理者,那辅导员充当的是什么角色呢?
实际上我们完成任何一件事都需要经两个过程,首先是决定要不要做这件事或者是如何做这件事(决策),然后就是做这件事(执行).校长作为管理者来管理学生,校长实际上就是那个做决策的人,但校长做出的决策不需要自己来执行,而是让辅导员去执行,使用辅导员的主要工作就是执行管理者的决策,我们将它称为执行者.
虽然说校长是管理学生的,但是我们在学校一般情况下是看不到校长本人的,那么校长是如何做到在不看到我们的情况下对我们进行管理的呢?
举个例子:现在校长要求辅导员将计算机成绩排名前十的学生的各科资料以及平时表现记录拿过来,在它们十个人中选出三人参加本次的编程比赛,当辅导员选出其中的三个人进行训练,就可以参加比赛,而校长只需要把这个想法通知个辅导员.
在这个过程中,校长根本没见过这三名同学,就对其进行了管理,它根据的是什么呢,数据(描述)实际上,学校将我们的进行了信息管理.
这一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理.这么一套信息在c语言中我们称之为抽象结构体,而在c++中我们称之为面向对象.
当学生数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多,而没中组织方式都有自己的优势,
此时校长对各个学生的管理,实际上就变成了对这个双链表的增删改查.当有新生时直接向该链表中加入一个结点,当学生毕业时直接将学生信息从该链表中删除即可.