一、操作系统的运行机制 

kernel当中包含的是OS当中最核心的部分,像图形界面不是放在kernel当中的,离开图像界面OS仍然可以通过命令行来使用 

CPU拿到一条指令就已经可以区分它是特权指令还是非特权指令了

操作系统根据PSW来判断当前正在运行的是用户程序还是内核程序 

刚开机的时候,CPU为内核态,操作系统的内核程序先上CPU执行 》》开机完成后,用户可以启动某款应用程序,此时操作系统内核程序主动让出CPU,让用户程序上CPU执行(在让出CPU之前把PSW标志位设置为用户态)

如果在用户态植入一条特权指令,CPU可以检查出来下一句要执行的指令为特权指令,但是同时检测到当前程序为用户态程序,就会触发一个中断。当CPU检测到中断之后就会立即变为核心态,并停止运行当前应用程序,转而运行操作系统的内核代码(中断使得OS再次夺取CPU的使用权),当OS处理完中断之后,就会再次将CPU的使用权交给其他应用程序

核心态》用户态:只需要修改PSW即可 

用户态》核心态:只能通过中断引发,由硬件自动转变,触发中断后OS就会夺回CPU的使用权进而执行核心态的相关功能来响应这次中断请求

二、中断和异常

像整数除以0是程序设计的bug,不是OS能够修复的,就直接终止掉就可以了 

当一个用户程序执行陷入指令的时候,就意味着用户程序主动把CPU的使用权还给给内核程序,想让操作系统内核来为他提供某种服务,前面提到的系统调用就是通过陷入指令来完成的,陷入指令不是特权指令,因为它是由用户程序执行的,意味着他工作在用户态

之所以称之为内中断,是因为中断来自于CPU的内部,他是由于CPU执行当前指令所产生的中断

外中断和当前执行的指令是没有关系的

只要产生中断,不管内外,都会切换到内核程序去执行,来处理这个中断

CPU在每一条指令执行结束的时候,都会例行检查是否有外部中断的信号需要我来处理,并根据中断信号的类型来决定走哪一条中断处理子程序

三、系统调用 

 

GUI:用户对窗体进行的所有操作都需要执行OS的GUI模块的代码来执行,GUI不在ker32模块里面,他是独立出来的模块,负责执行单独的任务,比如多核的CPU,我就可以提供一个核主要给GUI模块使用

操作系统向上层提供的接口是系统调用

涉及到共享设备的操作一般都需要进行系统调用,让OS来合理分配资源

例如C语言的printf函数,它是帮助你封装好之后的结果,最后编译的时候就会变成上图所示的一系列命令,其中就包含陷入指令的汇编代码

例如:执行CreateProcess函数的时候,里面内嵌fork代码,fork函数执行之前肯定要给寄存器赋值,里面就包含了是几号系统调用,然后执行陷入指令,产生中断,根据刚刚传递的参数决定进入几号中断处理函数(系统调用) 

系统调用仅仅是OS kernel的一部分,而且是可以供用户调用的接口的那一小部分

  系统调用检测寄存器当中的参数,来进一步执行中断处理子程序 

四、操作系统体系结构(上)

  

Ubuntu主要是实现非内核的功能,主要功能的内核都还是使用的Linux

大内核保留了OS传统的所有功能,微内核则是把其中最重要的功能独立出来做出微内核 

四、操作系统体系结构(下) 

  

分层结构:层与层直接紧密耦合,便于调试和验证,但是层数多,不可以跨层调用,使得系统调用的时间开销大

模块化:将操作系统按照功能分成若干模块,规定各个模块的接口,便于模块之间进行通信不需要消息机制,这样引入新的模块/文件系统就不需要重新编译整个内核 

微内核:只把中断、原语、进程通信等最核心的功能放到内核,其余的放入用户态

外核:内核负责进程调度、通信,外核为用户进程分配未经抽象的硬件资源(不虚拟、不抽象),减少了频繁的映射开销

 

设备的驱动程序就属于可加载的内核模块,它并不影响系统能不能正常运行,它只是影响系统的可拓展性,如果我们加载了驱动程序的模块,系统就可以支持新的模块,所以可加载的内核模块是一个锦上添花的东西 

五、操作系统的引导

开机的时候如何让操作系统在你的电脑上运行起来?

C盘安装了操作系统并使用C盘来启动操作系统,就称C盘为你的这个磁盘的活动分区

本质就是找到启动管理程序并且执行它去完成OS的启动工作 

ROM引导程序/自举程序/boot程序

磁盘引导程序根据分区表去判断C盘所处的位置

硬件自检,会自己检查主机的硬件是否一切正常,然后执行第二步

六、虚拟机

第一类:当上层的操作系统想要使用特权指令的时候,底层的VMM会截获这条指令,并合理执行,让上层的OS以为自己有特权一样

第二类:OS就和宿主OS里的一个普通进程差不多

下载另一个操作系统的镜像文件

 

 第二类可以很方便地进行迁移,你把自己虚拟机的iso镜像文件发给别人,别人在用的时候就和你的电脑环境一模一样了,里面的软件也都保持不变

把特权指令进行了细分,只有少数的敏感指令会被VMM截获,从而提高系统执行的效率

第二类:一部分VMM运行在用户态,一部分运行在内核态,在内核态的这部分是以虚拟机驱动程序的方式加载到操作系统的内核当中的,用户所有系统调用,比如write都会被VMM截获,并进行处理,代替应用程序向底层的宿主OS发出系统调用

Logo

鸿蒙生态一站式服务平台。

更多推荐