跳至主要內容

介绍

zzz大约 2 分钟

介绍

记录Linux相关知识

实模式

在实模式状态下,寻址的最大范围是1 MB

BIOS程序被固化在计算机主机板上的一块很小的ROM芯片(通常是闪存芯片)里

  1. BIOS程序在内存中创建中断向量表、BIOS数据去和中断服务程序

  2. BIOS让CPU接收到一个int 0x19的中断请求,从中断向量表中获取0x19中指向的中断服务程序(地址0x0E6F2),这个就是启动加载程序的入口

    这个中断服务程序的作用就是把软盘第一扇区中的程序(512 B)加载到内存中的指定位置,这个程序就是Linux 0.11的引导程序,,也就是bootsect

    这个第一扇区就是启动扇区

IDT 中断描述符表(类似于CPU维护的中断向量表),由操作系统维护

0x80是中断号,软中断

当CPU接到中断请求时,能中断当前程序的执行序,将CS:EIP切换到相应的中断服务程序去执行,执行完毕又执行iret指令返回被中断的程序继续执行。

iret (interrupt return)中断返回

由硬件完成保护、恢复的压栈、出栈动作。所以,int指令会引发CPU硬件完成SS、ESP、EFLAGS、CS、EIP的值按序进栈,同理,CPU执行iret指令会将栈中的值自动按反序恢复给这5个寄存器。

系统调用,用户态到内核态的转换

Linux操作系统规定,除进程0之外,所有进程都要由一个已有进程在3特权级下创建。在Linux 0.11中,进程0的代码和数据都是由操作系统的设计者写在内核代码、数据区,并且,此前处在0特权级,严格说还不是真正意义上的进程。为了遵守规则,在进程0正式创建进程1之前,要将进程0由0特权级转变为3特权级。方法是调用move_to_user_mode()函数,模仿中断返回动作,实现进程0的特权级从0转变为3。

参考

《鸟哥的Linux私房菜》

Linux内核设计与艺术open in new window

Linux top命令详解open in new window

Linux 教程open in new window