
再谈操作系统1、操作系统的概念2、操作系统存在的原因3、操作系统对软硬件的管理3.1、“管理”3.2、计算机实现管理——建模3.3、先描述再组织4、系统调用4.1、printf函数需要通过操作系统吗4.2、库函数简单认识冯诺依曼体系结构描述的是硬件的组织而操作系统方面的知识则与软件有关。1、操作系统的概念任何一个计算机系统都包含一个基本的程序集合称为操作系统。操作系统是一个进行软硬件资源管理的软件。还记得吗我们将操作系统分为广义操作系统和狭义操作系统操作系统种类广义操作系统狭义操作系统操作系统(泛指)操作系统内核 核心应用软件操作系统内核LinuxLinux内核 指令、shell命令行…Linux内核windowswindows内核 图形化界面程序、软件…windows内核我们依旧在这里提醒一下今后我们谈到操作系统统一指的是狭义操作系统即操作系统内核。这里有一张网络上描述操作系统内核与外壳程序的关系图其中我们可以看到操作系统内核(Kernel内核)后跟着一段内容。这就是操作系统的四大核心管理任务进程管理、内存管理、文件管理、驱动管理。当然我们知道裸露的操作系统(内核)是不能直接接收用户提供的数据与指令经处理后进行反馈的即内核是不能直接用的。所以我们需要shell外壳程序。再往外走就是一些可以提供更具体、更个性化服务的软件。对于Linux可能是一些指令、工具…对于windows可能是制作文档的工具、制作ppt的工具…对于安卓系统可能是游戏、播放视频的软件…2、操作系统存在的原因我们为什么要有操作系统目前我们只能做一个浅显的认识如果把操作系统删除了我们所有的计算机硬件都将变为一堆废铁所以如果没有操作系统计算机系统将无法正常运行。我们来看一张操作系统分层架构的图从这张图我们可以看出整个计算机系统是一个分层次的系统。小贴士操作系统并不直接管理硬件设施。操作系统通过管理特定的驱动程序从而控制特定的硬件。假设操作系统直接控制硬件我们可以认为这个世界上每添加一个硬件设备操作系统都要多添加一些代码用来管理这个硬件。这就增加了硬件与操作系统的耦合度不利于模块化管理导致效率的下降。操作系统对下通过驱动程序进行与硬件的交互从而对(软)硬件进行管理。这是手段。对上保证程序运行时不出现问题、不随意终止为用户提供稳定、高效、安全的运行环境。这是目的。所以操作系统本质上是一个工具。我们使用操作系统这个工具就可以完成人与计算机的交互利用人没有而计算机有的优势来更高效地完成一些任务。3、操作系统对软硬件的管理预备知识操作系统本质上是一类软件如今主流的操作系统都是用C语言设计的。提到管理我们先来谈谈管理是什么3.1、“管理”管理描述的就是管理者与被管理者的问题。比如在大学中校长就是管理者辅导员就是执行者学生就是被管理者。在这个世界上人做任何事情无非两类做决策做执行比如开学前校长召开会议做出决策各个新生辅导员做好新生信息的收集工作辅导员就执行校长的策略刚入学的学生就接受管理详细填写自己的主要信息。校长作为管理者核心工作就是做决策。而学生作为被管理者是做执行的载体。细节一管理者要做好管理不需要和被管理者见面管理者做管理不需要与被管理者见面那么管理者如何把被管理者管理好实际上管理者与被管理者见面不是刚需。在管理者看来被管理者身上相关的有效信息才是管理的核心。也就是说管理的本质是对数据做管理。管理者需要根据数据做出相关的决策。比如我们大多数学生几乎很少见到校长。但是校长依旧可以做出一些重大决策因为校长手中掌握了学生们的数据。细节二管理者不需要与被管理者见面那么管理者如何获取数据校长不直接与学生见面那么校长手中学生的数据哪里来的这时辅导员就派上了用场。辅导员作为执行者执行校长关于收集学生信息的决策将收集到的信息提交给校长校长就可以根据这些数据做出下一步的决策。在上面的情境中校长就是操作系统学生就是硬件辅导员就是硬件的驱动程序。操作系统并不直接与硬件接触。操作系统通过硬件的驱动程序收集硬件的相关数据(信息就是数据)传输给操作系统操作系统根据硬件的数据结合用户输入的指令与数据通过硬件驱动程序完成对硬件的控制。3.2、计算机实现管理——建模假设当前大学中只有50名学生。校长得到了一份辅导员手写的学生信息收集表上面包含的信息有姓名、电话、性别、身高、体重、学分绩点、在校表现…由于学生的数量很少校长就可以很容易地分析表格做出决策挑出绩点最高的一位学生给予奖学金挑出绩点倒数的几位同学通知辅导员特殊关照一下挑出身高最高的前几位同学参加市里的篮球比赛…然而随着时间的推移学校招收的学生越来越多人数达到了10000人。这时辅导员做表格就要做半天校长看表格也要看半天严重影响了行事效率。聪明的校长想到了使用计算机制作学生信息收集表并且在计算机上进行分析。那么有没有一种数据类型能够包含学生所有不同的信息从而表示每一位学生还记得吗我们曾经学过结构体structStu{char_name[10];char_phone[11];constchar*_sex;double_score[50];char_behaviour[128];// ...};有了结构体包含学生的基本信息我们就可以表示(实例化)出所有学生了structStuzhangsan{...};structStulisi{...};structStuwangwu{...};以前手写、查找表格速度慢现在计算机上制作与分析表格快多了。有了结构体还不够学生变量与学生变量之间还是没有任何关联。校长想找出绩点最高的学生必须一个一个找还是比较麻烦。为了让学生之间产生一种明显的联系我们又想起了节点structStu{char_name[10];char_phone[11];constchar*_sex;double_score[50];char_behaviour[128];structStu*_next;};每增加一个学生我们就在前一个学生节点后创建一个学生节点并插入就形成了一个链表现在校长有以下三个需求找出身高最高的人参加篮球比赛找出C语言成绩最好的3个人组队参加C语言比赛找出绩点最高的人给予奖学金。那么校长这三个需求就可以转化为遍历链表求最值的问题。依据上面情境的思路我们就可以把现实问题转化为对数据结构的增、删、查、改回到我们对于管理的阐述。管理的本质是对数据进行管理对数据的管理又可以转化为对数据结构的管理。这就是对现实问题做建模我们此处的建模指的是将现实问题转化为计算机问题。3.3、先描述再组织在上面的情境中校长利用结构体存储学生信息表示学生是为描述校长将所有学生节点连接成链表然后利用链表解决实际问题是为组织。在显示生活中任何系统要被管理任何问题要让计算机解决就必须先描述再组织。问题一我们之前写C语言程序比如通讯录、贪吃蛇、扫雷游戏。我们一般都是先定义结构体描述一些基本对象然后设计数据结构解决问题。这也是先描述后组织。问题二我们说C是一种面向对象的编程语言C有“类”这个概念C还有一个stl标准库里面规定了许多数据结构及方法。类的本质对象的描述。stl的本质对象的组织方式。事实上先描述再组织不仅仅是操作系统完成管理的方式不仅仅是计算机解决问题的指导思想不仅仅是C的设计思想先描述再组织可以认为是整个世界对于所有事物进行管理的真相只不过操作系统进行管理时的“先描述再组织”就是将基本要素用类型表示出来然后将抽象的管理任务转化为管理数据结构的问题。这就意味着操作系统内部一定存在大量的结构体与数据结构。小贴士当然操作系统基本都是由C语言设计的。我们目前暂时先用struct结构体做描述后面到了涉及C的部分就可以使用class等类类型了。4、系统调用现在我们知道了操作系统内存在着大量的结构体、数据结构。但是直接访问这些结构体与数据结构是有风险的。你是一个银行行长你有许多下属都是银行工作人员你们构成一个银行系统银行系统又与银行的桌椅、电脑、金库等银行的财产构成整个银行。今天张三来存300元。你作为银行行长你敢让张三自己在电脑里登记然后自己往金库里面寄存自己的300元吗答案是不行的人人都这么干群众中总有坏人会偷拿。明天李四来取钱。李四是一个老大爷腿脚都不方便操作电脑、登记数据更不用说。身为银行行长你也不敢让李四自己操作。你作为银行行长现在有两件事需要做到为人们提供存钱、取钱等服务防止群众中的坏人损害银行财产于是你下令建了一堵玻璃墙外面放桌椅里面放电脑、金库…外面开放给人们而对于里面你只开放了一个个小窗口以后人们来银行想办什么事都只能通过这个窗口完成。人们想访问银行系统只能通过银行提供的窗口完成同理用户想访问操作系统(内核)中的数据只能通过系统调用完成。这就保证了操作系统不会发生数据丢失、恶意篡改的情况以及不会发生因为用户的误操作导致操作系统损坏的情况发生也就保证了用户安全的运行环境。4.1、printf函数需要通过操作系统吗C语言中的printf函数向显示器打印内容之前需要通过操作系统吗答案是需要。显示器属于硬件而硬件的管理者是操作系统printf向显示器做写入必须经过操作系统。4.2、库函数简单认识向printf这样的我们不需要自己实现的函数就是C语言提供的库函数。如图操作系统上层还有一个系统调用接口。实际上系统调用接口就是C语言函数。库函数在系统调用接口的上面一层。库函数是对系统调用函数的封装。如何理解第二天李四来取钱。李四是一个老大爷腿脚都不方便操作电脑、登记数据更不用说。身为银行行长你也不敢让李四自己操作。现在你有了第三个任务帮助不熟悉操作的人以及腿脚不方便的人完成相关的业务。聪明的你专门设置了一个职位大堂经理。大堂经理就是专门给那些不熟悉流程的人以及腿脚不方便的人做指导的。同理大多数用户对于系统调用接口并不熟悉。所以就需要库函数对系统调用接口做封装未来用户不会直接使用系统调用接口而是操作更简单的库函数。库函数的使用降低了用户使用操作系统的成本。小贴士并不是所有库函数都封装了系统调用接口。如果库函数需要访问硬件那么库函数就一定要封装系统调用接口。windows与Linux的系统不一样那么系统调用接口肯定也是不一样的。我们使用的C/C库函数可能在windows系统和Linux系统分别都实现了一份。本文重点先描述再组织——操作系统管理(软)硬件的宏观方法系统调用。