前几天讲完了行程管理的部分,其中有个部分讲到,所谓的ready 或者说 task_running 的状态,代表着行程的资料已经被移到记忆体,准备好可以执行了,从今天开始就来了解所谓的记忆体到底是怎麽演变以及运行的,在这个部分会了解MMU、page、page table、实体记忆体等等的内容,希望可以对记忆体有更多的了解。
在远古时期的记忆体是十分有限而且笨重的,简单来说就是只要空间足够就会直接把行程放进去,这代表着记忆体里面的每个区域都可能被某个行程使用,因此这个古老的方法有两个显而易见的大缺点
分段管理是为了解决记忆体内位址空间的保护问题而产生的机制,主要结构如下
在记忆体里会有一个分段表(segment table)进行查表,每个cpu所产生的位址可以分成高位段的segment base与低位段的segment limit,在上图分别以 s 跟 d 表示,会利用 s 查表,再将该栏的资料取出,分别为限制大小(limit)与基底(base),首先确认cpu 产生的d ,是否小於分段表中取出的 segment limit,如果为否,那就引发定址错误;如果是的话,就将分段表中取出的base 加上d,正确的存取实体记忆体。
分段机制虽然解决了记忆体保护的问题,但是在分段管理中,仍以行程的角度对记忆体进行使用,当实体记忆体不足的时候,取出的会是整个行程,因此如果有多个行程要使用,记忆体会与硬碟不停进行行程资料的交换,会造成严重的效能损耗。
<<: NSLayoutConstraint使用 Day21
>>: 在程序里避开踩雷:安全引用空虚值、例外处理和延後、惰性初始化 Null Safety, Exception, lateinit, lazy
Keyword:SQLDelight,Driver 到23日,引入SQLDelight,到在Andr...
ProxmoxVE PVE VM 安装 ChromeOS ChromeOS 版本 Download ...
接续上篇继续提到关於有限公司以及股份有限公司的差别。 有限公司以及股份有限公司除了制度会有差别外,责...
书接上回[Day 08] tinyML开胃菜Arduino IDE上桌(上)。 单机版IDE Ard...
上一篇我们设计了 I2C Master 的状态机,那麽我们今天要来引用上次完成的状态机模块来实现 I...