Linux系统
文章平均质量分 65
zhangxinrun_业余erlang
这个作者很懒,什么都没留下…
展开
-
Linux 文件系统剖析
在文件系统方面,Linux® 可以算得上操作系统中的 “瑞士军刀”。Linux 支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统。对于使用标准的和比较奇特的文件系统以及开发文件系统来说,Linux 是极好的平台。本文讨论 Linux 内核中的虚拟文件系统(VFS,有时候称为虚拟文件系统交换器),然后介绍将文件系统连接在一起的主要结构。 基本的文件系统体系结构Linux原创 2010-05-13 10:02:00 · 910 阅读 · 0 评论 -
Linux下时间度量的深入分析
一)ANSI clock函数1)概述:clock 函数的返回值类型是clock_t,它除以CLOCKS_PER_SEC来得出时间,一般用两次clock函数来计算进程自身运行的时间.ANSI clock有三个问题:1)如果超过一个小时,将要导致溢出.2)函数clock没有考虑CPU被子进程使用的情况.3)也不能区分用户空间和内核空间.所以clock函数在linux系统上变得没有意义.原创 2010-05-13 14:54:00 · 5098 阅读 · 0 评论 -
lsof使用技巧
一.LSOF使用技巧 lsof的功能很多,特別提醒大家, -c,-g,-p,-u,这四个参数最有用。更详细的资料请参看:man lsof。以下给大家介绍一下我在工作中,经常使用的技巧:1、查看文件系统阻塞根据工作需要,系统管理员想卸载一个文件系统并执行umount /mountpoint,但程序报告常常显示:umount: /mountpoint: device is busy;这是因为该文件系统转载 2010-05-14 11:26:00 · 719 阅读 · 0 评论 -
Linux下可以替换运行中的程序么?
今天被朋友问及“Linux下可以替换运行中的程序么?”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”。结果朋友发来一个执行结果:(test正在运行中)# cp test2 testcp: cannot create regular file `test: Text file busy看起来是程序被占用,无法覆盖。于是自己又再做了几个实验:(1)先r转载 2010-05-14 14:14:00 · 1123 阅读 · 0 评论 -
Linux文件系统的缓存机制
Linux文件系统设计了三类的Cache以用来支持多类型的文件系统。一、 VFS索引节点缓存 Inode CacheVFS索引节点是一个Hash表,它不断地读取。VFS提供的索引节点缓存可以加快对文件系统的存取。每次从索引节点缓存中读取一个VFS索引节点,这样系统就可以节省读取物理设备的存取时间。当VFS访问索引节点时,它首先查找VFS索引节点缓存。为了在VFS索引节点缓存中查找转载 2010-05-17 17:31:00 · 14391 阅读 · 0 评论 -
关于direct io
direct io是一种不用内核缓存的io,它可以做到直接将用户空间的内存直接写入磁盘或者将磁盘数据直接读到用户空间的缓冲区,这种策略就是不用内核的缓存而使用用户自己设计的缓存,这一般在数据库系统中用到,初用linux的人在调用free命令的时候都会大吃一惊,为何文件cache占用了那么多的内存,太可怕了啊,其实这正是表明了该用户是初用户,这正是linux的风格,空闲内存闲着也是闲着,既然没有用户转载 2010-05-26 15:27:00 · 964 阅读 · 0 评论 -
关于磁盘IO的总结
关于磁盘IO的总结 1. 完全随机写还是跳跃,5倍的性能差距!... 12. 多线程随机读、处理速度、响应时间... 23. 是否使用direct io. 24. 系统缓存... 34.1. 系统缓存相关的几个内核参数:... 34.2. 系统一般在下面三种情况下回写dirty页: 34.3. pb项目中的感触:...转载 2010-05-26 16:09:00 · 2413 阅读 · 0 评论 -
Linux性能监控工具的介绍文章
基于进程的命令方式查看:`ps -o pcpu,pmem,nlwp -p $PID`#(pmem = % mem usage and nlwp is number of threads)其中pcpu定义是:cpu utilization of the process in “##.#” format. It is the CPU time used divided by the time the转载 2010-05-26 16:26:00 · 842 阅读 · 0 评论 -
代码测试、调试与优化小结
<br />代码写完以后往往要做测试(或验证)、调试,可能还要优化。<br /> 关于测试(或验证),通常对应着两个英文单词verification和validation,在资料[1]中有关于这个的定义和一些深入的讨论,在资料[2]中,很多人给出了自己的看法。但是我想正如资料[2]提到的:<br /> “The differences between verification and validation are unimportant except to the theorist; pract转载 2010-08-13 15:54:00 · 4607 阅读 · 0 评论 -
GCC的内嵌汇编语法
AT&T ASM Syntax <br />1 Overview <br />开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可能并不喜欢它。 <br /> <br />如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只转载 2010-08-17 11:06:00 · 780 阅读 · 0 评论 -
fork/vfork/clone
<br />首先说明Linux下的进程与线程比较相近。这么说的一个原因是它们都需要相同的数据结构来表示,即task_struct。区别在于一个有独立的用户空间,一个是共享的用户空间(如果完全没有用户空间则是内核线程,不需要)。<br /> Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运行的程序文件。<br /> 复制的API包括三种:fork、clone、vfork。<br /> 这三个API的内部实转载 2010-08-27 09:51:00 · 1168 阅读 · 0 评论 -
Linux系统调用接口、系统调用例程和内核服务例程之间的关系
<br />系统调用接口的主要任务是把进程从用户态切换到内核态。在具有保护机制的计算机系 统中,用户必须通过软件中断或陷阱,才能使进程从用户态切换为内核态。<br /> 在i386体系中,Linux的系统调用接口是通过调用软中断指令“int $ Oxso”使进程从用户态进入内核态的,这个过程也叫做“陷入”。当系统调用接口调用软中断指令“int $ Ox80”时,这个指令会发生一个中断向量码为128的中断请求,并在中断响应过程中将进程由用户态切换为内核态。<br /> 因为Linux只允许系统调用接口使用转载 2010-08-25 22:29:00 · 3381 阅读 · 0 评论 -
尝试总结memory barrier (经典)
<br />讨论完了给一个总结,有些话是别人说的,有的还是clf的网友的,为了不使文档显得杂乱,都不具名了。 <br />欢迎批评指正! <br /><br /><br />内核中定义的内存屏障原语有: <br /><br />#define barrier() __asm__ __volatile__("": : :"memory") <br />#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) <转载 2010-08-27 14:47:00 · 2421 阅读 · 0 评论 -
尝试总结memory barrier (经典)
<br />讨论完了给一个总结,有些话是别人说的,有的还是clf的网友的,为了不使文档显得杂乱,都不具名了。 <br />欢迎批评指正! <br /><br /><br />内核中定义的内存屏障原语有: <br /><br />#define barrier() __asm__ __volatile__("": : :"memory") <br />#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) <转载 2010-08-27 14:38:00 · 1164 阅读 · 0 评论 -
Linux的free命令输出详解
<br />我的linux执行free命令显示如下: <br />[root@Linux /tmp]# free<br /> total used free shared buffers cached<br />Mem: 255268 238332 16936 0 85540 126384<br />-/+ buffers/cache: 26408 228860 <转载 2010-09-09 15:36:00 · 798 阅读 · 0 评论 -
RedHat版本介绍
Linux 是GNU/Linux的缩写,通常指各种Linux发行版的通称。常见的Linux厂家主要有Redhat/Novell等。Redhat有两大 Linux产品系列,其一是免费的Fedora Core系列主要用于桌面版本,提供了较多新特性的支持。另外一个产品系列是收费的Enterprise系列,这个系列分成:AS/ES/WS等分支。<br />Advanced Server,缩写即AS。AS在标准Linux内核的基础上,做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。可轻松识别 IBM转载 2010-09-16 22:26:00 · 4094 阅读 · 1 评论 -
Linux下用文件的inode删除文件
<br />文件的inode定义了文件的大小、所有人等文件的特征。每个文件和目录都有自己唯一的inode数字。但是为什么用inode来删除文件,而不是用常用的rm -rf命令呢?原因是,如果你不小心创建了含有特殊字符的文件和目录,比如带有 ? * ^ 的文件名,就会很难删除。下面我们就来介绍一下:1)如何找出文件和目录的inode;2)配合find命令,删除特定的inode文件;3)其他有用的删除顽固文件的方法。 <br /><br />* 如何找出文件的inode? <br /><br />用stat 或转载 2010-09-08 11:18:00 · 4545 阅读 · 0 评论 -
关于ext2文件系统支持的最大文件大小
<br />struct ext2_inode {<br />...<br /><br /> __u32 i_size; /* 以字节计的文件大小 */<br />...<br /> __u32 i_block[Ext2_N_BLOCKS]; /* 指向数据块的指针数组 */<br /> __le32 i_dir_acl; /*目录访问控制列表*/<br />...<br />};<br />刚看了《深入理解Linux内核》的第十八章,其中关于这个问题有这样的一个描述:<br /><br />留给转载 2010-09-08 12:48:00 · 6288 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(7)dentry与inode
我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode)。它们的定义如下:struct dentry {struct inode *d_inode; /* Where the name belongs to - NULL isstruct dentry *d_parent; /* parent directory */struct list_head转载 2010-09-08 14:30:00 · 685 阅读 · 0 评论 -
so库的性能注意事项
<br />一个共享库可供同一系统中的多个应用程序使用。共享库的性能会影响使用此共享库的应用程序,并且会影响整个系统。<br />虽然共享库中的代码会直接影响运行进程的性能,但此处讨论的性能问题则涉及共享库的运行时处理。本节通过考虑各个方面(如文本大小和纯度)以及重定位开销,更详细地介绍了这种处理。<br />分析文件<br />有多种工具可用来分析 ELF 文件的内容。要显示文件的大小,请使用 size(1) 命令。<br /> <br />$ size -x libfoo.so.1<br />59c +转载 2010-09-07 17:50:00 · 2140 阅读 · 0 评论 -
“inode block的概念”和“几个文件系统概念:geometry、sector 、Block”
inode--------------------------------- 提到inode,我们不得不先介绍硬盘的整体结构。硬盘中包含多个硬盘盘片,硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头(Head),将这个磁头固定,使硬盘盘片旋转一周,所走轨迹就是磁道(Track)。硬盘内所有盘片的相同磁道号的集合成为磁柱(Cylinder)。每一磁道被划分成许多区域,每个区域叫一个扇区(Sector)。扇区是硬盘的最小存储物理量,一个扇区的存储容量大约是512字节(约0.5K)。 知道了硬盘的大转载 2010-09-08 12:46:00 · 4805 阅读 · 0 评论 -
dentry与inode节点之间的关系
<br />一、dentry的定义<br />dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接。这个索引节点可以是文件,也可以是目录。<br />dentry结构体定义如下:<br />struct dentry {<br />atomic_t d_count; 目录项对象使用计数器<br />unsigned int d_flags; 目录项标志<br />struct inode * d_inode; 与文件名关联的索引节点<br />struct dentry *转载 2010-09-08 15:54:00 · 2137 阅读 · 1 评论 -
Linux 文件系统中元数据使用计数的机制
在 Linux 文件系统中,元数据的引用计数主要用于管理元数据(如 inode, dentry 结构)在内存中的创建、使用和释放。了解这部分的机制,有利于深入认识文件系统的运行机制,以及Linux如何在内存中管理元数据。这部分内容也是构建分布式文件系统所必须的知识,由此才能保证元数据在分布式文件系统中的正确使用。<br />概述<br />元数据是一个文件系统的重要部分。很多书籍和文章都介绍过 dentry 和 inode 在 Linux 中的作用和机制,但却很少有文献涉及到它们的使用计数( usage c转载 2010-09-08 22:01:00 · 1362 阅读 · 0 评论 -
不带缓存的I/O和标准(带缓存的)I/O(经典)
先来看看不带缓存的I/O和标准(带缓存的)I/O都有那些不带缓存的I/O: read,write,open......标准(带缓存的)I/O: fgets,fread,fwrite.....这里使用两个对应的函数进行比较:ssize_t write(int filedes, const void *buff, size_t nbytes)size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)上面的buff和ptr都是指转载 2010-09-09 12:24:00 · 2521 阅读 · 0 评论 -
linux内存管理2:内存映射和需求分页(英文名字:demand Paging,又叫:缺页中断)
<br />当某个程序映象开始运行时,可执行映象必须装入进程的虚拟地址空间。如果该程序用到了任何一个共享库,则共享库也必须装入进程的虚拟地址空间。实际上,Linux 并不将映象装入物理内存,相反,可执行文件只是被链接到进程的虚拟地址空间中(磁盘空间中)。随着程序的运行,被引用的程序部分会由操作系统装入物理内存。这种将映象链接到进程地址空间的方法称为“内存映射”。可执行映像.<br />每个进程的虚拟内存由一个 mm_struct 结构代表,我们将在下一章中详细讲述该结构。该结构中实际包含了当前执行映象的有关转载 2010-09-09 13:19:00 · 7213 阅读 · 0 评论 -
linux中静态库(.a)和动态库(.so)
<br />静态库 <br />静态库在编译的时候被固定在了可执行文件中,而不是放在系统的某个地方由ld.so加载。这种做法好的一面是可执行文件自己包含了所需的所有库文件,并不依赖于系统中的其他代码,也不会出现库文件缺失的情况。你可以把这些代码复制给任何人,而它们保证可以工作。不好的一面就是可执行文件不必要的增大了,而且不同的程序之间不能共享代码。<br />习惯上,我们以后缀.a来标记静态库文件。<br /> 在linux环境中, 使用ar命令创建静态库文件.如下是命令的选项: <br />转载 2010-09-07 17:51:00 · 1652 阅读 · 0 评论 -
LINUX-VFS的supper bolck、inode、dentry和file关系简述
<br />The common file model consists of the following object types:<br /><1>The superblock object<br />Stores information concerning a mounted filesystem. For disk-based filesystems, this object usually corresponds to a filesystem control block stored on d转载 2010-09-08 14:26:00 · 1037 阅读 · 0 评论 -
网络设备操作系统(Linux .vs. vxWorks)
<br />2001年IBM大张旗鼓的宣布支持Linux,并投入10亿美金用于Linux相关开发。 <br />最近的Cisco抛弃了其专有的IOS核心,在 ASR1000的控制平面软件上采用了Linux为基础平台。据传Huawei、H3C等厂商的软件平台也纷纷转向以Linux为基础,而以前他们都采用vxWorks作为基础。几年前,就连vxWorks的开发者风河公司也宣布同时支持vxWorks和Linux。由此看来,Linux在网络设备领域取代vxWorks几乎已成定局。这背后的原因究竟是什么?与vxWor转载 2010-09-24 11:58:00 · 4122 阅读 · 1 评论 -
linux是实时系统还是分时操作系统
<br />实时操作系统 实时操作系统<br /> 英文称Real Time Operating System,简称RTOS。<br />1.实时操作系统定义<br /> 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时转载 2010-09-28 15:36:00 · 19066 阅读 · 2 评论 -
本地POSIX线程库(NPTL)(经典,说明了真实linux系统的实现)
<br />在linux操作系统中,本地posix线程库(nptl)是一种软件特性,它可让linux的内核,高效地运行那些使用posix风格的线程所编写的程序。<br /><br /> <br /> <br /> <br /> <br /> <br />测试中,nptl在一个ia-32处理器上,成功地同时跑了10万个线程,启动这些线程只用了不到2秒。比较起来,在不支持nptl的内核上,这个测试花费了大约15分钟。<br /><br /> <br /> <br /> <br /> <br /> <br转载 2010-09-30 16:35:00 · 1400 阅读 · 0 评论 -
内核线程、轻量级进程、用户线程
<br />在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。<br />线程有自己的私有数据:程序计数器,栈空间以及寄存器。Why Thread?(传统单线程进程的缺点)<br /><!--[if !supportLists]-->1.<!--[endif]-->现实中有很多需要并发处理的任务,如数据库的转载 2010-09-30 12:39:00 · 905 阅读 · 0 评论 -
应用2.6内核超线程模式
<br />对于大多数应用软件开发者来说,Linux 2.4和2.6内核家族间的大部分差异对它们没有直接的影响。大多数内核变化只是为了提高系统性能而已。但也有例外,对某些应用软件而言,内核和系统的变化对它们的推广和它们对其它进程和线程的管理都具有一定的影响。 <br /> 2.6内核为用户带来了一种新的、改进的超线程模式。这种模式是通过NPTL(Native POSIX Thread Library)实施的。新的超线程模式的采用对于开发人员、系统运行时间库(如GNU C库)、共享应用软件库等有着非凡的转载 2010-09-30 14:47:00 · 1110 阅读 · 0 评论 -
Linux 用户态与内核态的交互——netlink 篇
<br />Linux 用户态与内核态的交互 <br />——netlink 篇[/size] <br /><br />作者:Kendo <br />2006-9-3 <br /><br />这是一篇学习笔记,主要是对《Linux 系统内核空间与用户空间通信的实现与分析》中的源码imp2的分析。其中的源码,可以到以下URL下载: <br />http://www-128.ibm.com/developerworks/cn/linux/l-netlink/imp2.tar.gz <br /><br />[si转载 2010-09-30 15:33:00 · 733 阅读 · 0 评论 -
Linux下实现RPC编程
<br />Linux 下面使用RPC需要使用到命令rpcgen.<br />在Linux下开发RPC程序流程如下:<br />1.写一个rpc程序<br /> 如test.x<br />2.使用rpcgen生成必须的文件,通常是客户端和服务器端以及头文件<br /> $rpcgen test.x<br />3.使用rpcgen生成服务器端和客户端的C语言代码<br /> $rpcgen -Ss -o test_server.c test.x<br /> $rpcgen -Sc -o转载 2010-11-26 16:25:00 · 2062 阅读 · 0 评论 -
Linux多线程编程和Linux 2.6下的NPTL(经典)
<br />这几天由于工作需要,琢磨了一下Linux下的多线程的相关资料。Linux下最常用的多线程支持库为Pthread库,它是glibc库的组成部分。但是关于Pthread的说明文档非常缺乏,特别是对POSIX多线程规范的介绍以及pthread库中多线程实现方式的介绍实在是少之又少。而多线程编程对于系统程序员而言是必须掌握的技术,因此总是让学习中的程序员觉得头痛不以。我自己也没有太多多线程编程的经验,在这里只是把自己收集到的一些关于Linux上多线程还算新的资料进行汇总来抛砖引玉,以便相互学习交流。<b转载 2010-10-22 13:43:00 · 1981 阅读 · 0 评论 -
Linux Benchmark工具
<br />Linux Benchmark工具,总结了一谢常用的,以免要用時忘記:<br />处理器性能的benchmark工具<br />* nbench http://www.tux.org/~mayer/linux/bmark.html<br />硬盘的benchmark工具<br />* hdparm<br />* IOzone http://www.iozone.org<br />http://hi.baidu.com/netwrom/blog/item/c6df49ecc5b99bdeb21cb转载 2010-11-02 13:24:00 · 10155 阅读 · 0 评论 -
Linux加载新硬盘的操作
<br />Linux随手 虚拟机里加载一个新硬盘<br /> 编译Linux内核,用的版本是最新的反而有问题,而且是“解决不了的”。没办法,只好换了一个低版本的内核。编译到半截的时候,突然说空间不够了,这事儿闹的。做Linux作业,时间都花在这样的事情上了,真郁闷。<br /> 没关系,咱的是虚拟机,空间不够只管加。上网一搜,找到有添加Linux新硬盘的办法,罗列如下。蓝字部分是要敲入的命令。这里虽然是说的虚拟机,但是很多地方在实际的电脑上也是可以用的。问题在于,有多少电脑安装Linux不是用虚拟机转载 2010-12-24 16:06:00 · 7140 阅读 · 0 评论 -
netfilter/iptables 简介使用 netfilter/iptables 为 Linux(内核 2.4.x)配置防火墙
<br />简介: netfilter/iptables 是与最新的 2.4.x 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器,则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。Mugdha Vairagade 将介绍 netfilter/iptables 系统、它是如何工作的、它的优点、安装和配置以及如何使用它来配置 Linux 系统上的防火墙以过滤 IP 信息包。<br /> <b转载 2011-01-03 17:49:00 · 1118 阅读 · 0 评论 -
NetFilter/iptables防火墙设置
<br />大多数主要的Linux发行商,包括SuSE,在防火墙设置方面都有某些独特的用户接口特征。他们这样并没有错,但是这样我就无法直接得到最想要的配置,所以只好自己手动设置。Iptable man页面完全是个依照iptable命令行句法的文件,它不提供关于将不同规则的防火墙结合起来的指导说明。你可以搜索到许多零散的关于iptables的信息,但是这些都不足以教会我想要弄明白的东西。最后我用运行着SuSE Linux Pro10.0 的一个Vmware虚拟机终于弄清楚了到底应该怎样做。下面就是用iptab转载 2011-01-03 19:45:00 · 1976 阅读 · 0 评论 -
关于linux图形界面的基本知识
<br />很多LINUX的初学者分不清除linux和X之间,X和Xfree86之间,X和KDE,gnome等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限肯可能存在错误,请高手指正. <br />一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的. <br /> 图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相转载 2011-01-08 22:59:00 · 887 阅读 · 0 评论