从文件系统看系统架构

软考 系统架构设计师历年真题集萃(204)—— 2025年11月系统架构设计师真题7 阅读详情

  linux 实现了vfs ,几乎任何一个可以交换数据的存在(我这里用一个很大的词:存在)都可以有一个vfs 的代理,内存中就是一个inode 结构,如果 你要操作它,那么需要一个file 结构,而file 结构拥有file_operations 结构,该结构内存放有很多函数指针,指向一些具体的操作,这些 操作将来都要和inode 打交道,内核给用户一个统一的系统调用接口,然后这个系统调用的实现用来在file_operations 里分发操作,这个系统 调用实际上就是一个多路复用的设施,这就是linux 的vfs 的全部了。
    
但是像没想过扩展,比如一个分层的驱动,这在linux 下是完全可以实现的,实际上没有linux 实现不了的,前面说过,linux 都是小对象的组合,耦 合性低,扩展性炒好,很容易就可以组合成你需要的样子,比如usb 驱动,块设备驱动,包括网络协议栈都是分层的驱动,但是这些东西给人的感觉很松散, (linux 本身就是很松散,这才是linux ,使他的杀手锏)我从来不敢奢望从网络协议栈驱动来学习怎么写一个块设备过滤器驱动,网络协议栈上可以用成 熟的netfilter 框架,这个框架是自成体系的,但是块设备呢?我无语...
    
还是不说的罢,windows 的我就不说了,看看《天数夜读》吧,很详细。说说bsd 吧(当然我可以说,看看源码吧,都在眼前... 想不开了,寻短见了,看看这个世界吧,多美好... 真是那样世界就完蛋了)
     bsd
提供了一个从用户接口到最底层的通用直通式通道,和linux 一样,系统调用接口下面也是一个多路复用器,将请求分发到管道,套接字,文件... 不 同的是,bsd 将各个驱动之间的关系处理得相当好,它让这些模块间联系更加紧密但是不增加耦合性,也就是说,这个通道我方那儿了,谁都可以用,只要遵守约 定,这个和windows 有点像,应该说windows 和unix 有点像才对,linux 则相反,一切自己动手丰衣足食,linux 简直就是高手们的玩 具,菜鸟的地狱!还是代码里见吧,搞程序只会说文解字,没用。

struct vop_vector {

  struct vop_vector *vop_default;                 // 定义一个缺省的操作结构,注意类型也是vop_vector

  int (*vop_bypass)(struct vop_generic_args *ap);

  int (*vop_open)(struct vop_open_args);

  int (*vop_access)(struct vop_access_args);

  int (*vop_read)(struct vop_read_args);

  ...

};

struct vop_generic_args {     //bsd 将参数也给封装了,这个是参数的“ 基类”

  struct vnodeop_desc *a_desc;

  ...

};

struct vnodeop_desc {         // 操作描述结构

  char *vdesc_name;

  int  vdesc_flags;

  vop_bypass_t   *vdesc_call;   //bypass 中具体要调用的函数

  ...

};

struct vnodeop_desc vop_read_desc {

  "vop_read",

  0,

  (vop_bypass_t *)VOP_READ_AP,// 往下传递了吧,竟然调用的也是VOP_READ_AP

  ...

};

static __inline int VOP_READ(struct vnode *vp, struct uio *uio, int ioflag, struct uccred *cred)

{

   struct vop_read_args a;

   a.a_gen.a_desc = &vop_read_desc;

   a.a_vp = vp;

   a.a_uio = uio;

   a.a_ioflag = ioflag;

   a.a_cred = cred;

   return (VOP_READ_APV(vp->v_op,&a));

}

Int VOP_READ_APV(vop_vector *vop, struct vop_read_args *a)

{

   ...// 如果找不到就调用default 里面的例程

   while(vop != NULL && vop->vop_read == NULL && vop->vop_bypass == NULL)

       vop = vop->vop_default;

   if(vop->vop_read != NULL)

       rc = vop->vop_read(a);

   else

       rc = vop->vop_bypass(&a->a_gen);// 调用bypass ,给了程序存放钩子的地点

   ...

}

以 上代码一目了然,不用多说什么,一个系统调用发出以后,路经 是:pread->preadv->dofileread->fo_ops->fo_read->vn_read->VOP_READ->VOP_READ_APV->vop->vop_read->nfs->read
其中dofileread ,fo_ops->fo_read ,vop_read 是常用的几个多路复用的地点,实际上,有了参数封装,指针通信机制,任何地方都是多路复用点。bsd 实现了这套机制真是方便了开发驱动的人。
    
