操作系统1 下载本文

Handler Flags Rnach Irq--action Name Decid hext 3 irqaction 2 Handler 1 Flags 0 Madle 中断号 Name Dec-id ment

根据中断号找到相应的设备的中断信息及对应的中断处理子程序。OS初始化时,调用函数request-irq( )对irqaction进行初始化,初始化的结果就是建立了上表的信息表—中断向量表。

(2) 对中断的处理

Linux中断处理子系统的一个基本任务是将中断正确联系到中断处理代码中的正确位置。这些代码必须了解系统的中断拓扑结构。例如,在中断控制器的引脚6上发生的软盘控制器中断,必须被辨认出的确来自软盘,并同系统的软盘设备驱动的中断处理代码联系起来。

中断发生时,Linux首先读取系统可编程中断控制器的中断状态寄存器,判断出中断源,将其转换成irq—action数据中的偏移值(例如中断控制器引脚6来自软盘控制器的中断将被转换成对应于中断处理过程数组中的第7个指针,即irq—action[6]),然后调用其相应的中断处理程序)。 四、时钟管理

1、 时钟管理硬件

由三个元件组成:晶振、计数器、保持寄存器。 16位寄存器—每个脉冲减少一次计数器 --保持寄存器

时钟硬件的任务:按指定的时间间隔产生时钟中断 过程: 由软件往保持寄存器写一个值

保持寄存器的值→计数器

每来一个脉 冲,计数器减1

当计数器=0时,产生一次时钟中断 PC机的中断频率为60次/秒,每1/60秒产生一次中断及时钟滴答,一个时钟滴答的时间间隔为1/60秒≈16.667ms(毫秒)。

2、 时钟软件—时钟驱动程序

时钟驱动程序也是时钟中断处理程序,时钟中断是OS的脉博。 Set-alarm(进程号,系统调用,延通6月)

如打印头换行的时间间隔不得低于8.3MS,共得只打印一个字符就换行,此时必须做延时处理。

用以分析统计时间在程序的各部分的分布情况每年一次时钟中断,时钟驱动程序分析 前PC属于被统计程序的哪一段,将该段的时间计数器累加。

在时钟中断期间,时钟驱动程序做的几件事: (1) 递增实际时间。

(2) 递减时间片并检查是否为零。 (3) CPU记帐。

(4) 递减报警计数器。 Clock clock-tash

引起时钟中断的原因: 每次时钟滴答。 有关时钟的调用。

Linux中用jiffies表示自系统启动以来的时间滴答数。 五、OS内核的结构

1、 传统结构:unix、linux 2、 微内核结构:windows 分层内核与微内核。 (1) 内核体系结构。 客 设文进虚 存 户 备件程用户 进 驱服服文件系统 程 ┅ 动务务进程间通信 器 器 程I/O和设备管理 序 虚存 基本进程管理 微 内 核 硬 件 硬 件 (a)分层的内核

(b)微内核 Unix是分层结构,windows 2000是微内核结构。 (2) 微内核原理

微内核是一个小型的OS核,它为模块化扩展提供基础。微内核的基本原理是,只有最基本的操作系统功能才能放在内核中,不是最基本的服务和应用程序在微内核之上构造,并在用户模式下执行。尽管什么应该在微内核中,什么应该在微内核外,不同的设计有不同的分界线,但是共同的特点是许多传统上属于操作系统一部分的功能现在都是外部子系统,包括设备驱动程序、文件系统、虚拟管理程序、开窗口系统和安全服务,它们可以与内核交互、也可以互相交互。

微内核结构用一个水平分层的结构代替了传统的纵向分层的结构。在微内核外部的操作系统部件被当作服务器进程实现,它们可以借助于通过微内核传递消息来实现相互之间的交

互,因此,微内核起着信息交换的作用:验证信息,在部件间传递信息并授权访问硬件。微核还执行保护功能,除非允许交换,否则它阻止信息传递。

