块设备

操作系统(八)

别等时光非礼了梦想. 提交于 2020-02-07 02:10:40
文件管理 文件存取权限 UNIX中的文件存取权限 第一级:对访问者的识别 对用户分类: 文件主(owner) 文件主的同组用户(group) 其它用户(other) 第二级:对操作权限的识别 读操作(r) 写操作(w) 执行操作(x) 不能执行任何操作(-) d 目录 c 字符设备 b 块设备 文件属性 rwxr-xr-x 用二进制表示 111101101 ,在UNIX中使用八进制,因此权限是 755 文件保密 实现文件保密采用的方法: (1)隐藏文件目录 (2)设置口令 (3)使用密码 磁盘调度算法 旋转调度算法 RAID技术 I/O设备管理 按设备的使用特性分类 (1)存储设备 (2)I/O(输入输出)设备 按设备共享属性分类 (1)独占设备 (2)共享设备 (3)虚拟设备 按设备的信息组织方式来分类 (1)块设备 (2)字符设备 I/O设备数据传输控制方式 (1)程序直接控制方式(忙–等待) (2)中断控制方式 - 处理突发事件 - 非预期的急需处理事件 - 应用于现代计算机系统中 (3)直接存储器存取方式(DMA) - DMA控制器控制输入输出设备 - 不用CPU干涉 - 适用于块设备的数据传输 (4)通道控制方式 - 特殊的处理机 - 没有自己的内存,通道程序放在主机内存中 - 需要CPU干预的更少 - 适合于现代计算机大量数据的操作 输入输出通道的分类 (1)选择通道

《Unix内核源码剖析》

北城以北 提交于 2020-01-30 11:39:19
《Unix内核源码剖析》 基本信息 作者: (日)青柳隆宏 译者: 殷中翔 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115345219 上架时间:2014-2-17 出版日期:2014 年3月 开本:16开 页码:1 版次:1-1 所属分类:计算机 更多关于》》》 《Unix内核源码剖析》 编辑推荐  精读1万行代码,深入理解操作系统原理!   超级计算机“京”的L1缓存设计者青柳隆宏经典著作!   彻底读懂Unix源代码! 内容简介 书籍 计算机书籍   《unix内核源码剖析》是一本unix v6内核源代码的阅读指南。作者结合unix v6已公开的相关文档,对unix v6的内核源码进行详细剖析,旨在让读者更深入地理解进程、中断、块i/o系统、文件系统、字符i/o系统、启动系统等操作系统的基本原理。   《unix内核源码剖析》适合操作系统的初中级学习者阅读,特别适合通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,以及那些对操作系统的具体实现有兴趣的读者。 目录 《unix内核源码剖析》 第i部分 什么是unix v6  1 第1章 unix v6的全貌  2 1.1  什么是unix  v6  2 1.2  unix的历史2 1.3  unix  v6内核  4 1.4  构成unix v6运行环境的硬件  4

初学redhat Linux基础命令及知识笔记2

丶灬走出姿态 提交于 2020-01-30 04:36:58
初学Linux第二天 ls 命令 ls:列出目录里的内容 ls -a 查看隐藏文件 . … (以点开头的影藏文件,显示当前目录和父目录) ls -A 查看隐藏文件 不包括 . … ls -r 逆序查看目录 ls -l 长列表列出目录 ls -a /home 查看根下的home下的隐藏文件。 cal 查看日历 cal 2019 显示2019年的日历 cal 06 2019 显示2019年6月的日历 创建别名 方法一 alias qwer=‘ ls’ 给ls命令创建别名qwer unalias qwer 删除别名 方法二 vim /.bashrc 写入 alias qwer=‘ls’ shift+; wq保存退出 source .bashrc 让文件生效 exit 重新登入 文件类型 Linux文件类型有七种:普通文件,目录文件,字符设备文件,块设备文件,socket文件,符号链接文件,管道文件。 1.普通文件 如图所示 前十个字符第一个字符为- ,这样的文件为普通文件。这样的文件一般用于一些相关应用程序的创建,例如图像工具,文档工具,归档工具等 2.目录文件 如图所示 前十个字符第一个字符为d(directory),这样的文件为目录文件 3.设备文件 3.1字符设备文件 如图所示 前十个字符第一个字符为c(character),这样的文件为字符设备文件。