很早以前听有人说c 语言实现不了面向对象,看看linux 和unix 的代码吧,之后再重新审视面向对象的意义何在。从文件系统的实现里面我们可以看 出,bsd 为何要这么做,这是基于当时历史背景考虑的,因为在当时很多文件系统都不成熟,彼此的依赖性很大,所以很显然要彼此调用来完成自己没有实现的功 能,但是linux 就不一样了,时机成熟了。再者linux 根本没有一个统一的规划,因此才会出现那种很“ 野” 的局面,但是这些松散的小对象却奇迹般的超 越了一切。看来linux 没有必要学习bsd 或windows 的那一套,也不可能学会,那必须要很多人经过正规的过程讨论,最后开始在统一管理下进行设 计,开发,而linux 没有那种环境,因此,linux 就是linux ,bsd 就是bsd ,windows 就是windows ,学了别人它就不纯了,所以 评价一款操作系统的好坏不要一味的从一方面比如用户习惯啊等等去谈,而应该考虑到它自身的一切东西。
    
最好就是不要评价,要从比较当中学习各家的长处,而不要一味指责这个或那个。
    
注:我刚买了一本《代码之美》,感觉特棒,看了好几章,上文就是一篇读后感吧。

 

深入理解编程与系统架构:从基础到高级概念 本文深入探讨了编程与系统架构的多个高级概念,包括二维与三维绘图、套接字编程、文件处理、进程管理、内存管理以及性能优化等。通过详细分析各个主题,我们不仅能够理解这些概念的工作原理,还能学习如何在实际项目中应用这些知识。 阅读详情

相关推荐

Linux运维踩坑实录:手把手教你修复LVM中PV显示[unknown]的诡异问题

本文详细解析了Linux运维中LVM物理卷(PV)显示[unknown]的故障现象及修复方法。通过分析问题根源、提供标准修复流程和特殊场景处理方案,帮助运维人员快速解决VG容量异常、PV状态丢失等问题,并分享预防措施与最佳实践,确保LVM存储系统的稳定运行。

weixin_26869081的博客 348

ROS系统架构深度解析:从文件系统到计算图与社区生态

机器人操作系统(ROS)作为一种广泛应用于机器人开发的元操作系统框架,其核心在于提供结构化的通信机制,以实现复杂、分布式机器人软件系统的高效构建。ROS的工作原理基于其独特的计算图模型,通过节点、话题、服务和参数服务器等核心组件,实现了模块化进程间的松耦合通信。这种设计不仅提升了机器人系统的灵活性和可扩展性,也为传感器数据处理、运动控制、SLAM等关键机器人任务提供了基础支撑。在实际工程中,理解ROS的文件系统组织、构建工具(如catkin)以及节点间的通信机制,是进行机器人应用开发、调试和优化的前提。本文

weixin_30932215的博客 391

CAN基础知识

CAN基础知识

shouchen1的博客 9145

opt文件夹下没有ros_(二)ROS入门——2.ROS系统整体架构

ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉ROS的朋友起到一个抛砖引玉的作用。本章节主要内容:1.ROS是什么2.ROS系统整体架构3.在ubuntu16.04中安装ROS kinetic4.如何编写ROS的第一个程...

weixin_39608134的博客 162

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2115

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 608

SLAM导航机器人零基础实战系列:(二)ROS入门——2.ROS系统整体架构

SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉RO...

小虎哥哥爱学习-优快云 2782

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 631

Windows文件资源管理器与控制面板:从界面差异到系统架构的深度解析

在操作系统设计中,文件系统与系统配置管理是两个核心概念。文件系统负责数据的组织与存储,通过树状目录结构管理实体文件;而系统配置则通过注册表、配置文件等机制,控制硬件、软件的行为规则与交互逻辑。从技术原理上看,文件资源管理器作为Shell进程,基于文件系统API和Shell命名空间扩展,主要面向数据操作;控制面板则作为系统设置的集合视图,通过.cpl文件和MMC管理单元调用系统配置API,实现规则修改。这种架构分离确保了系统的安全性与模块化,但也带来了用户操作路径的割裂感。随着Windows设置应用的演进与P

weixin_30861797的博客 432

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1075

ROS知识(2)----理解ROS系统结构

学习新事物,方法高于技术本身,如果没有把握"BIG PICTURE"的话很难理解进去。通过以下几点进行理解ROS: ROS实际上不是操作系统,他只是一个通信的框架,一个代码管理的架构。任务的时序规划和CPU资源分配工作都是靠LINUX来实现,所以,ROS脱离不了LINUX,ROS依附在LINUX上。 机器人的核心平台是:多传感器和处理器之间的通信,处理器和执行器之间的通信,这些通信必须保持...

weixin_30593261的博客 339

手把手教你学 Simulink (1.3):探索Simulink模块库的奇妙世界

Simulink模块库按照功能分为多个类别,每个类别包含专门用于特定任务的模块。% 打开Simulink库浏览器% 或者以编程方式获取库列表disp('可用的库列表:');end常用模块(Simulink):最基础和最常用的模块信号处理模块(DSP System Toolbox):专业信号处理工具通信模块(Communications Toolbox):通信系统设计控制系统模块(Control System Toolbox):控制系统设计与分析% 创建自定义模块库。

