自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 minos 2.6 中断虚拟化——虚拟中断子系统

Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minosHypervisor 需要对每个虚机的虚拟中断进行管理,这其中涉及的一系列数据结构和操作就是虚拟中断子系统。

2024-06-03 03:03:03 748

原创 minos 2.5 中断虚拟化——vGIC

/ 虚拟设备名称int host;// vdev 服务的 vm// vdev 内存空间// vdev 操作集minos 定义了上述结构体表示一个虚拟设备抽象if (!vm ||!相关初始化函数如上所示,很简单,各个字段设置成默认值就行// 虚拟设备添加内存 范围,只是在该 vm 中分配一个 vma,将信息记录到 vma,没有做映射// MARK,这里没有做实际的物理内存分配和 stage2映射。

2024-06-03 03:02:31 318

原创 minos 2.2 中断虚拟化——异常处理流程

Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos上一节讲述了 ARMv8 异常模型,很多理论,这一节来看一个实际的例子,来看看 minos 中的异常处理流程。

2024-06-03 03:01:55 401

原创 minos 2.4 中断虚拟化——中断子系统

Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos前面讲述了 minos 对 GICv2 的一些配置和管理,这一节再往上走一走,看看 minos 的中断子系统。

2024-06-03 02:58:08 309

原创 minos 2.3 中断虚拟化——GICv2 管理

Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos硬件肯定需要软件配合,这一节就来实战 GICv2首先准备好 GICv2 手册:https://developer.arm.com/documentation/ihi0048/bb/?lang=en,对于硬件的管理,最底层的操作就是读写硬件的寄存器,所以这里准备好手册,随时查阅手册。

2024-06-03 02:57:17 426

原创 minos 2.1 中断虚拟化——ARMv8 异常处理

Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中断统称为中断,在 ARM 平台,一般将中断和异常统称为异常异常的流程,可以分为 3 个阶段,“设备”产生异常信号,中断控制器过滤转发异常,OS 处理异常。

2024-06-03 02:56:47 1080

原创 minos 1.2 内存虚拟化——guest

本文讲述 SELinux 保护安全的基本原理Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos项目来自乐敏大佬:https://github.com/minosproject/minos本文继续讲述 minos 中的内存虚拟化中关于 guest 的部分,主要弄清楚一个问题,minos 如何管理 guest vm 的内存。

2024-06-03 02:53:13 454

原创 minos 1.1 内存虚拟化——hyp

本文讲述 SELinux 保护安全的基本原理Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos本文主要就从这两个方面来讲述内存虚拟化的第一节,主要是 hypervisor 一层的内容。这里对后文讲述做一些约定,在本项目中,minos、hypervisor、kernel、host os 指的是同一个东西,指的是直接运行在硬件上,运行在 EL2 异常级别的那一层软件。

2024-06-03 02:52:36 566

原创 minos 0 前(废)言(话)

剩下的就是 Linux 中关于 SELinux 驱动以及 libselinux 中的代码,关键部分的代码我基本捋了一遍,有些多,我也就懒得花时间整理了,我估计这玩意儿也没多少人感兴趣,懂这原理后实际用处也不大,感兴趣的可以去瞅瞅这代码,有问题的可以找我交流。从接触到现在,我也解决过许多 SELinux 兼容性的问题,简单的问题网上解决方式一大堆,比较复杂的 case,碍于公司事项,也不好实际拿出来讲,所以 SELinux 应用方面也就先不讲述了,这个系列就先到此为止,后面有缘再续。

2024-06-03 02:51:50 416

原创 SELinux 基本原理

本文讲述 SELinux 保护安全的基本原理Rand_cs。

2024-01-01 22:34:07 1035

原创 BLP模型

如果低安全级别主体想要往高安全级别客体写,即 l1 domby l2(这里其实就是 l1 < l2,没有等于,应为如果有等于,则在 l1 eq l2 的时候便会判断通过了),说明想要违反 strong *-property,违反完整性规则,那么需要额外条件 h1 dom l2,可以这样理解:因为在完整性规则描述中,高级别可以向低级别进行写操作,所以既然主体的低安全级别已经小于了客体的低安全级别,那么就必须要满足主体的高安全级别大于客体的低安全级别(主体的安全级别范围里至少有一个要大于等于客体的安全级别)。

2024-01-01 22:26:20 1268

原创 SELinux策略语法以及示例策略

