扫盲回帖系列之2——操作系统的疑问

来源:互联网 发布:吉林大学网络自助中心 编辑:程序博客网 时间:2024/06/01 10:25

原始提问帖见http://bbs.csdn.net/topics/390919849。摘录如下:

linux系统中,进程的地址空间分成两部分:用户空间和内核空间。内核空间从3G-4G(虚拟地址)所有的进程的内核空间都是共享的,那么我的疑问是内核空间里面到底是一些什么东西,我们所说的操作系统又在哪里,操作系统难道不也是一个进程吗?

-------------------------------------------------------------------------------------------------------

回答如下:

        我对Linux内核不是很了解,但一些基本概念还是有的:
        1、首先要界定内核和操作系统。内核虽然是操作系统的核心,但一般一个实际可用的操作系统并不只包含内核,比如至少要包含Shell。
        2、操作系统的基本任务是为应用程序提供服务。这个服务是有层次的。
                   最低级层次是面向内核空间运行的驱动开发的,提供的是内核级系统调用。
                   面向应用程序最低级的系统调用一般通过陷入指令(如软中断)实现。C语言的库函数会对这些系统调用做一个初级包装。
                   其它语言的开发环境(比如脚本语言:Shell,TCL,Perl……)一般都是在C/C++工具基础上开发的。
         3、既然理解了操作系统作为服务提供者这一角色的认知,那么就不难回答操作系统是否是一个进程的问题了。
                   1)、创建新的进程本身就是操作系统提供的一个比较重要的服务。
                   2)、笼统来说操作系统本身是包含进程的,比如Init进程。
         4、最后回答3GB-4GB内核空间的问题。因为作为操作系统核心的内核出于保护的需要,需要在保护的虚拟地址空间运行,32位LInux下这个空间就是3GB-4GB地址范围。每个应用程序包括前面提到的作为广义操作系统一部分的Init进程用户态部分,运行在自己的私有0-3GB用户地址空间。用户态部分需要操作系统的内核服务,必须通过前面提到的规范入口(如陷入指令、软中断)在当前进程环境(Context)下切换到内核状态执行内核代码、访问内核数据,然后返回到应用程序(进程)的用户态部分继续执行。实际上内核的主体基本上是由一些函数组成,供应用程序(进程)来调用(即触发执行)。当然作为服务多个并发应用(进程)的操作系统,也会运行一些非当前应用(进程)请求服务之外的管理事务,比如响应中断(如时钟中断,I/O中断等)、任务调度等。虽然内核也可能在内核空间创建一些内核线程/进程来执行一些后台服务,比如内存管理(如工作集管理)等。

0 0
原创粉丝点击