简单实现了DragonOS的块设备驱动模型以及AHCI驱动程序

图解数据读写与Cache操作 高速缓存(Cache)主要是为了解决CPU运算速度与内存(Memory)读写速度不匹配的矛盾而存在, 是CPU与内存之间的临时存贮器,容量小,但是交换速度比内存快。 本文针对Cache的读写进行简单说明并通过示意图演示什么时候需要写回(flush)缓存,什么时候需要作废(Invalidate)缓存。 阅读详情

上周写好了DragonOS的AHCI驱动程序,能够通过DMA读写SATA硬盘,在这里简单记录一下。

源代码:https://github.com/fslongjin/DragonOS/tree/cc39911d4db00b9e3890f35ca46f1579e44d5be4/kernel/driver/disk


块设备驱动程序模型

块设备定义

(以下内容来自维基百科)

块设备是指与系统间用块的方式移动数据的设备。这些设备节点通常代表可寻址设备,如硬盘、CD-ROM和内存区域。块设备通常支持随机存取和寻址,并使用缓存器。操作系统为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或者写入数据的请求时,系统把数据中的每一个字符存储在适当的缓存中。当缓存被填满时,会采取适当的操作(把数据传走),而后系统清空缓存。

在DragonOS中,采用与Linux类似的块设备驱动程序模型。如下图所示:

块设备数据结构及操作

块设备驱动包含了以下数据结构:

名称功能说明
block_device_operation块设备的操作接口对外统一提供该接口
block_device_request_packet块设备请求包
block_device_request_queue块设备请求队列

AHCI驱动程序

AHCI驱动程序用于操作SATA硬盘设备。暂时只支持1个AHCI控制器。

初始化操作

其流程如下所示

  • 从pci总线获取AHCI控制器结构体,并在内存中映射ABAR
  • 为每个AHCI控制器创建ahci_device_t结构体
  • 映射第0个AHCI控制器的端口
  • 初始化请求队列

处理I/O请求

转载请注明来源:简单实现了DragonOS的块设备驱动模型以及AHCI驱动程序 | | 龙进的博客

Linux内核(4.17.10)配置项详解(x86) 64-bit kernel——支持64位 General setup——通用设置 Cross-compiler tool prefix——交叉编译工具前缀 Local version-append to kernel release——内核显示的版本信息,填入64字符以内的字符串,可用uname -a命令看到。 Automatically append version informatio... 阅读详情

相关推荐

Win7系统怎么安装ahci驱动?安装ahci驱动详细方法

AHCI驱动是判断新装的系统是否识别硬盘的关键,如果用户在BIOS开启了AHCI,就能够正常进入系统,但是如果系统并没有AHCI驱动,还是进不了系统。6、替换完毕后,先不要替换另一个,先重新启动,然后打开bios里的ahci,再重启进入系统,另一个会自动安装完毕的。5、然后找到你硬盘的目录,加载相应的sata驱动。3、双击右侧的“Start”,在“数值数据”框中,键入“0”,然后单击“确定”并关闭注册表;2、在3B20这个上面点右键,选“更新驱动”,然后选“浏览计算机以查找程序软件”;

shengyin714959的博客 1053

Linux AHCI驱动分析之块设备层

接上一篇博客Linux AHCI驱动分析之设备初始化 参考 ATA Disk在Linux中的驱动架构对比分析 ata驱动框架及scsi请求处理流程 ATA接口寄存器描述 从ATA层向设备发送TRIM命令 使用硬盘ATA命令读取磁盘 scsi底层设备注册——如何一步步注册到block层 Scsi命令队列转换为ata命令过程 scsi设备的请求处理函数(request_fn) 打开内核调试信息 定义ATA_DEBUG和ATA_VERBOSE_DEBUG, //include\linux\libata.h /

黑客三遍猪 4450

Windows XP系统下AHCI驱动安装指南

高级主机控制器接口(AHCI)是一种硬件规格,它允许串行 ATA(SATA)设备以原生指令队列(NCQ)执行,提供更高的性能和更先进的功能。AHCI的前身是Intel开发的串行ATA高级主控接口(Serial ATA Advanced Host Controller Interface),最初在2004年引入。AHCI是与传统IDE兼容的传输层接口,用于SATA接口硬盘驱动器。它支持热插拔功能,可以更好地管理和优化数据传输。

weixin_31459297的博客 2238

Linux AHCI驱动

一个AHCI HBA可支持最多32个sata port。

chen_xing_hai的博客 4127

糖果【贪心】

