易截截图软件、单文件、免安装、纯绿色、仅160KB

linux内核情景分析{中断 系统调用 内存}


Linux的系统调用是通过中断来实现的,从用户态进入系统态。用户态和系统态有很清晰的区分,保证了安全。系统调用表是系统调用的跳转表。使用寄存器传递参数,而不是栈,因为用户态是无法访问系统栈的。地址错误是通过页面异常来处理的。
Linux内核并不支持真正意义上的线程,
LinuxThreads
是用与普通进程具有同样内核调度视图的轻量级进程来实现线程支持的。这些轻量级进程拥有独立的进程
id
,在进程调度、信号处理、
IO
等方面享有与普通进程一样的能力。由于异步信号是内核以进程为单位分发的,而
LinuxThreads
的每个线程对内核来说都是一个进程,且没有实现
"
线程组
"
,因此,某些语义不符合
POSIX
标准,比如没有实现向进程中所有线程发送信号,
README
对此作了说明。在
LinuxThreads
中,管理线程的栈和用户线程的栈是分离的,管理线程在进程堆中通过
malloc()
分配一个
THREAD_MANAGER_STACK_SIZE
字节的区域作为自己的运行栈。
"
一对一
"
模型的好处之一是线程的调度由核心完成了,而其他诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。管理线程与其他线程之间通过一对
"
管理管道(
manager_pipe[2]

"
来通讯。当核内既支持进程也支持线程时,就可以实现线程
-
进程的
"
多对多
"
模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度 者,选择合适的用户级线程在其空间中运行。这就是前面提到的
"
混合
"
线程模型,既可满足多处理机系统的需要,也可以最大限度的减小调度开销。绝大多数商业 操作系统(如
Digital Unix

Solaris

Irix
)都采用的这种能够完全实现
POSIX1003.1c
标准的线程模型。在核外实现的线程又可以分为
"
一对一
"

"
多对 一
"
两种模型,前者用一个核心进程(也许是轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而后者则完全在核外实现多线程,调度也在用 户态完成。后者就是前面提到的单纯的用户级线程模型的实现方式,显然,这种核外的线程调度器实际上只需要完成线程运行栈的切换,调度开销非常小,但同时因 为核心信号(无论是同步的还是异步的)都是以进程为单位的,因而无法定位到线程,所以这种实现方式不能用于多处理器系统,而这个需求正变得越来越大,


相关文档:

linux下 php5.3.2 调用 so

php 通用的调用 so的方法是使用dl()函数,但是在php5.3之后不再支持这种方法,仅支持静态调用,使用dl() 动态调用的方法见:
   引用页1:   http://tech.idv2.com/2007/07/06/use-local-so-in-php/
感谢原作者提供的清晰明了的方法,但是我在5.3.1版本i中没有通过,于是我找到了页面:
    ......

【linux】c++ 内存管理(二)

3. 指针与数组的比较
不同点:
      数组:要么在惊天存储区域被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命周期内保持不变,只有数组的内容可以改变。
指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用 ......

Linux多线程编程

一:Linux多线程编程:
        线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许 ......

Linux内核编码拾锦

1.一种定义函数指针的方法
<linux/proc_fs.h>
typedef int (read_proc_t)(char *page, char **start, off_t offset, int count, int *eof, void *data);
read_proc_t *proc_read;
    这种定义方法有一个优势就是,即使你没有看到read_proc_t的定义,也能够清楚的知道proc_read是一个指针,如下面 ......

Linux快速构建apache web服务器

 apache服务器的最新稳定发布版本是httpd-2.2..0,官方下载地址是:http://httpd.apache.org/download.cgi。我们通过下面的步骤来快速的搭建一个web服务器。
  1、 下载源码文件httpd-2.2.0.tar.gz 到linux服务器的某个目录。
  2、 解压文件 # tar zxvf httpd-2.2.0.tar.gz .
  3、 配置 # ./c ╟refix=/usr ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号