摘要:
包括xv6在内的大多数内核都会交错的执行多个活动,一个原因来自于多处理器硬件:计算机有多个独立运行的CPU,比如xv6的RISC-V,这些CPU共享物理内存,并且xv6利用这一点来维护被所有CPU共同读写的数据结构。这种共享提高了在一个CPU正在更新数据结构的过程中另一个CPU读取该数据结构的可能, 阅读全文
摘要:
Trap和系统调用 中断和设备驱动 驱动是操作系统用于管理特定设备的代码:它配置设备硬件,通知设备执行操作,处理返回的中断,并且与可能在该设备上进行I/O等待的进程交互。编写驱动代码可能很棘手,因为驱动与它管理的设备是并行执行的,此外,驱动必须理解设备硬件接口,这可能是复杂的并且缺乏文档。 需要被系 阅读全文
摘要:
当硬件对用户使用的虚拟地址进行翻译时,若该虚拟地址不正确,比如尚未映射、权限不足等,硬件会产生一个page fault陷阱给操作系统,就是这样一个看似简单平常的机制,却给了操作系统很大的能力,它可以做很多有趣的事。 lazy allocation:操作系统在给用户进程分配内存时,可以先不分配实际的物 阅读全文
摘要:
今天分析一下xv6中的内核页表挂载流程,可能会做下pagetable lab。 启动 // start()会在每一个CPU上,以supervisor mode跳转到这里 void main() { // 确保只有一个CPU执行一次 if(cpuid() == 0){ kinit(); // 物理页分 阅读全文
摘要:
这篇文章通过gdb跟踪基于risc-v架构的xv6系统中write系统调用的处理流程。 系统调用是操作系统给应用程序提供的操作底层硬件资源的简单清晰的接口,隐藏底层资源的复杂性,比如UNIX会把网络、磁盘等一系列东西都抽象成文件,然后你可以简单的使用write对它们进行读写,你无需关心磁道、扇区等概 阅读全文
摘要:
CVTE的面试里第二个答的不好的地方就是ConcurrentHashMap。 构造方法 默认构造方法 // 创建一个新的,具有默认表达小16的空Map public ConcurrentHashMap() { } 在默认构造方法中,我们可以看到ConcurrentHashMap实际上什么也没做,根据 阅读全文
摘要:
每天净背八股了,计网,操作系统这些知识早都忘光了,昨天被CVTE的面试官问住了,当时回答的比较乱,并且有些地方答错了。特此重新学习总结。 但是不得不说,CVTE的技术面试官好温柔好温柔。 什么是多路复用 网络层只能提供主机到主机的连接,而我们开发网络应用时,并不希望只是把消息传递到对应主机上,我们希 阅读全文
摘要:
《MySQL是怎样运行的》一书十一、十二章的相关笔记。掺入了一些自己的理解。 连接基础 MySQL中的连接使用嵌套子循环实现,其中有两个角色: 驱动表:子循环中处于外层的表 被驱动表:子循环中处于内层的表 而一个连接可以看作是对于驱动表中的每一条满足条件的记录,都对被驱动表使用连接属性进行一次查询, 阅读全文
摘要:
InnoDB以页来管理磁盘文件,根据页的功能不同,有多种多样不同的页,比如用来记录undolog信息的undo页,用于存放数据的数据页。现在我们主要来了解下数据页的结构。 实际上,InnoDB采用索引组织表的表结构,所以实际上无论是表,还是在表上建立的索引,都是以索引形式存在的。所以InnoDB实际 阅读全文
摘要:
从高层来看 AQS,即AbstractQueuedSynchronizer类,无论是听起来还是看起来,它都很令人畏惧,但抛离它的实现原理,站在AQS的用户——比如Mutex、CountDownLatch这些类——的视角来看,AQS是一个非常好的助手。 AQS是一个用于实现同步器工具的框架,信号量、M 阅读全文