Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kernel 内核的工作_Kernel_Cpu_Scheduling_Processor_Opcode - Fatal编程技术网

Kernel 内核的工作

Kernel 内核的工作,kernel,cpu,scheduling,processor,opcode,Kernel,Cpu,Scheduling,Processor,Opcode,我对操作系统的“内核”有一个模糊的概念 简而言之,这就是我所知道的 有一个用户空间和一个内核空间 内核限制用户空间程序访问超出其限制的内存 现在我的问题是 用户空间程序被编译成目标代码和可执行文件,其操作码可以直接在处理器上执行 内核到底做了什么来执行代码,又是如何管理系统资源的?特权模式和非特权模式是如何起作用的 提前谢谢 我对操作系统的“内核”有一个模糊的概念。简而言之,这就是我所知道的 有一个用户空间和一个内核空间 是的,这些通常由CPU强制执行。保护“环”限制您可以在用户模式(x86上的

我对操作系统的“内核”有一个模糊的概念

简而言之,这就是我所知道的

有一个用户空间和一个内核空间

内核限制用户空间程序访问超出其限制的内存

现在我的问题是

用户空间程序被编译成目标代码和可执行文件,其操作码可以直接在处理器上执行

内核到底做了什么来执行代码,又是如何管理系统资源的?特权模式和非特权模式是如何起作用的

提前谢谢

我对操作系统的“内核”有一个模糊的概念。简而言之,这就是我所知道的

有一个用户空间和一个内核空间

是的,这些通常由CPU强制执行。保护“环”限制您可以在用户模式(x86上的环3)和内核模式(环0)下执行哪些CPU指令

内核限制用户空间程序访问超出其限制的内存

(MMU)为内存提供硬件级保护。这为用户模式进程提供了来自其他用户模式进程的保护,并保护内核不受所有用户模式进程的影响

内核负责正确配置此硬件以实施保护

现在我的问题是:用户空间程序被编译成目标代码和可执行文件,它们的操作码可以直接在处理器上执行

对。内核和用户模式进程实际上并没有太大区别。它们都是为同一个处理器编译的代码

不同之处在于内核可以直接访问硬件(用户空间通常不能),并且可以执行特权指令。这些说明包括切换模式、配置保护等的说明

在x86上,一些相关指令包括:
LGDT
(加载全局描述符表)、
MOV CRx
(移动到/从控制寄存器x)、
RDMSR
/
WRMSR
(读/写特定于模型的寄存器)。这些都用于配置处理器的工作方式

内核到底做了什么来执行代码,又是如何管理系统资源的?特权模式和非特权模式是如何起作用的

同样,内核没有主动执行任何用户模式进程!它通常是这样的:

  • 硬件定时器向CPU的中断引脚之一发送电信号
  • CPU通过执行内核的计时器中断处理程序进行响应
  • 内核决定当前运行的进程已经运行了足够长的时间(它的时间片已经过期),是时候给进程一些执行时间了
  • 内核将旧进程的状态保存到“进程控制块”(或等效块)中,并将新进程的状态加载到CPU上
  • 内核从中断处理程序返回,确保硬件处于适合运行用户空间代码的状态
在这个描述中,有很多人挥手致意,因为很多人都非常依赖于架构

另外一个需要重点提及的问题是。每个内核空间/用户空间分离的系统都需要一种机制,供用户模式进程调用内核,请求其服务。毕竟,一个什么都不能做的用户模式流程有什么好处

系统调用的机制因操作系统和体系结构而异,但它们的工作原理大致相同:

  • 系统调用包装函数(即
    write
    )通过将其参数移动到适当的寄存器中来设置系统调用
  • 包装器函数执行一条特殊指令,以触发切换到内核模式。在x86上,这是
    int80h
    (软件中断0x80),或者在x86-64上是新的
    syscenter
    。在手臂上,这是一个
  • 此指令使CPU转换到内核模式上下文(x86上的环0),并开始执行内核预定义为其“系统调用入口点”的代码
  • 内核在保存的用户模式CPU状态下“查看”系统调用上下文,并执行完成特定系统调用所需的操作
  • 然后,内核允许CPU转换回用户模式上下文(环3),并继续执行进程的代码
所有这些每秒都会发生数千次,令人惊讶的是,它居然还能工作:-)

资源:


一般的概念是,在英特尔处理器上,它被称为保护模式。如果处理器不支持这些东西怎么办。一个简单的ARM处理器。内核是否解释用户空间代码并检查每一步是否有违反?+1虽然这本身不是一个“好问题”,但我感谢您的好奇心,以及有机会畅谈我喜欢的话题。@suheldecoser如果处理器没有实现保护,那么你的O/S不能阻止代码做任何它想做的事情。非常感谢你。。。我不明白电脑是怎么启动的。。。它首先看什么?每个处理器都有不同的体系结构。。。它是如何针对每个处理器单独编译的?