Re: [资工][OS] VM/ monitor/ deadlock/ page table

楼主: A4P8T6X9 (残废的名侦探)   2014-09-24 12:50:51
※ 引述《qoojordon (颖川琦)》之铭言:
: 几个观念请教与确认:
: Q1: micro kernel的两个问题
: 已知观念:
: 将kernel模组化后 , 去除不必要的一些服务 , 尽保留必要的服务(如Process Mgt.)
: 称之为micro kernel
: 优点: 1.扩展性高 2,更安全实用
: Q1-1 : 被去除的服务可以在 user mode 以 system software 或 Library的方式提
: 提供服务
: 问题:原本在kernel的服务如果被拉到user mode以上述的方式呈现,是否会有功能
: 被阉割的问题呢?(例:原本在kernel提供的security服务如果被拉到user mode后
: ,它的提供的功能会不会不如原本在kernel时强大?)
不会,我觉得看如何 implement。
: Q1-2 : 大多的书面资料都要提到micro kernel安全度较高的优点
: 问题:延续Q1-1 , 不太能理解为什么部份重要服务被拉出kernel还能维持比较好的
: 安全性? 如Q1-1的例子 , 把security拉到user mode做 , 万一user mode下他
: 提供的security服务乱搞 , 系统不就挂了吗 ?
它的安全性是指如果服务挂掉,不会整个 kernel 挂掉,所以整体相对稳定。
: Q2: multiprocessor , multicore , multithread 名词概念确认
: 已知观念: thread 是OS分配CPU资源的最小单位 , 使用thread带来的好处我是参考
: 网络上估到的这张架构http://ppt.cc/HW~B
: 问题: 这张图和我自己本身的理解差不多 , 以下分为几点说明 , 请板友指正是否有错
: 误
: 1. core代表每个prcessor上的运算芯片(所以core≧processor)
: 2. 分配thread的单位应该是core
: ->使用thread的好处在于同一process的程式空间有locality的特性,所以
: 位在同一个processor上的不同thread才能发挥multithreading的最大效益
: ->倘若现在同一process的两个thread被丢到不同processor的core上,就拿不
: 到使用thead的好处 ? (还是只是不能发挥最大效益? 所以好处是 ?)
首先可能会有两个 core 共用的 cache,再者有的 process 可能会有完全可以平行的部
分,所以分到不同 core 上,会有平行的好处。
然后现在普遍是单一 processor 然后多 core,不太会有很多个 preocessor。
: Q3: deadlock章节中有一个定里:
: n个process共用m个resource , 不产生dealock有两个条件
: 1.每个Pi的最大资源需求(记为MAXi) < m
: 2. MAXi 总和 < m+n
: 问题: 若现在m=10 , 每个process最大资源需求为3 , 最大n为何?
: 3n<10+n
: 2n<10 , 最大n=4
: <我自己举的反例>
: 倘若我取n=5 , 也能找到一组process顺序是能不产生deadlock的, 如下例:
: 10个resource分配如右: 3 , 3 , 2 ,1 ,1(依序为P1,P2....P5分配到的资源)
: 依 P1 P2 P3 P4 P4的顺序执行 , 可以顺利取得资源 , 系统是UnSafe但不会
: Deadlock , 请问我这样说明有盲点吗 ? 感觉这里定理不太能求最大值...是
: 不是我误解了什么
这有点像是特例,但是这个定理是说明绝对不会陷入死结,只要 unsafe就有可能死结所以
不好。再者,这个定理可以用鸽笼原理来更好理解,如果每一个 process 都拿不能满足的
最多,以你的例子来说相当于总共需要 2n,只要总共需要的比全部少,那么就一定可以解
,只要一个解之后就一定不会陷入死结。
: Q4 : 内存管理中的逻辑位址(LA)转换概念 , 与虚拟内存概念中的虚拟位址(VA)
: Q4-1: 以我目前的理解来说 , LA和VA是在描述相同的东西 , 而他们怎么和实体位址(PA)
: 对映是page table的工作 , 对每个process而言 ,LA的是下面哪种状况?
: P1占8KB , P2占32KB , 系统执行时 , 他们的LA应该是?
: 状况一: 皆用处理器处理的位元数视为LA (32bits作业系统就是32bits表示LA)
: 状况二: 依据Process不同而使用不同的LA , 以上述状况为例 , P1的LA是13bits
: P2为15bits
: 状况三: 状况一,二的折衷版本,LA一样都视为32bits,只是对于不同的process有
: 效的bits数不同 , 以P1为例 , 超过13bits之后的bits表示的LA对P1而
: 言都没有意义
虚拟位址长度是固定的,它是用来对应真正的 page 存在哪。
: Q4-2: 承4-1 , 同样都是指LA = 15的内存空间 , 对P1与P2而言是否代表相同意思?
: 我自己的回答: LA都是15对P1,P2来说没有办法比较 , 要透过他们各自的page
: table转换成PA比较才有意义 , 若PA相同 , 此时的状况可视为shared memory
right
: Q5 : Page Table有三个减少它占用内存空间的方法 , 以下叙述是否有误
: Q5-1: multi level的方式对于virtual space小的程式而言才有好的效果 , 若virtual
: space很大的程式 , 他还是要存很多笔的位址转换 , 并不会因为multi level的
: 方法缩小page table使用的空间?
其实不然,如果不分层的话,假设整体只有一层,所以每个 process OS都要存那一层,所
以很浪费空间,但是如果分两层,可以只存第一层跟有用的第二层,相对省空间,唯一的
缺点只有在把完全的虚拟内存空间塞满,这样会多一份第一层,但无伤大雅。
且分层的好处是,也可以把第二层分散在内存中,更加有弹性。
或许这样还不够明白,我可以举个例子来说。
假设内存是 4GB,假设 4KB一个 PAGE,那么总共会有 2^30 = 1048576个PAGE。
如果每一个 page table entry 是 4 bytes,那么总共要 4194304 bytes = 4MB 的连续记
忆体空间大小放 page table,但大部分的程式并不需要完全使用 4G,假设一个程式只要
512 MB,那么只需要 131072 个 page entry 相当于 512KB就够了,可是只有一层还是要
花 4MB,相当浪费。
如果用两层,假设第一层有 1024 entry 也就是 4 KB,那么只要视情况增加第二层且每
一个第二层都可以描述 4MB 其实也不小了,即使全部用完,那也只是多花了 4KB存第一
层,瑕不掩瑜。
: Q5-2: Inverted page table这种方式是否只要OS自己maintain一份即可 ?
: 因为它的转换方式是 <Process ID , page NO> , 大家的page No一样多 ,
: Process ID 又提供判断是不是自己的转址依据 , 所以只要OS存一份给
: 所有的process查就好?
right
: Q6 : TLB , BHT , BTB 是否都为cache ?
: 我自己查的资料是 cache:TLB , BTB
: BHT 张凡写 小型内存....所以是memory = =?
memory 跟 cache 本质上是一样的阿,memory 就是硬盘的 cache,所以没必要强分他们。
: Q7 : monitor观念 与 semaphore实作monitor
: Q7-1:monitor是否能够解决同步问题 , 取决于设计的该资料结构的人是否能给予
: condition变量正确的初值 ?
如果是 condition monitor 是的。
: Q7-2:用semaphore实作Hoare monitor不太懂
: 目前理解 : signal的不当使用会造成monitor违反mutual exclusive ,
: Hoare的做法为若Q被P signal而进入monitor中运行 , 那么
: P必须等到Q wait或 完成才能重新进入monitor
: (参考图片http://ppt.cc/bl9C)
: 下方为恐龙书上的实作方式
: 请问上述的 P , Q 分别是对应到参考图片的哪个位置?
: 目前我是这样对映:
: P-> entry queue图片左半部 -> 用next记录
: Q-> c.v. waiting queue -> x记录
: 制作 x.wait
: (1) x_count = x_count + 1
: (2) if next_count > 0 then signal(next);
: (3) else signal(mutex);
: (4) wait(x-sem);
: (5) x_count = x_count -1;
: (1)~(3) : Q即将要block , 所以先把有机会signal自己的人拉进monitor ?
: (4) : 将Q卡住是为block ?
: 制作 x.signal
: (1) if x_count > 0 then
: (2) begin
: (3) next_count = next_count + 1;
: (4) signal(x-sem);
: (5) wait(next);
: (6) next_count = next_count - 1;
: (7) end
: 如果x被signal代表要先把monitor里面的procedure拉出来 , 请问(4)(5)
: 两行的状况是指 Q要被signal所以先把P拉出去block ?

: 问题叙述有点长 , 先谢谢各位了
作者: j897495 (咪咪)   2014-09-24 14:41:00
谢谢A.5的举例 让我观念更清楚了
作者: qoojordon (颖川琦)   2014-09-24 22:13:00
谢谢A4纸大大 , Q7-2我自己稍微厘清好一点再问 , 感觉我懂一半 , 只是抓不太到他具体的东西套用到例子是什么状况
作者: HiltonCool (野兽疯)   2014-09-25 00:13:00
你可以把P想成Q的救命恩人,当初是P救Q让Q进入monitor当Q执行到一半又要被block时(无论自愿或被迫),它应该要救的是救命恩人P,而不是下一个Q对P来说,当有Q到的时候,它会将自己block,让Q进入monitor,这是洪逸上课举的例子,我觉得可以帮助理解

Links booklink

Contact Us: admin [ a t ] ucptt.com