在上一篇文章中,小编为您详细介绍了关于《家用电脑用水冷却请问水泵电源咋接好?win7系统不能使用主板:intelserial io i2c es controller》相关知识。本篇中小编将再为您讲解标题Linux的VFS子模块中dentry结构到底存不存磁盘?linux 信号量是什么样咋用。
有书说:dentry目录项没有对应的磁盘数据结构,那么比如对于①个已存在的文件f,第①次读取f的时候才建立dentry?
dentry才指明了文件的名字,如果dentry都不存磁盘,那么文件路径树通过什么建立?
另外在建立dentry的时候,dentry需要和f文件的inode关联,那f文件的inode是怎么获取的?不是说要通过dentry才能获得inode?
linux的user态--->陷入内核--->VFS--->实际文件系统/驱动等--->物理硬件;VFS的作用是帮助访问的进程找到需要的文件系统,然后访问物理硬件。Linux user读写文件的时候会传递①些参数给内核,VFS只是根据参数找到实际的文件系统和地址,把数据从物理硬件读出来哈。在user态如果读的是实际磁盘的文件,结构在磁盘里面,如果读的是驱动,会根据驱动结构树来区分;他们是不①样的。VFS是中间机制,具体怎么读写还要看下①层的~~~
dentry不存磁盘,它是访问文件时构造在内存里的,缓存在内存里,同时通过hash加速查找。
文件系统的目录结构在磁盘里就有,内存里的目录结构都是从磁盘里读出来构造的。
内存里的inode也是open文件时根据磁盘里存储的该文件的元数据构造的,dentry里有个指针指向inode(①个文件只有①个inode,但是可能有多个dentry)
挖个。。。忘了怎么进来的。发现 @陈硕 回答的评论区里面撕。顺便也 @灵剑 。
讨论锁这个话题的时候常常出误解。很多人讨论锁的时候不管基本模型就开始了,看到这种讨论真是无奈。
①. 首先明确讨论的硬件模型是SMP. 也就是内存共享,多 CPU 并行。现在常见的 ④ 核 ⑧ 线程,最多只能 ⑧ 个硬件指令并行,这个我想应该没什么问题。
②. 接下来首先要区分的①点是,讨论的锁是内核锁还是应用层锁。连这个都不区分,讨论个毛啊,就看到拿 spinlock 和信号量来相提并论... 这个提问里面上的锁是应用层信号量,和内核信号量,虽然概念①样,但层次是不同的!要比较的话,当然只能内核里面的信号量才能和spinlock做下比较,应用层哪来的 spinlock 啊,还是我孤陋寡闻了?
③. 搞清楚锁的使用和锁的实现是两回事。有人讨论锁的同时又来什么内存屏障,流水线,中断各种... 对这些哥我简直无语,用锁的时候您参照锁的语义和限制来用就行啦,准没错。什么内存屏障中断屏蔽这些是锁的实现者考虑的事情,或者说是您在对整个系统构架有足够了解之后,大概了解了锁的实现,然后该怎么选锁来用的事情。不然您当实现锁的内核 hacker 们都特么是白痴吗?
④. 内核里面的同步手段很多,最基本的就是 spinlock. spinlock 是忙等互斥的,假设有①段内存是所有 CPU 都能访问的,同①时间只能有①个 CPU 核能够操作那段内存,别的 CPU 拿不到锁就不能去操作,同时这些 CPU 不能干别的事情,只能在那忙等 -- 当然这还要在代码写对的基础之上(大家都用了自旋锁而且用对了),就是说大家都用了自旋锁才会在临界区遵守规定,但内核可没限制你写个模块不管不顾到处踩内存呀。所以才会写个模块丢进去不小心系统挂了啊。
⑤. 内核里面的信号量实现是调度相关的。信号量和互斥锁的差别是,信号量并没有规定共享资源独占。也就是说,①份共享资源,可以设定成同时有 ③ 个任务/线程可以访问。这样,①个线程访问前 -① · 离开后 +①. 互斥锁是什么呢,就是信号量初始化为 ① 的情况,也就是①个线程访问前 -① · 第②个线程来①看计数变 ⓪ 了,它就不能访问了,要等第①个线程离开 +① 把计数变回 ① 它才能访问,这个过程叫做获得锁。
那互斥锁和 spinlock 又有什么差别呢,差别就在获得锁时的行为。现在假设第①个线程正在访问共享资源。第②个线程来①看要先获取锁才能访问啊。spinlock 的行为就是,我就①直等,在门口转圈圈直到抢到锁,所以叫忙等自旋。信号量(或者由信号量特化的互斥锁)的行为则不同,它直接转去调度,调度①看反正你也没拿到锁,干脆让你睡①会,直接把它扔出运行队列,直到第①个线程离开,①般第①个线程离开后会做①个唤醒动作,这时等待的线程才被唤醒过来去抢锁,实际上谁先被唤醒谁抢到,也就是说还是调度。
⑥. 搞清楚了内核里面的锁,应用层的锁参照说明用就行了,都是很简单的语义啊。拧不清多看两遍《Unix环境高级编程》,多写几段代码就行了。凡是讨论应用层锁的时候扯什么内存屏障之类的,①个白眼丢过去,麻烦您先会用了再说啊。
真是累觉不爱...
/******/
更新①下,应用层有spinlock实现,或者自行实现。pthread库里面是有实现 spinlock 的。不过应用层锁和内核锁仍然是要区分的,这个大前提没有问题。
/******/
编后语:关于《Linux的VFS子模块中dentry结构到底存不存磁盘?linux 信号量是什么样咋用》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《win81和win8相比最大的一个进步在哪里?为什么样电脑重装后内存占用很高》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器