当前位置: 技术问答>linux和unix
Linux Kernel 问题
来源: 互联网 发布时间:2017-04-27
本文导语: 最近学习Linux上的程序开发,发现对很多Linux的基本的核心问题还不是很清楚。 望各位大侠给予解答,越通俗越好,越详细越好。。 1,Linux 为什么要分 用户态 和 内核态?原因是什么? 2,“在用户态调用内核态...
最近学习Linux上的程序开发,发现对很多Linux的基本的核心问题还不是很清楚。
望各位大侠给予解答,越通俗越好,越详细越好。。
1,Linux 为什么要分 用户态 和 内核态?原因是什么?
2,“在用户态调用内核态的系统调用是通过中断实现的” 这句话对吗?
3,怎么算系统调用? 程序中的 malloc() 会产生系统调用吗?
4,还是关于问题2,中断的好处是什么?为什么不直接采用函数调用呢?
期待回答。。先谢过!
望各位大侠给予解答,越通俗越好,越详细越好。。
1,Linux 为什么要分 用户态 和 内核态?原因是什么?
2,“在用户态调用内核态的系统调用是通过中断实现的” 这句话对吗?
3,怎么算系统调用? 程序中的 malloc() 会产生系统调用吗?
4,还是关于问题2,中断的好处是什么?为什么不直接采用函数调用呢?
期待回答。。先谢过!
|
1,Linux 为什么要分 用户态 和 内核态?原因是什么?
为了安全考虑,用户态权限小,这样用户态的程序不会导致操作系统奔溃。内核态什么权限都有,但是写操作系统的人一般比较牛。所以就很稳定。
2,“在用户态调用内核态的系统调用是通过中断实现的” 这句话对吗?
是的,是通过中断实现的。
3,怎么算系统调用? 程序中的 malloc() 会产生系统调用吗?
malloc不一定会产生系统调用,比如read, write,读写文件这些就会产生系统调用,需要访问资源的一般都需要系统调用
4,还是关于问题2,中断的好处是什么?为什么不直接采用函数调用呢?
直接函数调用是无法从用户态切换到内核态的,一定要中断才可以。
为了安全考虑,用户态权限小,这样用户态的程序不会导致操作系统奔溃。内核态什么权限都有,但是写操作系统的人一般比较牛。所以就很稳定。
2,“在用户态调用内核态的系统调用是通过中断实现的” 这句话对吗?
是的,是通过中断实现的。
3,怎么算系统调用? 程序中的 malloc() 会产生系统调用吗?
malloc不一定会产生系统调用,比如read, write,读写文件这些就会产生系统调用,需要访问资源的一般都需要系统调用
4,还是关于问题2,中断的好处是什么?为什么不直接采用函数调用呢?
直接函数调用是无法从用户态切换到内核态的,一定要中断才可以。
|
你想用户随便调用内核的东西,那不是容易乱套么?黑客攻击不就容易了么?(当然linux开源的,没这个问题,要是windous开这么个口就...)对于Intelx86,这是用户态进入内核态唯一的方式。
int 0x80 !修改DPL=3,DPL=CPL,只要DPL>=CPL,就可以进入内核态。
int 0x80 !修改DPL=3,DPL=CPL,只要DPL>=CPL,就可以进入内核态。
|
1 限制权限问题
2 可以
3 malloc 实现也是调用sbrk brk这些函数完成的!可以参考下源码
4 感觉目的还是为了限制权限问题
2 可以
3 malloc 实现也是调用sbrk brk这些函数完成的!可以参考下源码
4 感觉目的还是为了限制权限问题
|
4,还是关于问题2,中断的好处是什么?为什么不直接采用函数调用呢?
在x86平台下,系统调用会触发int 0x80中断,从而切换到特权级权限,一般的系统调用是不能从普通权限切换到特权级权限的。
在x86平台下,系统调用会触发int 0x80中断,从而切换到特权级权限,一般的系统调用是不能从普通权限切换到特权级权限的。