与用户空间应用不同的是,内核不能调用标准C库或其它任何不属于内核的库。主要原因是,速度及大小的限制。标准C库对内核而言实在是太大了。许多常用的的 libc 函数已经在内核中实现了。内核中的库文件是在内核的根目录下 lib 目录下存放。如常用的字符串操作函数是在 lib/string.c 中定义的,调...
分类:
系统相关 时间:
2015-04-08 22:57:02
阅读次数:
250
并行:同一时刻,有多条指令在多个处理器上同时执行。
并发:同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
进程一般具有以下4大要素:
1、有一段程序供其执行(该程序可以多个进程共用)。
2、有专用的系统堆栈空间。
3、在内核中有对应的进程控制块。
4、有独立的存储空间,意味着拥有专有的用户空间。
线程相对于进程而言...
分类:
编程语言 时间:
2015-04-08 16:33:29
阅读次数:
146
关于select与epoll的区别,网上的文章已是一大堆。不过别人的终究是别人的,总得自己去理解才更深刻。于是在阅读了大量的文章后,再装模作样的看下源码,写下了自己的一些理解。 在开始之前,要明白linux中分用户空间、内核空间,这相当于两块不能直接相互访问的内存。而用户程序要访问设备,包括网...
分类:
其他好文 时间:
2015-04-04 19:48:37
阅读次数:
351
大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。
一、在用户空间,使用ioctl系统调用来控制设备,原型如下:
int ioctl(int fd,unsigned long cmd,...);
/*
fd:文件描述符
cmd:控制命令
...:可选参数:插入*argp,具体内容依赖于cmd
*/
用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些...
分类:
其他好文 时间:
2015-04-03 11:18:15
阅读次数:
210
先看外包装,__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 20:58:07
阅读次数:
326
1) Linux中主要有哪几种内核锁?2) Linux中的用户模式和内核模式是什么含意?3) 怎样申请大块内核内存?4) 用户进程间通信主要哪几种方式?5) 通过伙伴系统申请内核内存的函数有哪些?6) 通过slab分配器申请内核内存的函数有?7) Linux的内核空间和用户空间是如何划分的(以32位...
分类:
系统相关 时间:
2015-04-01 23:33:03
阅读次数:
192
在FreeRTOS中和UIP中,都使用到了一种C语言实现的多任务计数,专业的定义叫做协程(coroutine),顾名思义,这是一种协作的例程, 跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。 意思就是说协程不需要每次调用的时候都为任务准备....
分类:
编程语言 时间:
2015-04-01 21:41:49
阅读次数:
300
在Linux中,任何时候,处理器都处于以下三种状态之一:1)在用户空间,在某个进程中执行用户代码2)在内核空间,处于进程上下文中,执行某个特定的进程3)在内核空间,处于中断上下文中(与进程无关),进行中断处理应用程序、内核与硬件的关系图如下:
分类:
系统相关 时间:
2015-04-01 15:16:48
阅读次数:
152
note:epoll使用mmap加速内核与用户空间的消息传递。 这点实际上涉及到epoll的具体实现了。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就 很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。
分类:
其他好文 时间:
2015-03-31 21:58:40
阅读次数:
104
Linux将虚拟地址空间划分为两个部分,分别称为内核空间和用户空间 各个系统进程的用户空间是完全彼此分离的,而虚拟地址空间顶部的内核空间总是同样的,无论当前执行的是哪个进程。尽管Intel处理器区分4中特权级别,当Linux只使用两种不同的状态:核心态和用户态。两种状态的关键差别在于对高于TASK_...
分类:
系统相关 时间:
2015-03-28 15:41:43
阅读次数:
245