为什么说内核位于进程地址空间中?

2024-04-01

这可能是一个愚蠢的问题,但它突然出现在我的脑海中。所有有关进程地址空间和虚拟内存布局的文本都提到进程地址空间 为内核保留的空间。例如在 32 位系统上,进程地址空间为 4GB,其中 1GB 为 Linux 中的内核保留(在其他操作系统上可能有所不同)。

我只是想知道当进程无法直接寻址内核时为什么说内核位于进程地址空间中。为什么我们不说内核具有与进程不同的地址空间,为什么我们不能为内核本身拥有一个与进程的页表分开的不同页表?


当进程进行系统调用时,我们不需要切换页表(从进程地址空间页表到内核地址空间页表)来为系统调用提供服务(这应该只在内核模式下完成)。这就是说内核是在进程上下文中运行的。

一些不在进程上下文中运行的内核事件将仅为内核加载页表。

Got it ?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么说内核位于进程地址空间中? 的相关文章

  • 使用 NSWorkspace 获取所有正在运行的进程

    我想获取 MacO 中所有正在运行的进程的列表 当我使用 myWorkspace runningApplications 我只得到当前用户应用程序的列表 我如何找到 root 或 mysql 所有者的所有进程的列表 看一下技术问答 QA11
  • 如何从 C 中的指针获取数组的大小?

    我分配了一个 数组 mystruct尺寸的n像这样 if NULL p calloc sizeof struct mystruct n 1 handle error 后来我只能访问p 并且不再有n 有没有一种方法可以确定仅给出指针的数组的长
  • 使用 Bash 按进程名称检查 Mac 进程是否正在运行

    如何使用 Bash 脚本中的进程名称检查 Mac OS X 上的进程是否正在运行 我正在尝试编写一个 Bash 脚本 如果进程已停止 它将重新启动进程 但如果进程仍在运行 则不执行任何操作 解析这个 ps aux grep v grep g
  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • 在 CUDA 中的设备内存上分配 2D 数组

    如何在 Cuda 中的设备内存中分配和传输 往返于主机 2D 数组 我找到了解决这个问题的方法 我不必展平阵列 内置的cudaMallocPitch 函数完成了这项工作 我可以使用以下命令将阵列传输到设备或从设备传输阵列cudaMemcpy
  • C:内存池库?

    我需要一些快速 线程安全的内存池库 我用谷歌搜索了很多 但是快速的解决方案没有线程安全 而其他的则非常大 有什么建议么 nedmalloc 和 ptmalloc 都是基于 C 的线程缓存内存管理器 基于 doug lea 的 malloc
  • R:如何在不耗尽内存的情况下重新绑定两个巨大的数据帧

    我有两个数据框df1 and df2每个都有大约 1000 万行和 4 列 我使用 RODBC sqlQuery 将它们读入 R 没有任何问题 但是当我尝试rbind他们 我收到了最可怕的 R 错误消息 cannot allocate me
  • 在Python中使用子文件夹的名称为每个子文件夹创建空文件

    如果我的文件夹结构如下 folder sub1 sub1 1 sub1 sub1 2 sub1 sub1 3 sub2 sub2 1 sub2 sub2 2 sub2 sub2 3 我想让每个子文件夹的文件使用子文件夹的名称 我怎样才能用P
  • 跨 dll 边界的内存分配和释放

    我知道在一个 dll 中进行内存分配然后在另一个 dll 中释放内存可能会导致各种问题 尤其是与 CRT 相关的问题 当涉及到导出 STL 容器时 此类问题尤其成问题 我们之前遇到过此类问题 在编写与我们的库链接的自定义 Adob e 插件
  • 小/大 numpy 数组的释放处理方式是否不同?

    我正在尝试调试我的大型 Python 应用程序的内存问题 大部分记忆都在numpy由Python类管理的数组 所以Heapy http guppy pe sourceforge net 等等都是无用的 因为它们不占内存numpy数组 因此
  • Node 应用程序中的 process.env 未定义

    运行我的 Node 应用程序时node server js process env回报undefined 所以我无法访问任何环境变量 当我尝试将我的应用程序部署到Duostack http www duostack com Calling
  • 为什么我们需要不同的指针数据类型?

    基本上指针是一个用于存储内存地址的变量 它总是十六进制 内存地址 那么为什么我们需要不同的数据类型来存储地址 例如 int a 我们可以用这个 a 来存储浮点地址吗 并非所有指针 必须具有 相同的大小 如果您有一个需要对齐到 10 MB 的
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • 软件堆栈和操作系统有什么区别?为什么Android不是操作系统而是软件堆栈?

    Android 是一个软件堆栈 但不是一个操作系统 正如developer android com所述 什么是安卓 Android 是一个适用于移动设备的软件堆栈 包括操作系统 中间件和关键应用程序 这 Android SDK 提供了开始开
  • (nasm x86实模式)如何在引导加载的扇区中写入/读取字符串?

    我正在使用 NASM 为 x86 实模式编写一个最小操作系统 用于教育目的 我想使用 512 字节引导扇区加载包含操作系统其余部分的更大扇区 我已经成功创建了一个加载另一个扇区的引导扇区 但我似乎无法在加载的扇区中写入 读取字符串 这是我的
  • Bison/Flex 中哪里可以释放内存?

    我使用 Bison 和 Flex 的时间或多或少有 1 个月 所以如果我没有看到明显的东西 但我不认为是 我很抱歉 我在使用 Flex Bison 释放内存时遇到问题 我的代码如下所示 parser l DATE yylval str st
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