首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核文件的数据结构和原子操作

内核为所有打开文件维持一张文件表。包含了文件状态(读,写等),文件偏移量,指向i节点的指针。 每打开一个文件,都有一个i节点,它包含了文件类型和对该文件进行各种操作函数的指针。 ?...同一进程打开不同文件内核数据结构 这个图本来描述的是UNIX操作系统的,在Linux中没有这个V节点,而是采用了一个与文件系统相关的i节点和一个与文件系统无关的i节点。...操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。常见的文件系统有FAT,NTFS,ext2,ext3,ext4等。Linux的VFS处理了不同文件系统之间的统一管理。 ?...这时候,内核切换进程到B,B执行写入操作,写入了200字节的内容。这个时候,A进程写入的内容就被B进程写入的内容给覆盖掉了。并且文件长度变为200。...Unix操作系统提供了一个原子操作的方法,那就是打开文件的时候设置O_APPEND标志。这样做可以使得内核在每次写操作之前将进程的当前偏移量设置到该文件的末尾。

1.4K50
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录中 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置中 , #...代表注释 , CONFIG_IRQ_WORK=y 等号右侧的 y 表示同意该操作 ; .config 文件内容示例 : 配置文件很多 , 这里只贴出一部分 ; # # Automatically generated...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;

12K40

Linux内核29-原子操作

假设有两个不同的内核控制路径运行在两个CPU上,同时尝试RMW操作相同的内存区域且执行的是非原子操作。...防止RMW操作造成的竞态条件最简单的方式就是保证这样的指令操作是原子的,也就是这个指令的执行过程不能被打断。这就是原子操作的由来。...所以,基于上一点,RMW操作汇编指令前缀lock(0xf0)就称为原子操作指令。当控制单元检测到这个前缀,它会锁住内存总线,直到指令完成。...3 Linux原子操作 但是,我们在编写完C代码后,编译器不能保证给你使用原子指令进行替代。因此,Linux内核提供了atomic_t类型变量并提供了相关的操作函数和宏(如表5-4所示)。...表5-4 Linux中的原子操作 返回 *v

82610

Linux文件操作

存放内核和系统启动时所需的文件/dev ~ 存放这台计算机中所有的设备/usr ~ 存放应用程序和与命令相关的系统数据/var ~ 存放系统运行过程中经常变化的文件/srv ~ 存放所有与服务器相关的程序...确定文件类型的命令file,与微软系统不同的是,在Linux或UNIX系统中文件的扩展名(即后缀)并不代表文件的类型,扩展名与文件的类型没有关系。在操作一个文件之前必须先确定其文件类型。...其中,n%是已经显示文件内容的百分比,此时可以使用键盘上的键进行操作。在Linux上有一个与more类似的命令less,less更方便、灵活,但不少Linux上没有。   ...对i节点的操作:cp命令如何操作inodes:复制文件命令发出时系统要进行如下操作:1.找到一个空闲i节点记录、把新增文件元数据写入该空闲i节点并将这个新记录放入inode表中  2.还要产生一个目录记录...rm命令对i节点的操作:删除文件命令发出时系统进行如下操作:1.系统首先会将该文件的连接数减1,之后该文件的连接数如果小于1,系统会释放其1节点以便重用。

3.9K60

linux文件操作

a等 2.多个短选项-->复合选项:-lh,-lA等 3.长选项:--help 参数:命令的操作对象...,如目录或文件 处理目录的常用的命令 ls:列出目录及文件名 cd:切换目录 pwd:显示目前的目录 mkdir:创建一个新的目录 cp:复制文件或目录 rm:删除文件或目录 mv:移动文件与目录或修改文件与目录的名称.../2.txt linux文件内容查看 cat :显示文件的所有内容(从第一行开始显示) cat 文件名 tac:从最后一行开始显示,可以看成tac是cat的倒着写 tac 文件名 nl :...显示的时候,输出行号 nt 文件名 more : 一页一页的显示文件内容 more 文件名 less:与more类似,但他可以翻页 less文件名 head只看头几行 head...-n 文件 -n表示显示几行 tail只看后面几行 tail -n 文件 -n表示显示几行 新建文件 格式 : touch [选项] 文件 也可以修改文件的时间属性 touch

3.2K10

Linux文件操作

Linux,命名文件通常使用下面的字符: 小写字母,比如a, b, c … 大写字母,比如A, B, C … 数字,比如0, 1, 2 … 连字符-,不可放在文件名开头。 下划线_。 点.。...移动文件、重命名文件 mv 与目录操作非常类似,mv命令可以移动或者重命名文件。...如果已有文件和目标文件在同一个目录中,则为重命名操作: $ mv gamelist.txt my_gamelist.txt $ ls *gamelist.txt my_gamelist.txt 删除文件...比如下面将快速且安静的删除bk/目录: $ ls -d bk bk $ rm -rf bk $ ls -d bk ls: cannot access 'bk': No such file or directory 注意:Linux...-v选项:操作过程中显示文件提示。 -f选项:使用档名,其后不可加其他选项。 bk.tar:目标文件名。 my_bk/:操作文件名。

