首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
星见遥
掘友等级
学生
|
中科大软件学院
中科大软件学院在读研究生
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
0
文章 0
沸点 0
赞
0
返回
|
搜索文章
最新
热门
XV6学习(15)Lab mmap: Mmap
代码在Github上。 这一个实验是要实现最基础的mmap功能。mmap即内存映射文件,将一个文件直接映射到内存当中,之后对文件的读写就可以直接通过对内存进行读写来进行,而对文件的同步则由操作系统来负责完成。使用mmap可以避免对文件大量read和write操作带来的内核缓冲区…
XV6学习(14)Lab fs: File system
代码在github上。 这次实验是要对文件系统修改,使其支持更大的文件以及符号链接,实验本身并不是很复杂。但文件系统可以说是XV6中最复杂的部分,整个文件系统包括了七层:文件描述符,路径名,目录,inode,日志,缓冲区,磁盘。 文件描述符类似于Linux,将文件、管道、设备、…
XV6学习(13)调度
几乎所有操作系统都会运行数量远多于CPU数量的进程,因此需要对CPU进行分时共享。理想情况下这种共享应该是对用户进程透明的。一个常用的方法是通过多路复用将进程分配到硬件CPU上,使每个进程有其自己的虚拟CPU。 XV6在两种情况下会对CPU的进程进程切换从而实现复用:一种是XV…
XV6学习(12)Lab lock: Parallelism/locking
这一次实验是要对XV6内部的锁进行优化,减少锁争用,提高系统的性能。 第一个实验是对XV6内核的内存页面分配器进行改进,改进的策略在前面的章节中也讲过了。XV6原本是使用一个空闲页面链表,但是这样就会导致不同CPU上的kalloc和kfree会产生锁争用,内存页面的分配被完全串…
XV6学习(11)Lab thread: Multithreading
代码放在github上。 这一次实验感觉挺简单的,特别是后面两个小实验。主要就是对多线程和锁进行一个学习。 这一个实验是要实现一个简单的用户级线程,写完之后发现原来用户级线程的简单实现也没有想象的那么复杂。 首先定义一个context结构体保存线程上下文,并加入到thread结…
XV6学习(10)锁
在包括XV6的绝大部分操作系统都是多个任务交错执行的。交错的一个原因是多核硬件:多核计算机的多个CPU核心独立执行计算,如XV6的RISC-V处理器。多个CPU核心共享物理内存,XV6利用这种共享来维护所有核心都会读写的数据结构。而这种共享会导致一个CPU在读取某数据结构时,可…
IO多路复用与epoll机制浅析
epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题。 IO多路复用是一种同步IO模型,使得一个线程就可以对多个文件描述符进行监听。…
XV6学习(9)Lab cow: Copy-on-write fork
代码在github上。总体来说如果理解了COW机制的话,这个实验的完成也没有很复杂。 这一个实验是要完成COW(copy on write)fork。在原始的XV6中,fork函数是通过直接对进程的地址空间完整地复制一份来实现的。但是,拷贝整个地址空间是十分耗时的,并且在很多情…
XV6学习(8)中断和设备驱动
驱动是操作系统中用于管理特定设备的代码:驱动控制设备硬件,通知硬件执行操作,处理中断,与等待该设备IO的进程进行交互。 当设备需要与操作系统进行交互时,就会产生中断(陷阱的一种),之后内核的陷阱处理代码就会识别中断设备并调用对应的驱动处理程序。在XV6这一步发生在trap.c的…
XV6学习 (7) Lab lazy: Lazy allocation
代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之后将页面映射到页表当中。 当申请小的空间时,上述过程是没有问题的。但是如果当进程…
下一页
个人成就
文章被点赞
16
文章被阅读
38,886
掘力值
851
关注了
0
关注者
31
收藏集
0
关注标签
9
加入于
2020-07-04