块设备

【Linux】malloc 与共享内存原理区别

戏子无情 提交于 2019-12-14 01:15:06
本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。 本文先简单介绍应用程序对内存的使用以及I/O系统对内存的使用的基本原理,这对理解上述系统调用和库函数的实现有很大帮助。 1 内存管理基础 Linux对物理内存的管理是以页为单位的,通常页大小为4KB,Linux在初始化时为所有物理内存也分配了管理数据结构,管理所有物理页面。 每一个应用程序有独立的地址空间,当然这个地址是虚拟的,通过应用程序的页表可以把虚拟地址转化为实际的物理地址进行操作,虽然系统可以实现从虚拟地址到物理地址的转换,但并非应用程序的每一块虚拟内存都对应一块物理内存。Linux使用一种按需分配的策略为应用程序分配物理内存,这种按需分配是使用缺页异常实现的。比如一个应用程序动态分配了10MB的内存,这些内存在分配时只是在应用程序的虚拟内存区域管理结构中表示这一区间的地址已经被占用,内核此时并没有为之分配物理内存,而是在应用程序使用(读写)该内存区时,发现该内存地址对应得物理内存并不存在,此时产生缺页异常

Linux操作系统 Linux内核

我的未来我决定 提交于 2019-12-08 05:14:18
Linux内核 预备知识: 1、POSIX(Portable Operating System Interface of UNIX-可移植操作系统接口):定义了 操作系统 应该为 应用程序 提供的 接口标准 ,是IEEE为要在 各种UNIX操作系统 上运行的软件而定义的 一系列API标准的总称 。不同的操作系统根据POSIX标准将实现相同的功能的系统调用标准化。 2、一方面,设计程序只需要跟API打交道和系统调用无关紧要,另一方面, 内核 只跟 系统调用 打交道, 库函数及应用程序 是怎么系统调用不是内核所关心的。 3、完成同一功能, 不同内核 提供的 系统调用 (一个函数)是不同的,所以API又分为Windows API和Linux API。根据POSIX标准,在一个 POSIX操作系统 上开发的软件,能够在 任何其它的POSIX操作系统 上编译执行。 4、标准库:POSIX标准的C/C++库,一、BSD,这个库是AOSP使用的标准C库;二、Bionic,这个是BSD的衍生库,用于NDK开发;三、UNIX C/C++,GUN C/C++,MicroSoft Visual C/C++ 5、POSIX 进程间通信 :POSIX消息、POSIX信号量、POSIX共享内存;System V IPC 6、Linux内核的主要模块(或组件)分以下几个部分: 存储管理 、 CPU和进程管理 、

Linux中buff/cache内存占用过高解决办法

淺唱寂寞╮ 提交于 2019-12-06 15:19:49
Linux中buff/cache内存占用过高解决办法 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html /proc/sys/vm/drop_caches linux的知识内容还是非常庞杂 需要就行学习. 在Linux系统中,我们经常用free命令来查看系统内存的使用状态。在一个centos7的系统上,free命令的显示内容大概是这样一个状态: 这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少)。一般情况下,对此命令输出的理解可以分这几个层次: 不了解。这样的人的第一反应是:天啊,内存用了好多,14个多G,可是我几乎没有运行什么大程序啊?为什么会这样?Linux好占内存! 自以为很了解。这样的人一般评估过会说:嗯,根据我专业的眼光看的出来,内存才用了1.7G左右,还有很多剩余内存可用。buffers/cache占用的较多,说明系统中有进程曾经读写过文件,但是不要紧,这部分内存是当空闲来用的。 真的很了解。这种人的反应反而让人感觉最不懂Linux,他们的反应是:free显示的是这样,好吧我知道了。神马?你问我这些内存够不够,我当然不知道啦!我特么怎么知道你程序怎么写的? 根据目前网络上技术文档的内容,我相信绝大多数了解一点Linux的人应该处在第二种层次。大家普遍认为

(八)OpenStack---M版---双节点搭建---Cinder安装和配置

