装配如何在操作系统上运行?

Dmi*_*try 4 assembly operating-system

如果内核控制系统,汇编语言如何工作?

汇编语言是作为计算机"理解"的助记符集合和各种宏来引入的,以使某些任务更容易.

如果在不向操作系统发出请求的情况下无法执行此操作,程序集如何控制CPU和内存?

例如,如果我想做指令mov ax, #4,我是不是需要我的程序向操作系统发送请求以便能够这样做?

我很好奇......

谢谢!

Hea*_*utt 8

CPU具有帮助OS保护资源的机制.让我们使用你的x86芯片的例子."通用"寄存器(例如)eax不受保护.但调试寄存器,如DR0,.

当OS运行时,CPU正在"响铃0"或人们称之为"系统模式"的情况下执行以使用通用术语.这些程序在x86上运行"ring 3",或者人们称之为"用户模式".

当执行从环3变为环0时(更多关于如何在以后完成),CPU会丢弃用户模式的保护.这是允许操作系统更改调试寄存器的原因.

但是,受OS保护的主要内容是内存位置和设备输入/输出.因此,inout指令具有特权,可能不会在第3环执行.

内存通过TLB进行保护,TLB还用于定义用户模式进程可见的虚拟内存(VM)地址范围.正是这个表控制着每个进程可见的内存空间.TLB本身存储在只有环0操作系统可以修改的存储器中.类似地,中断向量和任何存储器映射设备被分配给只有OS可以访问的存储器范围.

例如,执行时,mov [eax], 3在TLB中查找eax引用的地址.CPU根据TLB中的访问位(例如,NOEXEC位)确定该指令是否合法地访问存储器.

当OS调度程序交换进程时,通用寄存器eax保存在OS维护的每线程存储区中.正在切换到的线程将从其先前寄存器值的存储器映像中恢复.

如果操作系统干扰了每台机器指令,计算机将会非常慢.特别是,应尽快保持对通用寄存器的访问.内存访问的TLB查找被缓存,并且不比内存访问本身慢.

要从环3切换到环0,将生成软件中断.这是"系统调用"中断.中断在环0处运行,并在第一个进程开始之前由OS配置.系统调用中断将控制转移到OS代码.当执行从中断服务程序返回时,CPU返回到响铃3.


cra*_*535 5

您的程序可以运行它想要的任何指令,只要它不访问其外的资源/内存.如果是,它将生成错误(分段违规或一般保护)并被内核杀死.