【操作系统】操作系统内核

图灵机
在这里插入图片描述
当系统中有一个CPU的时候 ,MR就是它的状态
当系统中有n个CPU的时候,MR1,MR2…MRn 是它的状态

IRQ和NMI是低电平有效信号
NMI不可屏蔽中断

在这里插入图片描述
在这里插入图片描述
6502的CPU一共40个引脚

在这里插入图片描述
eflags寄存器里的 IF 表示 interrupt enable
1表示可以响应中断,0表示关中断

如果IF=0,程序又处于死循环,
那么这个处理器就相当于从操作系统离线了。

中断处理程序所做的事情,只有跳转

在这里插入图片描述

处理器如何处理中断:允许软件把代码放到中断处理位置,处理器接收中断信号的时候会把PC跳转到中断处理位置。

RISC-V的中断处理

在这里插入图片描述
中断保存
32个寄存器,PC计数器
CPU状态(是一个寄存器)
指令的计数(每个周期+1)
时钟计数
中断相关寄存器
中断地址中断原因

在这里插入图片描述
cte_init 定义在中断发生的时候,执行什么函数
iset 设置开关中断(IF)
程序在保护状态执行的时候无法关中断,会被操作系统直接中断,产生异常

在这里插入图片描述
中断时:额外开辟一块内存,把寄存器存到内存里

在这里插入图片描述
64位所有通用寄存器,cr3寄存器,都存到内存里了

在这里插入图片描述
x86所有通用寄存器,cr3寄存器,都存到内存里了

特殊寄存器

rip 【指向代码】:rip寄存器是一个64位的寄存器,用来存储下一条要执行的指令的地址。它是在64位模式下才有的,相当于32位模式下的eip寄存器。rip寄存器可以实现一种新的寻址模式,叫做rip相对寻址,就是用rip加上一个偏移量来计算有效地址。

rsp【指向堆栈】:rsp寄存器是一个64位的寄存器,用来存储当前函数调用的栈栈顶的地址。它是在64位模式下才有的,相当于32位模式下的esp寄存器。rsp寄存器可以用来保存函数的局部变量、参数、返回地址等信息,方便函数的调用和返回。

rbx【指向内存地址】:rbx寄存器是一个64位的基址寄存器,一般用于访问内存的基址。它是被调用者保存的寄存器,也就是说在函数调用时,如果要使用它,必须先保存它的原始值,然后在函数返回时恢复它。

rbp【指向内存地址】rbp寄存器是一个64位的栈帧指针,用于标识当前栈帧的起始位置。栈帧是函数调用时在栈上分配的一块内存空间,用来保存函数的局部变量、参数、返回地址等信息。rbp寄存器可以通过偏移量来访问栈帧中的数据。它也是被调用者保存的寄存器。

进程

在这里插入图片描述
在这里插入图片描述
不断触发一个软件中断
在这里插入图片描述
在这里插入图片描述
中断先由操作系统保存运行状态,然后交给软件的中断处理程序,并把Context和Event都给出来。

在这里插入图片描述

进程和线程的区别

每个线程都有独立的寄存器和堆栈
每个进程也有独立的寄存器和堆栈

但是进程之间不共享内存

进程对于有些寄存器是可见不可改的,自己内存空间之外的部分,都是不可见的。

给每个线程划定内存空间,就得到一个多进程的操作系统

通过CPU给的虚拟内存机制,划定进程空间

复制进程 fork (Unix)

在这里插入图片描述
返回值不同

在这里插入图片描述
直接执行输出6个hello
放到管道里就会输出8个hello(因为被放到输出缓冲区,每次输出2个hello)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
_exit会把所有线程销毁
syscall exit 只会销毁当前一个线程
在这里插入图片描述

在这里插入图片描述
Android底层也是linux

在这里插入图片描述
操作系统启动:先创建initramfs进程,然后加载磁盘,之后加载网卡驱动配置IP

猜你喜欢

转载自blog.csdn.net/AiTanXiing/article/details/130472079