计算机操作系统9-unix系统内核结构(ppt96)-经营管理(编辑修改稿)内容摘要:

信号量表是信号量的结构数组。 在系统 Ⅴ 中 , 每个信号量用一个信号量结构表示。 其中 , 包括信号量值 semval及最近一次对信号量进行操作的进程标识符 sempid、 等待该信号量值增加的进程数等。 第十章 UNIX系统内核结构 2) 信号量集表 s e m 0s e m 1s e m 2 0s e m 3 1s e m 4 2s e m 5 3s e m 6s e m 7s e m 8 0s e m 9 1s e m 1 0 2s e m 1 1 0…信 号 量 表信 号 量 集 表信号量集信号量集图 108 信号量集表与信号量表 第十章 UNIX系统内核结构 3. 系统调用 在信号量机制中 , 同样也提供了若干条系统调用 , 分别用于对信号量执行各种操作。 1) semget( ) 用户可利用该系统调用来建立信号量集。 用户应提供信号量的名字 、 信号量集中信号量的数目等。 若信号量集的建立成功 , 将返回信号量集的描述符 semid。 第十章 UNIX系统内核结构 2) semop( ) 该系统调用可用来对信号量集进行操作。 用户需提供信号量集的描述符 、 信号量的编号 , 即信号量在信号量集中的序号 , 以及所要施加操作的操作数 semop。 内核根据 semop来改变信号量的值。 当 semop为正值时 , 便将该正值加到信号量的值上。 当 semop为负值时 , 若信号量的值大于 semop的绝对值 , 应将该负值加到信号量值上; 否则 , 操作失败 , 内核将已经操作过的信号量恢复到该系统调用开始执行时的值。 第十章 UNIX系统内核结构 存 储 器 管 理 请求调页管理的数据结构 1. 页表和磁盘描述表 1) 图 109 页表项和磁盘描述表项 物理页号 年龄 写时拷贝 修改位 访问位 有效位 保护 ( a)页表项 对换设备号 设备块号 存储器类型 ( b)盘块说明 第十章 UNIX系统内核结构 2. 页框数据表和对换使用表 1) 页状态: 指示该页的拷贝是在对换设备上 , 还是在可执行文件中。 内存引用计数: 指出引用该页面的进程数目。 逻辑设备: 指含有此拷贝的逻辑设备 , 它可以是对换设备 , 也可以是文件系统。 块号: 当逻辑设备为对换设备时 , 这是盘块号; 而当逻辑设备为文件系统时 , 这是指文件的逻辑块号。 指针 1: 指向空闲页链表中的下一个页框数据表的指针。 指针 2: 指向散列队列中下一个页框数据表的指针。 第十章 UNIX系统内核结构 图 1010 页框数据表项及其散列队列 第十章 UNIX系统内核结构 2) 对换使用表 页表项页框号 7 9 4磁盘块 描述项对换设备 1块号2 7 4 3引用数 1对换设 备 1块号 2 7 4 3物理页 7 9 4引用数 1对换设 备块 2 7 4 3对换使 用表项页框数 据表项 7 9 4虚地址1 4 9 3 K图 1011 四种数据结构之间的关系 第十章 UNIX系统内核结构 换页进程 1. 增加有效页的年龄 一个页可计数的最大年龄 , 取决于它的硬件设施。 对于只设置两位作为年龄域的页 , 其有效页的年龄只能取值为 0、 2和 3。 当该页的年龄为 0、 2时 , 该页处于不可换出状态;而当其年龄达到 3时 , 该页便为换出状态。 每当内存中的空闲页面数低于某规定的低限时 , 核心便唤醒换页进程 , 由换页进程去检查内存中的每一个活动的 、 非上锁的区 , 对所有有效页的年龄字段加 1。 对于那些其年龄已增至 3的页 , 便不再加 1,而是将它们换出。 如果这种页已被进程访问过 , 便将其年龄域中的年龄降为 0。 第十章 UNIX系统内核结构 2. 对换出页的几种处理方式 (1) 若在对换设备上已有被换出页的拷贝 , 且该页的内容未被修改 , 此时 , 核心只须将该页页表项中的有效位清零 ,并将页框数据表项中的引用计数减 1, 最后将该页表项放入空闲页链表中。 (2) 若在对换设备上没有被换出页的拷贝 , 则换出进程应将该页写到对换设备上。 (3) 虽然在对换设备上已有换出页的副本 , 但该页的内容已被修改过 , 此时核心应将该页在对换设备上原来占有的空间释放 , 再重新将该页拷贝到对换设备上 , 使在对换设备上的拷贝内容总是最新的。 第十章 UNIX系统内核结构 3. 将换出页面写到对换设备上 当在换出页面链表中的页面数已达到规定值时 , 核心应将它们换出。 为此 , 应首先为它们分配一个连续的对换空间 ,以便一起将它们换出; 但如果在对换设备上没有足够大的连续空间 , 而其空闲存储空间的总和又大于 64 KB时 , 核心可采取每次换出一页的方式将它们换出。 每当核心向对换设备上写一个页时 , 须首先清除该页页表项的有效位 , 并将页框数据表项中的引用计数减 1。 若引用计数为 0, 表明已无其它进程再引用该页 , 核心便将其页框数据表项链入空闲页链表的尾部。 若虽引用计数不为 0, 表明仍有进程共享该页 , 但如果该页已长期未被访问过 , 则也须将该页换出。 最后 , 核心将分配给该页的对换空间的地址填入相应的磁盘描述表项中 , 并将对换使用表中的计数加 1。 第十章 UNIX系统内核结构 请求调页 1. 缺页在可执行文件上 2. 缺页在对换设备上 3. 第十章 UNIX系统内核结构 设 备 管 理 字符设备缓冲区管理 1. 空闲字符缓冲区队列 c b l o c k [ 0 ]c _ n e x t c _ n e x t c _ n e x tc b l o c k [ 1 ] c b l o c k [ 2 ]c _ n e x tc b l o c k [ N - 1]c f r e e l i s t图 1012 空闲字符缓冲区队列 第十章 UNIX系统内核结构 2. 在字符设备进行 I/O时 , 内核可利用 getcf过程从空闲字符缓冲区队列中取得一个空闲缓冲区 , 若队列空 , 表明已无空闲缓冲区可提供 , 便返回;否则 , 从队首取得一个空闲缓冲区 , 并把指向该缓冲区的指针 bp返回给调用者。 由于空闲缓冲区队列属于临界资源 , 故还须采取互斥访问措施 , 即 , 在过程开始处 , 将处理机的优先级提升为 6, 在取得空缓冲区之后 , 再恢复处理机的优先级。 第十章 UNIX系统内核结构 3. 设备的字符缓冲区队列 (1) getc过程。 该过程用于从一个 clist结构的队首指针所指示的字符缓冲队列中 , 取出为首的字符 , 然后修改该队列的可用字符计数和队首指针。 当取完一个缓冲区中的所有字符时 , 将释放该缓冲区。 该过程的返回值是取出的字符。 (2) putc过程。 该过程用于将一个字符 C放入设备的指定字符缓冲区队列的末尾。 若此时该队列空 、 或队列的最后一个缓冲区已满 ,且空闲字符缓冲区队列也空 , 该过程无法将字符放入队列中 , 则返回 “ 1”。 第十章 UNIX系统内核结构 (3) getcb过程。 该过程用于从指定的设备字符缓冲区队列中 , 取出第一个缓冲区 , 并将该队列的可用字符计数减去第一个缓冲区中的字符数 , 然后返回指向该缓冲区的指针 bp。 若该缓冲区已是该队列中惟一的缓冲区 , 则置队尾指针为空。 (4) putcb过程。 该过程用于将由 bp所指向的缓冲区放入指定的设备字符缓冲区队列的末尾 , 然后将该队列的可用字符计数加上 bp缓冲区中的字符数后返回。 第十章 UNIX系统内核结构 块设备缓冲区管理 1. 盘块缓冲区及其首部 图 1013 缓冲首部 设备号 块号 状态 缓冲区指针 散列队列的前向指针 散列队列的后向指针 空闲表上的前向指针 空闲表上的后向指针 第十章 UNIX系统内核结构 2. 盘块缓冲池结构 b l k n o 0 m o d 4b l k n o 1 m o d 4b l k n o 2 m o d 4b l k n o 3 m o d 428179834 645 9750 1035 99空 闲 表 头 标图 1014 空闲队列 (链 )及散列队列 第十章 UNIX系统内核结构 3. 盘块缓冲区的分配 (1) getblk( )过程。 该过程用于从空闲缓冲区队列中获得任一空闲缓冲区。 该过程首先检查空闲块缓冲队列是否为空 , 若空 , 便调用sleep。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。