QQ_778132974的博客 382

五万字 | 耗时一个月,整理出这份Hadoop吐血宝典

本文目录: 一、HDFS 二、MapReduce 三、Yarn 四、Hadoop3.x 新特性 五、Hadoop 大厂面试真题解析 Hadoop 涉及的知识点如下图所示,本文将逐一讲解: 本文档参考了关于 Hadoop 的官网及其他众多资料整理而成,为了整洁的排版及舒适的阅读,对于模糊不清晰的图片及黑白图片进行重新绘制成了高清彩图。 目前企业应用较多的是Hadoop2.x,所以本文是以Hadoop2.x为主,对于Hadoop3.x新增的内容会进行说明! 一、HDFS 1. HDFS概述 H

yuan_more的博客 1465

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ros基础学习(一)

注: 笔记是阅读《ros机器人程序设计》和ros wiki记录的,想了解的更详细可以阅读这些内容。 ROS Robot Operating System机器人操作系统缩写,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。 它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能 ROS安装 ros安装wiki 这里安装介绍的很...

路漫漫其修远兮 577

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《Introduction to Linux》——Linux Fundation (10~14/18章)

《1~9章链接》 目录 第十章 文件操作 1. 文件系统 2. 文件系统架构 3. 比较文件和文件类型 4. 数据备份和数据压缩 第十一章 文本编辑器 1. 基础文本编辑器 2. 高级文本编辑器vi和emacs 第十二章 用户环境 1. 账户,用户和用户组 2. 环境变量 3. 回顾历史命令 4. 文件权限 第十三章 文本操作 1. cat命令和echo命令 2....

大燕国平民 932

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

GFS系统架构

即使在这种情况下,数据也只是丢失而不是被错误地写入,应用程序可以接收到确定的异常信号,而不是错误的数据。任何对这些元数据的修改都会被详细记录在操作日志中,确保了数据变更的持久性和可审计性。,如数据块租约管理、孤立数据块的垃圾回收和数据块在服务器之间的迁移。不仅元数据的唯一持久记录,还充当了一个逻辑时钟,为系统内发生的事件提供了一个统一的时间戳序。,包括命名空间、访问控制信息、文件到数据块的映射以及数据块的当前存储位置。:如果客户端不仅能看到一致的状态,还知道修改后的具体内容,那么这个状态就被称为确定的。

数据飓风 1241

PX4-Autopilot代码解析(2)-系统架构

PX4自动驾驶仪是一款模块化无人机飞行控制系统,采用发布-订阅架构。核心组件包括通信机制(uORB内部通信和MAVLink外部通信)、独立功能模块(如导航器、控制器等)和参数系统。系统支持多平台运行,通过硬件抽象层实现跨平台兼容性,采用CMake构建系统。PX4的模块化设计使其适用于多种飞行器类型,具有良好的可扩展性和可配置性。

rainercool的专栏 951

如何读懂Web服务的系统架构图

Web服务的一个重要特点就是流量大、数据多,仅靠一台服务器肯定难以支撑大规模的服务。 所以我们经常会看到诸如以下的一些术语,教人好生不懂: *:系统架构、物理架构、Web服务基础设施 *:应用服务器 *:数据库服务器 *:索引服务器 *:反向代理服务器 *:缓存服务器 *:分布式、可扩展性 *:cpu负载、IO负载 如果你也不懂,那么本文对你来说就是一个很好的开始,关于web服务...

weixin_33726313的博客 1480

Windows内核之系统架构

一.架构概述 下图显示了Windows的基本结构。Windows采用双模式来保护操作系统本身,以避免被应用程序的错误所波及。操作系统核心运行在内核模式下,应用程序的代码运行在用户模式下。每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务时,应用程序通过硬件指令从用户模式切换到内核模式中;当系统内核完成了所请求的服务以后,控制权又回到了用户模式代码。 在Windows中,用户代码和内核代码有各自的运行环境,而且它们可以访问的内存空间也不相同。在32位系统中,内核代码可以访问当前进

全粘工程师 4879

一起自学SLAM算法:1.3 ROS系统架构

安装完ROS后,很多朋友应该迫不及待想立马开始写程序。由于ROS的架构比较复杂,为了后面写起代码来容易理解遇到的各种概念,这里先讨论一下ROS的系统架构,好让大家对ROS中的各种概念有一个全面性把控。按照官方的说法,可以从计算图、文件系统和开源社区分别来理解ROS架构[1]p28~30。ROS中可运行程序的基本单位叫节点(node),节点之间通过消息机制进行通信,这样就组成了一张网状图,也叫计算图,如图1-5所示。 图1-5 ROS的计算图结构节点是可运行程序,通常也叫进程。ROS功能包中创建的每个可执行

机器人研究猿-优快云 1877
上一篇: 路由表的结构与算法分析--trie插入
下一篇: 从著名的list_head看linux内核中OO
linuxcode_turing
博客等级 码龄17年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值