![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
xv6
文章平均质量分 94
Rand_CS
程序员路上的一名潜修者。
展开
-
xv6 内核空间共享
xv6 不需要内核页表同步,因为 xv6 在启动的时候,内核地址空间的映射关系已经建立好了,而纵观代码也没有修改内核地址空间映射关系的地方,所以内核地址空间的映射关系应是一直不变的。每个进程页表只需要映射它自己的地址空间以及跳转到内核那一小段代码段即可,跳转到内核后,切换到内核页表,在内核办完事儿后再切换回进程页表,这个过程似乎没有问题,也就是根本就没必要拷贝整个内核页表到进程页表的内核部分,那为什么还要这么做呢,让内核地址空间和进程用户地址空间在同一张页表共存?这就有个问题,如何共享的?原创 2023-11-29 00:23:04 · 417 阅读 · 0 评论 -
xv6 磁盘中断流程和启动时调度流程
而加入周期性的开中断后,CPU 便会响应中断。当有键盘输入时,中断当前的调度上下文而进入中断上下文,执行键盘中断处理程序,唤醒 shell 进程,中断处理完成后再回到调度上下文。假如当前系统只有一个进程(shell进程),它需要等待键盘输入而被阻塞(state==SLEEPING),内层循环是找不到 RUNNABLE 进程的,便回到外层循环,外层循环现在相当于什么也不做,便又再次进入内层循环。停更这么久啊,一直再忙工作,学习新的东西,时间不是很多,当然也有懒的原因,后面慢慢克服回归吧。原创 2023-11-29 00:21:47 · 995 阅读 · 0 评论 -
操作系统面经
前一段时间在面试,这里整理一下操作系统方向的面经分享给大家,我是因为做了一个简易的操作系统,面试问题也主要是围绕着操作系统展开,这里就面试遇到的问题以及我自己的想法整理一下,可以参考参考,有什么问题也还请批评指正。自己引申出来的问题黑色普通文字是我的“回答”或者与面试官闲聊的内容。原创 2022-09-22 22:59:19 · 381 阅读 · 1 评论 -
给操作系统捋条线
前言时隔四个多月,终于把 xv6xv6xv6 这个系列写完了,我把它们整合起来做成了这个 PDFPDFPDF,并命名为给操作系统捋条线。在写第一篇计算机启动的时候,我就说过想要通过 xv6xv6xv6 给操作系统的前前后后,里里外外捋一条线出来,让自己让大家都对操作系统有个清晰的认识。可能有朋友还不知道 xv6xv6xv6 是个什么东西,都说 mitmitmit 的 6.8286.8286.828 课程是学习操作系统的神级课程,而 xv6xv6xv6 就是其教学使用的操作系统。xv6xv6xv6 这个系原创 2021-10-30 12:42:25 · 331 阅读 · 1 评论 -
了解文件系统调用吗?如何实现的?
文件系统调用本文接着上文系统调用,也是接着 xv6xv6xv6 文件系统的最后一层,讲述各种具体的文件系统调用是怎么实现的,文件描述符,inodeinodeinode,文件之间到底有什么关系,创建打开关闭删除文件到底是何意义,文件删除之后数据就不存在了吗,链接又作何解释等等问题,看完本文相信你能找到答案。基本数据结构前面的文章捋一捋文件系统中曾提到过,LinuxLinuxLinux 里会为每一个打开的文件维护两张表,一个是系统级的打开文件表,简称为文件表。还维护了一张进程级的打开文件表,且称为文件描述原创 2021-09-21 22:08:43 · 295 阅读 · 0 评论 -
多处理器下的中断机制
INTERRUPT中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的。中断的机制分为两种,中断和异常,中断通常为 IOIOIO 设备触发的异步事件,而异常是 CPUCPUCPU 执行指令时发生的同步事件。本文主要来说明 IOIOIO 外设触发的中断,总的来说一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号。本文用 xv6xv6xv6 的实例来讲解多处理器下的中断机制,从头至尾的来看一看,中断经历的三个过程。其原创 2021-09-21 22:01:13 · 1706 阅读 · 0 评论 -
系统调用如何实现?
公号:Rand_csSYSCALL系统调用就是调用操作系统提供的一系列内核功能函数,因为内核总是对用户程序持不信任的态度,一些核心功能不能直接交由用户程序来实现执行。用户程序只能发出请求,然后内核调用相应的内核函数来帮着处理,将结果返回给应用程序。如此才能保证系统的稳定和安全。本文采用 xv6xv6xv6 的实例来讲解系统调用具体是如何实现的。系统调用是给用户态下的程序使用的,但是用户程序并不直接使用系统调用,而是系统调用在用户态下的接口。这个用户接口就是操作系统提供的系统调用 APIAPIAPI.原创 2021-09-21 21:51:34 · 772 阅读 · 0 评论 -
xv6 文件系统
文件系统公众号:Rand_cs本文继续来看 xv6xv6xv6 的文件系统部分,xv6xv6xv6 将文件系统的设计分为 7 层:磁盘→缓存区→日志→inode→目录→路径→文件系统调用磁盘 \rightarrow 缓存区 \rightarrow 日志 \rightarrow inode \rightarrow 目录 \rightarrow 路径 \rightarrow 文件系统调用磁盘→缓存区→日志→inode→目录→路径→文件系统调用 ,磁盘、缓存区、日志三个部分在前文已经说了,本文接着讲述 i原创 2021-08-30 19:31:34 · 1083 阅读 · 1 评论 -
你知道键盘是如何工作的吗?(xv6键盘驱动程序)
键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。原创 2021-08-30 19:21:04 · 434 阅读 · 0 评论 -
如何实现一个简单的文件系统
日志公众号:Rand_cs本文来聊聊文件系统中的日志系统,来看一个简单的日志系统是如何实现的。本文是接着前面的 xv6 系列,用到的一些前导知识不再说明,没看的可以先看一下。文件系统设计中通常要考虑错误恢复,这是因为文件系统会涉及对磁盘的多次写操作,如果在写的过程中系统崩溃了,就会使得磁盘上的文件系统处于不一致的错误状态。日志就是设计来解决因为系统崩溃导致的错误问题,本文就 xv6xv6xv6 来讲解怎么实现一个简单的日志系统。在 xv6xv6xv6 的日志系统中,文件操作方面的系统调用并不会直原创 2021-08-30 19:17:47 · 529 阅读 · 0 评论 -
键盘是如何工作的?
键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。原创 2021-08-22 10:49:06 · 825 阅读 · 0 评论 -
xv6 的锁机制
LOCK公众号:Rand_cs锁,大家应该很熟悉了,用来避免竞争,实现同步。本文以 xv6 为例来讲解锁本身是怎么实现的,废话不多说,先来看一些需要了解的概念:一些概念公共资源:顾名思义就是被多个任务共享的资源,可以是公共内存,也可以是公共文件等等临界区: 要访问使用公共资源,肯定得通过一些代码指令去访问,这些代码指令就是临界区并发:单个 CPU 上交替处理多个任务,宏观上看就像是同时进行的一样,但微观上看任意时刻还是只有一个任务在进行。并行:多个处理器同时处理多个任务,能够做到真正意义上原创 2021-08-16 16:45:49 · 827 阅读 · 0 评论 -
带你了解磁盘驱动程序(xv6)
磁盘驱动程序本文来聊聊磁盘驱动程序,驱动程序是硬件的接口,操作系统通过这个接口来控制硬件工作,所以驱动程序就好比是硬件和系统之间的桥梁。这是百科上给出的解释,可能看起来还是云里雾里,我来做做注解。每个硬件都有自己的 “CPU”(控制器),寄存器,有着自己的一套执行逻辑。对外提供了一些列的物理接口,就是那一个个端口(寄存器),可以通过设置这些端口来控制硬件工作。要知道直接通过物理接口来控制硬件工作是很繁复的,所以将这些接口给封装起来便于使用,这就是驱动程序。所以操作系统通过驱动程序提供的接口来间接控制硬原创 2021-08-16 16:43:09 · 2718 阅读 · 0 评论 -
多处理器下的调度
Rand_cs调度是操作系统里面一个很重要的概念,进程中有调度,页面置换有调度,磁盘访问也有调度,本文讲述的是进程之间的调度,以及多处理器之间的调度策略。废话不多时直接来看,先来简单了解各种概念:各种概念简析各种时间到达时间:进程到达等待队列的时间开始时间:CPU 开始执行进程的时间完成时间:进程执行完成的时间服务时间:进程在 CPU 上总共执行的时间等待时间/响应时间:进程在队列中等待的时间,即开始时间−到达时间开始时间-到达时间开始时间−到达时间周转时间:进程被提交给系统到完成的这.原创 2021-08-09 21:12:57 · 677 阅读 · 0 评论 -
xv6 内存管理
前文讲述了 xv6 的启动过程,本文接着讲述 xv6 内存管理的部分,直接来看。公众号:Rand_cs启动部分完善前文只是介绍了启动的过程,但是各类函数之间的调用,地址的变换,内存布局的变化并没有详细说明明,本节来完善。BIOS还是从 BIOS 开始,入口点是 0xffff00xffff00xffff0,是一跳转指令 jmp f000:e05bjmp \ \ f000:e05bjmp f000:e05b,然后开始执行 BIOS 的代码,内存低 1M原创 2021-08-09 21:11:31 · 1428 阅读 · 1 评论 -
实例讲解多处理器下的计算机启动(xv6的启动过程)
启动启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看。启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER 键启动,又叫硬件启动,比如开机,这种启动方式在启动之前计算机处于断电状态,像内存这种需要加电维持的存储部件里面的内容都丢失了,加电开机那一刻里面的值都是随机的,操作系统会对其进行初始化。而热启动是在加电的情况下启动,又叫软件启动,比如重启,这种启动方式在启动之前和启动之后电没断过,内存等存储部件里面的值不会改原创 2021-07-29 11:47:49 · 1004 阅读 · 0 评论