进程的内核态,用户态以及信号

Posted 简练编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程的内核态,用户态以及信号相关的知识,希望对你有一定的参考价值。

1.进程间的切换很大程度上实际就是寄存中段基址的切换。

 
2.计算机一般会把虚拟地址分为用户空间和内核空间。例如x86liunx虚拟地址空间前3G为用户空间,后1G是内核空间。3G用户空间给用户自己的进程调用,所有的进程分割利用这3G,1G的内核供系统调用用,而每一个进程都可以通过系统调用进入内核。
 
3.理解进程进入内核这个概念。我们知道用户进程在自己的规定的用户空间(3G)中存储变量,存储指令。如果这时候我们调用了一个函数比如fopen。这个调用会用到内核中的一些数据,用户进程是不能跨界去访问内核空间数据的,那没怎么办呢?系统会给每一个进程分配两个栈,用户栈(用户空间中),内核栈(内核空间中)。进入内核态只是把栈指针寄存器中的值由用户栈修改为内核栈而已,当然这只是一个最浅显的理解,期间还会做其他事情。
 
4.信号是进程间的通信手段之一。内核中对每一个进程都有一个表来保存信号。当内核需要将信号传递给某个进程的时候就在对应的表中写入信号。当该进程进入内核态并再次切换到用户态前会查看表中的信号,如果有信号,进程会首先执行信号对应的操作。
kill -91001这种实际就是给1001这个进程发送了终止信号奥,每一个信号都会有默认动作比如接收到9的话就自行终止了,但是我们也可以自行注册函数。
实际上一个进程接收和发送信号的前提是进入过内核调用。
 
 
http://c.biancheng.net/cpp/html/2784.html
http://bbs.csdn.net/topics/360197105

以上是关于进程的内核态,用户态以及信号的主要内容,如果未能解决你的问题,请参考以下文章

Linux操作系统 进程之间的通信

linux 信号处理

linux 用户态和内核态以及进程上下文中断上下文 内核空间用户空间理解

linux下怎么实现内核态和用户空间进程共享内存

linux进程为啥有用户栈和内核栈,

Linux_进程信号(进程信号生命周期_Core Dump调试_进程信号捕捉_系统调用向进程发送信号_阻塞信号_信号集函数_处理信号内核态与用户态_C语言volatile关键字_SIGCHLD信号)(