不羁的心 提交于 2019-12-06 02:23:32
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ 》》》》》》 传送门 1.创建数据库并授权 2.获得admin凭证执行管理员命令并创建服务证书 3.创建块存储设备API接口 4.Controller节点安装块存储组件并配置 5.初始化块设备服务的数据库 6.配置计算节点以使用块设备存储 7.重启服务并设置开机启动 8.Compute节点安装并配置一个存储节点,此处用Compute节点代替 9.验证操作 1.创建数据库并授权 # mysql -uroot -p000000 > create database cinder; > grant all privileges on cinder.* to 'cinder'@'localhost' identified by '000000'; > grant all privileges on cinder.* to 'cinder'@'%' identified by '000000'; 2.获得admin凭证执行管理员命令并创建服务证书 # . /root/admin-openrc # openstack user create --domain default --password 000000 cinder # openstack role add --project service --user cinder admin

ceph中rbd的增量备份和恢复

混江龙づ霸主 提交于 2019-12-05 17:36:32
ceph中rbd的增量备份和恢复 ceph的文档地址: Ceph Documentation ​ 在调研OpenStack中虚机的备份和恢复时,发现OpenStack和ceph紧密结合,使用ceph做OpenStack的后端简直是不要太爽,于是调研了使用ceph中的块设备rbd来对虚机进行增量备份和恢复。以下是虚机备份和恢复的实验步骤: 1. 前言: ​ 快照 的功能一般是基于时间点做一个标记,然后在某些需要的时候,将状态恢复到标记的那个点,这个有一个前提是 底层的数据没有破坏 ,举个简单的例子, Vmware 里面对虚拟机做了一个快照,然后做了一些系统的操作,想恢复快照,前提是存储快照的存储系统没用破坏,一旦破坏了是无法恢复的。 ​ ceph也有快照功能,同样,在这里的快照是用来保存存储系统上的状态的,数据的快照能成功恢复的前提是存储系统是好的,而一旦存储系统坏了,快照同时会失效的,所以最好是能够将数据备份下来。本篇博客主要是调研使用ceph的rbd命令来对存储设备进行基于快照的增量备份。 2. ceph中rbd的常用命令: 2.1列出存储池 ceph osd pool ls 2.2 查看存储池的内容 rbd ls --pool pool_name 例子 rbd ls --pool volumes 2.3 打快照 rbd snap create {pool-name}/

Linux 块设备驱动框架分析

倖福魔咒の 提交于 2019-12-05 14:32:02
Linux块设备驱动框架分析 1、块设备简介 块设备,I/O设备的一种,其将信息存储在固定大小的块中,每一块都有固定的地址,可在设备的任意位置读取一定长度的数据。典型的有硬盘、U盘、SD卡等。 本文将以硬盘为例,对硬盘的结构属性进行简单介绍。 硬盘的物理结构主要由盘体、控制电路、接口部件等组成。而硬盘的内部结构一般是指盘体的内部结构。盘体是一个密封的交替,里面包含磁头、盘片等部件。硬盘驱动器采用高精度、轻型磁头驱动/定位系统。这种系统磁头可以在盘面上快速移动。硬盘的数据管理是基于逻辑结构的。 硬盘的逻辑结构如图所示,由盘面、磁道、柱面以及扇区构成。 盘面号:硬盘的盘片一般有两个盘面,分为上、下盘面,个别硬盘盘面为单数。每一个盘面按照从上至下的顺序进行编号,得到盘面号(也叫磁头号)。每一个盘面对应一个读写磁头。 磁道:硬盘在格式化时,会被划分成很多同心圆,这些同心圆的轨迹成为磁道。 柱面:所有盘面的同一个磁道构成一个圆柱,称为柱面。硬盘数据的读写按照从上往下并按照柱面进行。同一个柱面的磁头按照从上到下的顺序全部读完后,才会切换到下一个柱面。磁头之间的切换是通过电子切换,而柱面的切换则是通过机械实现的。由于电子切换速度比机械切换的速度快,所以按照柱面读写,而不是按照盘面来读写。 扇区:磁道被划分为一段段圆弧,称之为扇区。外圈磁道的圆弧的线速度比内圈磁道圆弧的线速度高

Linux查看系统负载常用命令

