Operating system 操作系统如何与CPU通信?

Operating system 操作系统如何与CPU通信?,operating-system,cpu,Operating System,Cpu,操作系统如何与CPU通信 操作系统中有驱动程序,好的,我理解这一部分。操作系统使用驱动程序-->通信-->设备控制器 沟通是如何发生的?操作系统是用命令直接接触CPU,还是使用BIOS作为接口 让我们假设我将制作自己的操作系统。它唯一的任务是将算术运算发送到CPU,并将结果打印到屏幕上。 我将告诉CPU将内存字放入寄存器,对它们进行计数,然后将它们放回内存。我该怎么做 CPU使用中断为特定任务调用操作系统,操作系统使用特殊特权CPU寄存器对CPU进行编程 例如,当您按下键盘上的键时,中断由硬件生

操作系统如何与CPU通信

操作系统中有驱动程序,好的,我理解这一部分。操作系统使用驱动程序-->通信-->设备控制器

沟通是如何发生的?操作系统是用命令直接接触CPU,还是使用BIOS作为接口

让我们假设我将制作自己的操作系统。它唯一的任务是将算术运算发送到CPU,并将结果打印到屏幕上。
我将告诉CPU将内存字放入寄存器,对它们进行计数,然后将它们放回内存。我该怎么做

CPU使用中断为特定任务调用操作系统,操作系统使用特殊特权CPU寄存器对CPU进行编程

例如,当您按下键盘上的键时,中断由硬件生成。CPU调用中断处理函数(它是操作系统的一部分),该函数将处理按键,例如,将其传递给用户程序

频繁的OS-CPU交互的另一个例子是任务切换。大多数操作系统使用硬件定时器每秒产生大约100次定时器中断。在此中断上,调用OS调度程序,有时它可以通过更改一些CPU寄存器来切换任务。在最简单的操作系统和CPU中,调度器将更改SP(堆栈指针)和PC(程序计数器)寄存器。对于更复杂的CPU,它还将对CPU的MMU硬件单元重新编程,并更改许多内部控制寄存器


外部硬件通常由驱动程序通过执行PIO写入或写入映射的PCI空间(写入硬件内存的特殊地址)进行编程。

CPU只是从内存中以某个偏移量开始运行指令,然后不断获取下一条指令并重复。引导加载程序将CPU设置为在计算机启动时开始运行OS入口点。键盘或鼠标输入之类的操作会导致中断,中断控制器使用这些中断查找操作系统设置的特殊代码来处理这些中断。这些中断还用于允许操作系统使用只能在内核模式下运行的特殊特权指令切换CPU上当前运行的线程。中断导致CPU在调用操作系统中断处理程序代码之前切换到内核模式,以便操作系统可以使用必要的特权指令来控制各种行为。用户模式代码是不允许的

关于什么寄存器用于什么目的,有很多细节,还有很多很多,但需要一整本书才能涵盖所有内容


这是一本免费的书,涵盖了相对入门级的许多细节。

所以操作系统通过将命令或字放入寄存器来向CPU发出指令?操作系统如何控制该寄存器?大多数CPU中都有特殊(特权)指令,可用于特殊CPU寄存器(例如x86中的WRMSR)。您知道什么样的cpu体系结构?好的,x86具有程序计数器的“IP”(eip,rip)寄存器。该寄存器具有要执行的指令的地址。所以,OS在从中断返回之前准备好用户空间IP寄存器。CPU将获取由IP指向的内存地址,并对指令进行解码和执行。这样就可以控制CPU内核了吗?如果我有四核,我想核心1只执行选定的指令集,核心2其余的指令集。user3521129,要将进程限制在某个核心,请使用
taskset
命令行工具或
sched_setaffinity
syscall(linux)。要阻止在某个内核上调度的其他任务,还需要切换到运行时调度策略(在linux中:SCHED_FIFO或SCHED_RR)。您不能控制“指令集”的CPU核心调度,只能控制进程和线程。