(3) 微内核组织结构的优点: ? 一致接口:微内核设计为进程请求提供一致接口,进程不需要区分是内核级服务还

是用户级服务,因为所有的服务都是通过消息传递的。 ? 可扩展性:允许增加新的功能。 ? 灵活性:允许选择OS的服务。

? 可移植性:所有或大部分处理器专用代码都在微内核中。 ? 可靠性:小内核的质量更容易获得保障。

? 分存系统支持:用户只提供要求服务的标识,无需知道服务存在的位置,在分存或

系统中对所有服务提供唯一的标识。 ? 对面向对象操作系统(OOOS)的支持。 (4) 微内核性能

通过微内核构造和发送消息、接受应当并解码所花费的时间比进行一次系统调用的时间要多,但是由于别的因素的作用,很难概括出是否是性能投失了多少。

第一代微内核有300KB代码和140个系统调用。

一个小的第二代微内核仅包含12KB代码和7个系统调用,它们都unix执行得好。 ---------内容摘自《操作系统—内核与设计原理》第四版P125-127。 (2.3.2—2.3.4学时,2.3.5-2.4.3(学时)。

2.3.2 进程的创建

应该讲述两个问题:什么时候创建进程,怎样创建进程。 一、进程图

1、 进程图是用于描述进程家族关系的有向树,P48。 2、 父子进程的关系。 (1) 父进程创建子进程。

(2) 子进程继承父进程的资源,文件,缓冲区。 (3) 子进程随父进程的撤消而撤消。

二、引起创建进程的事件—什么时候OS会创建进程。

在多道程序环境中,只有进程才能在系统中运行,为使程序能够运行,必须为程序创建进程,导致一个进程去创建另一个进程的典型文件,可有以下四类。

操作系统启动时,令创建OS的初始进程,用户执行程序 时,OS为可执行程序创建进程,用户高支入命令时,OS也为执行命令程序创建进程,总结一下。

1、 用户登录:login,shell. 2、 作业调度。 3、 提供服务。

4、 应用请求:应用程序调用fik为自己创建一个新进程。 三、进程的创建。

OS调用创建新进程的原语来创建进程,一般步骤: 1、 申请空白PCB。 2、 为新进程分配资源。 3、 初始化进程控制块。 4、 将新进程插入就绪队列。

四、unix调用fork( )例程序创建进程的过程:

unix systemv,unix ,PCB:unix 进程映象: 1、 用户级上下文:程序、数据。 2、 寄存器内容

3、 系统级上下文:进程表项、V巴}静态;核心栈、若干层寄存器上下文}动态。 Unix进程表项。(--proc) Unix V区。

Fork( )过程。 (教材P400)

1、 在进程表中为新进程分配一个位置。

2、 分配一个唯一的进程标识符(ID)给这个子进程。 3、 除了共享内存外,拷贝一个父进程的映像。

4、 增加了文进程所拥有的文件的数量,表现在存在另一进程 也拥有这些文件。 5、 设置子进程的状态为准备运行状态。

6、 返回子进程的ID给父进程,将一零值赋给子进程。

(当发生fork调用返回时,要对返回的参数进行检测,如果值为0,则为子进程,此时执行一分支程序到适当的用户程序的便继结执行。如果值非质,则为父进程,旦它流程给继续执行下去)

五、Linux的进程创建,fork( ) 和exec( )

1、 fork( )的流程。 Fork开始 为新进程分配task-struct 结构,由kmalloc( )分配内存 为进程要使用的堆栈分配物理页 Find-empty-process( ) task[ ] 中哪个元素空着 把新task-struct结构保存在task数组中,一系列填充操作

把父进程的task-struct结构复制到新的进程tast-struct中

Wake-up-process( ) 插入就绪队列

父子进程可共享的资源包括文件,信号处理程序、虚拟内存。 2、 exe( )简单执行流程

Exe( )开始

用装载程序装入可执行文件

清除父进程内存中可执行文件

File.count-1 映像,同时清除信号处理程序

并关闭所有文件。

重置页表 Count=0?