自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DenzilXu的专栏

小白ABC

  • 博客(18)
  • 收藏
  • 关注

原创 linux dentry cache

Linux dentry cache学习每个dentry对象都属于下列几种状态之一: (1)未使用(unused)状态:该dentry对象的引用计数d_count的值为0,但其d_inode指针仍然指向相关的的索引节点。该目录项仍然包含有效的信息,只是当前没有人引用他。这种dentry对象在回收内存时可能会被释放。 (2)正在使用(inuse)状态:处于该状态下的den

2013-06-27 15:15:02 8551

原创 进程间通信

前面说明了进程控制原语并且观察了如何调用多个进程。但是这些进程之间交换信息的唯一方法是经由fork或exec传送打开文件,或通过文件系统。本章将说明进程之间相互通信的其他技术—IPC(InterProcess Communication)。1 管道管道是UNIX IPC的最老形式,并且所有UNIX系统都提供此种通信机制,管道有两种限制;(1) 它们是半双工的。数据只能在一个方向上流动。

2013-05-07 15:07:54 839

原创 高级IO

1非阻塞IO前面将IO分成了带缓冲的IO和不带缓冲的IO,这是站在不同的系统调用的角度,针对系统调用是否使用了流缓冲而言的。而阻塞IO和非阻塞IO则是站在更高的、文件打开属性的角度,无论对于哪种系统调用,而看打开的文件是否阻塞而言的。非阻塞I/O使我们可以调用不会永远阻塞的I/O操作,例如open,read和write。如果这种操作不能完成,则立即出错返回,表示该操作如继续执行将继续阻

2013-05-07 14:59:43 742

原创 线程

1线程1.1 概念典型的UNIX进程可以看成只有一个线程:一个进程在同一时刻只做一件事情。有了多个线程以后,进程可以在同一时刻做多个事情,每个线程处理各自独立的任务。线程包含了表示进程执行环境必须的信息,其中包括进程中表示线程的线程ID、一组寄存器值,栈、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序副本、程序的全局内存和堆

2013-05-07 14:51:51 669

原创 信号

1信号信号是软件中断。很多比较重要的应用程序都需处理信号。信号提供了一种处理异步事件的方法,例如终端用户键入中断键,则会通过信号机构停止一个程序。首先,每个信号都有一个名字。这些名字都以三个字符SIG开头。例如,SIGABRT是夭折信号,当进程调用abort函数时产生这种信号。SIGALR M是闹钟信号,当由alarm函数设置的时间已经超过后产生此信号。在头文件中,这些信号都被定义为正

2013-04-22 20:03:48 795

原创 进程控制与进程关系

1进程IDfd分配是对一个进程内部而言的,每个进程内的fd是相互独立的。而进程的ID确实整个系统统一分配的。每个进程都有一个非负整型的唯一进程ID。因为进程ID标识符总是唯一的,常将其用做其他标识符的一部分以保证其唯一性。有某些专用的进程:进程ID 0是调度进程,常常被称为交换进程( swapper )。该进程并不执行任何磁盘上的程序—它是内核的一部分,因此也被称为系统进程。进程I

2013-04-22 20:01:51 1156

原创 进程环境

1 main、exit、atexitC程序总是从main函数开始执行。main函数的原型是:int main(int argc, char *argv[] );其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组。当内核起动C程序时(使用一个exec函数),在调用main前先调用一个特殊的起动例程。可执行程序文件将此起动例程指定为程序的起始地址——这是由连接编辑程

2013-04-22 19:59:31 829

原创 文件IO与标准IO库

1不带缓冲IO所谓不带缓存指的是每个read和write都调用内核中的一个系统调用。这些不带缓存的I/O函数不是ANSI C的组成部分,但是是POSIX.1和XPG3的组成部分。(这unbuffered I/O,是与后面说明的标准I/O函数相对)。2 文件描述符、open(creat、lseek)对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存

2013-04-09 10:10:54 1170

原创 文件权限与进程ID

1 stat、fstat、lstat#includeint stat(const char *restrict pathname, struct stat *restrict buf);int fstat(int fd, struct stat *buf);int lstat(const char *restrict pathname, struct stat *restric

2013-04-01 11:26:45 1113

原创 Ext2文件系统—文件读写

1、定义只有在“打开”了文件以后,或者说建立了进程与文件的“连接”之后,才能对文件进行读写。为了提高效率,Linux的读写操作都是带缓冲的,即写的时候先写到缓冲副本中,读的时候也从缓冲副本中读入。在多进程的系统中,由于同一文件可为多个进程共享,缓冲的作用就更加显著。Linux文件缓冲设置在文件层的inode结构中。它里面有一个指针i_mapping,它指向一个address_space数据