Linux内核学习:EXT4文件JBD日志系统(Journaling Block Device)

試著忘記壹切 提交于 2020-01-29 05:42:33
目录 0 Ext4的日志模式 1 日志系统的作用 2 日志系统工作场景 3 JDB日志块设备 3.1 JBD2的数据结构 3.1.1 buffer_head 3.1.2 handle 3.1.3 transaction 3.1.4 checkpoint 3.1.5 kjournald 3.1.6 Journal 3.1.7 journal_superblock 3.2 事务的状态 3.3 事务提交的阶段 3.4 释放日志空间Checkpointing 3.5 日志的恢复 4 JBD的操作函数 4.1 journal_start 4.2 journal_stop 4.3 journal_get_create_access 4.4 journal_get_write_access 4.5 journal_dirty_data 4.6 journal_forget 5 关闭ext4 的Journal 0 Ext4的日志模式 ext4 支持根据用户需求采用多种模式的日志记录。例如,ext4 支持 Writeback 模式,它仅记录元数据;或 Ordered 模式,它记录元数据,但写为元数据的数据是从日志中写入的;或 Journal 模式(最可靠的模式),它同时记录元数据和数据。注意,虽然 Journal 模式是确保文件系统一致的最佳选择,但它也是最慢的,因为所有数据都要经过日志。

字符设备驱动程序

。_饼干妹妹 提交于 2020-01-28 03:42:22
在这里首先需要说明,这一系列的文章可能跨度比较大,比如按照正常的逻辑,写完怎样搭建开发环境之后,就该接着讲一个helloworld的内核模块,然 后才是这一篇字符驱动的文章,但是我不想重复的去写那么多东西,至于有这方面需求的博友,可以随便google一下就能查到很多类似的文章,因为我是希望 linux的博客和Mac专题的一起同时对比着写,所以理论上的东西不会太多,主要还是讲解每一个能真正运行起来的小实例,用这种方式来阐述内核开发的方 方面面。而且需要重点说明的是,这一个阶段涉及的比较多的内容是关于网络方面的扩展,也就是主要介绍的内容是Netfilter,因为在Mac上我也主要 是介绍Net Kernel Extensions。当然为了阐述NetFilter,也必须介绍一些基本的知识,例如内存管理,同步机制,中断等等。本文主要介绍的是如何实现一个简 单的字符驱动程序,来达到内核和用户空间之间的内存数据交换。 一、设备分类 在Linux系统中设备分为三种类型:字符驱动、块设备驱动和网络接口设备。字符设备是指那些只能一个字符一个字符按照先后顺序进行读写的设备。而块设备是指那些可以从设备的任意位置读取指定长度数据的设备,不必按照先后顺序进行读取。 常见的字符设备有鼠标、键盘、串口等,常见的块设备有硬盘、U盘、SD卡、光盘等。在Linux中用ls

理解存储虚拟化过程

柔情痞子 提交于 2020-01-28 01:44:05
关于存储的基本概念 全文以linux为举例 块设备和块设备文件 块设备 由内核加载驱动所识别到的存储设备就是一个块设备 块设备文件 操作系统眼里一切都是文件,那么块设备需要被创建成块设备文件存储到系统里 文件系统 可以把一个块设备比喻成一个仓库,我只要有东西就丢进去,但是问题就是仓库太大了,我每次想找个东西就很麻烦,这个时候要是有个管理员就好了 文件系统 跟所有的计算机资源使用一样,直接使用会造成很多问题,那么就需要一个管家来统一管理块设备文件,这个管家叫文件系统 块设备文件和文件系统 linux系统都是把块文件放到/dev下 格式化 块文件在没有被格式化的时候,是无法使用的,也就是把块文件进行逻辑格式化,变成文件系统后才能被系统调用 当然linux文件类型也随着技术发展出现了很多版本 xfs、ext4、ext3、ext2 逻辑卷 有发现没有,所有的计算机解决问题都是加一层逻辑层 逻辑卷 逻辑卷可以更有效的管理和分配磁盘空间,如增加空间,删除空间,合并空间等 可以实现高特性,如快照,提高传输性能、热迁移、等等 如果知道LVM就能很好的知道卷的好处 存储虚拟化 在存储设备上加入一层逻辑层 管理员方便资源调度和利用 给用户提高高性能和易用性 其实跟LVM逻辑卷管理是一样思想 存储虚拟化的实现方式 裸设备+逻辑卷 裸设备就是块设备文件 逻辑卷就是由VMM管理的文件系统