3.1K51

Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

文章目录 一、操作系统需要满足的要素 二、宏内核 三、微内核 四、Linux 内核动态加载机制 一、操作系统需要满足的要素 ---- 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要..., 线程是独立运行 , 独立调度的最基本单位 ; 二、宏内核 ---- 宏内核 : 内核代码 编译成 二进制文件 , 内核 运行在 一个 大内核 地址空间 中 , 可以 直接 访问 , 调用 内核代码...- 微内核 : 将 操作系统 拆分成 多个 独立功能模块 , 这些 独立功能模块 之间通过 " 消息 " 进行通信 , 微内核 效率低 ; 下图中 , 进程 , 文件系统 , 设备驱动 , 与 微内核...; 四、Linux 内核动态加载机制 ---- Linux 内核模块动态加载 : Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ; Linux 内核的 核心实现 , 设备驱动实现..., 可以 编译成一个独立模块 , 这些独立模块可以被编译成 独立的目标文件 , 可以在运行时 , 动态 加载 / 卸载 内核模块 ; 开发简单 : Linux 内核模块引入 , 带来了很多便利 , 很多内核驱动

4.1K30

Linux内核编程--文件描述符

Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件的代码,需要借助文件描述符。...文件的索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符就是内核为了高效管理已被打开的文件所创建的索引值。 文件描述符指向内核为每一个进程维护的打开文件记录表。当要处理文件时,将文件对应的文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间的映射关系: Linux中查看文件描述符的指令:lsof(list open files) lsof可以打开的文件: 普通文件 目录 网络文件系统的文件 字符或设备文件...标准提供的默认文件描述符: 操作系统提供的四种常见的I/O文件操作函数 (fd表示“文件描述符”): fd = open(pathname, flags, mode) numread = read(

2.8K10

Linux 内核Linux 操作系统结构 ( Linux 内核操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

文章目录 一、Linux 内核操作系统中的层级 二、Linux 内核子系统 三、Linux 内核子系统之间的关系 一、Linux 内核操作系统中的层级 ---- Linux 内核 所在层级 : 整个计算机系统中..., 由下到上介绍 : 计算机硬件 处于最底层 ; 计算机硬件 上面一层是 Linux 内核 , 计算机的所有硬件操作都要经过内核 , 内核是 抽象资源操作 与 具体硬件操作细节 之间的接口 ; Linux...; 最上层是 应用程序 , 应用程序 是 运行于操作系统上的 软件集合 ; 如下图所示 : 二、Linux 内核子系统 ---- Linux 内核的 5 个子系统 : 进程调度 ( Process...( Virtual File System ) : 为所有类型的 设备/逻辑文件系统 ( EXT2/3/4 , NTFS ) 提供统一接口 ; 该子系统可以分为 设备驱动程序 和 逻辑文件系统 ; 网络管理...内核子系统之间的关系 ---- 进程调度 依赖于 内存管理 模块 , 内存管理 依赖于 虚拟文件系统 和 进程调度 两个模块 , 虚拟文件系统 依赖于 内存管理 , 内存调度 , 网络管理 模块 ,

3.4K20

linux内核源码生成tags文件

一般来说,如果我们想要研究一个c/c++项目的源码,我们首先要做的是为该项目生成tags文件linux内核是c写的,所以它也不例外。.../Comparison-with-Similar-Tools 根据我的测试,gtags是最好用的,其官方地址是: https://www.gnu.org/software/global/ 由于linux...内核的项目结构非常庞大,如果我们在项目的根目录直接为所有文件生成tags的话,会包含很多不必要的文件,比如我们只想要x86平台的相关实现,但结果却包含了各种其他平台的逻辑。...那怎么办呢,其实linux的Makefile里已经帮我们写好了如何生成各种tags,看下面的命令: $ make help # 省略其他 tags/TAGS - Generate tags...在生成tags文件后,我们就可以在各种编辑器里使用了,下面是emacs编辑器使用gtags的效果图: ? 还不错吧。

4.3K20

Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

文章目录 一、查看 Linux 操作系统位数 二、查看 Linux 操作系统软硬件信息 一、查看 Linux 操作系统位数 ---- 在 64 位的 Linux 中 , 使用 48 位 表示 "...虚拟地址空间 " ; 使用 45 位 表示 " 物理地址空间 " ; 执行 getconf LONG_BIT 命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;...得到结果 64 , 说明该系统是 64 位 Ubuntu Linux 操作系统 ; 二、查看 Linux 操作系统软硬件信息 ---- 执行 cat /proc/cpuinfo 命令 , 可以查看..." Linux 内核位数 “ 和 ” 系统的软硬件信息 " ; 输出内容解析 : vendor_id : GenuineIntel CPU 制造商 GenuineIntel cpu family :...内核启动时测量的 CPU 速度 clflush size : 64 每次刷新的缓存大小 cache_alignment : 64 缓存地址对齐单位 address sizes : 42 bits physical

31.9K20

Linux系统(文件操作

linux有三种文件类型,普通文件,目录,设备文件 查看文件 使用命令ls获取ll,查看文件列表,参数:-l(列表形式),-a(展示隐藏文件) 使用元字符* ?...,查看匹配的文件列表,例如:ll a*(展示以a开头的文件) 使用cat命令,查看文件内容,参数:-b显示行号,文件名 使用wc命令,统计当前文件的行数、单词数、字符数,参数:文件名 使用命令grep,...编辑文件 使用命令vi,创建和编辑文件,参数:文件名 进入文件编辑界面后,使用i键进行输入 使用esc键退出编辑模式,使用命令:wq,保存文件 使用esc键退出编辑模式,使用命令:q!...,如果修改了文件,不保存退出 使用esc键退出编辑模式,使用命令:q!,不保存退出,如果修改了文件,报下面这个错误 ?...移动文件 使用命令cp,复制文件,参数:文件名,新文件名 使用命令mv,移动文件,参数:文件名,新文件名 删除文件 使用命令rm,删除文件,参数:-r(递归删除目录) -f(不提示信息),文件

2.5K30

Linux文件操作指令

/home/wwwroot/sinozzz123/abc 3.使用mv命令剪切文件夹和文件 把/home/wwwroot/sinozzz123/photo/下的文件夹和文件剪切到/home/wwwroot.../sinozzz123/abc目录下 # mv /home/wwwroot/sinozzz123/photo/* /home/wwwroot/sinozzz123/abc 四、目录重命名 在linux下...,移动文件跟重命名都是同一个命令,mv(就是move的意思) 命令: mv 源文件名 目标文件名 1.把/home/wwwroot/sinozzz123/index.htm重命名为/home/wwwroot...sinozzz123目录重命名为/home/wwwroot/sinozzz456 # mv /home/wwwroot/sinozzz123 /home/wwwroot/sinozzz456 五、目录删除 linux...:使用这个rm -rf的时候一定要格外小心,linux没有回收站的 当然,rm还有更多的其他参数和用法,man rm就可以查看了 如果是在/home/wwwroot/目录下进行操作,则可以省去每个命令的

1.5K21

Linux编程--文件操作

所有执行I/O操作的SystemCall都是以文件描述符(File Describtion,简称fd)来代指打开的文件。它是一个非负小整数。...,后续如果对该文件做一系列操作(包括读写等)都需要在flags中声明操作,否则没有权限执行该操作。...参数与Umask配合设置文件权限 O_EXCL 如果已经置O_CREAT且文件存在,则强制open()失败 可以用来检测多个进程之间创建文件的原子操作 O_TRUNC 将文件的长度截为0 无论打开方式是...2.当lseek的位置比文件长度还要大的时候,就会出现文件空洞。某些操作系统中的文件空洞是会占用磁盘空间的,大部分的不会。...进程与文件表、i-node表的关系 上图画出了fd与对应的文件i-node之间的关系 多进程中的文件描述符可能指向同一个文件 同进程中的不同文件描述符可能指向同一个文件 多个不同偏移量的文件指针可能指向同一个文件

1.4K20

Linux学习-文件操作

Linux文件操作 常用的文件操作有移动文件到另一个文件夹、复制文件到另一个文件夹、文件重命名等。...cp (copy): 拷贝文件文件夹 (cp -r 拷贝文件夹时的参数,递归拷贝) # 列出当前目录下有的文件文件夹 ct@ehbio:~$ ls data # 新建一个文件夹 ct@ehbio:...~$ mkdir ehbio_project # 列出当前目录下有的文件文件夹, 及其子文件夹的内容 # data目录下有一个文件,ehbio_project目录下无文件 ct@ehbio:~$ ls...second.fa ct@ehbio:~/ehbio_project$ ls second.fa test.fa # 给文件多拷贝几次,无聊的操作,就是为了给rename提供发挥作用的机会 ct@...# 出现下面的错误,表示缺少目标路径或文件 ct@ehbio:~/ehbio_project$ cp ehbio.fa cp: 在" ehbio.fa" 后缺少了要操作的目标文件 Try 'cp

2.3K70

Linux文件IO操作

文件操作 在进行 Linux 文件操作之前,我们先简单了解一下 Linux 文件系统 Linux文件类型 Linux文件类型分为以下这几种: 符号 文件类型 - 普通文件 d 目录文件,d是directory...Linux是一个多用户登录的操作系统,所以文件权限跟用户相关。...user 文件所属组用户 group 其他用户 other u g o + 和 - 分别表示增加和去掉相应权限 简单的了解了Linux下的文件操作之后就开始进入代码编程阶段 Linux error...获取系统调用时的错误描述 Linux下的文件操作属于系统调用,Linux中系统调用的错误都存储于errno中,例如文件不存在,errno置 2,即宏定义ENOENT ,对应的错误描述为No such file.../main file len:4 linux下的标准输入/输出/错误 在文件IO操作里面一直讲到文件描述符,那我就不得不提一下linux中的标准输入/输出/错误 在C语言的学习过程中我们经常看到的stdin

2.7K30
领券