最先获得突破的是解决了下午的崩溃问题。其实原因很简单,我声明了一个unsigned int型指针,但是没有给它分配空间……

解决了这个问题之后就很简单了,调用定义在linux/dcache.c文件中的full_name_hash函数对文件名进行hash计算。这里发现了一个很久以来的问题:举例#include<linux/fs.h>,这个文件夹的根目录并不是通常所想的/usr/include,而应该是/usr/src/linux/include。to 猪头:这可能是你编译失败的原因。

之后通过ls观察了full_name_hash的输出结果,为32位unsigned int,与预想的一样(这是废话)。之后要检验输出的结果是否与dcache中hash表中的结果一样。结果发现这又是多此一举,这牵涉到了dcache的运行机制(花了近两个小时搞明白了,汗)。full_name_hash存放的结果位于name.hash中(name是一个qstr结构,qstr.name就是通常使用的unsigned char *name)。而dcache中hash表中使用的是struct list_head *d_hash(之后有个函数名也叫d_hash,不要混淆)。list_head就是我们数据结构中讲到的双向链表,不用管它。d_hash的获得过程就是使用函数d_hash将full_name_hash的结果(也就是name.hash)与其父节点一起再次进行hash运算(算法是否与full_name_hash一样我就没有深究了)。这么做的理由是为了允许在不同目录下能够存在同名目录(这样尽管full_name_hash的结果是一样的,但是parent值不同,所以不会冲突)。函数d_hash返回的是一个list_head的结构。list_head通过一个名叫list_entry的宏进行访问。(幸好有source insight啊,不然就累死了……)。全部过程在/usr/src/linux/fs/dcache.c中进行描述。

fist的optype对应的是file数据结构中file_operation结构所描述的一系列函数(其实只是个函数跳转表,因为这些操作绝大部分情况下都要交给FS完成的)。定义位于<linux/fs.h>

TO DO:解决mkdir的问题。原本是想改进算法使hash计算的结果能够直接在d_cache中进行查找。现在看来不大可能。还是按照原来的算法进行。接下来要做的是确定mkdir的用法以及相应的嵌入位置。顺利的话半天应该可以解决。

感想:第一次使用blog记录进度。感觉blog的好处除了信息共享之外还能象日记一样逼着你记下一天的进程。这样不会在荒废了一天之后随便找个理由蒙混过关然后第二天重复无所事事的生活。对我这种人而言很适合。

另外,TO 猪头:你什么时候才能加进来!

转载于:https://www.cnblogs.com/acesyp/archive/2005/04/24/144185.html

一天的学习成果:hash输出,dcache工作原理,include的home directory,fist optype的含义...相关推荐

  1. 模电学习笔记 (一) 晶体三极管工作原理

    大家好,我是一名从事硬件电路设计的小工程师一名.我决心从今天开始撰写自己的博客,一方面是为了对知识进行总结记录,加深理解与认识,另一方面希望大家可以多多批评指正,同时结识更多志同道合的朋友,一起学习进 ...

  2. Android SurfaceFlinger 学习之路(五)----VSync 工作原理

    原址 VSync信号的科普我们上一篇已经介绍过了,这篇我们要分析在SurfaceFlinger中的作用.(愈发觉得做笔记对自己记忆模块巩固有很多帮助,整理文章不一定是用来给别人看的,但一定是为加强自己 ...

  3. Mysql学习-第二章(CBO工作原理)

    MySQL 优化器是 CBO,即一种基于成本的优化器. 在关系型数据库中,B+ 树索引只是存储的一种数据结构,具体怎么使用,还要依赖数据库的优化器,优化器决定了具体某一索引的选择,也就是常说的执行计划 ...

  4. Mysql学习之order by的工作原理

    在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求.假设你要查询城市是"杭州"的所有人名字,并且按照姓名排序返回前 1000 个人的姓名.年龄. 查询语句为: ...

  5. 单片机学习--3D动画演示单片机工作原理

    视频下载:https://download.csdn.net/download/GGY1102/20502227 参考地址: https://mp.weixin.qq.com/s?t=pages/vi ...

  6. 学习小记 -- 线程池的工作原理

    线程池的五种状态: Running:能接受新任务,可以处理已经添加的任务. Shutdown:不接受新任务,可以处理已经添加的任务. Stop:不接受新任务,不处理已经添加的任务,并且中断正在处理的任 ...

  7. 网络工程师学习必备!路由器的工作原理,你真的懂了吗?【超详细|深度解析】

    1. 什么是路由? 在数据通信网络中,通常存在着多个不同IP网段,想要使这些网段进行通信,就需要通过三层路由设备实现跨网段转发功能.路由指导着报文转发的路径信息,通过路由可以确定转发IP报文的路径. ...

  8. 电路学习1——磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区

    目录 简介 铁耗 磁滞损耗 磁珠归类 应用 对比 参数 用途 电源滤波 低通滤波器的设计 符号 关于单点接地 老师的主页:唐老师讲电赛 视频地址:磁珠的工作原理,磁珠的分类,磁珠的模型,磁珠的参数磁珠 ...

  9. 区间比较_Simulink(离散PIDamp;区间检测模块)+AURIX功能安全板过流比较电路+电机结构应用与工作原理学习网站...

    1 Simulink Simulink-离散PID&区间检测模块 a.离散PID模块 离散PID模块中可以对PID类型以及相应的系数进行设置: PID模块可以选择三种不同的方式进行积分,包括前 ...

最新文章

  1. 【隔离】跨区消息穿透定义
  2. Python发送邮件以及对其封装
  3. wxWidgets:wxLogNull类用法
  4. VTK:网格之TableBasedClipDataSetWithPolyData2
  5. vscode常用快捷键大全
  6. 为什么最近python很火_最近python挺火的,也来凑凑热闹。
  7. PHP------继承、多态
  8. 三年期定期存款利率多少?
  9. C++ map的基本操作和使用
  10. 去重仅保留一条_重庆磁器口只是一条商业街?看过它的发展历史,你就不会这么想了...
  11. Mathtype启动失败与Microsoft公式编辑器Equation的问题处理案例
  12. 黑苹果 macos 教程
  13. 1843. 圆形牛棚
  14. 微信没有回车键怎么换行_怎么换行-回答 | 为什么苹果的微信没有换行键,想换行怎么办?...
  15. 什么相片可以两张弄成一张_ps怎么把两张图片合成一张
  16. win10或者win11如何将中文用户名更改成英文用户名文件几乎无损(适合终端显示的中文名)亲测可用(操作有风险运行需谨慎)
  17. steamlit安装
  18. SharePoint 集成PowerApps和Flow教程(二,第一个PowerApps程序)
  19. 【操作系统】I/O系统
  20. 基于RT_Thread连接中国移动onenet平台的RGB三色灯项目

热门文章

  1. javascript --- XMLHttp2级、CORS(跨域资源共享)
  2. es6 --- 解构赋值的简洁性
  3. Java Web Jsp
  4. PHP递归实现无限极分类
  5. 5 useMemouseCallback
  6. 程序员的国庆节如何安排,你想好了吗?
  7. (三)Maven仓库介绍与本地仓库配置
  8. HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓
  9. NO.2_python_scrapy_反爬虫(随机请求头IP代理)取消链接去重
  10. 32位md5解密_冰蝎特征检测及报文解密