(3)核心在共享存______x??l/___储区和系统区表中,为新建立的共享区分配一空表项,并?填上存储区
的关键字及大小、共享区页表始址,指向系统区表项指针等,最后返回共享区描述符shmid。 17.在信号量机制中有哪些系统调用?说明它们的用途。
答:在信号量机制中的系统调用是senget( )和semop( )。semget()用于用户建立信号量集。 semop( )用来对信号量集进行操作。 18.核心是如何对信号量进行操作纵的?
答:核心根据sem_op改变信号量的值,分3 种情况:
若sem_op值为正,则将其值加到信号量值上,相当于V 操作;若sem_op值为负, 相当于P 操作,若信号量值大于操作值的绝对值,则核心将一个负整数加到信号量值上, 否则核心将已操作的信号量恢复到系统调用开始时的值;若(sem_flg&IPC_NOWAIT)为真, 便立即返回,否则让进程睡眠等待.。
19.为实现请求调页管理,在UNIX系统中配置了那些数据结构?
答:UNIX 系统V 将进程的每个区分为若干个虚页,这些虚页可以分配到不邻接的页框中, 为此设置了一张页表。其中每个表项中,记录了每个虚页和页框的对照关系。 20.当访问的缺页是在可执行文件上或在对换设备上时,应如何将它们调入内存? 答:(1)缺页在可执行文件上。如果欲访问虚页对应磁盘块描述表项类型是file,表示该缺
页尚未运行,其拷贝在可执行文件中,核心应将该页调入内存。调入过程是:根据对应系统 区表项中的索引结点指针,找到该文件的索引节点,把该页的逻辑块号作为偏移量,查找索 引结点中的磁盘块号表,找到磁盘块号,将该页调入内存。
(2)缺页在对换设备上。核心先为缺页分配一内存页,修改该页表项,指向内存页,并将 页面数据表项放入相应散列队列中,把该页从对换设备上调入内存,当I/O操作完成时,核心把请求调入该页的进程唤醒。
21.在将一页换出时,可分成哪几种情况?应如何处理这些情况?
答:分三种情况:(1)若在对换设备上有被换出页的拷贝,内容未改,则核心只将该页页 表项中的有效位清零,将引用计数减1,将该页框数据表项放入空闲链表中。
(2)若在对换设备上没有换出页的拷贝,则将该页写到对换设备上。先将所有要换出页链 入到待换出页面链上。当链上页面数达到规定值时才将这些页面写到对换区中。
(3)在对换设备上有换出页副本,但页内容已修改,核心应释放该页在对换设备上原占有 的空间,再重新将该页拷贝到对换设备上,使拷贝内容最新。 22.如何对字符缓冲区进行分配与回收?
答:在字符设备进行I/O 时,内核利用getcf过程从空闲字符缓冲区队列中取得空闲缓冲区, 若队列空,则无缓冲区可分配,返回;否则从队首取得一个空闲缓冲区,把该缓冲区指针
bp返给调用者。采取互斥访问措施,在过程开始处将处理机优先级提升为6,在取得空缓冲
区之后再恢复处理机的优先级。
当不再需要缓冲区时,调用putcf 过程释放缓冲区。输入参数是指向已不再需要的缓冲 区指针bp,把该缓冲区送回到空闲缓冲区队列的队首指针cfreelist指向的头部。此时若有申
请空缓冲区而阻塞的进程,则唤醒它。对空闲缓冲区队列的访问应互斥进行。 23.试说明盘块缓冲区的组成和盘块缓冲池的构成。
答:UNIX系统的每一个盘块缓冲区均有两部分:一是用于存放数据的数据缓冲区;另一部 分是缓冲控制块,用于存放对应缓冲区的管理信息。 盘块缓冲池结构:(1)空闲链表(2)散列队列。
24.getblk()和getblk(dev,blkno)进程的主要区别是什么?
答:getblk()用于从空闲缓冲区队列中获得任意空闲缓冲区。getblk(dev,blkno)用于为指 定设备dev 和盘块号为blkno 的盘块申请一个缓冲区。仅当要把数据写入特定盘块的内容 不在缓冲区时,才调用getblk过程分配一个空缓冲区。
25.试说明gdopen、gdstart、gds