本文由该问题引入到内核锁的讨论,归纳例如以下为什么须要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v...
分类:
其他好文 时间:
2014-10-08 13:05:15
阅读次数:
158
最近在用户态下突然需要用到原子变量,又不想自己编译boost,思来索去,无意中竟发现gcc还有这一组内置函数. //先做操作,再返回变化后的值
type?__sync_fetch_and_add?(type?*ptr,?type?value);
typ...
分类:
其他好文 时间:
2014-10-03 15:11:55
阅读次数:
191
Linux 用户态与内核态的交互在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核的交互就全部使用了netlink,著名的内核包过滤框架Netfilter在与用户空间的通 读,也在最新版本中...
分类:
系统相关 时间:
2014-09-27 12:05:59
阅读次数:
262
write用的是文件描述符,fwrite用的是文件流(或者叫文件指针)fopen返回指针,open返回文件描述符(整数).fread是带缓冲的,read不带缓冲.fwrite() 是先写到用户空间缓冲区,等满了再调用 write()fwrite() 写的可以用 fflush() 刷到内核态。你如果用...
分类:
其他好文 时间:
2014-09-24 18:45:57
阅读次数:
174
究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:
1)例子
C代码
1. void testfork(){
2. if(0 = = fork()){
3. printf(“create new process...
分类:
系统相关 时间:
2014-09-23 18:21:25
阅读次数:
429
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术。内存池分类:1、不定长内存池。典型的实现有apr_pool、obstack。优点是不需要为不同的数据类型创建不同的内存池,缺点是造...
分类:
其他好文 时间:
2014-09-23 01:54:23
阅读次数:
279
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术。内存池分类:1、不定长内存池。典型的实现有apr_pool、obstack。优点是不需要为不同的数据类型创建不同的内存池,缺点是造...
分类:
其他好文 时间:
2014-09-23 01:53:23
阅读次数:
258
http://blog.163.com/di_yang@yeah/blog/static/86118492201212534924900/一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换?用户态堆栈指针:ss和esp;内核态堆栈指针:ss0和esp0;二者均位于任务...
分类:
系统相关 时间:
2014-09-22 10:32:22
阅读次数:
229
什么是系统调用?
Linux内核内置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。
系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。...
分类:
系统相关 时间:
2014-09-19 17:47:05
阅读次数:
266
内核空间和用户空间,内核态和用户态(转载)内核空间和用户空间Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址 0xC0000000到0xFFFFFFFF),供内核使用,称为“...
分类:
其他好文 时间:
2014-09-18 00:31:22
阅读次数:
236