第二章 操作系统逻辑结构
2.1 操作系统的微内核结构的优点对我们设计大规模的应用程序有什么启示?
微内核架构包含两类组件:核心系统(core system)和插件模块(plug-in modules)。
核心系统负责和具体业务功能无关的通用功能,例如模块加载、模块间通信等;插件模块负责实现具体的业务逻辑。核心系统功能比较稳定,不会因为业务功能扩展而不断修改,插件模块可以根据业务功能的需要不断地扩展。微内核的架构本质就是将变化部分封装在插件里面,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。
比如vue和react等前端框架都采用这种结构,简洁的核心组件和丰富的插件模块,实现功能的按需加载,各个部分易于维护和修改。
2.2 用户态向内核态转有多种情形(用户请求OS提供服务、发生中断、用户进程产生错误、用户态企图执行特权指令),但是本质上就是一种情形,即通过中断的形式进入。如何理解这句话?
中断是指CPU对突发的外部事件的反应过程或机制,用户请求OS提供服务、用户进程产生错误、用户态企图执行特权指令都是中断的几种情况,中断响应的本质是交换指令执行地址和交换CPU的态.
2.3 CPU收到外部中断信号后,是如何响应该外部信号,完成中断服务程序后,并最后自动回到原程序继续运行的?这个过程中硬件,软件会做哪些工作?
1、识别中断源
2、保护断点和现场
3、装入中断服务程序的入口地址
4、进入中断服务程序
5、结束中断程序后恢复现场和断点
6、中断返回
单元作业
1. 何为操作系统的逻辑结构?有哪几种典型逻辑结构?
操作系统的逻辑结构是指操作系统的设计实现思路。分为整体式结构、层次式结构和微内核结构。
1、整体式结构以模块为基本单位,但信息传递随意,维护更新困难。
2、层次式结构根据模块功能分为多个层级,相邻层级只有单向调用,结构清晰,利于系统维护移植。
3、微内核结构包含两类组件:核心系统(core system)和插件模块(plug-in modules)。核心系统负责和具体业务功能无关的通用功能,例如模块加载、模块间通信等,插件模块负责实现具体的业务逻辑。
2. 分层结构的分层原则是什么?
1、最底层与硬件相关
2、最外层与外部特性相关
3、中间层按调用次序和消息传递顺序规划
4、共性服务置于较低层
5、活跃功能置于较低层
3. 何为CPU的态?定义态的作用什么?有哪些态?
CPU的态(Mode)是指CPU的工作状态,是对资源和指令使用权限的描述。
定义态可以实现对资源和指令的分级管理,避免用户直接操作计算机硬件。
CPU的态分为核态(Kernel mode)、用户态(User mode)和管态(Supervisor mode)。核态能访问所有资源,能执行所有指令,一般宫管理程序和操作系统内核使用;用户态仅能访问操作系统提供的部分接口,一般供用户程序使用;管态是介于核态和用户态之间的状态。
4. 操作系统分层结构有何作用?在应用编程中,我们如何使用分层的编程思想提升程序的可移植性和可维护性?
层次结构结构清晰,可以避免循环调用。将整体问题局部化,易于保证系统的正确性。最底层与硬件相关、最外层与外部特性相关的结构有利于操作系统的维护扩充和移植。
对于前端工程师来说,在设计程序时,可大致分为API模块、UI模块和核心业务模块,API模块负责处理与后端的通信和数据交互,UI模块负责呈现页面,核心业务模块负责逻辑处理和功能实现,根据需要进一步拆分为多个模块。这样就有比较强的可移植性和可维护性,当后端接口或浏览器发生变化时,直接修改对应模块就可以。
5. 下载Linux 0.11 OS源代码,用SourceInsight软件打开源代码,了解其源代码的构成,大致的模块结构,做简单的文字描述。
Linux 0.11分为下面几个文件夹:
boot:计算机启动代码
init:操作系统初始化
include:各种函数的声明以及各类宏定义
kernel:与进程有关
mm:内存管理
Lib:链接时用到的库
Fs:文件系统
6. 下载Minix OS源代码,用SourceInsight软件打开源代码,了解其源代码的构成,大致的模块结构,做简单的文字描述。
minix 2.0:
include/目录包含了操作系统所有的头文件(即.h文件)
其中:
include/目录下为POSIX标准头文件;
include/sys/目录下为额外的POSIX标准头文件;
include/minix/目录下为MINIX操作系统定义的头文件
src/目录下包含了操作系统所有的源文件(.c或.s文件)
其中:
src/kernel/目录存放着MINIX操作系统第一层(进程管理)和第二层(设备管理)的源代码;
src/mm/目录存放着MINIX操作系统第三层中内存管理子系统的源代码;
src/fs目录下存放着MINIX操作系统第三层中文件管理系统的源代码;
src/lib目录下存放着MINIX操作系统使用的库例程源代码(e.g. open,read);
src/tools目录下存放着Init源程序,用于启动Minix;
src/boot目录下存放着启动和安装MINIX操作系统的源代码;
src/commands/ :包含公用程序(e.g. cat, cp, date, ls, pwd)的源代码;
src/test/: 包含有一些被设计用来对新编译好的Minix系统进行完整测试的工具(由于Minix是一个用于教学的操作系统,这意味着对它常常要作修改);
src/inet/: 包含了重新编译Minix以使之支持网路的源代码