资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
UNIX内核分析 2 参考教材 UNIX操作系统教程 软中断 1 软中断是Unix系统提供的进程间通讯的一个机构 进程间可以利用其发送少量信息 并作适当处理 同组之间可以通过37 系统调用kill相互发送软中断信号S5提供了19种软中断信号 13个具有标准名字的约定 终端类型号0解释为 没有中断 相关结构 p sig 进程接收的信号类型数u signal NSIG 软中断处理程序入口表 20个元素 软中断 2 发送软中断信号 按信号类型设置p sig的某一位 如果接受进程睡眠在可被中断的优先级上 则唤醒当一个进程从核心态返回用户态 或者进入 离开低优先级睡眠时 核心态检查其是否收到软中断信号 而仅当进程从核心态返回用户态时 核心才处理软中断进程在核心态运行时 软中断不会立即起作用 psignal p sig 将信号sig发给指定进程 PZERO param h 为25Registersig registerstructproc p sig if sig NSIG return p p sig 1LPZERO p在可被中断优先级睡眠setrun p 运行指定进程 或调入 必要时Issig 测试软中断信号 若收到不可忽略信号 返回真 否则 返回假 软中断处理入口表u signal NSIG 根据表项中元素不同值 有三种信号处理方式值为0 处理方式为终止本进程 值为奇数 对该信号不作处理 值为非零偶数 表示信号处理程序入口地址 u signal NSIG 表中各元素的值可通过48 系统调用signal sig func 预制 其处理程序是ssig NSIG 20 0 19sig 信号类型号 保存在u arg 0 func 对该信号的处理方式 保存在u arg 1 对于信号SIGKIL 终止进程 func不能设置 信号处理方式预制程序 ssig registera a u u arg 0 取参数sigif a NISG a SIGKIL u u error EINVAL 非法参数return u u ar0 R0 u u signal a 保存原先处理方式u u signal a u u arg 1 if u u procp p sig a 如果以前已经收到该信号u u procp p sig 0 处理方式已改变 清除原收到信号 signal sig func 用户通过该系统调用实现预制例如 signal 2 1 将u signal 2 设置为1 奇数实现不理会2号类型软中断的设置 信号产生的5种情况 陷入处理子程序trap中 用户态下产生各种故障 除电源失败等外 按照类型转换成信号进程间通过37 系统调用kill pid sig 进行信号传送用户在终端输入 DELETE 等 终端中断处理程序将信号SIGINT 2等发送到与终端有关的所有进程进程使用管道pipe通信 发现读通道已经关闭 则向本进程发送SIGPIPE 13信号父进程对接收到一个信号的子进程跟踪处理时 可用跟踪命令箱子进程发送一个信号 PDP 11内存管理机构 UnixS5思想 分页 支持内存 外存之间的进程对换支持请求调页的存储管理 PDP 11虚地址字 字长16位 每个进程的最大程序地址空间216 64KBCPU总线寻址能力18位 256KB 其中 最高8KB固定为I O页 所以内存最大容量为248KB程序16位地址称为虚地址 64KB分成8页 8KB 页每页划分为128个字符块 64B 块由于程序可以小于64KB 有些页可能局部 完全空白空白部分留作扩展使用系统按照实际使用页长分配内存 虚地址字划分结构 内存管理寄存器 1 PDP 11设置了2组32位活动页寄存器APR 8个 组 分别保存进程核心态 用户态下内存使用情况32位APR可分为2个16位的寄存器 分别为页地址寄存器PAR pageaddressregister 页说明寄存器PDR pagedescriptionregister 页地址寄存器PARPAF 表示虚地址空间中相应页在内存地址 单位是内存字符块寻址范围 0 212 1 64 即0 256K 64 字节 0 11 15 12 内存管理寄存器 2 页说明寄存器PDR 上图存取控制字段ACF accesscontrolfield 说明对该页的存取控制权限00 不驻在内存01 readonly10 未用11 R W扩展方向位 ED extend 如果某页实际使用小于128块 8KB 则ED说明空白部分在高 低地址一侧 即扩展时的扩展方向 ED 0 高地址一侧 ED 1 低地址一侧例如 Unix系统中 共享代码段 数据段 ED 0 栈段 ED 1 0 1 2 3 6 8 14 15 内存管理寄存器 3 存取信息位W 修改位W 1 表示修改过页长字段PLF 说明虚页的实际使用长度 1 128块如果ED 0 向高地址方向扩展 则PLF 实际使用长度 1 例如 实际使用长度为128 则PLF 127如果ED 1 则PLF 128 实际使用长度 例如 实际使用长度为128 则PLF 0用补码表示实际使用长度PLF值表示在相应扩展方向上该虚页实际使用的最末块块号 便于越界检查 虚地址到物理地址转换 总线寻址能力为18位 形成256KB的物理地址 0 5 6 17 0 11 找对应页的PAR Unix存储管理 PDP 11进程可访问的地址空间为64KB进程在核心态下的虚拟地址空间 图1左 Unix核心代码长度不超过48KB 6页 占0 5页进程在用户态下的虚拟地址空间 图2右 举例 0 5页 6页 7页 共享正文段2 5页 数据段2 25页 栈段0 5页 虚 实地址映照 Unix分别用KISA 0 7 和KISD 0 7 存放核心态下进程内存使用情况KISA类似PAR 页地址寄存器KISD类似PDR 页说明寄存器用户态下现行进程内存使用情况分别用UISA UISD存放KISA KISD 0 5 和KISA KISD 7 在系统初启后就固定 不再变化 KISA KISD 6 总是指向当前运行进程的ppda区从KISA6指向的ppda区user结构中可以得到u procp 它指向当前运行进程的proc 用户态虚 实地址映照 以前面幻灯片图2数字为例 UISA UISD ta是进程共享正文段在内存的起始地址da是进程数据段在内存的起始地址 da p addr 16 内存空间 ta da 352 虚 实地址映照 UISA UISD只有一组 保存当前运行进程页表表目 其他进程页表表目保存在user u uisa u uisd 16 u uisd内容与UISD完全相同 而u uisa内容则略有区别 它是假设ta p addr皆为0而构造的 见右u uisa u uisd由estabur 创建u uisa u uisd UISA UISD由sureg 完成 u uisa 存储资源管理表 可用存储区表Unix对内存 盘交换区存储资源分配和释放使用同一算法设置2个数组表示内存 盘交换区可用存储区情况intcoremap CMAPSIZ ints S 2个数组一般皆为100个元素 每2个元素构成一个表目项 共各有50个表目项 每个表目项描述 Structmap char m size 空闲区长度char m addr 空闲区起址 各空闲区按起始地址从高到低顺序登记在可用存储区表中 m size为0的表项为空白表目 集中在表的后部 存储资源管理 存储分配 firstfit malloc mp size mp coremap s存储释放 mfree mp size 释放区起址 存储保护 虚 实映射机构基本上使各进程相互隔离 达到保护各进程占用独立的存储区 且不会重叠进程在核心态 用户态下运行使用不同的管理寄存器 且用户进程无权修改寄存器值 不可能破坏操作系统核心态进程可使用系统提供的特权指令mtpi mfpi 向当前运行状态存储空间存 取指令信息 对现行运行进程的用户态空间进行操作通过KISD UISD中页长字段PLF 以及存取控制权限ACF 可以限定进程的访问长度和访问方式
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号