- 博客(30)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注

原创 linux 3个内存模型(flat memory model、discontiguous memory model、sparse memory model)
linux内核支持3中内存模型,分别是flat memory model、discontiguous memory model和sparse memory model。所谓memory model,就是在操作系统层面,用什么样的方式来管理这些物理内存。1 flat memory model如果从系统中任意一个处理器角度看,当它访问物理内存时,物理地址空间是一个连续的,没有空洞的地址空...
2019-05-25 15:46:28
1965

原创 物理内存探测和memblock分配器初始化和分配
linux内存管理,总的来说,分为3个阶段,分别是:memblock/bootmem分配器初始化 Buddy 系统初始化 Slab/slub分配器初始化为什么要分为3个阶段呢?由于系统在初始化最初阶段,buddy系统和slab分配器都还未初始化完成,这时候内核分配内存,需要一种方式来分配物理内存,linux系统最初提供bootmem分配器分配内存,后续提供了memblock分配器...
2019-05-18 18:08:54
1037
1

原创 linux上构建GFP_ZONE_TABLE
当内核分配内存时,需要指定gfp flag, 内核通过gfp标志判断从哪个zone分配内存。例如kmalloc(size_t size, gfp_t flags).在linux中存在ZONE_DMA, ZONE_DMA32, ZONE_NORMAL, ZONE_HIGHMEM, ZONE_MOVABLE几个zone。由于gfp_t 低4位,共有2^4=16中情况,而linux规定了低...
2019-05-09 18:48:34
889

原创 linux pagecache bdi writeback 机制
(原创,未经允许,请勿转载)第一部分 pagecache write概述1. pagecache write的过程,即非direct IO的写,通过系统调用sys_write写下来的数据,是先在内核的pagecache中分配一块pages,然后将数据写到pages;2.之后便通过balance_dirty_pages_ratelimmited来检查dirty page是否超过预
2017-08-22 16:27:44
2787

原创 linux 内核缓冲区管理之slab机制
【原创】 未经允许,请勿转载 linux 内核采用一种称为"slab"的缓冲区分配和管理的方法。在slab方法中,每种重要的数据结构都有自己专用的缓冲区队列,每种数据结构都有相应的构造constructor和析构destrucor函数。 slab管理特点,每种对象的缓冲区队列并非由各个对象直接构成,而是由一连串的大块slab构成,而每个大块中则包含了若干同种的对象。一
2017-08-15 10:54:24
1489

原创 linux 内核之block trim BLKDISCARD过程
对SSD进行trim,是通过ioclt发送BLKDISCARD命令完成的。下面是block层ioctl的调用栈。sys_ioctl->do_vfs_ioctl->block_ioctl->blkdev_ioctl->blkdev_issue_discard->__blk_run_queue->scsi_request_fn->....具体通过代码讲解BLKDISCARD执行
2017-08-09 09:37:45
8535

原创 鸟哥的Linux私房菜笔记6------11章认识和学习bash
1.合法的shell与/etc/shells功能 shell有多个版本,有Bourne Shell(sh)、C Shell、K Shell 、TCSH等。通常Linux使用的是Bourne Again Shell(Bash),是sh的增强版 可以检查/etc/shells,查看有多少可用的shell。将合法的shell写入/etc/shells文件,是为系统某些服务在运
2014-12-14 15:57:35
842

原创 Linux 之正则表达式
正则表达式是通过一些特殊符号的辅助,让用户轻易的达到查找、删除、替换某些特定字符串的处理程序。正则表达式:分为基础正则表达式 和扩展正则表达式。基础正则表达式: 1 语系对正则表达式的影响,建议使用下面特殊符号。 [:alnum:] 代表英文字母和数字 [:alpha:] 英文字母
2014-12-13 17:19:16
582

