
linux c
文章平均质量分 80
nfme
这个作者很懒,什么都没留下…
展开
-
ext2文件系统解构探析
内容要点: 超级块 块位图 inode位图 数据块 inode结构 VFS基本原理 整理听课笔记及自己可与搜集的各种资料,按理解总结一些文件系统,并且其中部分内容可参看我的上篇笔记《硬盘存储结构小结》; 文件系统:系统结构: 块设备:文件组织管理以物理块为单位。物理块是块设备上大小相同的存储区域(如磁盘上的扇区)。一个块究竟多...原创 2012-11-12 19:15:26 · 142 阅读 · 0 评论 -
自旋锁
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁,在单处理器且不可抢占的情况下同样不需要自旋锁)。 自旋锁同样是为了保护共享资源而得出来的一种锁,它与互斥锁所起到的作用类似。当资源申请者对共享资源进行访问时必需取得这个锁才能继续执行,直接持有...原创 2012-12-21 21:09:13 · 153 阅读 · 0 评论 -
Condition Variable与Mutex搭配的前因后果
本来打算用一个形象的生活情况来比喻条件互斥的,但想了再想实在没有想到比较科学贴切的比喻.那还是开门见山来说吧.Condition Variable无论在C/C++还是C#,JAVA语言里,都会搭配一个Mutex来用.我们知道Mutex的普通意义上是维持一个互斥变量,从而保证一个或一组操作的原子性.同样,简单的说Mutex加在Condition Variable上也是为了保证它的原子...原创 2012-12-21 21:01:33 · 382 阅读 · 0 评论 -
线程间同步
前面专门找了一些资料去了解函数的可重入性以及线程安全同步,我们知道在多线程并发访问共享数据时候往往会出现数据冲突,这跟之前的函数可重入性是一样的.比如两个线程要对一个全局变量加1.但这个过程在x86平台上并非原子操作,它可能会经过以下三步才能完成:1:从内存中读取变量到寄存器中2:寄存器加13:将寄存器的值写回内存 这一个非原子操作可想而知,如果有多线程并发执行,那么这...原创 2012-12-10 16:11:33 · 141 阅读 · 0 评论 -
可重入与线程安全
可重入 & 信号安全 可重入性函数( Reentrant Function) 可重入与线程安全是两个独立的概念, 都与函数处理资源的方式有关。 首先,可重入和线程安全是两个并不等同的概念,一个函数可以是可重入的,也可以是线程安全的,可以两者均满足,可以两者皆不满组(该描述严格的说存在漏洞,参见第二条)。 其次,从集合和逻辑的角度看,可重入是线程安全的子集,可重入是线程...原创 2012-12-10 15:37:20 · 212 阅读 · 0 评论 -
Linux信号(signal) 机制分析
分享应用程序公共主页人人生活人人小组同名同姓校园百科大学百科人人热点人人小站人人逛街人人校招【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注...原创 2012-11-17 17:27:02 · 185 阅读 · 0 评论 -
linux进程间通信(IPC)与控制---管道
进程有独立的用户内存地址,进程的全局变量对其它进程透明,需通过内核缓冲内共享数据,通信管道: 声明在unistd.h头文件中原型 int pipe(int filedes[2]); filedes[0]表示输入管道,filedes[1]表示输出管道. 返回值:0表示创建管道成功,-1为失败/代码测试: #include <stdio.h>#incl...原创 2012-11-16 22:41:28 · 180 阅读 · 0 评论 -
Linux自定义系统调用
Linux自定义系统调用 如果用户在Linux中添加新的系统调用,应该遵循几个步骤才能添加成功,下面几个步骤详细说明了添加系统调用的相关内容。2.1添加源代码第一个任务是编写加到内核中的源程序,即将要加到一个内核文件中去的一个函数,该函数的名称应该是新的系统调用名称前面加上sys_标志。假设新加的系统调用为mycall(int number),在/usr/src/linux/...原创 2012-11-16 12:05:04 · 261 阅读 · 0 评论 -
linux系统调用
目录:1. Linux系统调用原理2. 系统调用的实现3. Linux系统调用分类及列表4.系统调用、用户编程接口(API)、系统命令和内核函数的关系5. Linux系统调用实例1.系统调用原理 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关...原创 2012-11-15 18:20:08 · 215 阅读 · 0 评论 -
strace实现原理(ptrace)
strace实现原理 引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程...原创 2012-11-15 17:37:42 · 740 阅读 · 0 评论 -
运用exec与dup2写的小测试
上代码: /* upper.c */#include <stdio.h>int main(void){int ch;while((ch = getchar()) != EOF) {putchar(toupper(ch));}return 0;} 终端输入:upper的默认输出是终端,gcc -g upper.c -o up...原创 2012-11-15 16:44:43 · 274 阅读 · 0 评论 -
exec系列函数介绍
用fork 创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec 函数以执行另一个程序。当进程调用一种exec 函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec 并不创建新进程,所以调用exec 前后该进程的id并未改变。exec函数可分了两大系列,主要的区别在于命令行参数的传递. ...原创 2012-11-15 15:51:13 · 179 阅读 · 0 评论 -
fork函数
fork,分叉之意,这是因为其一次调用,两次返回所造成的.先看看一个小程序的执行结果. #include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(void){ pid_t pid; char ...原创 2012-11-15 15:50:50 · 119 阅读 · 0 评论 -
VFS中的file_operations与inode的关系
每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,现在我们明确一下:已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。在file结构体中维护File Status Flag(file结构体的成员f_flags)和当前读写位置(file结构体的...原创 2012-11-13 11:59:00 · 718 阅读 · 0 评论 -
ext2文件系统结构体组成
The Second Extended File System(ext2)文件系统是Linux系统中的标准文件系统,是通过对Minix的文件系统进行扩展而得到的,其存取文件的性能极好。在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,并...原创 2012-11-13 11:19:14 · 1112 阅读 · 0 评论 -
Linux Shell编程之U盘加载与卸载
额,也不记得是什么时候写的了···偶然翻到···拿出来供学习而已···写得挺粗糙的··(估计还会有bug的说,哈哈哈)· 老鸟飘过吧··代码:#! /bin/shecho "请选择你要进行的操做项" echo "1:加载U盘驱动" echo "2:去除U盘驱动" echo "3:复制U盘内容到指定文件夹" echo "4...原创 2012-11-12 19:22:13 · 1413 阅读 · 0 评论 -
解决fedora16亮度调度,双显卡用户切换问题
ati显卡调度亮度,因fedora16是在grub2引导的,所以找到引导文件/boot/grub2/grub.cfg:ctrl+f:输入字符串quiet查找到该行,空格,加入引导代码:acpi_backlight=vendor acpi_osi=linux,保存。重启生效。另,但每次登陆默认亮度总为最高,而且默认会两显示电源开启,这样消耗电能加大排热量可以这样配置:1:由于fedora16缺失rc...原创 2012-11-12 19:16:32 · 151 阅读 · 0 评论 -
linux c实现的简单web响应程序(会完善成一个简单web服务器)
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/socket.h>原创 2013-01-13 14:45:40 · 336 阅读 · 0 评论