[转] 从free到 page cache

安稳与你 提交于 2020-01-27 19:17:48
[转自 https://www.cnblogs.com/hustcat/archive/2011/10/27/2226995.html ] Free 我们经常用 free 查看服务器的内存使用情况,而 free 中的输出却有些让人困惑,如下: 图 1-1 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total)、已使用的 (used)、空闲的(free)、共享的(shared)、buffer(buffer大小)、 cache(cache的大小)的内存。我们知道Total、free、buffers、cached这几个字段是从/proc/meminfo中获取的,而used = total – free。Share列已经过时,忽略(见参考)。 free命令输出的第三行(-/+ buffers/cache): 它显示的第一个值(used):548840,这个值表示系统本身使用的内存总量,即除去buffer/cache,等于Mem行used列 - Mem行buffers列 - Mem行cached列。 它显示的第二个值(free):1417380,这个值表示系统当前可用内存,它等于Mem行total列—used,也等于Mem行free列 + Mem行buffers列 + Mem行cached列。 free命令输出的第四行(Swap

linux - 服务器性能评估

╄→尐↘猪︶ㄣ 提交于 2020-01-26 01:12:21
影响Linux服务器性能的因素 cpu 内存 磁盘IO 网络IO 系统性能评估标准 影响性能因素 好 坏 糟糕 CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90% 内存 Swap In(si)=0Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out 磁盘 iowait % < 20% iowait % =35% iowait % >= 50% 其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。 系统性能分析工具 常用系统命令 Vmstat、sar、iostat、netstat、free、ps、top等 常用组合方式: 用vmstat、sar、iostat检测是否是CPU瓶颈。 用free、vmstat检测是否是内存瓶颈。 用iostat检测是否是磁盘I/O瓶颈。 用netstat检测是否是网络带宽瓶颈。 系统整体负载查询(uptime) uptime 08:21:34

linux 块设备驱动(二)——块设备数据结构

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-22 13:27:29
本文来源于: 1 . http://www.cnblogs.com/dyllove98/archive/2013/07/01/3165567.html 块设备相关的数据结构以及接口: 块设备接口则相对复杂,读写API没有直接到块设备层,而是直接到文件系统层,然后再由文件系统层发起读写请求。 一: block_device: block_device结构代表了内核中的一个块设备。它可以表示整个磁盘或一个特定的分区。当这个结构代表一个分区时,它的bd_contains成员指向包含这个分区的设备,bd_part成员指向设备的分区结构。当这个结构代表一个块设备时,bd_disk成员指向设备的gendisk结构。 struct block_device { dev_t bd_dev; struct inode * bd_inode; /*分区结点*/ int bd_openers; struct semaphore bd_sem; /*打开/关闭锁*/ struct semaphore bd_mount_sem; /* 加载互斥锁*/ struct list_head bd_inodes; void * bd_holder; int bd_holders; struct block_device * bd_contains; unsigned bd_block_size;//分区块大小

linux block framework(2) - block driver

╄→尐↘猪︶ㄣ 提交于 2020-01-21 05:49:04
了解linux block driver 1.Block Registration   Block drivers, like char drivers, must use a set of registration interfaces to make their devices available to the kernel. The concepts are similar, but the details of block device registration are all different.   块设备驱动中注册函数是 register_blkdev(),其原型为: 269 * @major: the requested major device number [1…255]. If @major=0, try to 270 * allocate any unused major number. 271 * @name: the name of the new block device as a zero terminated string int register_blkdev(unsigned int major, const char *name); The arguments are the major number that your device