type a;#定义一个类型 atype a_t;#定义一个类型 a_t#定义一个属性 TestFile#定义一个类型 b_t,具有属性 TestFile#使a_t也具有TestFile属性type 和 attribute 两者位于同一个命名空间,也就是说如果定义了 type a,那就不能定义 attribute aa_t,后面有个 t 是表示 “type” 类型,这是 PC 端 SELinux 策略常见写法,但是 Android 不这样用,没有后缀。

2024-01-01 22:13:37 1364

原创 SELinux 安全模型——TE

通过前面的示例策略,大家对 SELinux 应该有那么点感觉认识了,从这篇开始的三篇文章讲述 SELinux 的三种安全模型,会涉及一些代码,旨在叙述 SELinux 内部的原理SELinux 提供了 3 种安全模型:RBAC:Role Based Access Control

2024-01-01 22:12:36 1048 1

原创 SELinux 安全模型——MLS

BLP 模型:于1973年被提出,是一种模拟军事安全策略的计算机访问控制模型,它是最早也是最常用的一种多级访问控制模型,主要用于保证系统信息的机密性,是第一个严格形式化的安全模型暂时无法在飞书文档外展示此内容多层安全的核心:“”,所以只能向上写数据,从下层读数据,或者同级之间读写数据。此图有四个安全级别,由低到高分别为:unclassified → restricted → confidential → secret。

2024-01-01 22:11:27 987

原创 Ubuntu 上使能 SELinux

此文档说明如何在 ubuntu 上启用 SELinux,测试环境为虚拟机,开始前一定一定一定先来个快照,不要问我为什么有三个一定。

2023-11-29 00:28:02 2583 1

原创 SELinux(一) 简介

Subject,主体:访问的发起者,通常就是进程Object,客体:被访问的对象,一般是操作系统所管理的资源,最常见的就是文件Rules DB,规则库/策略:定义了主体客体的属性以及主体对客体的访问规则RVM:操作系统内实现的验证机制,上述访问控制策略的执行者,在访问操作过程中根据规则库判断当前操作是否合法DAC(Discretionary Access Control),自主访问控制机制,名字听着很陌生,但你一定很熟悉,就是 Linux 下那套常见的 ugo、rwx 规则。

2023-11-29 00:24:50 560

原创 xv6 内核空间共享

xv6 不需要内核页表同步,因为 xv6 在启动的时候,内核地址空间的映射关系已经建立好了,而纵观代码也没有修改内核地址空间映射关系的地方,所以内核地址空间的映射关系应是一直不变的。每个进程页表只需要映射它自己的地址空间以及跳转到内核那一小段代码段即可,跳转到内核后,切换到内核页表,在内核办完事儿后再切换回进程页表,这个过程似乎没有问题,也就是根本就没必要拷贝整个内核页表到进程页表的内核部分,那为什么还要这么做呢,让内核地址空间和进程用户地址空间在同一张页表共存?这就有个问题,如何共享的?

2023-11-29 00:23:04 418

原创 xv6 磁盘中断流程和启动时调度流程

而加入周期性的开中断后,CPU 便会响应中断。当有键盘输入时,中断当前的调度上下文而进入中断上下文,执行键盘中断处理程序,唤醒 shell 进程,中断处理完成后再回到调度上下文。假如当前系统只有一个进程(shell进程),它需要等待键盘输入而被阻塞(state==SLEEPING),内层循环是找不到 RUNNABLE 进程的,便回到外层循环,外层循环现在相当于什么也不做,便又再次进入内层循环。停更这么久啊,一直再忙工作,学习新的东西,时间不是很多,当然也有懒的原因,后面慢慢克服回归吧。

2023-11-29 00:21:47 997

原创 操作系统面经

前一段时间在面试,这里整理一下操作系统方向的面经分享给大家,我是因为做了一个简易的操作系统,面试问题也主要是围绕着操作系统展开,这里就面试遇到的问题以及我自己的想法整理一下,可以参考参考,有什么问题也还请批评指正。自己引申出来的问题黑色普通文字是我的“回答”或者与面试官闲聊的内容。

2022-09-22 22:59:19 382 1

原创 童年神机小霸王(七) Mapper

首发公号:Rand_cs,求关注支持Mappermapper,这个概念来源于 memory mapping,又叫做 Memory Management Circuit,它是解决地址映射的一种电路,简单来说就是决定物理内存如何映射到 CPU 或者 PPU 的地址空间。mapper 可以用来支持增加卡带的 RAM 甚至支持额外的音频通道,但更一般的目的就是控制物理内存到地址空间的映射,突破游戏 40KB 的限制。为什么说是 40KB 的限制,因为早期一般的游戏最大就是 16×2=32KB16 \ti.

