操作系统内核空间和用户空间的互访问

简介:

前面写了很多的文章来说明了这个问题,并且在文章中均举了一些例子,如果为了解决具体问题,那么那些就已经足够了,但是如果想实现一个操作系统,这些就远远不够了。

硬件是软件的底层,这是一个前提,硬件是舞台,软件都是舞者,操作系统是应用程序的底层,操作系统是舞台,应用程序是舞者,并且,硬件是操作的系统的舞台,这里操作系统成了舞者,这就是计算机的层次(对于有操作系统的计算机而言,不包括裸机)。在操作系统理论中,往往将进程的地址空间分为内核空间和用户空间,这样的话就实现了操作系统最起码的安全性。但是存在一个疑问,内核空间的保护不是cpu硬件提供的吗?比如Intel的x86处理器的特权环的概念,怎么会是OS的概念呢?注意,cpu只是提供了一个机制而已,比如特权环的机制使得内核地址空间的保护变得更加容易和可靠,就像Intel的x86处理器那样,你完全可以不用那一套,自己实现一套内核和用户分离的机制,正如很多虚拟机所做的那样。

一般情况下在linux中,3G是个分界线,在windows中,2G是个分界线,当然可以改,操作系统的作者完全可以只给内核1k空间或者别的。操作系统提出了内核和用户分离的策略,然后利用处理器来实现,仍以Intel处理器为例,利用它的分段和分页机制来实现就可以了,很简单,就是一个层次问题,正如前文所述,你也可以不用这些机制实现,而自己用纯软件的方式实现或者对于不需要安全控制的系统干脆不实现。

理解了以上以后就比较好理解内核空间和用户空间的互访问问题了,首先要注意的是,它们的地位是不平等的,如果用户空间访问内核空间,那么必须从那几道所谓的门通过然后才会得到访问权,比如系统调用,对于cpu硬件实现的空间分离,那么硬件会自然而然的阻止用户直接访问内核,对于纯软件实现的空间分离,那么必须阻止用户直接访问内核,这是必须需要实现的;但是反过来,内核空间访问用户空间的情况就不是那么自然了,都知道内核拥有最高特权级,cpu硬件就是通过给与内核最高特权级不公平的对待用户空间的,这么说来,内 核可以随意访问用户空间,事实上真的是这样,前面所谓的阻止就是硬件或者软件在探知用户访问内核的时候会由于权限不够而触发一个异常(中断,陷阱),对于硬件比较简单,cpu内部实现了这样的机制,而对于软件实现的空间分离就很麻烦了,这个不谈,总之一定有办法。但是内核访问用户空间就不会触发异常或者陷阱,因为硬件给了内核以最高权限,内核在做事的时候没有必要通知别人,直接做就是了,因此硬件是不会阻止内核访问任何地方的,可是事实上这样会引起不必要的麻烦和混乱,因为用户空间是进程间分离的,也就是说每个进程都 有一个独立的用户空间,并且进程具有很大的不确定性,比如哪个刚开始,哪个结束了,哪个异常了,那么试问内核访问用户空间是访问的谁的哪个进程的用户空间,如此一来,要想不出错的访问用户空间,内核就必须时刻跟踪所有的用户进程的运行情况,这会给内核带来很大的负担,反之内核空间就没有那么多事,就是一个管理者,就管理那么几件确定的事情,像什么内存啦,进程啦等等,因此内核空间没有必要做进程分离,只要一个就可以了,于是像linux这样的系统就做了一个约定,不允许没有用户空间上下文的内核线程访问用户空间,这样的 话,只有软件和程序员才能阻止内核访问用户空间,这个访问权限在硬件和操作系统本身那里是全权开放的,权力掌握在编写内核线程的程序员手中。

不允许内核访问用户空间使内核免去了很多的负担,使内核设计更加简化,使内核空间和用户空间变得更加隔离从而使二者的地位平等了一点点。注意这里并不是说就不允许内核访问用户空间,硬件都不吱声,操作系统乱做啥限制啊,其实内核访问用户空间有一个前提,这个前提纯粹是操作系统约定的,不同的操作系统可能不同,在linux上,该前提就是访问用户空间前必须得到该用户空间上下文,也就是说内核必须知道访问的是哪个进程的用户空间,虽然内核可以带着最高指示做任何事情,但是也不能胡作非为,做事之前必须明白自己做的事是什么,这个约定对于我们人也很适用,权力机关是不能胡作非为的,但是...



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274300

相关文章
|
13天前
|
安全 Linux 开发者
探索操作系统的心脏:内核与用户空间的交互
在数字世界的每一次点击和命令背后,隐藏着一个复杂而精妙的操作系统世界。本文将带你走进这个世界的核心,揭示内核与用户空间的神秘交互。通过深入浅出的解释和直观的代码示例,我们将一起理解操作系统如何协调硬件资源,管理进程和内存,以及提供文件系统服务。无论你是编程新手还是资深开发者,这篇文章都将为你打开一扇通往操作系统深层原理的大门。让我们一起开始这段旅程,探索那些支撑我们日常数字生活的技术基石吧!
28 6
|
12天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
13天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
16天前
|
机器学习/深度学习 人工智能 物联网
操作系统的心脏——深入理解内核机制
在本文中,我们揭开操作系统内核的神秘面纱,探索其作为计算机系统核心的重要性。通过详细分析内核的基本功能、类型以及它如何管理硬件资源和软件进程,我们将了解内核是如何成为现代计算不可或缺的基础。此外,我们还会探讨内核设计的挑战和未来趋势,为读者提供一个全面的内核知识框架。
|
17天前
|
消息中间件 安全 Linux
深入探索Linux操作系统的内核机制
本文旨在为读者提供一个关于Linux操作系统内核机制的全面解析。通过探讨Linux内核的设计哲学、核心组件、以及其如何高效地管理硬件资源和系统操作,本文揭示了Linux之所以成为众多开发者和组织首选操作系统的原因。不同于常规摘要,此处我们不涉及具体代码或技术细节,而是从宏观的角度审视Linux内核的架构和功能,为对Linux感兴趣的读者提供一个高层次的理解框架。
|
14天前
|
C语言
探索操作系统的心脏:内核与用户空间的交互
本文将深入操作系统的核心,揭示其内部结构与运作原理。我们将通过浅显易懂的方式,探讨操作系统的两个主要组成部分:内核和用户空间。文章旨在帮助读者理解这两者之间的界限以及它们如何协同工作来管理计算机资源。我们还将介绍系统调用的概念,并展示一个简单的代码示例,以便读者更好地理解这一过程。
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
57 0
Vanilla OS:下一代安全 Linux 发行版
|
27天前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
52 4
|
1月前
|
人工智能 安全 Linux
|
2月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。