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

简介:

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

硬件是软件的底层,这是一个前提,硬件是舞台,软件都是舞者,操作系统是应用程序的底层,操作系统是舞台,应用程序是舞者,并且,硬件是操作的系统的舞台,这里操作系统成了舞者,这就是计算机的层次(对于有操作系统的计算机而言,不包括裸机)。在操作系统理论中,往往将进程的地址空间分为内核空间和用户空间,这样的话就实现了操作系统最起码的安全性。但是存在一个疑问,内核空间的保护不是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

相关文章
|
8天前
|
存储 物联网 调度
操作系统的心脏:内核深度解析
在数字世界的构建中,操作系统扮演着基石的角色,而其核心—内核,则是这一复杂系统的灵魂。本文将深入探讨操作系统内核的工作原理,揭示它是如何管理硬件资源、运行程序以及提供系统服务的。通过理解内核的结构和功能,我们可以更好地把握计算机系统的运作机制,进而优化和创新我们的技术实践。
|
2天前
|
存储 人工智能 安全
操作系统的心脏——内核深度解析
【10月更文挑战第29天】 本文深入探讨了操作系统的核心组件——内核,包括其定义、功能、架构以及在现代计算中的重要性。通过对比不同操作系统内核的设计哲学和技术实现,揭示了内核如何影响系统性能、稳定性和安全性。此外,文章还讨论了未来内核技术的潜在发展方向,为读者提供了一个全面了解内核工作原理的平台。
|
3天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
20 4
|
5天前
|
存储 程序员 Linux
深入理解操作系统:从用户到内核的旅程
【10月更文挑战第31天】本文将带领读者踏上一场从应用层到内核层的探索之旅,揭示操作系统如何协调硬件资源、管理进程和提供系统服务。我们将通过具体代码示例,展示如何在Linux环境下编写简单的程序来与操作系统交互,并解释背后的原理。文章旨在为非专业读者提供一个易于理解的操作系统概念框架,同时为有志于深入了解计算机科学核心的读者打下坚实基础。
|
11天前
|
安全 数据安全/隐私保护
探索操作系统的心脏:内核
【10月更文挑战第25天】操作系统是现代计算的核心,而内核则是这个核心中的心脏。本文将深入浅出地探讨内核的设计、功能以及它如何管理计算机资源。我们将通过简单的比喻和实例来理解复杂的技术概念,使读者能够在轻松的氛围中掌握这一主题。
|
11天前
|
存储 调度
探索操作系统的心脏:内核
【10月更文挑战第25天】在数字世界的每一次跳动中,都有一个不可见却至关重要的部分在默默工作——操作系统的内核。它是计算机系统的指挥中心,管理着硬件资源,协调着软件运行。本文将揭开内核的神秘面纱,带你领略其精妙的设计和复杂的功能。从进程管理到内存分配,再到文件系统,我们将一探究竟,看看这个让计算机活起来的“心脏”是如何跳动的。
21 2
|
9天前
|
缓存 调度
操作系统的心脏:深入理解内核机制
【10月更文挑战第26天】 在数字化时代,操作系统是计算机系统不可或缺的核心。本文旨在揭示操作系统内核的神秘面纱,探讨其工作原理和重要性。通过深入浅出的语言,我们将一窥究竟,了解内核如何协调硬件与软件,确保计算机系统的稳定运行。
|
6天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
21 0
Vanilla OS:下一代安全 Linux 发行版
|
9天前
|
人工智能 安全 Linux
|
29天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
下一篇
无影云桌面