2022-02-12 00:00:59 2365

原创 童年神机小霸王(六) 手柄

首发公号:Rand_cs,求关注支持Controller&FormatController本文讲述 NES 的输入设备,最为常见的就是手柄 joypad:一般支持两个手柄,手柄 1 和手柄 2 分别映射到 CPU 的地址空间 0x4016 和 0x4017,我们可以从这两个寄存器读出手柄按键的状态,1 代表按下,0 表示弹起状态。手柄的内部有个移位寄存器来存放这些键的状态,每次从 0x4016 读取的数据只表示一个键的状态,需要连续读取 8 次才能读取所有键的状态,8 个键的读取顺序.

2022-02-11 23:59:19 4283 1

原创 童年神机小霸王(五) 滚屏渲染 2

首发公号:Rand_cs,求关注支持Render&Scroll本文继续来说滚屏渲染,讲述每条 Scanline 每个周期具体干些什么事情以及一些高级玩法,屏幕分割技术,看看前面所说的大片级效果是如何制作的。还是先来看渲染部分,PPU (NTSC TV)每一帧渲染 262 条 scanlines,每条 scanline 又持续 341 个时钟周期,对此,wiki 上有一张很详细的图,看懂了,就大致明白了:上面一排数字表示周期,左边一列数字表示第几条 Scanline,也可以当作坐标来看.

2022-02-11 23:57:32 568

原创 童年神机小霸王(四) 滚屏渲染 1

首发公众号:Rand_cs,求关注支持滚屏渲染(基础部分)本文继续 PPU 的话题来讲述滚屏,从我们小时候玩游戏的经验知道 NES 是支持像素级滚屏的,这在当时那个年代是个创举,这也是为什么 FC/NES 那么火热的原因之一那 PPU 是如何支持像素级的滚屏?这就要先来看看 PPU 的一些硬件部分。内存映射寄存器首先来看看映射到 CPU 地址空间的一些寄存器,也是 CPU 与 PPU 通信的端口。从本文开始十六进制数我还是用 0x 表示,用 $ 有太多的格式问题,前文我每个 $ 前面加上了 \.

2022-02-11 23:55:50 758

原创 为什么魂斗罗只有128KB却能实现那么长的剧情有答案了

PPU首发公号:Rand_cs本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看。例子基本都是使用的魂斗罗,看完本文相信对那问题“为什么魂斗罗只有128KB却可以实现那么长的剧情”有一定答案。废话不多说,直接来看,先是 PPU 的地址空间部分。地址空间PPU 有自己的总线,再来看看这张图:可以看出通过 PPU 总线能够访问到的地址空间主要由三部分组成:PatternTable, NameTable, Pallete,其中 PatterTable 是映

2022-01-20 12:44:28 3471 2

原创 红白机基本原理(二) CPU

CPU首发公号:Rand_csNES 使用的 CPU 为 6502,但与标准的 6502 有些许不同,最大的不同在于 NES 使用的芯片拥有一个 pAPU(pseudo-Audio Processing Unit),使其能够处理声音。本文主要来介绍 6502,废话不多说,直接来看内存布局前文简要介绍了 CPU 和 PPU 的地址空间,再来看看:CPU 的地址空间主要分为三部分,CPU RAM,内存映射寄存器,卡带中的内存 这三部分。由前文任天堂给出的总线图知道,地址总线有 16 位,所以可

2022-01-20 12:42:00 5715 1

原创 红白机基本原理(一)总述

Overview本来想直接开始写 CPU 的,想了想,还是先来写个总述,好有个大致概念。省去了很多东西,但总体大概就这么个样子。手柄是输入设备,电视为输出设备,CPU 为处理器,PPU 为图形处理器,卡带可以看作是存储的一部分任天堂给出的与 CPU 相关的总线图如下所示:可以看出地址总线为 16 位,但是数据总线只有 8 位。按照上图所示,其中 CPU 的地址空间分为三部分,一部分为 ROM,它位于卡带里面,RAM 为 CPU 自个儿的内存,I/O 为内存映射的一些寄存器,CPU 通过这些寄存

2022-01-20 12:34:46 7008 1

原创 红白机原理(零)前言

