- 博客(36)
- 资源 (32)
- 收藏
- 关注
转载 磁盘寻址方式--CHS和LBA寻址方式
什么是CHS寻址很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的CSH 3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应CHS寻址方式。CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Secto...
2020-03-30 10:06:46 13448
转载 盘片、片面、磁头、扇区、磁道的关系
概述盘片(platter) 磁头(head) 磁道(track) 扇区(sector) 柱面(cylinder)盘片 片面 和 磁头硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。如下图...
2020-03-30 09:51:35 4786 1
转载 Linux 文件系统基础--内核结构体之 list & hlist & hlist_bl
Linux 内核中提供了链表的实现,这其中包括了双向链表和用于哈希表的 hash list(hlist)。双向链表的实现采用侵入式的方式,链表节点不保存任何数据内容,而是将链表结构作为具体数据结构的成员;hlist 虽然有 pprev 和 next 成员,但它并不是双向链表,因为 pprev 指向的是前一个节点的 next 指针。Linked List此种链表只需一种结构体,即:st...
2020-03-26 11:22:32 1017
原创 linux文件系统基础--内核常用的链表结构hlist_head list_head hlist_node
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用...
2020-03-26 11:08:22 1411
转载 linux文件系统基础--VFS中的file、dentry和inode--讲得非常透的一篇文章
毕业以来,我花了很多时间阅读内核的代码,深入Linux内核架构,深入理解Linux内核,Robert Love的Linux内核设计与实现,Linux的虚拟文件系统对应章节,也读了很多遍,每一次读,都有新的心得和体会。我觉得单纯流水账的读书,并不会有很好的效果,早起对着代码读,往往陷入细节,而不能体会为何如此设计。花了很多时间思考,也阅读了很多前辈的书籍博客,分享下我对VFS层几个关键数据结构的理解...
2020-03-26 00:52:11 8757 1
转载 linux文件系统基础--VFS统一文件模型中的4大核心数据结构
概念VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。架构VFS在整个Linux系统中的架构视图如下:Linu...
2020-03-25 14:47:29 2291
转载 linux文件系统基础--VFS的重要概念及其操作
一、概述Linux 文件系统是相当复杂的,本文只分析虚拟文件系统的实现,对具体的文件系统不涉及。即使是虚拟文件系统,要在一篇文章中讲清楚也是不可能的,况且我自己的理解也不够透彻。为什么选择 Linux 2.4.30?因为可以参考《Linux 源码情景分析》一书,减少学习难度。二、基本概念先介绍一些文件系统的基本概念:1、一块磁盘(块设备),首先要按照某种文件系统格式(如 NTFS、EXT...
2020-03-25 11:30:39 1083
转载 linux文件系统基础--mount的过程理解
讨论linuxVFS是个很沉重的话题, 个人觉得,从源码上分析确实不太明智,第一,看完分析完就忘,第二,太浪费时间,懂了后也无法应用在实际场合中,所以,理清脉络个人觉得对内核的学习是最重要的,理清实现的思路,之后在以后真的要应用时详细的分析代码细节,所以本文讨论VFS主要围绕实现机制,围绕以下几点来说明1.什么是VFS2.inode, dentry3.文件系统的注册,挂载4.如何实现不同文...
2020-03-25 11:11:44 1912
转载 linux文件系统基础--文件系统初始化过程2
加载initrd(上)一、目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd。 initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序。在linux初始化的初级阶段,它提供了一个基本的运行环境。当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd。 如果是嵌入式设备,...
2020-03-25 10:43:50 766
转载 linux文件系统基础--rootfs的挂载过程
一、目的本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘上的具体文件系统。...
2020-03-25 10:38:56 2218
转载 linux文件系统基础--根文件系统的理解以及制作过程
简单的来说,我认为根文件系统就是一种目录结构,那么根文件系统和普通的文件系统有什么区别呢?我认为根文件系统就是要包括Linux启动时所 必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个 挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件...
2020-03-25 09:58:14 196
转载 linux文件系统基础--文件系统与根文件系统
要不我们就统一简称为FS和RFS:文件系统:File System => FS;根文件系统:Root File System => RFS。 首先你考虑一点描述语句:根文件系统也是一种“文件系统”,可以认为是一种“特殊的”“文件系统”,为什么是叫“特殊的”呢?因为这种“根文件系统”承载着某些“特殊的功能”(其实“文件系统”相同的话,所具备的功能都是一样的),那就是“操作系统”可...
2020-03-25 09:55:07 211
转载 linux文件系统基础--根文件系统的原理
1、为什么需要根文件系统(1)init进程的应用程序在根文件系统上(2)根文件系统提供了根目录/(3)内核启动后的应用层配置(etc目录)在根文件系统上。几乎可以认为:发行版=内核+rootfs(4)shell命令程序在根文件系统上。譬如ls、cd等命令总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的she...
2020-03-25 09:41:06 197
转载 linux文件系统基础--文件系统发展历程
现代的ARM Linux开发者往往面对的是一块开发板,一个SOC,什么都看不到,让人往往难以理解电脑究竟是如何构成的……当我们面对“计算机”的时候,一定要时刻记得,你的“计算机”是台遵守存储程序原理的冯诺依曼机器——运算器,控制器(这两样合起来是CPU),存储器,输入设备,输出设备。你所面对的一切SOC也好单板电脑也好,都是高度集成在一起的冯诺依曼机现代的电脑虽然已经缩小了n多倍,性能强了...
2020-03-25 09:30:56 917
转载 linux文件系统基础--VFS、根文件系统rootfs和实际文件系统的关系
文件系统概念#文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。虚拟文件系统接口(VFS)是linux定义的一个文件系统的统一接口,这样各种类型的文件系统都采用一样的接口给用户 虚拟文件系统存储在RAM里的,没有实际的设...
2020-03-25 09:22:17 2784 4
转载 linux文件系统基础--linux启动时挂载根文件系统rootfs的过程
一直对linux启动时挂载根文件系统的过程存在着很多疑问,今天在水木精华区找到了有用的资料,摘录如下: 1。linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式: 1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount。...
2020-03-24 22:16:01 1133
转载 linux文件系统基础--一个数据块能存储多少个目录项或者一个目录下能创建多少个文件
新建目录也有大小我们知道,在linux中一个新建的目录也会占用一个block大小的空间。一般EXT3的block大小为4KB。我们新建一个目录,验证一下:在linux中,目录其实也是一种文件,只不过相对于普通文件,它比较特殊,它存储的是一些目录项(dirent),每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。。可以参考<Linux文件存储结构,包括目...
2020-03-24 22:12:05 1384
转载 linux文件系统基础--普通文件和目录文件的区别
文件权限一般可认为是0 123 456 789,一共十位:0:表示该文件的文件类型。Windows里面是使用了一种文件关联的技术,通过扩展名来关联相应的应用程序,使得双击某个文件,就能达到调用相应的应用程序来打开它的目的,这样简单快捷。然而对于用户来说,好处是方便,坏处是隐藏了一个实质性的东西:文件的真正的类型,与其扩展名实际上是毫无关联的。举例来说:一个纯粹的文本文件,我可以给它命名“我...
2020-03-24 21:55:05 1262
转载 linux文件系统基础--分区与目录
文件系统就是分区或磁盘上的所有文件的逻辑集合。文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。不同Linux发行版本之间的文件系统差别很少,主要表现在系统管理的特色工具以及软件包管理方式的不同,文件目录结构基本上都是一样的。文件系统有多种类型,如:ext2 : 早期linux中常用的文件系统; ...
2020-03-24 21:32:43 908
转载 linux文件系统基础--磁盘布局以及创建文件及目录的流程
一、物理磁盘到文件系统文件系统用来存储文件内容、文件属性、和目录。这些类型的数据如何存储在磁盘块上的呢?unix/linux使用了一个简单的方法。如图所示.它将磁盘块分为4个部分(上图有问题):0)引导扇区,是文件系统的第一个块,引导扇区一般是512字节,前面448字节存储xxx,后面64字节存储xxx(这个我有点忘记了);虽然它占据了512字节,但是文件系统的一个块一般都是102...
2020-03-24 21:27:21 1066
转载 linux文件系统基础知识--目录项dirent、inode和数据块
大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:目录项:包括文件名和inode节点号。 Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。 数据块:包含文件的具体内容。先说inode理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5K...
2020-03-24 21:00:16 1625 1
原创 Linux内核模块基础--内核模块
1. 内核简单模块的编写通过命令date可以获取当前系统时间,如下面示例。下面我们通过编写一个简单的内核模块直接获取当前系统时间。1.1模块源码编写在Linux内核源码中,定义了一个struct timeval结构体,结构体中有两个成员变量tv_sec,tv_usec,分别保存当前系统时间的秒和毫秒,time_t和suseconds_t类型变量在x86架构中,均为long型,变...
2020-03-24 00:58:36 4499 1
转载 Linux虚拟文件系统--文件路径名的解析(3)--普通文件名
对于一个文件路径的分量,如果其不为'.'和'..'则属于普通文件名,普通文件名的解析由do_lookup()函数来处理static int do_lookup(struct nameidata *nd, struct qstr *name, struct path *path){ struct vfsmount *mnt = nd->path.mnt;...
2020-03-23 10:51:45 303
转载 Linux文件系统基础之inode和dentry
inode(节点)和dentry(目录项)在VFS和实体的文件系统(ext2、ext3等)中都是比较重要的概念。首先看一下虚拟文件系统的标准定义:虚拟文件系统(英语:virtual file system,缩写为VFS),又称虚拟文件切换系统(virtual filesystem switch),是操作系统的文件系统虚拟层,在其下是实体的文件系统。虚拟文件系统的主要功用在于让上层的软件,能够用单一...
2020-03-23 09:42:31 1006
转载 深入linux内核架构--内存管理(非连续分配)
非连续页分配 对于内核来说,最好的情况当然是分配连续的物理内存,这样效率高,分配简单,但是这只是理想情况。当系统运行较长时间后,会产生大量碎片,导致内核内存中没有连续的大块内存,这在用户空间是个很简单的问题,因为用户空间进程设计为使用处理器的分页机制,这会降低效率且TLB占用额外内存。内核中也有同样的技术,内核分配其虚拟地址空间的一部分用于建立非连续页映射,也就是之前提到的vmallo及内核...
2020-03-12 11:14:54 517
转载 深入linux内核架构--内存管理(伙伴系统)
伙伴系统 伙伴系统承担内核初始完后的物理内存管理工作,负责管理各个zone中的物理内存分配,释放。其基本工作原理如下:把内存按照页划分成很多阶,最大阶为MAX_ORDER,一般设置为11,每个阶内存区的内存块数为2^n,我们称之为内存区。 当进程申请一段内存时,总是从适合大小的阶中分配指定内存区,比如当分配7k(4k * 2^1,7k离8k最近)内存的时候,会从第1阶分配对应的内存区。...
2020-03-12 11:11:35 1307
转载 深入linux内核架构--内存管理(简介)
前言 内存管理其实是一个很基本的概念,但是真正能把linux内存管理梳理清楚的人很少,也看过网上很多关于内存管理的文章,但是总感觉他们其实也是照搬的一些概念,都不是很系统,看起来冰山一角,似懂非懂。那么今天就系统的结合linux源码来记录一下内存管理,希望能形成一套完整体系,对Linux内存有一个完整的了解。(文章后续的很多内存数字举例都是基于4GB物理内存大小的系统)。 关于内存管理一...
2020-03-12 10:51:10 1975
转载 深入linux内核架构--虚拟文件系统VFS
在Linux中,“万物兼文件”,我们知道在linux下面有很多文件系统,如EXT/2/3/4,XFS等,为了很好的支持各种类型的文件系统,Linux抽象了一层虚拟文件系统层,用于更加灵活的适配各种具体的文件系统实现。其基本架构如下:虚拟文件系统架构可以看到所有的虚拟文件系统操作都必须在内核态执行,这是由于对于系统存储及外部设备的访问极其复杂,这部分的操作不能交给用户去操作,...
2020-03-12 10:48:34 828
转载 深入linux内核架构--虚拟文件系统VFS(mount及lookup)
上一篇文章对VFS做了一下简单介绍,基本理解到VFS中的基本数据结构为super_block,dentry,inode,address_space及file;其中super_block是文件系统初始化时建立起来了,其中存储着inode信息,文件系统类型,等等信息;dentry:管理着文件名filename 到 inode的映射;inode:管理着文件的元数据信息,主要包括对应的存储设备,在数...
2020-03-12 10:43:06 4199
原创 ROS中的消息到底长什么样子
ROS/Connection HeaderThe ROS connection header contains important metadata about a connection being established, including typing information and routing information. How it is exchanged depends on ...
2020-03-10 23:07:35 453
转载 typedef的用法--维基百科的说法
在C和C++程式語言中,typedef是一個關鍵字。它用來對一個資料類型取一個別名,目的是為了使原始碼更易於閱讀和理解。它通常用於簡化宣告複雜的類型組成的結構 ,但它也常常在各種長度的整數資料型別中看到,例如size_t和time_t。語法typedef的語法是:typedeftypedeclaration;創建Length作為int的別名:typedef int...
2020-03-10 11:12:28 470
转载 typedef和define的区别以及使用typedef定义某个函数类型
最近,在学习Linux信号量时,看到signal函数中typedef的一个用法,觉得很有意思。于是就拿出来说道说道。它定义了一个类型(类似int,可以声明具体的变量),名称为sighandler_t,它是一个函数指针(类似int指针int*,用于指向某类函数),它指向参数为int类型而返回值为void型的函数。它可以用来声明一个或多个函数指针。sig...
2020-03-10 10:56:22 370
转载 Linux根目录的文件系统是如何被挂载的--续
继上篇文章 Linux根目录的文件系统是如何被挂载的,我们继续分析。首先看下下面的方法:// init/do_mounts.cvoid __init prepare_namespace(void){ ... if (saved_root_name[0]) { root_device_name = saved_root_n...
2020-03-05 01:28:16 1566
转载 Linux根目录的文件系统是如何被挂载的
首先看下mnt_init方法:// fs/namespace.cvoid __init mnt_init(void){ ... init_rootfs(); init_mount_tree();}看下其init_rootfs方法:// init/do_mounts.cstatic struct file_system_type...
2020-03-05 01:20:20 1003
原创 波产生衍射的原因是什么
我们初高中学过波可以发生衍射,但是当时并没有讲原理,而是把衍射当波的特性。这几天偶然看到了有人讲量子的波动性,我就又想要了解清楚为啥波会衍射。为此查了一些资料,可以用惠更斯原理解释水波的衍射现象从波源发出的波经过同一传播时间到达的各点所组成的面,叫做波面(或波前)(以水波这个二维平面波为例,就是那些涟漪,也就是一圈圈的波纹,同一圈的水(分子)构成的弧面或者弧线,就是波面了).荷兰物理学家惠更斯经...
2020-03-04 15:52:09 8105
转载 一文带你了解操作系统
本文思维导图操作系统现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。然而,程序员不会直接和这些硬件打交道,而且每位程序员不可能会掌握所有计算机系统的细节,这样我们就不用再编写代码了,所以在硬件的基础之上,计算机安装了一层软件,这层软件能够通过响应用户输入的指令达到控制硬件的效果,从而满足用户需求,这种软件称之为 操作...
2020-03-03 19:35:21 1172
sensorPluginTest0916.zip
2020-09-16
数据库存储树结构ClosureTableCateogryStore-master.zip
2020-02-27
storage_ws_jin0906.tar.gz
2019-09-06
开源内存数据库的调研与分析.doc
2019-08-30
fastdb-arm.tar.gz
2019-08-23
ubuntu 16.04 opencv auto installation
2019-03-27
自然语言处理实践者指南Practitioner's guide to NLP part I
2019-01-15
Python code for Artificial Intelligence: Foundations of Computational Agents
2019-01-15
百页教程学机器学习the hundred page machine learning book pdf原版
2019-01-02
冰点下载器--百度文库豆丁网免费下载
2018-12-26
vcForPython27解决安装pycrypto报错vcvarsall.bat找不到问题
2018-06-01
手机app脱壳虚拟机镜像
2018-06-01
jd-gui1.4+dex2jar2.0+apkdb+apktool apk反编译套装
2018-05-31
win7 基于spring boot+elasticsearch+Redis+mysql+mybatis进行搜索引擎web开发--爬取IThome热评
2018-04-27
windows下redis管理工具treeNMS
2018-04-24
《C和指针》pdf高清版和《C陷阱和缺陷》以及源代码
2018-04-12
ROS的插件库pluginLIB机制讲解
2018-04-11
51CTO 机器人操作系统ROS精品课程PPT
2018-03-06
SSM框架——使用MyBatis Generator自动创建代码
2017-09-21
metronic 4.7.5 最完整版,共318M,文件中有链接
2017-09-06
quick4j IDEA进行javaweb开发的快速框架 maven+Spring+SpringMVC+shiro +myhatis
2017-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人