- 博客(14)
- 资源 (13)
- 收藏
- 关注
原创 Linux内核源代码情景分析-mmap后,文件与虚拟区间建立映射
一、文件映射的页面换入 在mmap后,mmap参考Linux内核源代码情景分析-系统调用mmap(),当这个区间的一个页面首次受到访问时,会由于见面无映射而发生缺页异常,相应的异常处理程序do_no_page()。static inline int handle_pte_fault(struct mm_struct *mm, struct vm_area_struct * vma, uns
2015-04-22 20:22:13 1770
原创 Linux内核源代码情景分析-共享内存
一、库函数shmget()--共享内存区的创建与寻找asmlinkage long sys_shmget (key_t key, size_t size, int shmflg){ struct shmid_kernel *shp; int err, id = 0; down(&shm_ids.sem); if (key == IPC_PRIVATE) { err = newseg
2015-04-22 20:16:36 2749
原创 Linux内核源代码情景分析-信号
一、我们先来看下信号的所设计的数据结构:struct task_struct { int sigpending; int exit_code, exit_signal; /* Protects signal and blocked */ struct signal_struct *sig; sigset_t blocked; struct sigpending pending;
2015-04-21 09:22:26 3073
原创 Linux内核源代码情景分析-虚拟文件系统
我们先来看两张图: 第一张是VFS与具体文件系统的关系示意图: 第二张是Linux文件系统的层次结构: 特殊文件:用来实现”管道“的文件,特别是"命名管道"的FIFO文件,还有Unix域的socket,也都属于特殊文件;还有在/proc目录下的一系列文件。 磁盘文件:就是存在硬盘上的文件。 设备文件:sudo mount -t ext2 /dev/sdb1 /mnt/
2015-04-10 09:44:08 1957
原创 Linux内核源代码情景分析-进程间通信-命名管道
建立命名管道,mknod mypipe p。命名管道存在硬盘上,而管道不是。 通过open打开这个命名管道,在内核中通过sys_open()实现,filename是"***/mypipe "。 相关部分,请参考Linux内核源代码情景分析-文件的打开。 sys_open进入filp_open,然后在open_namei中调用一个函数path_walk(),根据文件的路径名在文件系
2015-04-10 08:44:14 1432
原创 Linux内核源代码情景分析-进程间通信-管道
一、我们先来介绍一下init_pipe_fs。static DECLARE_FSTYPE(pipe_fs_type, "pipefs", pipefs_read_super, FS_NOMOUNT|FS_SINGLE);static int __init init_pipe_fs(void){ int err = register_filesystem(&pipe_fs_type); if
2015-04-10 08:39:16 1735
原创 Linux内核源代码情景分析-特殊文件系统/proc-对/proc/self/cwd的访问
继上篇文章Linux内核源代码情景分析-特殊文件系统/proc,我们对/proc/loadavg访问后,这篇文章是对/proc/self/cwd的访问。int __user_walk(const char *name, unsigned flags, struct nameidata *nd){ char *tmp; int err; tmp = getname(name);//在系统空
2015-04-08 09:49:48 2650
原创 Linux内核源代码情景分析-特殊文件系统/proc
由于proc文件系统并不物理地存在于任何设备上,它的安装过程是特殊的。对proc文件系统不能直接通过mount()来安装,而要先由系统内核在内核初始化时自动地通过一个函数kern_mount()安装一次,然后再由处理系统初始化的进程通过mount()安装,实际上是"重安装"。 一、在内核初始化时调用init_proc_fs(),代码如下:static DECLARE_FSTYPE(proc_
2015-04-07 18:39:21 3001
原创 Linux内核源代码情景分析-文件的写
write对应的系统调用是sys_write,代码如下:asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count){ ssize_t ret; struct file * file; ret = -EBADF; file = fget(fd); if (file) { if (file
2015-04-03 19:05:44 1618
原创 Linux内核源代码情景分析-文件的打开
打开文件的系统调用是open(),在内核中通过sys_open()实现,假设filename是"/usr/local/hello.c",且假设这个文件已经存在,代码如下:asmlinkage long sys_open(const char * filename, int flags, int mode){ char * tmp; int fd, error;#if BITS_PER_L
2015-04-03 10:56:42 1418
原创 Linux内核源代码情景分析-文件系统安装后的访问
在Linux内核源代码情景分析-文件系统的安装,一文中,已经调用sudo mount -t ext2 /dev/sdb1 /mnt/sdb,在/mnt/sdb节点上挂载了文件系统,那么我们接下来访问/mnt/sdb/hello.c节点。我们来看一下path_walk的执行有什么不同?int path_walk(const char * name, struct nameidata *nd){
2015-04-02 20:33:22 1430
原创 Linux内核源代码情景分析-访问权限与文件安全性
在Linux内核源代码情景分析-从路径名到目标节点,一文中path_walk代码中,err = permission(inode, MAY_EXEC)当前进程是否可以访问这个节点,代码如下:int permission(struct inode * inode,int mask){ if (inode->i_op && inode->i_op->permission) { int retv
2015-04-02 19:46:43 2066 1
原创 Linux内核源代码情景分析-文件系统的安装
执行sudo mount -t ext2 /dev/sdb1 /mnt/sdb,将文件系统挂在到/mnt/sdb上。系统调用mount,映射到内核层执行的是sys_mount。假设/dev/sdb1和/mnt/sdb都位于ext2文件系统中。asmlinkage long sys_mount(char * dev_name, char * dir_name, char * type, u
2015-04-02 19:44:50 2530
原创 Linux内核源代码情景分析-从路径名到目标节点
先看外包装,__user_walk,假设name为/usr/local/hello.cint __user_walk(const char *name, unsigned flags, struct nameidata *nd){ char *tmp; int err; tmp = getname(name);//在系统空间分配一个页面,并从用户空间把文件名复制到这个页面 err =
2015-04-02 19:43:31 1896
压缩SDK demo
2014-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人