原创 编程之美学习心得 二 (未完待续)
2.1 求二进制数中1的个数 解法一:暴力的解法 对N中二进制1的个数:N = b[0] +b[1]*2+b[2]*2^2+...b[n]*2^n int count(BYTE v){ int num = 0 ; while(v)
2014-09-05 21:48:08
745
原创 致烟民早日摆脱烟瘾的困扰
我们无法戒烟的唯一原因是: 恐惧! 我们恐惧戒烟过程的漫长和痛苦。恐惧一旦离开香烟,生活的舒适感就会下降,恐惧戒烟会导致注意力下降,恐惧戒烟对性情产生影响,最恐惧的是戒烟无法成功,只能做一辈子的烟瘾的努力,永远无法解脱。 如果你感到紧张,心慌意乱,或是感到时机未到,那么这些都是由恐惧引起的。这种恐惧是由吸烟导致的,永远无法靠吸烟缓解的。你并不是自主的吸烟,只是不小心掉进了吸
2017-09-06 10:42:17
1004
原创 vim 技巧篇
欢迎关系公众号 峰峰记事本本公众号近期推出 vim 技巧篇,每天一篇小技巧,希望对您有所帮助。内容章节:vim技巧篇7-打开及保存文件vim技巧篇6-管理多个文件vim技巧篇5-命令行模式vim技巧篇4-可是模式vim技巧篇3-插入模式vim技巧篇2-普通模式vim技巧篇1-初识vim想要了解更多,欢迎关注公众号-峰峰记事本
2017-05-25 09:41:36
544
原创 linux iscsi网络的三种工具tgt iscsi_tgt targetcli
组建iscsi 网络三种target工具,分别为tgt,iscsi_tgt,和targetcli ;initiator 端均使用open-iscsi即可;a. tgt 使用tgtadm命令创建iscsi target; 首先,创建target tgtadm --lld iscsi --mode target -
2017-05-19 17:19:08
6551
原创 CentOS7 USB 启动/安装出现 dracut-initqueue timeout问题
小主我用ahci port上安装了 CentOS,可是将安装好的CentOS 放到USB上启动,结果老是出现dracut timeout的问题;网上搜索答案,结果是一片人云亦云,全是同一个声音,一看就是一个人发帖,其他人转发,不但解决不了问题,还在误导人。( 原创 :转载请注出处,有问题请联系642290071@qq.com )下面小主给出dracut timeout的正解
2017-01-23 18:18:04
35717
1
原创 Ubuntu mount CentOS LVM 分区
很多时候,会遇到在一台系统上挂在另一个系统的分区,小主就遇到CentOS启动不起来,于是就想通过Ubuntu来挂载CentOS LVM 分区。首先,Ubuntu要安装lvm。 1. 安装 lvm2 $apt-get install lvm2 2. 扫描lvm,找到vg $vgscan Reading
2017-01-23 12:28:00
696
原创 sysbench mysql 数据库性能测试
mysql数据库的安装apt-get install mysql-server ,apt-get install mysql-client, apt-get install libmysqlclient-dev; 安装过程中出现设置密码,注意设置了不要忘记了,安装完成后,可以通过下面命令检查是否安装成功:
2017-01-23 09:28:41
652
原创 linux内核之sys接口device_add详解
设备模型之device1.与device相关的函数有 device_register(struct device *dev);device_add(struct device *dev);device_unregister(struct device *dev); 与device attr相关函数:device_create_file(struct device
2015-09-26 23:48:48
2632
原创 nvme 驱动详解 之1
按照老的套路,在分析一个driver时,我们首先看这个driver相关的kconfig及Makefile文件,察看相关的源代码文件.在开始阅读一个driver,通常都是从module_init or syscall_init函数看起。 下面让我们开始nvme的旅程吧。首先打开driver/block下的kconfig文件,其中定义了BLK_DEV_NVME config,如下。
2015-08-17 21:14:53
12936
原创 scsi底层设备注册——如何一步步注册到block层
首先,让我们先进入ata_host_register函数,看如何一步一步的去向上层注册的。intata_host_register(struct ata_host *host, struct scsi_host_template *sht){ int i, rc; host->n_tags =clamp(sht->can_queue, 1, A
2015-05-05 19:08:01
4233
原创 鸟哥的Linux私房菜7-------14章 Linux帐号管理与ACL权限设置
1. 用户表示符UID与GID /etc/passwd文件结构: 有几行就代表有几个帐号在你的系统里每一行用:分割,一共7个字段。 1.帐号名称 2.密码:早起unix用,现在把密码数据放在/etc/shadow文件中了,这里用x表示 3.UID:0代表系统管理员。 1-499:系统帐号
2014-12-16 16:56:42
868
原创 鸟哥的Linux学习笔记之三
第8章 Linux磁盘与文件系统管理1 磁盘组成与分区: 磁盘由 圆的盘片、磁头、主轴马达 等组成。 盘片主要有: 扇区(Sector)为最小的物理存储单位,每个扇区512bytes 将扇区组成一个圆,就是柱面(Cylinder),是分区的最小单位。 第一个扇区最重要,里面有MBR(主引
2014-12-01 16:00:37
648
原创 鸟哥的Linux私房菜笔记之二
第七章 Linux文件与目录管理1 目录相关操作 . 代表此层目录 .. 代表上一层目录 - 带博啊前一个工作目录 ~ 代表当前用户的主文件夹 ~account 代表account 账户的主文件夹 cd:change directory:切换目录 pwd:prin
2014-11-27 18:38:56
502
原创 鸟哥的Linux学习笔记之 一
第三章 主机规划与磁盘分区1. 选择与Linux搭配的主机配置 配件配置主要有以下几个: CPU RAM Hard Disk VGA Network Interface Card 光
2014-11-25 21:24:35
609
原创 多线程互斥与同步
事件对象:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset,//是否人工重置 BOOL bInitialState,//创建的是否有信号状态 LPCTSTR lpName//事件是否命名);当创建的是人工重置的事件对象,当为有信
2014-09-03 16:14:42
558
原创 MFC之多线程学习
1、 程序是计算机指令的集合2、 进程:通常定义为一个正在运行的程序的实例。进程是资源申请、调度和独立运行的单位。进程从不执行任何东西,它只是线程的容器。要使进程完成某项操作,它必须拥有一个在它环境中运行的线程。3、 每个进程至少拥有一个线程,来执行进程的地址空间的代码。当创建一个进程时,操作系统会自动创建这个进程的第一个线程,成为主线程,(即执行main或winmain的线
2014-09-03 16:13:39
550
原创 TS流解析 ffmpeg
ffmpeg关于mpegts码流解析部分:1、 首先来看main函数通过av_register_all()来注册所有的编解码器、解复用器(这里只用到mpegts_demuxer)、注册所使用的协议(这里用到文件打开的协议file_protocol,类似的还有http_protocal,pipe_protocol,rtp_protocol,tcp_protocol,udp_prot
2014-09-03 16:11:35
2207
原创 C++网络编程之TCP UDP
网络字节顺序:TCP/IP采用16/32位高位先存格式 TCP/IP网络应用中,通信的两个进程主要采用C/S模式。服务器要先启动,并根据请求提供相应的服务:1、打开一个通信通道订告知本地主机,它愿意在某一地址和端口上接受客户请求;2、等待客户请求到达该端口;3、接受到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要急活一个新的进程(或线程)来处理这个客户请求。
2014-09-03 16:03:47
627
原创 系统调用原理
系统调用系统调用是应用程序和操作系统内核的接口,无论程序是直接进行系统调用还是通过运行库,最终还是会到达系统调用层面上。之所以要系统调用,是因为现在操作系统都将可能产生冲突的系统资源给保护起来,组织应用程序直接访问。这些系统资源包括文件、网络、IO、各种设备等。所有的这些操作都必须经由操作系统所规定的方式来进行。在Linux中系统调用使用0x80中断作为系统调用的入口,Windows采
2014-07-01 23:18:22
541
原创 Java学习笔记(1)
一、java的配置和第一个程序1、 java的起源:Sun公司共有三个版本:Java SE:java标准版; JavaEE java企业版 JavaME java微型版2、 javac.exe对java编译的工具3、配置环境变量 在path中配置JA
2013-05-04 21:04:45
530
原创 动态链接库学习笔记
动态链接库学习笔记在导入的函数可以用extern声明,也可以用_declspec(dllimport)声明。例如:_declspec(dllimport) int add(int a,int b); 通过dumpbin –exports DLL.dll来查看导出的动态链接库的函数。若系统提示dumpbin不是系统的命令,则需要注册dumpbin环境变量,打开VC安装目录的bin
2013-05-03 22:51:02
573
原创 C++网络编程之TCP UDP
网络字节顺序:TCP/IP采用16/32位高位先存格式 TCP/IP网络应用中,通信的两个进程主要采用C/S模式。服务器要先启动,并根据请求提供相应的服务:1、打开一个通信通道订告知本地主机,它愿意在某一地址和端口上接受客户请求;2、等待客户请求到达该端口;3、接受到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要急活一个新的进程(或线程)来处理这个客户请求。
2013-05-03 21:10:21
705
pci 总线中总线域和存储域转换问题
2015-01-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人