【问题描述】 有N(1≤N <100,000)N(1≤N~<100,000)N(1≤N <100,000)种不同类型的糖果,每种糖果数量无限多。第i种糖果每颗的价格是Pi(1≤Pi≤1018),有Ci(1≤Ci≤1018)P_i(1≤P_i≤10^{18}),有C_i (1≤C_i≤10^{18)}Pi​(1≤Pi​≤1018),有Ci​(1≤Ci​≤1018)头牛想吃这种糖果。 FarmerJohnFarmer JohnFarmerJohn拥有金钱BBB元(1≤B≤1

算法小猪的博客 796

ENVI新手避坑指南:手把手教你搞定遥感影像的坐标系转换(附ArcGIS对比)

本文详细解析ENVI与ArcGIS在遥感影像坐标系转换中的关键差异与实战技巧,特别针对新手常见问题提供避坑指南。从基础概念到高级操作,涵盖定义投影、UTM转换等核心步骤,并对比两种软件的处理精度与效率,帮助用户高效完成遥感影像处理任务。

weixin_42531925的博客 379

Linux AHCI驱动分析之设备初始化

基于Xilinx Zynq Petalinux2015.2.1,linux3.19内核 AHCI(sata)相比nvme是老技术,快淘汰了,进入公司的时候,差不多已经做完了,没啥新东西给你做了,丧失了掌握AHCI(sata)的机会,现在我对nvme的熟悉程度甚至比AHCI(sata)高,那老技术还要不要学呢,不学的话,偶尔用到的时候还是感觉被束缚。 初始化 //drivers\ata\ahci...

黑客三遍猪 6750

SMR实战指南:从GWAS数据到eQTL分析的完整流程

本文提供了基于汇总数据的孟德尔随机化(SMR)实战指南,详细解析了如何从GWAS汇总数据出发,整合eQTL数据,完成从数据准备、BESD格式转换到最终SMR与HEIDI分析的完整流程。文章重点阐述了核心操作步骤、常见避坑技巧与结果解读,旨在帮助遗传学研究者高效掌握这一分析基因表达与复杂性状潜在因果关系的强大工具。

weixin_29246195的博客 1070

Linux内核源码分析(强烈推荐收藏!)

Linux内核是由林纳斯·托瓦兹(Linus Torvalds)在1991年开始开发的。当时他为了得到一个可以运行UNIX操作系统的个人计算机,开始编写一个操作系统内核,并将其命名为Linux。随后,越来越多的开发者加入到项目中,共同完善和扩展Linux内核。如今,Linux已经成为最流行和广泛使用的开源操作系统内核之一,驱动着许多不同类型的设备和服务器。

嵌入式Linux内核的博客 3823

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 624

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 491

linux 系统调用实验

大部分实验过程参考:网易的唧唧歪歪 【一】、下载他用过的linux系统内核2.6.36 【二】、解压内核 将1中下载的文件解压缩, 在 /usr/src/目录下, 输入: tar -jxvf linux-2.6.36.tar.bz2 解压出的文件夹名为:linux-2.6.36 【三】、添加系统响应函数: 修改 /usr/src/linux-2.6.36/ke

dimhat的专栏 2158

国产PHY芯片YT8512H替代LAN8742A的实战指南(STM32F407平台)

本文详细介绍了在STM32F407平台上,使用国产PHY芯片YT8512H替代LAN8742A的完整实战过程。文章深入剖析了硬件设计中的关键信号连接差异(如CRS_DV与RXDV复用)、时钟布线要点,并提供了软件驱动修改、PHY配置及调试排错的系统指南,旨在帮助工程师高效完成国产化替代,规避常见陷阱。

defi6farmer的博客 859

linux ahci 内核模块,ubuntu16.04下内核模块解析

一.环境如下:1.1内核版本:jello@jello:~$ uname -aLinux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux1.2发行版:jello@jello:~$ lsb_release -aNo LSB modules are ava...

weixin_29641609的博客 483

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 645

用 ABAP 驾驭 OAuth 2.0:从 Authorization Code 到 SAML Bearer 的全栈落地指南

ABAP平台OAuth 2.0客户端开发实践 本文为SAP开发者详细解析ABAP平台内置OAuth 2.0客户端的使用方法,涵盖四种授权流的最佳实践: 授权流选择: Authorization Code:适用于用户交互场景 SAML 2.0 Bearer:适合已有SAML体系的企业 Client Credentials:系统间通信 Password Credentials:过渡方案(不推荐) 配置流程: 通过SE80定义Client Profile 使用SOAUTH2_CLIENT/OA2C_CONFIG配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 309

AHCI驱动下载与手动安装图解

天缘早前写过《AHCI模式的驱动下载、安装及蓝屏问题综合》一文,但是没有对具体安装过程进行过多描述,实际上里面还有好几个重点问题没说清楚,很多新手网友,按照该文章描述很难安装成功,天缘本文就来实际图解安装示范一 下,顺便补充说明几个注意点,如果您的Windows XP、Vista、Windows 7系统需要预安装或后安装SATA/RAID/AHCI驱动,相信本文对你有些帮助。 一、准备AHCI驱

wqsys的专栏 6531

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

开发DragonOS日志--开发屏幕管理器(scm)与文本显示框架(textui)

发现在执行video_refresh_daemon时,video_refresh_target->vaddr为0,但是这个已经在video_set_refresh_target()之后,而且未执行video_refresh_daemon之前video_refresh_target->vaddr也被修改为0xffff800009800000,不知为何在video_refresh_daemon时,video_refresh_target->vaddr却为0。()再添加断点,却发现不能在窗口输出打印语句并报错。

qq_51351880的博客 242

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

一个在关键路径上面隐藏了11个月的BUG:DragonOS进程切换查错

DragonOS是一个从0开始研发内核及用户态环境的,独立自主的,面向服务器领域的开源操作系统,提供Linux兼容性。GitHub - fslongjin/DragonOS: 一个64位的操作系统。加一行printk(“”);,代码就能正常运行读写几个无关的变量,代码就能跑了加一层函数调用,把某个函数wrap一下,代码就能运行10月份的时候,我和同学调试IDR的源代码,有个单元测试用例就是无法通过。并且,出错的位置总是不相同。将测试用例的数据规模减小之后,就不会报错。

龙进的博客 547

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

AHCI驱动中的cmd

这两天被AHCI控制器的驱动搞的焦头烂额,当然主要的问题其实不在软件,而是FPGA上的SATA物理层传输不够稳定,现在也没什么很好的办法。先写一下这两天看到的系统软件和AHCI控制器硬件交互的三个核心数据结构:cmd_slot / rx_fis / cmd_tbl 上面这张图是从AHCI规范里面摘出来的,AHCI规范里面定义了在Memory中要使用Command List...

小白变大白之路 808

linux硬盘识别过程

目录 1. 硬盘启动协议 2.SCSI总线扫描的方法 方法: 3. 内核打印信息 硬盘开机.内核函数跟踪打印信息 信息解读 硬盘热插拔.内核函数跟踪打印信息 信息解读 4. 硬盘识别过程 5. 硬盘识别过程代码调用 1. 硬盘启动协议 2.SCSI总线扫描的方法 SCSI总线扫描是通过协议特定或者芯片特定的方法探测出挂接在主机适配器后面的目标节点和逻辑单元,为它们...

神恰以泽_优快云 1万+

DragonOS:新一代开源操作系统,重新定义你的计算体验

DragonOS:新一代开源操作系统,重新定义你的计算体验 DragonOS项目地址:https://gitcode.com/gh_mirrors/dra/DragonOS DragonOS,由开发者构建并维护,是一款基于Linux内核的开源操作系统。它的目标是提供一个安全、高效且高度可定制的工作环境,以满足现代用户的多样化需求。 项目简介 DragonOS 并非只是对现有 Linux 发行版的...

gitblog_00053的博客 721

AHCI模式 Sata驱动下载、安装教程及蓝屏问题解决

AHCI是什么?如何开启AHCI模式?Sata AHCI驱动如何安装?Sata硬盘跟ahci模式有什么关系?如何设置bios开启AHCI?安装AHCI Sata驱动后电脑蓝屏怎么办?请看本文Sata AHCI相关问题总结。   一、AHCI是什么   AHCI,全称为Serial ATA Advanced Host Controller Interface(串行ATA高级主控接口),是

lniwn 1万+

如果win10 硬盘依然经常100%使用率 务必请安装achi驱动。

笔记本如果提示无法识别请安装制造商提供驱动,哪怕是win7.。不过x64对应x64. 如果是“标准SATA AHCI控制器",那么就需要更新这个驱动为intel的快速存储驱动了。 官网下载,这个地址: https://downloadcenter.intel.com/zh-cn//download/25165/Intel-Rapid-Storage-Technology-In

七秒时光 13万+

AHCI驱动安装工具:轻松启用AHCI模式,提升SSD性能

AHCI驱动安装工具:轻松启用AHCI模式,提升SSD性能 【下载地址】AHCI驱动安装工具 这款AHCI驱动安装工具专为提升SSD性能而设计,帮助用户在不重装系统的情况下轻松开启AHCI模式。AHCI模式能显著提升硬盘的读写速度和响应性能,避免长期使用SSD后性能衰退的问题。工具支持多种Windows系统,包括Wind...

gitblog_06777的博客 1068

值得关注,采用 Rust 自研内核的 DragonOS,具有 Linux 兼容性的操作系统。

DragonOS 提供优秀完善的架构设计,相比于同体量的其他系统,DragonOS 还支持虚拟化,并在设备模型、调度子系统等方面具有一定优势。:它能够运行Linux程序,实现了“一次编译,随处运行”的能力,这使得开发者可以更容易地迁移现有的Linux应用程序到DragonOS上。我是渔夫,现在在国内某某云程序员,业余独立开发者,探索副业,生活、技术、非科班转码经验等相关文章,欢迎关注,和渔夫一起成长。:采用 Rust 开发,逐步移除C代码,这将提高操作系统的安全性,减少内存安全问题,提高系统稳定性。

渔夫.AI 695
上一篇: 如何根据ACPI规范来获取I/O APIC控制寄存器的地址
下一篇: 在docker中安装phpmyadmin
灯珑
博客等级 码龄11年 2755粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值