正在加载图片...
如果缺页所对应的磁盘块描述项中的类型是Disk,表示该页的拷贝是在对换设备上,则 核心将从对换设备上把该页调入内存。其调入过程为z核心先为缺页分配一内存页,修改该页 表项使之指向内存页,并将页面数据表项放入相应的散列队列中,然后把该页从对换设备上调 入内存。当I/0操作完成时,核心把请求调入该页的进程唤醒。 (3)缺页在内存页面缓冲区中 在进程运行过程中,当一页被调出后又被要求访问时,需重新将它调入。但并非每次都要 从对换设备上调入,因为被调出的页可能又被其他进程(共享时)调入到另一物理页中,这时就 可在页面缓冲池中找到该页。此时,只需适当地修改页表项等数据结构中的信息即可。 8.1.4设备管理 设备管理的主要任务是管理系统中的所有外部设备。NIX系统把设备分为两类:块设备, 用于存储信息,其对信息的存取是以信息块为单位的,如通常的磁盘、磁带等;字符设备,用于 输入/输出,其对信息的存取是以字符为单位的,如通常的终端设备、打印机等。 1.设备缓冲管理 在UNIX系统中分别为字符设备和块设备设置了缓冲池。 (1)字符设备缓冲管理 在系统中设置了一组字符缓冲区,供各种字符设备使用。其中,每个缓冲区的大小为70 个字节,包括以下四项:第一个字符的位置、最后一个字符的位置、指向下一个缓冲区的指针 和余下的用于存放64个字符的缓冲区。所有的空闲缓冲区通过链接指针c_next链接成一个 空闲缓冲队列,由队首指针 cfreelist指向其第一个缓冲区 每当设备管理程序请求一个字符缓冲区时,管理程序便从空闲缓冲区链首取得一空闲缓 冲分配给相应的设备。在设备释放缓冲区时,管理程序将它链入空闲队首。可见,空闲缓冲区 链实际上是一个栈, cfreelist指向栈顶。 在字符设备进行I/0时,核心可利用 getcf过程从空闲缓冲区链中取得一缓冲区,来收容 设备的I/0数据。当缓冲区中数据己被提取完而不再需要时,可利用 putcf过程,将缓冲区归 还到空闲链中 (2)块设备缓冲队列的结构 在系统中,为块设备配置了块设备数据缓冲区,供磁盘和磁带机使用。每个缓冲区的大小 至少应与盘块的大小相当。至于盘块的大小则随机器而异,它们一般在512~4096字节之间 由于盘块缓冲区的容量较大,使用上也较复杂,因此UNIX系统中的盘块缓冲区的组成方式不 同于字符缓冲区 在UNIX系统中,盘块缓冲区均由两部分构成:一部分是用于存放数据的缓冲区;另一部 分是缓冲控制块,也称为缓冲首都,用于存放缓冲区的管理信息,两者一一对应,但缓冲首部与 缓冲区在物理上并不相连,只是在缓冲首部中用一个指向对应缓冲区的指针将两者联系起来, 缓冲首部还包括设备号和块号,以分别指出对应的文件系统和磁盘上的数据块。注意,在 UNIX System V中,设备号并非物理设备号,而是逻辑设备号,核心把每一个文件系统看作是 个逻辑设备。缓冲首部中的状态字段指示对应缓冲区的当前状态,用于表示缓冲区是否空闲、 缓冲区是否为延迟写、是否有进程正在等待该缓冲区变为空闲、核心是否正在读或写该缓冲 区等。缓冲首部还包括两个空闲链表指针及两个散列队列指针。前者分别指向空闲链表中的 上一个和下一个缓冲区首部:后者分别指向散列队列中的上一个和下一个缓冲区首部。 为了对缓冲区进行管理,在核心中设置了一个双向链接的空闲链表。系统初启时,将所有 的缓冲首部都链入空闲链表中。当需要一个空闲缓冲区时,可利用 getblk过程从空闲链表的 首部摘下一个缓冲区:回收一个空缓冲区时,再利用 brelse过程将它挂在空闲链的末尾 为了加速对缓冲区的查找,系统把所有缓冲区按设各及块号所计算散列值的不同组织如果缺页所对应的磁盘块描述项中的类型是 Disk,表示该页的拷贝是在对换设备上,则 核心将从对换设备上把该页调入内存。其调入过程为 z 核心先为缺页分配一内存页,修改该页 表项使之指向内存页,并将页面数据表项放入相应的散列队列中,然后把该页从对换设备上调 入内存。当 I/0 操作完成时,核心把请求调入该页的进程唤醒。 (3)缺页在内存页面缓冲区中 在进程运行过程中,当一页被调出后又被要求访问时,需重新将它调入。但并非每次都要 从对换设备上调入,因为被调出的页可能又被其他进程(共享时〉调入到另一物理页中,这时就 可在页面缓冲池中找到该页。此时,只需适当地修改页表项等数据结构中的信息即可。 8.1.4 设备管理 设备管理的主要任务是管理系统中的所有外部设备。UNIX 系统把设备分为两类:块设备, 用于存储信息,其对信息的存取是以信息块为单位的,如通常的磁盘、磁带等;字符设备,用于 输入/输出,其对信息的存取是以字符为单位的,如通常的终端设备、打印机等。 1.设备缓冲管理 在 UNIX 系统中分别为字符设备和块设备设置了缓冲池。 (1)字符设备缓冲管理 在系统中设置了一组字符缓冲区,供各种字符设备使用。其中,每个缓冲区的大小为 70 个字节,包括以下四项:第一个字符的位置、最后一个字符的位置、指向下一个缓冲区的指针 和余下的用于存放 64 个字符的缓冲区。所有的空闲缓冲区通过链接指针 c_next 链接成一个 空闲缓冲队列,由队首指针 cfreelist 指向其第一个缓冲区。 每当设备管理程序请求一个字符缓冲区时,管理程序便从空闲缓冲区链首取得一空闲缓 冲分配给相应的设备。在设备释放缓冲区时,管理程序将它链入空闲队首。可见,空闲缓冲区 链实际上是一个栈,cfreelist 指向栈顶。 在字符设备进行 I/O 时,核心可利用 getcf 过程从空闲缓冲区链中取得一缓冲区,来收容 设备的 I/O 数据。当缓冲区中数据己被提取完而不再需要时,可利用 putcf 过程,将缓冲区归 还到空闲链中。 (2)块设备缓冲队列的结构 在系统中,为块设备配置了块设备数据缓冲区,供磁盘和磁带机使用。每个缓冲区的大小 至少应与盘块的大小相当。至于盘块的大小则随机器而异,它们一般在 512~4096 字节之间。 由于盘块缓冲区的容量较大,使用上也较复杂,因此 UNIX 系统中的盘块缓冲区的组成方式不 同于字符缓冲区。 在 UNIX 系统中,盘块缓冲区均由两部分构成:一部分是用于存放数据的缓冲区;另一部 分是缓冲控制块,也称为缓冲首都,用于存放缓冲区的管理信息,两者一一对应,但缓冲首部与 缓冲区在物理上并不相连,只是在缓冲首部中用一个指向对应缓冲区的指针将两者联系起来, 缓冲首部还包括设备号和块号,以分别指出对应的文件系统和磁盘上的数据块。注意,在 UNIX System V 中,设备号并非物理设备号,而是逻辑设备号,核心把每一个文件系统看作是一 个逻辑设备。缓冲首部中的状态字段指示对应缓冲区的当前状态,用于表示缓冲区是否空闲、 缓冲区是否为延迟写、是否有进程正在等待该缓冲区变为空闲、核心是否正在读或写该缓冲 区等。缓冲首部还包括两个空闲链表指针及两个散列队列指针。前者分别指向空闲链表中的 上一个和下一个缓冲区首部:后者分别指向散列队列中的上一个和下一个缓冲区首部。 为了对缓冲区进行管理,在核心中设置了一个双向链接的空闲链表。系统初启时,将所有 的缓冲首部都链入空闲链表中。当需要一个空闲缓冲区时,可利用 getblk 过程从空闲链表的 首部摘下一个缓冲区:回收一个空缓冲区时,再利用 brelse 过程将它挂在空闲链的末尾。 为了加速对缓冲区的查找,系统把所有缓冲区按设各及块号所计算散列值的不同组织
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有