linux内核情景分析{中断 系统调用 内存}
Linux的系统调用是通过中断来实现的,从用户态进入系统态。用户态和系统态有很清晰的区分,保证了安全。系统调用表是系统调用的跳转表。使用寄存器传递参数,而不是栈,因为用户态是无法访问系统栈的。地址错误是通过页面异常来处理的。
Linux内核并不支持真正意义上的线程,
LinuxThreads
是用与普通进程具有同样内核调度视图的轻量级进程来实现线程支持的。这些轻量级进程拥有独立的进程
id
,在进程调度、信号处理、
IO
等方面享有与普通进程一样的能力。由于异步信号是内核以进程为单位分发的,而
LinuxThreads
的每个线程对内核来说都是一个进程,且没有实现
"
线程组
"
,因此,某些语义不符合
POSIX
标准,比如没有实现向进程中所有线程发送信号,
README
对此作了说明。在
LinuxThreads
中,管理线程的栈和用户线程的栈是分离的,管理线程在进程堆中通过
malloc()
分配一个
THREAD_MANAGER_STACK_SIZE
字节的区域作为自己的运行栈。
"
一对一
"
模型的好处之一是线程的调度由核心完成了,而其他诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。管理线程与其他线程之间通过一对
"
管理管道(
manager_pipe[2]
)
"
来通讯。当核内既支持进程也支持线程时,就可以实现线程
-
进程的
"
多对多
"
模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度 者,选择合适的用户级线程在其空间中运行。这就是前面提到的
"
混合
"
线程模型,既可满足多处理机系统的需要,也可以最大限度的减小调度开销。绝大多数商业 操作系统(如
Digital Unix
、
Solaris
、
Irix
)都采用的这种能够完全实现
POSIX1003.1c
标准的线程模型。在核外实现的线程又可以分为
"
一对一
"
、
"
多对 一
"
两种模型,前者用一个核心进程(也许是轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而后者则完全在核外实现多线程,调度也在用 户态完成。后者就是前面提到的单纯的用户级线程模型的实现方式,显然,这种核外的线程调度器实际上只需要完成线程运行栈的切换,调度开销非常小,但同时因 为核心信号(无论是同步的还是异步的)都是以进程为单位的,因而无法定位到线程,所以这种实现方式不能用于多处理器系统,而这个需求正变得越来越大,
相关文档:
telnet与ssh只是基于字符界面的远程控制,如果想要对linux服务器时行桌面的远程控制的话,我们可以安
装vnc-server服务来实现
1. 查看Vnc安装版本。
ps aux|grep Xvnc
2.设置VNC桌面
2.1
我们要为有权可以登录的用户设置登录桌面,修改配置文件/etc/sysconfig/vncservers :
VNCSERVERS="2:username"
VNCSERVERARGS ......
Linux 内核简介
现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。
图 2. GNU/Linux 操作系统的基本体系结构
系统调用接口(SCI)的方法
实际上,体系结构可能并不像图 2 所示的一样清晰。例如,处理系统调用(从用户空间切换到内核空 ......
图 1. Linux 文件系统组件的体系结构
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一 ......
我在Vmware虚拟机上安装Linux时,第一张和第二张光盘都顺利挂载,但是在第三张光盘时却出现无法挂载的提示窗口。此时我的解决办法是:Red Hat Linux/setting/Hardware/cd/dvd(Ide)中配置好Image file后勾上Device status中的Connected即可 ......
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是一个指针,如下面 ......