今天来聊聊 FC 游戏机,FC 的意思就是 Family Computer,虽然如今渐渐落寞被淘汰,但在当年的确是风靡全球,不负 Family Computer 这名字。FC 大家应该基本知道吧,emmm 应该还是有不知道的,就比如我那和蔼可亲爱看热血中二少年加后宫番的舍友就不知道,简单说一下,FC 就是打超级玛丽,魂斗罗的那个机器,现下基本很少见到这个东西了,现在的 PC 上也有相应的模拟器,较为成熟出名的有 Virtual NES 还有 FCEUX,可能还有其他的,不过我就了解这两个。一般来说 FC

2022-01-20 12:33:16 1639

原创 到底什么是挂载?

首发公号:Rand_cs在 LinuxLinuxLinux 的文件系统中,有个很重要的概念就是挂载,挂载大家应该都很熟悉,除了根文件系统,其他所有文件系统都要先挂载到根文件系统中的某个目录之后才能访问。所谓的根文件系统就是系统启动的时候安装的第一个文件系统,它也是内核映像所在的文件系统。而 挂载到某个目录 的 某个目录 就是所谓的挂载点。LinuxLinuxLinux 中有专门的命令来挂载文件系统,mount device dir,devicedevicedevice 为要挂载的设备文件名,dir.

2022-01-20 12:25:08 9064 4

原创 为什么计算重启后时间依然正确?

TIME首发公号:Rand_cs相信很多朋友接触计算机的时候都有这么一个疑惑,为什么计算机在关机断电,隔一段时间后重启的时间依然正确?这背后的原因其实不难猜测,关机后重启的时间正确说明关机的情况下时钟仍然在工作,关机的情况下时钟仍然在工作,说明这个时钟应是有备用电源支持它工作的。这个时钟叫做 RTCRTCRTC,RealRealReal TimeTimeTime ClockClockClock,可以“永久”的存放系统时间,也就是说它在系统关闭,没有电源的情况下也能继续工作。这里说的是没有计算机的

2022-01-20 12:21:52 1700

原创 给操作系统捋条线

前言时隔四个多月,终于把 xv6xv6xv6 这个系列写完了,我把它们整合起来做成了这个 PDFPDFPDF,并命名为给操作系统捋条线。在写第一篇计算机启动的时候,我就说过想要通过 xv6xv6xv6 给操作系统的前前后后,里里外外捋一条线出来,让自己让大家都对操作系统有个清晰的认识。可能有朋友还不知道 xv6xv6xv6 是个什么东西,都说 mitmitmit 的 6.8286.8286.828 课程是学习操作系统的神级课程,而 xv6xv6xv6 就是其教学使用的操作系统。xv6xv6xv6 这个系

2021-10-30 12:42:25 334 1

原创 了解文件系统调用吗?如何实现的?

文件系统调用本文接着上文系统调用,也是接着 xv6xv6xv6 文件系统的最后一层,讲述各种具体的文件系统调用是怎么实现的,文件描述符,inodeinodeinode,文件之间到底有什么关系,创建打开关闭删除文件到底是何意义,文件删除之后数据就不存在了吗,链接又作何解释等等问题,看完本文相信你能找到答案。基本数据结构前面的文章捋一捋文件系统中曾提到过,LinuxLinuxLinux 里会为每一个打开的文件维护两张表,一个是系统级的打开文件表,简称为文件表。还维护了一张进程级的打开文件表,且称为文件描述

2021-09-21 22:08:43 299

原创 多处理器下的中断机制

INTERRUPT中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的。中断的机制分为两种,中断和异常,中断通常为 IOIOIO 设备触发的异步事件,而异常是 CPUCPUCPU 执行指令时发生的同步事件。本文主要来说明 IOIOIO 外设触发的中断,总的来说一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号。本文用 xv6xv6xv6 的实例来讲解多处理器下的中断机制,从头至尾的来看一看,中断经历的三个过程。其

2021-09-21 22:01:13 1748

原创 系统调用如何实现?

公号:Rand_csSYSCALL系统调用就是调用操作系统提供的一系列内核功能函数,因为内核总是对用户程序持不信任的态度,一些核心功能不能直接交由用户程序来实现执行。用户程序只能发出请求,然后内核调用相应的内核函数来帮着处理,将结果返回给应用程序。如此才能保证系统的稳定和安全。本文采用 xv6xv6xv6 的实例来讲解系统调用具体是如何实现的。系统调用是给用户态下的程序使用的,但是用户程序并不直接使用系统调用,而是系统调用在用户态下的接口。这个用户接口就是操作系统提供的系统调用 APIAPIAPI.

