本文由该问题引入到内核锁的讨论,归纳例如以下为什么须要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v...
分类:
其他好文 时间:
2014-12-18 14:45:29
阅读次数:
165
现在的存储设备分成了两大阵营,一般是物理机械盘,直接在本地存储,一种是网络磁盘,通过主机适配器,连接到磁盘机柜上,实现的是远程的传输。一般情况下,我们是不应该干涉磁盘高速缓冲区的回写例程。Linux目前采用的是异步IO读写的方式,所以用户态调用的write函数只是将内..
分类:
其他好文 时间:
2014-12-16 19:33:36
阅读次数:
188
1.从用户空间到内核空间的时候需要进行系统调用 2.系统调用通过swi指令实现,这个时候会有一个参数,存放到r7寄存器,用来指定要调用的内核态函数。 3.一般内核态的实际函数可以再任意的.c文件实现,但是必须在call.S里面加上相应的函数指针(添加表项) 4.而且要在unistd.h里面对参数进行...
分类:
系统相关 时间:
2014-12-15 10:22:20
阅读次数:
228
协程是一种用户态的轻量级线程。本篇主要研究协程的C/C++的实现。利用ucontext提供的四个函数getcontext(),setcontext(),makecontext(),swapcontext()可以在一个进程中实现用户级的线程切换。本篇一步一步教你使用ucontext组件实现自己的协程库。 一步两步,一步两步,一步一步似爪牙,.......
分类:
其他好文 时间:
2014-12-13 17:58:59
阅读次数:
609
Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,
可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,
超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就
会启动休眠的那套机制来进入休眠.
(一).内核维护了:
1).两个链表,active_wake_locks[WAKE_LOCK_TYPE_COUNT]
active...
分类:
移动开发 时间:
2014-12-10 18:03:05
阅读次数:
160
通常程序访问的地址都是虚拟地址,用32位操作系统来讲,访问的地址空间为4G,linux将4G分为两部分。如图1所示,其中0~3G为用户空间,3~4G为内核空间。通过MMU这两部分空间都可以访问到实际的物理内存。
进程在用户态只能访问0~3G,只有进入内核态才能访问3G~4G
*进程通过系统调用进入内核态
*每个进程虚拟空间的3G~4G部分是相同的
*进程从用...
分类:
系统相关 时间:
2014-12-10 16:17:30
阅读次数:
278
Linux包过滤防火墙概述netfilter、iptables都可以称作Linux的防火墙,区别在于netfilter位于Linux内核的包过滤功能体系中,叫做Linux防火墙的“内核态”;而iptables位于/sbin/iptables,是用来管理防火墙规则的工具,可以叫做Linux防火墙的“用户态”。iptables的作用在于为包..
分类:
系统相关 时间:
2014-12-10 11:00:07
阅读次数:
280
内核中的并发和竞态 ================= 一般驱动程序运行在内核态中,只能调用内核空间中提供的函数,因此在处理并发和竞态时不能使用用户空间提供的库,如pthread库,内核有着自己的一套内部实现机制。 #并发及其...
分类:
其他好文 时间:
2014-12-09 12:32:41
阅读次数:
289
详细解释了用户态好核心态的区别以及它们之间转化的方式和条件。涉及到进程切换上下文的保存以及系统调用的原理。...
分类:
系统相关 时间:
2014-12-08 23:09:41
阅读次数:
415