操作系统408真题:共享段表的操作

题目

        这个题目是2019年408操作系统的一道真题。考察的是对共享段表的理解。因为复习的时候没有怎么看教材,所以对这一块的知识就淡忘了。所以做题的时候就是凭借经验去分析的,最后就导致了一个错误的理解。
在这里插入图片描述

错误理解

        这个题目的答案选择B,但是我自己最开始做的时候,是认为B是正确的。我是这样理解的:

        我们现在假设这样的一个情景:该系统采用分段存储。虚拟地址一共32位,16位的段号,16位的段内偏移。

        由题可知,现在进程P1和进程P2共享段S,且共享段被共享段表所表述。我们假设进程P1中的共享段S的逻辑地址(也就是虚拟地址)为0x12345000到0x12348000一共3KB的内容;进程P2中的共享段S的逻辑地址为0x3450000到0x34553000也是3KB的内容(因为这两个进程就是共享的一个段,自然这个段的大小是一样的)

        那么进程P1如果访问共享段的内容,是不是要去共享段表里面找,看看这个共享段的实际物理地址在哪里!那么进程P1如何去找呢?是不是根据逻辑地址的划分,前面16位段号,结合段表寄存器中的段表基址找到这个段表项的位置。问题就出现在这里:因为进程P1和进程P2是同一个共享段表,所以他们的段基址寄存器的内容肯定是一样的。但是他们这个共享段的逻辑地址却不一样,这就导致了最后在形成这个共享段表项的物理地址的时候,出现了不同。自然,定位到共享段表的段表项也是不同的。

        所以我认为这个共享段S在不同的进程中也应该有相同的段号。

正确理解

        先看教材的上一段话
在这里插入图片描述

        我今天看到教材(P187)上给出了共享段表的使用方法。我上面的理解的错误原因在于“我认为对于共享段这段代码,进程没有用自己的段表去记录这个代码加载到内存哪里。”但是,教材的说,我们还是要把这个共享段的内存记录在进程的段表项中。那么,题目中的说的共享段表又是来干什么的呢?

        按照教材上的说法,这个共享段表记录的不仅仅是像普通段表项记录的那样子,而且还会记录“共享进程计数count、存去控制字段、段号(不同的进程可以有不同的段号)”
在这里插入图片描述

另一种理解

        在我和同学的讨论过程中,他就给我举了这样的一个例子:

比如都需要调用一个函数,程序p1需要在第一步调用,程序P2需要在第二步位置调用,这样子他们的逻辑地址肯定不一样嘛,但是最后肯定是共享的同一个。

  • 34
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值