计算机体系结构
文章平均质量分 86
研究生方向,包括数据盘,CPU,内存,操作系统,芯片等等
妖怪喜欢风
追风
展开
-
剖析硬盘分区方案和NTFS文件系统结构
一个NTFS分区的数据结构如下VBR,存储跟引导相关的数据,大小为16个扇区File Area:一切皆为文件,包括元数据文件、常规文件、目录,一切的一切都是文件BBS,分区的第一个扇区是分区引导记录,是能否引导系统的关键,所以用分区的最后一个扇区备份第一个扇区,用于修复损坏的第一个扇区卷中第一个扇区存放和的数据偏移长度含义00-02H3跳转指令EB 52 9003-0AH8NTFS0B-0CH2每个扇区的字节总数,一般是5120DH1簇大小0E-0FH2保留扇区10-12H3。原创 2024-03-28 23:25:54 · 1280 阅读 · 0 评论 -
RAM/ROM/Flash区别
直接交换数据的内部存储器,也叫内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介, 当电源关闭时。协会所订立的、主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,固态硬盘的存储介质分为两种,一种是采用闪存()的性能,还不会断电丢失数据同时可以快速读取数据(为内部存储器,非内存和外存的关系,从本质上来说,闪存,它属于内存器件的一种,是一种不挥发性(用来存储和保存数据。分为很多种,常见的主要有。原创 2023-11-10 18:09:39 · 290 阅读 · 0 评论 -
OpenSBI知识结构整理
OpenSBI原创 2023-04-06 00:49:48 · 944 阅读 · 1 评论 -
Linux CFS调度器:原理和实现
集合,它的工作量应当由内核保持平衡,其组成类似于基数树,每个调度域被依次划分为一个或多个组,每个组待办调度域的一个。而某一调度实体由于某些原因导致进入阻塞或睡眠态,此时便会主动将时间片让出去,导致其。增加,此时便会形成不对等,这是不公平的,因此需要在下一进程切换时调度。是一样的,因此在这种情况下优先级较低的实际上是时钟有了更高的衰减率。子集,工作量的平衡总是在调度域的组之间来完成。当进程从一个CPU的运行队列中出来时,它的。为什么让优先级高的和优先级低的分配不同的。的周围,换句话来说就是,只比较相对大小。原创 2023-02-28 13:13:32 · 727 阅读 · 0 评论 -
SPDK技术浅析
命令本身描述了操作,还描述了主机内存中包含与命令关联的主机内存数据的位置,也就是我们要写入数据的位置,或将读取的数据放置到内存中的位置。实例都是一个些由大页内存组成的内存池,并且以特定的数据结构进行组织,其中支持的每个分配和使用的单元可以用于存储调用者的数据。不断轮询的方式,一旦查询到操作完成,则立马触发回调函数,给到上层用户程序,这样用户程序可以按需发送多个请求,以此提升性能。不是常规意义下的线程,实际是个逻辑上的概念,它没有具体的执行函数,其所有相关的操作均在。在针对网络存储解决方案中,当前主要有。原创 2023-01-12 06:43:26 · 1430 阅读 · 0 评论 -
并行多核体系结构基础知识
然而,在多节点情况下。每个节点拥有自己的处理器和内存,节点间互连形成一个共享存储系统,这时需要硬件支持来实现一种映像,即所有节点的内存构成一个可被所有处理器寻址的单一处理器。写直达每次写触发总线写从而占用总线带宽,在写回缓存机制下,如果同一缓存块中的一个或多个字或字节被多次写入,只需占用一次总线带宽来失效其他缓存拷贝即可,带宽会很快被耗尽。与缓存一致性协议分开,缓存一致性协议仅能解决对单个存储器块地址的访问之间如何排序的问题,而对于不同地址的访问并不是缓存一致性协议所要参考的问题。共享缓存和主存储器。原创 2022-11-24 12:22:01 · 992 阅读 · 0 评论 -
Linux内核虚拟化技术KVM总结以及Docker容器技术的浅析(以x86架构为例)
虚拟中断芯片是在用户空间实现的,但是中断芯片密集地参与了整个计算机系统的运转过程,因此,为了减少内核空间与用户空间之间的上下文切换带来的开销,后来,中断芯片的虚拟是在了内核空间。)技术是一种更加轻量级的操作系统虚拟化技术,它将应用程序,依赖包,库文件等允许依赖环境打包到标准化的镜像中,通过容器引擎提供进程隔离,资源可限制的允许环境,实现应用与。,在这种方式下,虚拟机的非特权级治疗直接运行在处理器上,当运行特权级指令时,将触发处理器异常,陷入VMM中,由。虚拟化,内存虚拟化,中断虚拟化和设备虚拟化。原创 2022-11-07 19:57:47 · 2444 阅读 · 0 评论 -
Intel® 64 and IA-32 Architectures Software Developer’s Manual 读后感
4834页,虽然有点多,但是还是希望大家能看完。前些时候训练了一段的的芯片构造,主要实现的是mips和risc-v指令集,后来自己有时间看了看arm,受益匪浅,不得不说,要想一个更好的os,底层离不开高效的硬件支持,所谓“软件不行,硬件出手”正是此道理。主要分为四层,第一册是基本架构,第二册是指令集参考,第三册上系统编程手册,第四册上MSR寄存器查阅手册。第一册讲述的偏重硬件架构,第三册偏重软件特性,2和4我在此不列出了,纯纯使用字典。原创 2022-11-03 19:23:02 · 838 阅读 · 0 评论 -
虚拟文件系统(无持久存储的文件系统),以proc和sysfs为例
对于现代操作系统,虚拟文件系统是一个几乎无处不见的功能,因此,要探究现代操作系统的运行机制,对其进行讨论是必然的。本文使用的是`Linux 2.6.x.x`,这是一个变革性的版本,无论是内存管理,进程管理,文件管理还是设备管理都出现了开天辟地的变化,因此,以这个版本进行探究是很有必要的。原创 2022-10-16 17:12:20 · 1769 阅读 · 0 评论 -
现代操作系统的内存管理原理:以Linux2.6.x.x为例
不谈老掉牙的内存管理方式了。本文使用的内核是版本。内存管理?内存管理!不管是在老版本的操作系统各个子系统中,亦或是现代版本操作系统中,都是极其复杂和庞大的。当然,万变不离其宗,但是,看源码可以让你找不到方向。本文在上一篇的基础上来解释,当然要把源码完完全全的列出来不太现实,大家对照自己的前置理解即可,如果有时间和精力去完完全全看懂源码才是最好!。动态链接算是把Glibc、vir addr和用到了极致!对照之前的Linux 0.11和0.99版本,2.6.x.x。原创 2022-10-16 02:01:32 · 606 阅读 · 0 评论 -
什么是虚拟地址空间?从架构视角来解释
引言:小白,虚无,飘渺,渐实,真实,进阶,深化,投入,高阶,系统,架构……操作系统学习之路道阻且长。为何要从源码的角度来探究?抽象层实在太过抽象!操作系统五大功能,可能学完一学期的课程也难以把它们联系起来,因此从源码角度来解剖,很有必要。本文操作系统以Linux为例此篇也主要是解惑文章的,毕竟之前觉得操作系统很多东西实在存在的莫名其妙,时至今日,仍有许多疑点。但是对于现代操作系统,特别是Linux,越来越佩服了。原创 2022-10-12 22:32:48 · 1343 阅读 · 0 评论 -
记录QEMU上模拟ARM运行环境(内核 2.6.30)
我们使用ramfs的方式来为内核提供根文件系统,内核默认的配置没有支持ramfs设备,我们需要添加对应的支持(CONFIG_BLK_DEV_RAM=y)此处有两种方法可以生成最小根文件系统,一种是使用虚拟内存文件系统,一种是直接新建物理节点(可见参考链接部分),下面 主要介绍使用虚拟内存文件系统。制作根文件系统镜像 根文件系统镜像就相当于一个硬盘,就是把上面rootfs根目录中的所有文件复制到这个硬盘中。把busybox-1.20.2中的文件复制到rootfs根目录下,主要是一些基本的命令。原创 2022-09-14 06:20:37 · 1170 阅读 · 2 评论 -
Linux 2.6.4.30 Arm Architecture源码深度剖析---基于《ARM Linux内核源码剖析》
以下均是如此,内存管理和文件目录架构均没有太大的变化,而市面上唯一找到的便属这本《ARM Linux内核源码剖析》了,在它的基础上,我在本篇对该版本的。内存类型:根据内存使用目的的不同,内存类型对是否使用缓存、是否使用写缓冲、是否共享、域等信息的定义了不同设置,通过。由于嵌入式系统具有的资源十分有限,为了提高这种环境下内核内存的负载率和执行效率,使用压缩后的内核二进制文件。是 编译内核指定的,且都是虚拟地址,因此,只有将这些虚拟地址变更为物理地址,才能访问具有处理器信息的。架构代码进行词词解析,对!原创 2022-09-08 00:05:26 · 1386 阅读 · 0 评论 -
Linux 0.11源码的内存管理和进程创建&&Linux0.99改进方法简述
`Linux`内核源码剖析,在前面的一篇文章中有对其整体框架大致说清楚了,所以我也没有太在意其内在细节,在看完xv6源码之后,我对0.11版本还是有一些执念,感觉有一些不兼容。果然,让我发现了一些端倪,后来在网上查资料,才知道现在`Linux`操作系统的内存管理基本都是在0.99版本之后进行改进的,原始的0.11版本背负了太多历史包袱,导致其繁杂冗余,但是也没办法,当初能写出该系统也是在资源有限的前提下的。......原创 2022-08-18 04:29:53 · 510 阅读 · 0 评论 -
RISC-V架构学习笔记
历史先行:`RISC-V`架构主要由美国加州大学伯克利分校的Krste Asanovic教授、Andrew Waterman和Yunsup Lee等开发人员于2010年发明,并且得到了计算机体系结构领袖的泰斗David Patterson的大力支持。基于对于先前架构的种种问题,`RISC-V`架构横空出世。2016年,`RISC-V`基金会正式成立开始运作,其是一个非营利性组织,负责维护标准的`RISC-V`指令集手册与架构文档,并推动`RISC-V`架构的发展。.........原创 2022-07-19 09:55:48 · 434 阅读 · 0 评论 -
编程中的程序编码问题
ASCII码表链接ASCII是美国标准,所以它不能良好满足其它国家的需要。ANSI编码表示英文字符时用一个字节,表示中文时用两个或四个字节。Unicode编码但是问题在于,原本可以用一个字节存储的英文字母在Unicode里面必须存两个字节,这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式呢?答案就是UTF-8!在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符原创 2022-06-07 18:49:49 · 323 阅读 · 1 评论 -
xv6多核系统进程调度流程及自旋锁的疑点
目录进程调度器在干吗?自旋锁的实现机制及其疑点xv6进程的睡眠和唤醒机制浅浅梳理一下进程切换的原理进程调度器在干吗?在main.c、proc.c和spinlock.c中初始化了进程描述符表和调度器// main.cint main(void) { // 初始化进程描述符表PCB pinit(); // 开始进程调度 mpmain();}static void mpmain(void) { scheduler(); // start running processes}原创 2022-05-07 18:42:35 · 743 阅读 · 0 评论 -
Linux内核源码的/arch和/sysdep目录下是什么&&Kconfig文件
目录/arch和/sysdep目录Kconfig作用/arch和/sysdep目录在Linux源码和glibc源码都看到一个类似的目录,在Linux源码中是/arch,在glibc中是/sysdep,这里面有很多汇编代码,仔细查看了才知道,这里面的是对相关处理器架构的各自的指令。如果大家对Linux深入感兴趣,推荐大家看一本书《计算机系统结构教程(张晨曦版)》,更好的了解处理器的架构和指令。下面是从网络上收集到的一些信息,权做参考,使用的源码是Linux5.17.5。Linux源码下载处原创 2022-05-05 17:36:34 · 1274 阅读 · 0 评论 -
GNU make文档个人解读(详略得当)
目录写Makefile规则分割长行翻看到最前面的一篇文章:比手写makefile好用一万倍CMake!,CMake无疑是一个很好的自动编译链接工具,但是从某种程度上来说,用了别人封装好的东西,就会失去很多主动性,被束缚住了,因此,对于原装的make的了解,是必要的,我一直坚信,懂底层方为上。如果在Windows环境下,如果你追求快速开发,可以跳过这篇文章,VS的内置编译环境和CMAKE和QMAKE诸如此类的应用封装的确实完整,我个人是不喜欢VS的,每次有问题看其源代码总是感觉怪怪的,可能它是P.J.Pl原创 2022-05-04 17:45:38 · 568 阅读 · 0 评论 -
verilator常用基础知识
目录预学习阶段verilator语法学习运行verilator官网的example预学习阶段verilator语法学习常用网站:OJ刷题网站HDL基础知识verilator官网定义一个模块module name(varible, ...); // 定义一个模块 // 模块逻辑endmodule // 模块结束输入标识符:input,输出标识符:outputmodule name( input a,b, output c,d);赋值语句assig原创 2022-05-02 12:56:16 · 2341 阅读 · 3 评论 -
报错解决方案参考:《xv6分析与实验》中关于qemu运行报错解决方法
在获取了xv6源码之后,且安装了qemusudo apt-get install qemu编译并运行qemu时make qemu# 编译通过# 运行报错:*** Error: Couldn't find a working QEMU executable.*** Is the directory containing the qemu binary in your PATH*** or have you tried setting the QEMU variable in conf/en原创 2022-04-23 12:13:34 · 3074 阅读 · 0 评论