2021-09-21 21:51:34 777

原创 xv6 文件系统

文件系统公众号:Rand_cs本文继续来看 xv6xv6xv6 的文件系统部分,xv6xv6xv6 将文件系统的设计分为 7 层:磁盘→缓存区→日志→inode→目录→路径→文件系统调用磁盘 \rightarrow 缓存区 \rightarrow 日志 \rightarrow inode \rightarrow 目录 \rightarrow 路径 \rightarrow 文件系统调用磁盘→缓存区→日志→inode→目录→路径→文件系统调用 ,磁盘、缓存区、日志三个部分在前文已经说了,本文接着讲述 i

2021-08-30 19:31:34 1084 1

原创 你知道键盘是如何工作的吗?(xv6键盘驱动程序)

键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。

2021-08-30 19:21:04 436

原创 如何实现一个简单的文件系统

日志公众号:Rand_cs本文来聊聊文件系统中的日志系统,来看一个简单的日志系统是如何实现的。本文是接着前面的 xv6 系列,用到的一些前导知识不再说明,没看的可以先看一下。文件系统设计中通常要考虑错误恢复,这是因为文件系统会涉及对磁盘的多次写操作,如果在写的过程中系统崩溃了,就会使得磁盘上的文件系统处于不一致的错误状态。日志就是设计来解决因为系统崩溃导致的错误问题,本文就 xv6xv6xv6 来讲解怎么实现一个简单的日志系统。在 xv6xv6xv6 的日志系统中,文件操作方面的系统调用并不会直

2021-08-30 19:17:47 536

原创 键盘是如何工作的?

键盘驱动程序公众号:Rand_cs键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的。关于驱动程序前文磁盘那一篇说过了,它就是硬件物理接口的封装,所以了解键盘驱动程序,同样的还是先来了解键盘的一些物理接口。与键盘相关的芯片有两个,一个是键盘编码器 i8048,另一个是键盘控制器 i8042,分别来看。键盘编码器键盘编码器位于键盘,它的作用主要是监测键的按下和弹起,然后将两种状态编码,发送给键盘控制器。

2021-08-22 10:49:06 831

原创 xv6 的锁机制

LOCK公众号:Rand_cs锁,大家应该很熟悉了,用来避免竞争,实现同步。本文以 xv6 为例来讲解锁本身是怎么实现的,废话不多说,先来看一些需要了解的概念:一些概念公共资源:顾名思义就是被多个任务共享的资源,可以是公共内存,也可以是公共文件等等临界区: 要访问使用公共资源,肯定得通过一些代码指令去访问,这些代码指令就是临界区并发:单个 CPU 上交替处理多个任务,宏观上看就像是同时进行的一样,但微观上看任意时刻还是只有一个任务在进行。并行:多个处理器同时处理多个任务,能够做到真正意义上

2021-08-16 16:45:49 829

原创 带你了解磁盘驱动程序(xv6)

磁盘驱动程序本文来聊聊磁盘驱动程序,驱动程序是硬件的接口,操作系统通过这个接口来控制硬件工作,所以驱动程序就好比是硬件和系统之间的桥梁。这是百科上给出的解释,可能看起来还是云里雾里,我来做做注解。每个硬件都有自己的 “CPU”(控制器),寄存器,有着自己的一套执行逻辑。对外提供了一些列的物理接口,就是那一个个端口(寄存器),可以通过设置这些端口来控制硬件工作。要知道直接通过物理接口来控制硬件工作是很繁复的,所以将这些接口给封装起来便于使用,这就是驱动程序。所以操作系统通过驱动程序提供的接口来间接控制硬

2021-08-16 16:43:09 2726

原创 多处理器下的调度

Rand_cs调度是操作系统里面一个很重要的概念,进程中有调度,页面置换有调度,磁盘访问也有调度,本文讲述的是进程之间的调度,以及多处理器之间的调度策略。废话不多时直接来看,先来简单了解各种概念:各种概念简析各种时间到达时间:进程到达等待队列的时间开始时间:CPU 开始执行进程的时间完成时间:进程执行完成的时间服务时间:进程在 CPU 上总共执行的时间等待时间/响应时间:进程在队列中等待的时间,即开始时间−到达时间开始时间-到达时间开始时间−到达时间周转时间:进程被提交给系统到完成的这.

2021-08-09 21:12:57 680

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除