操作系统最近不是很火,不管是华为的鸿蒙还是腾讯的嵌入式操作系统,都引起了很大的水花.今天来分享一个操作系统的底层技术,页面缓存。背景众所周知,在冯·诺依曼计算机体系结构中,内存起着举足轻重的作用。与计算单元相比,内存的读写速度要慢很多。无论是机械硬盘、固态硬盘还是最新的闪存,其读写速度都比内存慢很多。一旦应用程序需要对磁盘进行读写,往往瓶颈就是磁盘读写。Pagecache为了解决这个问题,操作系统一般使用pagecache来解决,我们也称之为diskcache。当进程访问磁盘时,操作系统会首先检查磁盘缓存。如果发现缓存中有数据,则直接返回缓存中的内容,大大减少了磁盘的访问次数,提高了操作系统的性能。那么,磁盘的内容是如何缓存的呢?当一个进程访问磁盘时,如果pagecache中没有对应的信息,那么会从磁盘中读取当前页,并且会提前读取若干页放入Cache中,如果命中了后面的cache,则更多缓存页会被提前读取,这就是为什么我们在连续访问文件时会感觉更快。写入数据时,如果数据已经在缓存页中,则先更新缓存页中的数据。这里细心的同学可能会问了,这不是磁盘里的脏数据吗?的确,操作系统会有一定的策略将pagecache中的数据统一写入磁盘。在Linux操作系统中,默认是脏页达到一定百分比才会写入。对于某些操作系统,您可以选择脏页达到一定数量,或者一定时间间隔。因此,当我们的机器断电时,存在一定的数据丢失风险。即使这样,我们也不会关闭pagecache,这样数据每次都能顺利flush。所以,如果我们的服务要做到高可用和强一致,使用分布式数据将数据写入多台机器进行备份才是硬道理。综上所述,操作系统是计算机软件中的核心软件之一。有很多值得学习的干货,包括算法数据结构,还有一些底层物理硬件相关的设计思路。如果你有兴趣,请关注我。我们一起学习,一起进步。
