随笔分类 -  OS

摘要:Redis 的 RDB 后台 save ( BGsave ) 是使用了无参的 fork 的,所以会拷贝当前进程,也就是父进程的目录表和页面表 并且使用 COW 。值得注意的是 fork 之后,并没有调用 exec,所以子进程不需要另立门户,设置自己的新的,空的目录表和页面表。 而是用和父进程用有相同 阅读全文
posted @ 2021-01-28 13:02 执生 阅读(1268) 评论(0) 推荐(0)
摘要:先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问。 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬件指令提供原子性 和 可见性,(xcmpchg会锁总线或缓存行,一切会锁总线或缓存行的操作都会刷St 阅读全文
posted @ 2021-01-26 22:50 执生 阅读(695) 评论(1) 推荐(2)
摘要:IO多路复用中的 “多路” 指的是同时监听多个打开文件(socket或者其他文件设备),“复用” 指的是复用一个 进程/线程 去监听这些打开文件 1.最早期的select 伪代码表示: while (true) { for (fd : 监听的fd) { if (poll(设备)){ 返回就绪数 + 阅读全文
posted @ 2020-11-17 17:47 执生 阅读(229) 评论(0) 推荐(0)
摘要:不同版本的操作系统的 buffer_head 代表的大小可能不一样,但是都是内存和硬盘交换数据的基本单元。 意思是:每次磁盘驱动程序,能写入到硬盘缓存区的数据大小 = buffer_head 代表的大小,线程会等待磁盘缓冲区的内容真正刷入扇区中 写入完成后再唤醒线程,再次将一个块写入到磁盘缓冲区。 阅读全文
posted @ 2020-11-16 22:21 执生 阅读(490) 评论(0) 推荐(0)
摘要:1.在毛德操的《Linux源代码情景分析》中,关于内存管理的一张图 其中 virtual 居然直接 指向物理页面的起始地址,不是单单根据图推断的,文章内容也是这么描述的 virtual是一个指针,从命名就能得知应该是一个逻辑地址,virtual 在代表物理页面的 结构体 page 中 根据注释,作者 阅读全文
posted @ 2020-10-24 18:05 执生 阅读(270) 评论(0) 推荐(0)
摘要:1.管道(pipeline) 优点:简单 缺点:1.信息无边界 2.只能单向写,读 3.信息无优先级 4.一般要阻塞,就算使用 O_NONBLOCK 标志位来达到不阻塞,也要一次性把管道写满才能不阻塞,但是无法知道管道可写空间是多少 5.发送信息少的时候,使用管道效率低,因为需要从用户态转为内核态, 阅读全文
posted @ 2020-10-22 17:30 执生 阅读(203) 评论(0) 推荐(0)
摘要:本文用作交流分享的同时记录学习历程,如有不妥,还请纠正。 本文内容依据主要是《Linux内核源代码情景分析》及官方提供的Linux源码 知识储备 众所周知,Linux是开源的操作系统。 Linux采用C语言编写(在C中有嵌入汇编成分)。本文想要用Java这门语言在软件层面上模拟出Linux。 因为操 阅读全文
posted @ 2020-04-20 14:00 执生 阅读(670) 评论(0) 推荐(1)