rcore-os / rCore-Tutorial-Book-v3

A book about how to write OS kernels in Rust easily.
https://rcore-os.github.io/rCore-Tutorial-Book-v3/
GNU General Public License v3.0
1.17k stars 221 forks source link

rCore-Tutorial-Book-v3/chapter0/4os-features #15

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

操作系统的特征 — rCore-Tutorial-Book-v3 0.1 文档

https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter0/4os-features.html

Twuter commented 3 years ago

勘误:操作系统特征

中断处理对应用程序执行造成的影响等几个放马来理解

chyyuu commented 3 years ago

谢谢!已经fix!

Joeyscat commented 3 years ago

且编译器只需确定一个固定地址作为程序的起始地址就可以生成一个不用考虑 操作系统来完成各个应用在运行时的任务切换 比如两个应用同时访问同一个内存单元

Ir1Ka commented 3 years ago

我认为的内存虚拟化中的空间大小虚拟化的应该这样理解: 操作系统通过内存虚拟化为应用程序提供了整个64位(或32位)地址空间,这个虚拟地址空间通常大于物理内存的大小。只有应用程序真正使用或访问到某个虚拟内存时,操作系统才会真正分配对应的物理地址。 进一步的,操作系统实现了内存交换到硬盘的机制,使得当物理内存不足时把长期未使用或未来较少使用的内存交换到硬盘中,再在使用或访问到该虚拟内存时,从硬盘上交换回内存中。 内存数据交换到硬盘的机制是内存虚拟化的补充,是为了缓解内存不足的措施,而不是内存虚拟化的空间大小虚拟化的实现。


以上是我的理解不知道是不是正确的。

rengelin commented 3 years ago

"比如两个应用同时访问同一个内存单元,从宏观的应用层面上看,二者都能正确地读出同一个内存单元的内容。而在微观上,操作系统会调度应用程序的先后执行顺序,在数据总线上任何一个时刻,只有一个应用去访问存储单元" ,这句话说的不够严谨,在多核场景下,多核CPU同时访问同一内存,可能会访问各自CPU的Cache,这中场景下的共享性也不是由OS来保证的。

mailofzxf commented 3 years ago

"空间大小虚拟化" : 这只是为了解决“物理内存”不足的问题,并没有扩大进程的(线性)空间的大小。这个名字可以精确为“物理内存空间大小虚拟化”。

pplltech commented 2 years ago

内存地址的虚拟化的核心是:采用什么样的方式让虚拟地址和物理地址对应起来,也就是如何将虚拟地址“翻译”成物理地址,这个“翻译”怎么做是内存地址虚拟化的重点。内存大小虚拟化的核心方式是通过使用外设扩充内存容量,这里重要的是采取怎么样的机制进行内存和硬件之间的数据交换。至于是不是“物理内存的空闲空间可能不多了,这时操作系统通过把物理内存中最近没使用的空间(不是空闲的,只是最近用得少)换出(就是“挪地”)到硬盘上暂时缓存起来,这样空闲空间就大了,就可以满足应用程序的运行时内存需求了“这是具体的措施,但根据具体的性能是不一样会采取的措施。最近没有使用!=下次不使用。

chestNutLsj commented 1 year ago

有几个地方的描述如果更加精确、避免语言上的歧义的话,阅读起来会更加友好:

  1. 内存虚拟化小节中:

    内存虚拟化 其实是一种 “空间虚拟化” ,可进一步细分为 内存地址虚拟化内存大小虚拟化 。这里的每个符号在运行时是要对应到具体的内存地址的。

“这里的每个符号”出现得很突兀,建议补充全面——“编写的源代码中,每个符号在运行时都需要对应到具体的内存地址。”

  1. 在回顾编译器和链接器对虚拟地址转换的旁注中:

    这里,编译器和链接器图省事,找了一个适合它们的解决办法。当程序要运行的时候,这个符号所对应的虚拟内存地址到计算机的物理内存地址的映射必须要解决了,这自然就推到了操作系统身上。

这段用语过于口语化了,我认为这样修改可以更好:“这样一来,由于编译器和链接器采用固定地址+偏移的‘偷懒’策略,源代码中内容从虚拟内存地址到计算机物理内存地址的映射的重担,将由操作系统一力承担。” 事实上本书其他部分也有很多这样的口语化情况出现——在语句结束的位置加“了”,虽然有些吹毛求疵,但对于这本非常令我喜爱的OS书,用语得体精确书面还是很有意义的。

  1. 紧接着内存大小虚拟化这一段落:

    这时操作系统通过把物理内存中最近没使用的空间(不是空闲的,只是最近用得少)换出(就是 “挪地”)到硬盘上暂时缓存起来,这样空闲空间就大了

这段感觉初学者读起来也不友好,一是在于换出的“空间”可以精确为“原内存中的数据”,因为这并不是实际物理上的换出;二是“暂时缓存”这个词不太恰当,毕竟在OS这门课里的“缓存”一词含义比较独特,不宜滥用,这里改成“暂时存储”即可。

  1. CPU虚拟化的第二段,称“操作系统给了运行的应用程序一个幻象”。事实上上一节使用的“幻觉”非常合适,评论区有人指出“幻觉”是主观的,而“幻象”是客观的,我也比较认同这个观点。

  2. 另外就是本书看起来是某种markdown文档,其中使用了callout这样一种旁注的形式,但是每个旁注的标题都写的是“注解”,感觉将旁注的内容做个总结作为标题更佳。比如最后一个旁注可以这样编写(obsidian为例):

    > [!note] 文件系统是存储外设的虚拟化。
    > 文件系统也可看成是操作系统对存储外设(如硬盘、SSD 等)的虚拟化。这种持久性的特征进一步带来了共享属性,...
reganzm commented 1 month ago

虚拟性:内存、cpu、文件系统 并发性:并发(以时间片轮训)和并行(多物理核轮训) 共享性:锁、信号量。。 异步性:中断(抢占式任务调度)、异步处理(协作式任务调度) 持久性:文件系统