旧城冷巷雨未停 提交于 2019-12-05 06:29:02
linux下查看负载的主要命令有下面一些: top, uptime,w,vmstat 1、top命令查看linux负载: 第一行解释: top - 11:03:08 up 1 days, 04:01, 3 user, load average: 0.05, 0.05, 0.01 11:03:08:系统当前时间 up 1 days, 04:01:系统开机到现在经过了1天 3 users:当前3用户在线 load average:0.05, 0.05, 0.01:系统1分钟、5分钟、15分钟的CPU负载信息. 备注:load average后面三个数值的含义是最近1分钟、最近5分钟、最近15分钟系统的负载值。这个值的意义是,单位时间段内CPU活动进程数。如果你的机器为单核,那么只要这几个值均<1,代表系统就没有负载压力,如果你的机器为N核,那么必须是这几个值均<N才可认为系统没有负载压力。 第二行解释: Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie 176 total:当前有176个任务 1 running:1个任务正在运行 175 sleeping:175个进程处于睡眠状态 0 stopped:停止的进程数 0 zombie:僵死的进程数 第三行解释: %Cpu(s): 0.1 us, 0.2 sy, 0

uClinux下Nor Flash的JFFS2文件系统构建

杀马特。学长 韩版系。学妹 提交于 2019-12-04 04:59:42
嵌入式系统正随着Internet的发展而在各个领域得到广泛的应用,作为嵌入式应用的核心,嵌入式Linux以其自由软件特性正日益被人们看好。Linux具有内核小、效率高、源代码开放等优点,还内涵了完整的TCP/IP网络协议,因此非常适于嵌入式系统的应用。而作为专门运行于没有MMU的微处理器的嵌入式操作系统,uClinux更是得到广泛应用。 当前的嵌入式系统开发,需要方便灵活的使用Flash。NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。NOR的特点是芯片内执行XIP eXe-cute In Place ,这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,因此在嵌入式系统得到广泛的应用。 1 JFFS2文件系统简介 uClinux通常默认ROMFS作为根文件系统,它相对于一般的EXT2文件系统具有节约空间的优点。但是ROMFS是一种只读的文件系统,不支持动态擦写保存。虽然对于需要动态保存的数据可以采用虚拟ram盘的方法来保存,但当系统掉电后,ram盘的内容将全部丢失,而不能永久保存,因此需要实现一个可读写的文件系统。JFFS2文件系统便是一个很好的选择。

linux来创建分区

佐手、 提交于 2019-12-03 17:10:04
1. 块设备 最有名的块设备可能就是Linux系统中表示第一个IDE硬盘的/dev/sda。SCSI硬盘和Serial ATA硬盘都是/dev/sda。如果你正在使用内核里新的libata架构,即便IDE硬盘也会是/dev/sd*。如果你用的是旧的设备架构,你的第 一个IDE硬盘将是/dev/hda。 上面介绍的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而不用理会你的驱动器到底是IDE、SCSI还是其他的。程序可以把磁盘当作一系列连续的、可随机访问的512字节大小的块来访问。 2. 分区 尽管在理论上可以使用一整块磁盘来安装你的Linux系统,但是在实际中几乎从不这样做。相反,整个磁盘块设备被分割成更小、更容易管理的块设备。在x86系统中,这些被称作分区。 分区有三种类型:主分区,扩展分区和逻辑分区。 主分区是把自己的信息储存在MBR(主引导记录)中的分区。由于MBR非常小(512个字节),所以仅可以定义4个主分区(例如,/dev/sda1到/dev/sda4)。 扩展分区是一种特殊的主分区(意味着扩展分区必须是4个可能的主分区之一),它包含着更多的分区。这种分区最初并不存在,但是由于4个主分区太少了,为了能划分更多的分区,在保持向后的兼容性的前提下扩展分区诞生了。 逻辑分区是在扩展分区内部的分区。它们的定义不在MBR中,而是在扩展分区中。 3.

Ceph分布式存储(一)

匿名 (未验证) 提交于 2019-12-03 00:43:02
Ceph分布式存储(一) 一、概述 Ceph是可靠的、可扩展的、统一的、分布式的存储系统。可以同时提供对象存储RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、块存储RBD(Rados Block Device)、文件系统存储Ceph FS(Ceph Filesystem)3种功能。 2、Ceph应用场景 Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。 3、ceph功能组件 4、Ceph核心组件 OSD(Object Storage Device): 主要功能包括存储数据、处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给ceph monitor。例如ceph OSD心跳等。一个ceph存储集群,至少需要两个Ceph OSD来实现active+clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。注意:每一个disk、分区都可以成为一个OSD。 Monitor: Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策。 MDS(Metadata