2013-02-12 11:58:28 3969

原创 Ext2文件系统—文件打开关闭

1、文件打开1.1 定义     用户进程在能够读写一个文件之前必须要先打开这个文件。对文件的读写从概念上应该是一种进程与文件系统之间的一种“有连接”通信,所谓“打开文件”实质上就是在进程与文件之间建立起链接,而“打开文件号”就唯一的标识着这样一个连接,也称为文件描述符(file descriptors,简称fd)。不过,严格意义上的“连接”意味着一个独立的“上下文”,如果一个进程与某个目

2013-01-04 10:52:46 2478

原创 Ext2文件系统—安装和卸载

1、文件系统安装含义1.1 定义       对于文件系统安装,在Ext2文件系统—路径名查找—1 中已有准确的解释,这里做进一步补充说明。所谓安装,就是从一个存储设备上读入超级块,在内存中建立起一个super_block结构,再进而将此设备上的根目录与文件系统中已经存在的一个空白目录挂上钩。安装一个文件系统实际上是安装一个物理设备(文件系统在此物理设备上)。系统调用mount()将一

2012-12-04 10:58:46 1973

原创 MapR 架构、设计、实现分析

1、MapR是什么        在大数据这个潜力无比的新兴市场中,Hadoop无疑已经提前卡位成功。 在Hadoop的基础上,人们纷纷推出了自己的发行版和增值服务,比如Cloudera推出了CDH;IBM则推出了InfoSphere BigInsights;Yahoo更是将原来开发Hadoop的部分独立拆分出来成立了一家新公司Hortonworks。MarR与上述类似,它是2009年注册

2012-11-22 21:41:37 3092

原创 Ext2文件系统—路径名查找—4--do_follow_link(nd_set_link、nd_get_link、__vfs_follow_link)详述

1、符号链接与硬链接        首先我们来分清符号链接与硬链接的概念。        Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。两种链接都 可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建符号链接。但是它们在内核中使用的是两个不同的系统调用,分别对应内核的sys_link和s

2012-11-14 13:28:10 2122

原创 Ext2文件系统—路径名查找—3--ext2_lookup(ext2_find_entry、ext2_iget、d_splice_alias)详述

前言            ext2_lookup是real_lookup中从VFS转入具体文件系统(此处是Ext2文件系统)处理的函数。从real_lookup传递给ext2_lookup的参数是父目录的inode结构 和 通过d_alloc函数分配的当前路径分量的dentry空壳(说是空壳,也不尽然,它里面填充有一些已知道的信息,其中就包括重要的:当前路径分量名)。ext2_lookup返

2012-11-12 17:09:50 4971 1

原创 Ext2文件系统—路径名查找—2--do_lookup简述

首先我想先承接上一篇博文赘述一下dentry和vfsmount是如何联系起来的。从 __lookup_mnt 中可以看到,可以通过vfsmount中相关dentry结构域找到dentry。而从一个dentry如何找到对应它的vfsmount结构呢?其实这是在最开始的初始化函数 do_path_lookup 中就通过把fs_struct 结构的 root 或 pwd 赋值给nd中的path(nd

2012-11-09 21:43:19 1289

原创 Ext2文件系统—路径名查找—1--挂载、follow_dotdot、follow_mount、lookup_mnt详解

1、vfsmount对于文件系统的挂载,最重要的是理解vfsmount结构,它表示了文件系统的挂载信息。其结构如下所示。struct vfsmount {struct list_head mnt_hash;struct vfsmount *mnt_parent;/* fs we are mounted on */struct dentry *mnt_mountp

2012-11-05 16:59:51 3055 1

转载 rcu_assign_pointer、rcu_dereference、ACCESS_ONCE

题记:看代码不要死死的一条一条往后看,要适当的联系上下文,看出整体逻辑性,流程性。事实上,编译器和处理器也不是呆板的一条一条往后执行的,它也会有预取和逻辑判断。 由内存屏障到RCU的发布订阅内存屏障主要解决的问题是编译器的优化和CPU的乱序执行。 编译器在优化的时候,生成的汇编指令可能和c语言程序的执行顺序不一样,在需要程序严格按照c语言顺序执行时,需要显式的告诉编译不需要优化

2012-11-05 11:49:25 9988

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除