linux文件系统

打开一个文件操作系统做了什么?

情到浓时终转凉″ 提交于 2020-03-10 15:28:00
当我们打开一个文件时,主要涉及了进程,文件描述符,文件描述表,打开文件表,目录项,索引表之间的联系。 今天主要围绕这几个图来说 第一进程控制块PCB与文件描述符的关系 在进程控制块维护一个指向files-structure的结构体(可以看作是一个指向file结构体的指针数组 *file[n]),而所谓的文件描述符就是这个表的索引(就是数组的下标),表中存储的是一个指针(数组的类型),指向files结构体。 file结构体—文件控制块 struct file { union { struct llist_node fu_llist; struct rcu_head fu_rcuhead; } f_u; struct path f_path; #define f_dentry f_path.dentry struct inode *f_inode; /* cached value */ const struct file_operations *f_op; /* * Protects f_ep_links, f_flags. * Must not be taken from IRQ context. */ spinlock_t f_lock; atomic_long_t f_count; unsigned int f_flags; fmode_t f_mode; struct

Linux-proc文件系统介绍

时光怂恿深爱的人放手 提交于 2020-03-10 03:24:03
1、操作系统级别的调试 (1)、简单程序单步调试 (2)、复杂程序printf打印信息调试 (3)、框架体系日志记录信息调试 (4)、内核调试的困境 2、proc虚拟文件系统的工作原理 (1)、Linux内核是一个非常庞大、复杂的一个单独的程序,对于这样的一个程序来说,调试是非常的复杂的。 (2)、像kernel这样庞大的项目,给里边添加/更改一个功能是非常麻烦的,因为你这个添加的新功能可能会影响其他已经有的功能。 (3)、早期内核版本中尽管调试很麻烦,但是高手们还可以凭借自己超凡脱俗的能力去驾驭。但是到了2.4左右的版本的时候,这个难度就非常大了。 (4)、为了降低内核调试和学习的难度,内核开发者们在内核中添加了一些属性专门用于调试内核,proc文件系统就是一个尝试。 (5)、proc文件系统的思路就是:在内核中构建一个虚拟文件系统/proc,内核运行时将内核中一些关键的数据结构以文件的方式呈现在/proc目录中的一些特定文件中,这样相当于将不可见的内核中的数据结构以可视化的方式呈现给内核的开发者。 (6)、proc文件系统给了开发者一种调试内核的方法:我们通过实时的观察/proc/xxx文件,来观看内核中特定数据结构的值,在我们添加一个新功能的前后来对比,就可以知道这个新功能产生的影响对不对了。 (7)、proc目录下的文件大小都是0,因为这些文件本身并不存在于硬盘中

proc - 进程信息伪文件系统

邮差的信 提交于 2020-03-10 03:23:30
描述 /proc 是一个伪文件系统, 被用作内核数据结构的接口, 而不仅仅是解释说明 /dev/kmem. /proc里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量. 下面对整个 /proc 目录作一个大略的介绍. [number] 在 /proc 目录里, 每个正在运行的进程都有一个以该进程 ID 命名的子目录, 其下包括如下的目录和伪文件. cmdline 该文件保存了进程的完整命令行. 如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文件里, 这时候对该文件的读操作将返回零个字符. 该文件以空字符 null 而不是换行符作为结束标志. cwd 一个符号连接, 指向进程当前的工作目录. 例如, 要找出进程 20 的 cwd, 你可以: cd /proc/20/cwd; /bin/pwd 请注意 pwd 命令通常是 shell 内置的, 在这样的情况下可能工作得不是很好. environ 该文件保存进程的环境变量, 各项之间以空字符分隔, 结尾也可能是一个空字符. 因此, 如果要输出进程 1 的环境变量, 你应该: (cat /proc/1/environ; echo) | tr ";\000"; ";\n"; (至于为什么想要这么做, 请参阅 lilo (8).) exe 也是一个符号连接, 指向被执行的二进制代码. 在 Linux

proc文件系统

大兔子大兔子 提交于 2020-03-10 03:22:37
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11521391.html proc文件系统 是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构,或者用来动态修改内核的配置。Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息。 来源: https://www.cnblogs.com/agilestyle/p/11521391.html

Linux之磁盘管理

天涯浪子 提交于 2020-03-09 19:39:40
一、Raid卡之初识 又叫磁盘冗余阵列,阵列卡。他的主要作用有三点 1、获取更高的容量 2、获取更高的性能 3、获取更强的安全性 raid卡按 支持的raid级别不同 和raid卡的 缓存容量 不同,分为基础raid卡和高级raid卡 左边是raid基础卡,右边是高级卡。 基础卡只支持raid0和raid1 高级卡支持0、1、3、5、10、11或者更多 常见的raid级别 raid0 主要是为了应对不做raid用不了的情况。 硬盘不做raid,识别不了硬盘。所以如果只有一块硬盘,就做个raid0吧。 安全性最低,其中一个硬盘坏掉了,所有数据都会报废。 用于安全性需求低的数据,不怕丢失的数据。优点就是读写快 raid1 只能有两块硬盘 算是个鸡肋,因为只能同时给两个硬盘做raid1。 raid5 最少需要3块硬盘,在写入之前有一个校验的过程。有一块硬盘用来做校验,用来保护数据的安全性,当其中一块硬盘坏了,就可以使用校验数据恢复丢失的数据。 可以在添加一块热位盘(RAID5 + spare),当坏了一块硬盘之后,可以启动热位盘来替换坏的硬盘。 三个有点都占一点,在并发量不高的时候,可以使用 raid10 读取速度和安全性都很高,但是很奢侈,并发量很大的时候可以使用 raid10的基本原理如下: 二、磁盘分区 磁盘分区表 所在位置:0磁头0磁道1扇区的秘密

Linux系统结构详解(转)

試著忘記壹切 提交于 2020-03-09 12:58:37
Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序 。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。 1. 内存管理 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”

【linux】文件系统

 ̄綄美尐妖づ 提交于 2020-03-09 10:38:02
磁盘基本概念(磁盘、分区、MBR、GPT) 2.1 Linux所有设备都被抽象为一个文件,保存在 /dev/ 目录下 2.2 磁盘按接口分为:(IDE、SATA、SAS、SCSI、USB) 2.2.1 IDE磁盘名称一般为:hd【a-z】,【a-z】代表第几块磁盘; 2.2.2 SATA磁盘、SAS硬盘、SCSI硬盘、USB磁盘名称一般为:sd【a-z】,【a-z】代表第几块磁盘; 3.1 将一个磁盘逻辑的分为几个区,每个区当做独立磁盘,以方便使用和管理 挂载操作(mount) mount /dev/sdb1 /mnt(要挂载的 设备 源(/dev/sdb1) 挂载目的 点(/mnt) ) -t 指定文件系统 类型 ,例如:-t ext3、-t ext4、-t vfat -o 指定 挂载选项 ,例如: -o ro,rw 以 只读 形式挂载,以 读写 形式挂载; 默认是rw -o async 代表所有操作 使用缓存 (内存):提高文件系统读写数据的效率; 默认为async使用缓存(内存); -o sync 代表所有操作直接写入磁盘:代表所有操作 不使用缓存 ,而是直接写入磁盘; 应用在对数据安全性比较高的场景 -o atime 代表每次访问文件时, 更新文件被访问的时间 , 默认为atime; atime=access time的缩写 -o noatime 代表每次访问文件时,

Linux 0.11 文件系统的实现机制

若如初见. 提交于 2020-03-09 00:29:46
#Linux 0.11 文件系统的实现机制 ##一、概述 Linux 0.11的文件系统与Minix 1.0文件系统类似,是一种索引式文件系统。对于Linux而言,一切都是文件。一般有普通文件,字符设备文件,块设备文件,符号链接,目录文件,有名管道等。这是由文件系统实现的,它把底层进行了抽象,提供了统一的访问接口,如open,read,write等系统调用。其实对于文件系统,每个设备都有一个唯一的识别标志,即设备号。设备号在Linux中是一个非常重要的概念,对于同一类设备,如两个硬盘,主设备号是一样的,但是次设备号是不同。因为同一类设备的驱动程序是类似的,但是我们要区别不同的硬盘分区,这样实现每个设备的特定驱动,然后传递次设备号就可以了。对于不同的硬盘分区,其上的文件系统不一定相同,而Linux并没有Windows下盘符的概念,Linux只有一个根文件系统,也就是只有一棵目录树,那么其他有文件系统的设备是怎么被访问的呢?这是通过挂载实现的,把设备挂载在根文件系统的某个目录下,这个目录即为挂载点,它也是这个设备的根目录。当我们不用该设备的时候,必须把它卸载掉。在现代许多新版本的Linux桌面系统中,已经实现了自动挂载的功能,如光盘、USB等,插入即识别。 Linux的挂载功能解决了访问多个设备的情形。Linux的挂载功能要求它必须能够识别多种文件系统,那么就要有多种设备驱动

白话 ramdisk

痴心易碎 提交于 2020-03-08 18:01:39
ramdisk 既是内存磁盘,就是利用物理内存的指定的容量,模仿磁盘的存储格式来存储文件,既然是模仿磁盘的存储格式来存储文件,那自然需要有磁盘的存储格式作为基础了。对于linux0.1x系统,支持的文件系统只有minix1.0,因此,要把指定的内存划分成可以存储文件,并能被minix1.0文件系统所能访问,就是按照minix1.0的格式来划分,存储了,亦即ramdisk也必须有引导块,超级块,逻辑块位图,I节点位图,I节点,逻辑块这些内容,而查找一个文件,也需要通过路径名,得到I节点号,再通过I节点号得到I节点,再通过I节点得到文件的存储在磁盘数据区(就是逻辑块)的内容,也就是说,内存磁盘就是一个磁盘,只不过是在内存中,并不需要在读取,或者写入时,先通过缓冲区,再对磁盘控制器发送命令,来达到读取数据的目的,而是直接就可以通过内存中内容,就能获得数据;同时,由于根文件系统的引导块是空的,所以再读取时,引导块的内容是不需要读到ramdisk中,因此会出现在读取根文件系统时时从超级块读起的现象。 由于linux0.1x使用的内存磁盘(ramdisk)不需要在操作的过程中写入数据,亦即ramdisk只再系统开始启动的时候,一次性的跟文件系统读到磁盘上,因此,它不需要格式化ramdisk,只需要一次性的把根文件系统的引导块,超级块等内容,一次性的读入

Linux 的性能调优的思路

删除回忆录丶 提交于 2020-03-06 17:39:59
原文: https://mp.weixin.qq.com/s/wjQhl5y1bmPGsOKY4CHuEw Linux操作系统是一个开源平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能。 因此,谈到性能问题,主要实现的是Linux操作系统和应用程序的最佳结合。 01性能问题综述 系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。 Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。 操作系统完成一个任务时,与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。 因此当Linux应用出现问题时,应当从应用程序、操作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在哪个部分,然后集中解决。 在应用程序、操作系统、服务器硬件、网络环境等方面,影响性能最大的是应用程序和操作系统两个方面,因为这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面只要出现问题,一般都能马上定位。 下面主要讲解操作系统方面的性能调优思路