深入理解Windows操作系统机制(三)

 我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。

我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的人机交互界面,这个界面其实只是Windows操作系统的一个组件,在Linux上,我们使用Linux系统所使用的界面则只是Linux系统上的一个程序。所以说,我们接触的并不是这些系统的内核。久而久之,我们基本会慢慢把界面里所展示的直观的东西误认为是Windows操作系统本身,其实这是不对的。

我们来重新审视Windows操作系统,看看Windows操作系统本身典型特征和主要功能。由Windows操作系统的功能,可以知道Windows操作系统提供的服务有下面这些:提供了一个用以执行程序的环境,提供的服务有程序执行、I/O操作、文件操作、资源分配与保护、错误检测与排除等。

Windows操作系统借用了多道程序设计的理念,所谓多道程序设计技术就是指在内存中同时存放两道或两道以上的作业,这些作业同时处于运行状态,且它们在管理程序控制下,相互穿插运行。这些作业共享处理器、外设以及其他资源。

Windows操作系统的中断处理程序只能是操作系统程序,不可能是应用程序。中断处理属于系统中会对系统产生重大影响的动作,因此只允许核心态程序执行。而应用程序通常指用户程序,运行在用户态下,不能进行这些操作。

操作系统的主要功能包括处理器(CPU)管理、存储器管理、文件管理和设备管理。数据管理属于文件管理的范畴。网络管理不是操作系统的功能。

Windows操作系统中的多重处理即并行执行,多任务处理即多个进程并发执行。Windows操作系统既可以支持并发执行也可以支持并行执行。并行执行与并发执行不存在包含关系。在同一时间间隔内,系统中同时运行多个进程是并发执行的基本概念。一个CPU可以采用多核架构,可以实现并行执行。并发性是指宏观上在一段时间内有多道程序在同时运行,但在单处理器系统中,每一时刻仅有一道程序在执行,故微观上这些程序是交替执行的。两个或两个以上进程在执行时间上有重叠,即符合并发性的定义。

采用层次结构方法可以将操作系统的各种功能分成不同的层次,即将整个操作系统看作由若干层组成,每一层都提供一组功能,这些功能只依赖于该层以内的各层次,最内层部分是机器硬件本身提供的各种功能。同机器硬件紧挨着的是操作系统的内核,它是操作系统的最内层。内核包括中断处理、设备驱动、CPU调度以及进程控制与通信等功能,其目的是提供一种进程可以存在和活动的环境。内核以外依次是存储管理层、IO管理层、文件管理层、作业管理层、命令管理层。它们提供各种资源管理功能并为用户提供各种服务。命令管理层是操作系统提供给用户的接口层,因而在操作系统的最外层。操作系统的这种层次结构如下所示。

第七层    命令管理层
第六层    作业管理层
第五层 文件管理层
第四层 I/O管理层
第三层 存储管理层
第二层 中断处理、设备驱动、进程控制与通信、CPU调度等
第一层 裸机

从描述可以看出,按层次结构原则,计算机层次从内到外依次为:裸机、CPU调度、内存管理、设备管理、文件管理、作业管理、命令管理、用户。

来看一个实例,Windows操作系统内存中有3道程序A、B、C。它们按A、B、C的优先次序执行。它们的计算和I/O操作的时间见下表。假设3道程序使用相同设备进行I/O操作,即程序以串行方式使用设备,试画出单道运行和多道运行的时间关系图(调度程序的执行时间忽略不计),并回答在这两种情况下,完成这3道程序分别需要多长时间(多道运行时采用抢占式调试策略)。

程序执行情况表(单位:ms)

操作           程序A      程序B      程序C

计算              30             60            20

I/O操作         40             30            40

计算              10             10            20

若采用单道方式运行这3道程序,则运行次序为A、B、C,

即程序A先进行30ms的计算,再完成40ms的I/O操作,最后再进行10ms的计算;

接下来程序B先进行60ms的计算,再完成30ms的I/O操作,最后再进行10ms的计算;

然后程序C先进行20ms的计算,再完成40ms的I/O操作,最后再进行20ms的计算。

至此,3道程序全部运行完毕。

单道方式运行时,其程序总运行时间如下:(30+40+10+60+30+10+20+40+20)ms=260ms

若采用多道方式运行这3道程序,因系统按照A、B、C的优先次序执行,则在运行过程中,无论使用CPU还是I/O设备,A的优先级最高,B的优先级次之,C的优先级最低,

即程序A先进行30ms的计算,再完成40ms的I/O操作(与此同时,程序B进行40ms的计算),最后再进行10ms的计算(此时程序B等待,程序B的第一次计算已经完成40ms,还剩余20ms);

接下来程序B先进行剩余20ms的计算。再完成30ms的I/O操作(与此同时,程序C进行20ms计算,然后等待I/O设备)最后再进行10ms的计算(此时程序C执行I/O操作10ms,其I/O操作还需 30ms);

然后程序C先进行 30ms的I/O操作,最后再进行20ms的计算。

至此,3道程序全部运行完毕。

多道方式运行时,其程序总运行时间如下:(30+40+10+20+30+40+20)ms=190ms

下面我们从另外的角度来看系统,我们来看看CPU利用率的角度,从这个角度来看操作系统。

一台装有早期Windows操作系统计算机有32MB内存,操作系统本身占用2MB,每个用户进程占用10MB。用户进程等待I/O的时间为80%。系统是这么一个情况,我们来分析分析上面会发生什么情况,看看CPU的利用率是多少。

只有当所有进程都在等待I/O时,CPU才会空闲下来。因此需要算出所有进程都在等待I/O这种情况发生的概率。上面说用户进程等待I/O的时间为80%,也就是说进程等待I/O的概率为80%,那么n个进程都同时等待I/O的概率就为(80%)^n,则CPU的利用率u可表示为:

u=1-(80%)^n=1-(0.8)^n

在内存为32MB时,可容纳(32-2)/10=3个用户进程,CPU利用率为=1-(0.8)^3=48.8%

 在内存再增加32MB时,可容纳(32+32-2)/10=6个用户进程,CPU利用率为=1-(0.8)^6=73.8%

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

猜你喜欢

转载自blog.csdn.net/wang2015cn/article/details/131745658