系统
文章平均质量分 93
Rand_CS
程序员路上的一名潜修者。
展开
-
xv6 内核空间共享
xv6 不需要内核页表同步,因为 xv6 在启动的时候,内核地址空间的映射关系已经建立好了,而纵观代码也没有修改内核地址空间映射关系的地方,所以内核地址空间的映射关系应是一直不变的。每个进程页表只需要映射它自己的地址空间以及跳转到内核那一小段代码段即可,跳转到内核后,切换到内核页表,在内核办完事儿后再切换回进程页表,这个过程似乎没有问题,也就是根本就没必要拷贝整个内核页表到进程页表的内核部分,那为什么还要这么做呢,让内核地址空间和进程用户地址空间在同一张页表共存?这就有个问题,如何共享的?原创 2023-11-29 00:23:04 · 428 阅读 · 0 评论 -
操作系统面经
前一段时间在面试,这里整理一下操作系统方向的面经分享给大家,我是因为做了一个简易的操作系统,面试问题也主要是围绕着操作系统展开,这里就面试遇到的问题以及我自己的想法整理一下,可以参考参考,有什么问题也还请批评指正。自己引申出来的问题黑色普通文字是我的“回答”或者与面试官闲聊的内容。原创 2022-09-22 22:59:19 · 423 阅读 · 1 评论 -
到底什么是挂载?
首发公号:Rand_cs在 LinuxLinuxLinux 的文件系统中,有个很重要的概念就是挂载,挂载大家应该都很熟悉,除了根文件系统,其他所有文件系统都要先挂载到根文件系统中的某个目录之后才能访问。所谓的根文件系统就是系统启动的时候安装的第一个文件系统,它也是内核映像所在的文件系统。而 挂载到某个目录 的 某个目录 就是所谓的挂载点。LinuxLinuxLinux 中有专门的命令来挂载文件系统,mount device dir,devicedevicedevice 为要挂载的设备文件名,dir.原创 2022-01-20 12:25:08 · 9254 阅读 · 4 评论 -
为什么计算重启后时间依然正确?
TIME首发公号:Rand_cs相信很多朋友接触计算机的时候都有这么一个疑惑,为什么计算机在关机断电,隔一段时间后重启的时间依然正确?这背后的原因其实不难猜测,关机后重启的时间正确说明关机的情况下时钟仍然在工作,关机的情况下时钟仍然在工作,说明这个时钟应是有备用电源支持它工作的。这个时钟叫做 RTCRTCRTC,RealRealReal TimeTimeTime ClockClockClock,可以“永久”的存放系统时间,也就是说它在系统关闭,没有电源的情况下也能继续工作。这里说的是没有计算机的原创 2022-01-20 12:21:52 · 1769 阅读 · 0 评论 -
给操作系统捋条线
前言时隔四个多月,终于把 xv6xv6xv6 这个系列写完了,我把它们整合起来做成了这个 PDFPDFPDF,并命名为给操作系统捋条线。在写第一篇计算机启动的时候,我就说过想要通过 xv6xv6xv6 给操作系统的前前后后,里里外外捋一条线出来,让自己让大家都对操作系统有个清晰的认识。可能有朋友还不知道 xv6xv6xv6 是个什么东西,都说 mitmitmit 的 6.8286.8286.828 课程是学习操作系统的神级课程,而 xv6xv6xv6 就是其教学使用的操作系统。xv6xv6xv6 这个系原创 2021-10-30 12:42:25 · 347 阅读 · 1 评论 -
了解文件系统调用吗?如何实现的?
文件系统调用本文接着上文系统调用,也是接着 xv6xv6xv6 文件系统的最后一层,讲述各种具体的文件系统调用是怎么实现的,文件描述符,inodeinodeinode,文件之间到底有什么关系,创建打开关闭删除文件到底是何意义,文件删除之后数据就不存在了吗,链接又作何解释等等问题,看完本文相信你能找到答案。基本数据结构前面的文章捋一捋文件系统中曾提到过,LinuxLinuxLinux 里会为每一个打开的文件维护两张表,一个是系统级的打开文件表,简称为文件表。还维护了一张进程级的打开文件表,且称为文件描述原创 2021-09-21 22:08:43 · 308 阅读 · 0 评论 -
多处理器下的中断机制
INTERRUPT中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的。中断的机制分为两种,中断和异常,中断通常为 IOIOIO 设备触发的异步事件,而异常是 CPUCPUCPU 执行指令时发生的同步事件。本文主要来说明 IOIOIO 外设触发的中断,总的来说一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号。本文用 xv6xv6xv6 的实例来讲解多处理器下的中断机制,从头至尾的来看一看,中断经历的三个过程。其原创 2021-09-21 22:01:13 · 1885 阅读 · 0 评论 -
系统调用如何实现?
公号:Rand_csSYSCALL系统调用就是调用操作系统提供的一系列内核功能函数,因为内核总是对用户程序持不信任的态度,一些核心功能不能直接交由用户程序来实现执行。用户程序只能发出请求,然后内核调用相应的内核函数来帮着处理,将结果返回给应用程序。如此才能保证系统的稳定和安全。本文采用 xv6xv6xv6 的实例来讲解系统调用具体是如何实现的。系统调用是给用户态下的程序使用的,但是用户程序并不直接使用系统调用,而是系统调用在用户态下的接口。这个用户接口就是操作系统提供的系统调用 APIAPIAPI.原创 2021-09-21 21:51:34 · 806 阅读 · 0 评论 -
xv6 文件系统
文件系统公众号:Rand_cs本文继续来看 xv6xv6xv6 的文件系统部分,xv6xv6xv6 将文件系统的设计分为 7 层:磁盘→缓存区→日志→inode→目录→路径→文件系统调用磁盘 \rightarrow 缓存区 \rightarrow 日志 \rightarrow inode \rightarrow 目录 \rightarrow 路径 \rightarrow 文件系统调用磁盘→缓存区→日志→inode→目录→路径→文件系统调用 ,磁盘、缓存区、日志三个部分在前文已经说了,本文接着讲述 i原创 2021-08-30 19:31:34 · 1106 阅读 · 1 评论 -
你知道键盘是如何工作的吗?(xv6键盘驱动程序)
键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。原创 2021-08-30 19:21:04 · 472 阅读 · 0 评论 -
如何实现一个简单的文件系统
日志公众号:Rand_cs本文来聊聊文件系统中的日志系统,来看一个简单的日志系统是如何实现的。本文是接着前面的 xv6 系列,用到的一些前导知识不再说明,没看的可以先看一下。文件系统设计中通常要考虑错误恢复,这是因为文件系统会涉及对磁盘的多次写操作,如果在写的过程中系统崩溃了,就会使得磁盘上的文件系统处于不一致的错误状态。日志就是设计来解决因为系统崩溃导致的错误问题,本文就 xv6xv6xv6 来讲解怎么实现一个简单的日志系统。在 xv6xv6xv6 的日志系统中,文件操作方面的系统调用并不会直原创 2021-08-30 19:17:47 · 597 阅读 · 0 评论 -
键盘是如何工作的?
键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。原创 2021-08-22 10:49:06 · 846 阅读 · 0 评论 -
xv6 的锁机制
LOCK公众号:Rand_cs锁,大家应该很熟悉了,用来避免竞争,实现同步。本文以 xv6 为例来讲解锁本身是怎么实现的,废话不多说,先来看一些需要了解的概念:一些概念公共资源:顾名思义就是被多个任务共享的资源,可以是公共内存,也可以是公共文件等等临界区: 要访问使用公共资源,肯定得通过一些代码指令去访问,这些代码指令就是临界区并发:单个 CPU 上交替处理多个任务,宏观上看就像是同时进行的一样,但微观上看任意时刻还是只有一个任务在进行。并行:多个处理器同时处理多个任务,能够做到真正意义上原创 2021-08-16 16:45:49 · 841 阅读 · 0 评论 -
带你了解磁盘驱动程序(xv6)
磁盘驱动程序本文来聊聊磁盘驱动程序,驱动程序是硬件的接口,操作系统通过这个接口来控制硬件工作,所以驱动程序就好比是硬件和系统之间的桥梁。这是百科上给出的解释,可能看起来还是云里雾里,我来做做注解。每个硬件都有自己的 “CPU”(控制器),寄存器,有着自己的一套执行逻辑。对外提供了一些列的物理接口,就是那一个个端口(寄存器),可以通过设置这些端口来控制硬件工作。要知道直接通过物理接口来控制硬件工作是很繁复的,所以将这些接口给封装起来便于使用,这就是驱动程序。所以操作系统通过驱动程序提供的接口来间接控制硬原创 2021-08-16 16:43:09 · 2772 阅读 · 0 评论 -
多处理器下的调度
Rand_cs调度是操作系统里面一个很重要的概念,进程中有调度,页面置换有调度,磁盘访问也有调度,本文讲述的是进程之间的调度,以及多处理器之间的调度策略。废话不多时直接来看,先来简单了解各种概念:各种概念简析各种时间到达时间:进程到达等待队列的时间开始时间:CPU 开始执行进程的时间完成时间:进程执行完成的时间服务时间:进程在 CPU 上总共执行的时间等待时间/响应时间:进程在队列中等待的时间,即开始时间−到达时间开始时间-到达时间开始时间−到达时间周转时间:进程被提交给系统到完成的这.原创 2021-08-09 21:12:57 · 693 阅读 · 0 评论 -
xv6 内存管理
前文讲述了 xv6 的启动过程,本文接着讲述 xv6 内存管理的部分,直接来看。公众号:Rand_cs启动部分完善前文只是介绍了启动的过程,但是各类函数之间的调用,地址的变换,内存布局的变化并没有详细说明明,本节来完善。BIOS还是从 BIOS 开始,入口点是 0xffff00xffff00xffff0,是一跳转指令 jmp f000:e05bjmp \ \ f000:e05bjmp f000:e05b,然后开始执行 BIOS 的代码,内存低 1M原创 2021-08-09 21:11:31 · 1503 阅读 · 1 评论 -
捋一捋磁盘及分区
磁盘即分区温彻斯特硬盘今天我们所使用的机械硬盘实质上都是温彻斯特硬盘,最早是在 1973 年由 IBM 研制的一种新型硬盘 IBM 3340。它使用了一种了不起的技术:磁头不与盘片接触,只有不予接触才可能有着更高的转速而且磁盘才不易损坏。至于这个名字的来历,是因为 IBM3340 拥有两个 30MB 的存储单元,而当时一种很有名的 “温彻斯特来福枪” 的口径和装药也恰好包含了两个数字 “30”;于是这种硬盘的内部代号就被定为 “温彻斯特”。我们来看看这种硬盘的结构图:盘片盘面磁头上图中光盘状的东原创 2021-07-29 11:53:05 · 545 阅读 · 0 评论 -
捋一捋系统调用
系统调用就是调用操作系统提供的一系列内核功能函数,因为内核总是对用户程序持不信任的态度,一些核心功能不能交由用户程序来实现执行。用户程序只能发出请求,然后内核调用相应的内核函数来帮着处理,将结果返回给应用程序。如此才能保证系统的稳定和安全,关于系统调用的这些理论知识不多说,书本上有一大堆,本文旨在捋清楚系统调用这条线。总述Linux 里系统调用是由中断来实现的,既然利用中断实现,那么总体来说系统调用的过程应该与中断的过程相似。也的确如此,总体流程是差不多,但也有所区别。每一种中断都会有一个中断向量号或原创 2021-07-29 11:51:24 · 443 阅读 · 0 评论 -
再谈中断机制(APIC)
中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的。一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号。中断控制器前面的文章曾讲过一些 PIC,PIC 只用于单处理器,对于如今的多核多处理器时代,PIC 无能为力,所以出现了更高级的中断控制器 APIC,APIC 分成两部分 LAPIC 和 IOAPIC,前者 LAPIC 位于 CPU 内部,每个 CPU 都有一个 LAPIC,后者 IOAPIC 与外设相连。外设原创 2021-07-29 11:48:27 · 2409 阅读 · 0 评论 -
实例讲解多处理器下的计算机启动(xv6的启动过程)
启动启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看。启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER 键启动,又叫硬件启动,比如开机,这种启动方式在启动之前计算机处于断电状态,像内存这种需要加电维持的存储部件里面的内容都丢失了,加电开机那一刻里面的值都是随机的,操作系统会对其进行初始化。而热启动是在加电的情况下启动,又叫软件启动,比如重启,这种启动方式在启动之前和启动之后电没断过,内存等存储部件里面的值不会改原创 2021-07-29 11:47:49 · 1033 阅读 · 0 评论 -
捋一捋磁盘及分区
温彻斯特硬盘今天我们所使用的机械硬盘实质上都是温彻斯特硬盘,最早是在 1973 年由 IBM 研制的一种新型硬盘 IBM 3340。它使用了一种了不起的技术:磁头不与盘片接触,只有不予接触才可能有着更高的转速而且磁盘才不易损坏。至于这个名字的来历,是因为 IBM3340 拥有两个 30MB 的存储单元,而当时一种很有名的 “温彻斯特来福枪” 的口径和装药也恰好包含了两个数字 “30”;于是这种硬盘的内部代号就被定为 “温彻斯特”。我们来看看这种硬盘的结构图:盘片盘面磁头上图中光盘状的东西就是盘面,原创 2021-07-10 11:44:51 · 380 阅读 · 0 评论 -
使用分身术变身术创建新进程
火影忍者相比大家都很熟悉吧,就算没看过也应该都听说过,里面有着各种各样的忍术,加上不同的结印手势,那真是相当的炫酷啊。可这和计算机有什么关系呢?今天我们就要使用两种忍术来创建一个新进程。没错,就是要用两种忍术来创建一个新进程,分别是分身术 fork,和变身术 exec。前文说过 init 第一个进程的创建,因为是第一个进程,所以必须得“自己手动”的建立进程初始数据。而后续的进程就不用这么麻烦啦,直接一个分身,一个变身就能创建一个新进程。这两个忍术可得好好领悟认真学,鸣人可是靠着这两种忍术打遍天下无敌手,原创 2021-05-10 22:37:45 · 437 阅读 · 0 评论 -
计算机里面那些奇奇怪怪的数值问题(原码补码反码移码)
Number计算机里面关于数值的处理自有一套体系理论,与现实生活中我们所习惯使用的不太一样。如果对其不了解,在使用计算机的过程中便可能发生一些意想不到的错误。今天本文就来简明地介绍计算机里面的数值方面的一些知识,并用具体例子来说明可能出现的一些问题。01一些概念机器数:数值在计算机内部的编码,也就是实际存储的 0/1 序列。真值:机器数想要表示的实际数值,可理解为现实生活中我们平常所用的有正负号的数。机器数与真值的对应关系就是数值在计算机内部的编码,主要有 4 种:原码,反码,补码,移码。原码原码由 1 位原创 2021-04-29 21:21:14 · 1449 阅读 · 3 评论 -
一文看懂进程线程调度
对于进程线程调度大家肯定都不陌生,都能够说上两句,比如什么进程是资源分配的基本单位,线程是调度的基本单位,进程有独立的地址空间,线程没有,线程与进程里面其他的线程共享资源,再有就是花样百出的调度策略。但是可能很多人对进程线程调度的内部情况还是不太清楚,只是说对这知识很熟悉,产生了理所当然的感觉。本文就从一个简单的线程进程调度设计上来帮助大家理清进程线程的区别,缕清调度这条线。一、线程我们先来看看线程,在POSIX定义的线程标准中,线程是这样创建的,函数原型如下:thread,用来储存线程的idat原创 2021-04-28 23:40:16 · 1356 阅读 · 0 评论 -
键盘中断,键盘驱动,基于Linux0.11
键盘,咱们做计算机这一行的自然不必多说,天天与它打交道。但熟归熟,清楚键盘背后的原理吗?键盘上都标有各键的名称,表明了各键所代表的意义,但是计算机是如何知道的?组合键是怎样实现的?按下一个代表字符的键,怎么变成平常使用的ASCII码的?看完本文,相信你就能了解键盘的本质,知晓这些问题答案。一、相关介绍键盘编码器键盘编码器(i8048),是键盘里的芯片,主要用来监控是否有键按下,弹起,然后向键盘控制器报告此键的相关信息。键盘编码器就像是键盘的嘴,让键盘能够说话,表达目前按键状态。Num Lock键和C原创 2021-04-20 19:39:11 · 1053 阅读 · 0 评论 -
了解计算机里的时间管理大师吗?时钟中断
时间,在我们的现实生活中有着重要的作用,有了时间,我们才知道目前需要做些什么,该做些什么;有了时间,一切工作才能有条不紊的进行,可以说现实世界里我们一切的活动都是由时间来驱动的。而时间在计算机的世界里也扮演着类似的角色,它是所有工作任务的基准,中断机制,进程线程调度等等都离不开时间,时间的重要性可见一般。因此我们需要时间,需要管理时间,此篇文章主要就是来与大家介绍一下计算机里的时间与时间管理和储存时间的时钟。有关计算机时间的时钟有多种,在这儿介绍两种比较重要的两种:实时时钟,可编程间隔计数器。实时时钟原创 2021-03-28 00:06:41 · 494 阅读 · 0 评论 -
中断那些事儿(1)
中断,英文名为Interrupt,计算机的世界里处处都有中断,任何工作都离不开中断,可以说整个计算机系统就是由中断来驱动的。那么什么是中断?简单来说就是CPU停下当前的工作任务,去处理其他事情,处理完后回来继续执行刚才的任务,这一过程便是中断。本文旨在进一步揭开中断机制的面纱,理清中断的过程,就中断做出以下几个方面的介绍:中断分类,中断描述符表,中断控制器,和中断过程。详细的思维导图如下:一、中断分类外部中断1、可屏蔽中断:通过INTR线向CPU请求的中断,主要来自外部设备如硬盘,打印机,网卡等原创 2021-03-22 13:49:56 · 552 阅读 · 2 评论 -
分页机制如何建立起来的,地址如何转化?
1、逻辑地址,线性地址,虚拟地址,物理地址傻傻分不清?(1)逻辑地址在IA-32架构下,分段是必须的,而分页并不是必须的。不论分页与否,访问内存都必须采用“段基址:段内偏移地址”的策略。因此访问内存需要16&32共48位的地址信息,这便是逻辑地址,高12位为段选择子,后面32位为段内偏移地址。(2)线性地址使用选择子索引到段描述符取得32位的段基址后与逻辑地址内的32位段内偏移地址相加后得到一个32位的地址信息,这便是线性地址。(3)虚拟地址如果不启用分页机制,线性地址就是物理地址,.原创 2021-03-15 21:31:08 · 2658 阅读 · 3 评论 -
如何从实模式到保护模式?
实模式到保护模式,如何进入保护模式在还是16位CPU的天下时,并没有实模式这一说。直到CPU发展到32位,推出保护模式后,为了区别两种模式,便将之前的模式称为实模式。处于向下兼容的考虑,现代的CPU依然保持对16位模式的兼容,刚开机时,32位的CPU是先处于16位的实模式的,而后再进入保护模式。一、实模式1. 实模式的特点1、地址总线只使用了20根,寻址范围为220B=1MB。2、寄存器只使用了16位,所以如果只用单一的寄存器来寻址的话只能访问到216B=64KB的空间。3、分段,访问内存采用原创 2021-03-15 20:47:31 · 1400 阅读 · 0 评论 -
计算机启动
计算机启动计算机的启动过程好比一场接力赛,各选手如上图所示,BIOS, MBR, OSLoader, OS, 一个程序接一个程序的运行,而传递的接力棒便相当于对计算机的控制权。本文也就围绕着这四个程序进行介绍,隐去了部分细节后续讲解,着重于理清启动的顺序、过程。一、BIOS(1)BIOS运行启动的第一步便是运行BIOS程序,平常要运行某个程序时一般分为两步:1、将程序载入内存2、使cs:ip指向程序入口地址而BIOS作为开机运行的第一个程序,运行方式与普通程序有所不同,但方法过程是相通的:原创 2021-03-15 19:40:42 · 2389 阅读 · 11 评论