
1) 在跑大型数据的时候,一旦关闭会话窗口、软件、断网、断电等情况下程序出现异常中断
2) 现在暂停编写或者跑程序,一段时间后继续运行,希望继续运行时原先导入的变量还在
3) 目前的Shell软件限制开的窗口为5个,若是同时前台 *** 作的话只能进行五个终端,同一终端使用多个会话是不行的
这些情况下可以使用screen命令解决 【离线 *** 作,保留工作环境,同一终端多个会话】 :
1. 构建一个新的会话,并命名为sessionName
screen -S sessionName
可以发现构建之后,与创建会话之前没有任何差别,但是接下来我们所有的输入命令都在这个sessiion中
2. screen -ls
在任一个打开的窗口可以查看我们构建的session,其中会发现会话有以下形式组成
sessionID.sessionName [状态(attached【在线】;detached【离线】)]
3. screen -r sessionName 除了使用会话名字还可以使用会话ID
重新连接会话
4. screen -d sessionName 或者在已经入的session中,按住Ctrl 不放,分别按 a d
离线连接的会话,这时候程序会放在后台运行,无需担心断电断网关机等各种突发状况
5. 假设在当前的sessionName中,我们可以使用 exit 退出并杀死当前session;或者 screen -S sessionName -X quit
【一定要记得每个session跑完之后,需要Kill它】
6. 有时你发现采用 screen -r sessionName 发现显示没有这个会话,但是screen -ls的时候会发现这个会话明确是存在的,那么可以采取的策略是:
先 screen -d sessionName 这个会话,使其离线,然后再使用 screen -r sessionName将其重新连线
本文基于 RockPI 4A 单板Linux4.4内核介绍中断调用流程。
ARMv8包括两种运行状态:AArch64和AArch32。
AArch64中不再使用AArch32中的7种特权模式,而是提出了Exception Levels的概念,包括:
1)EL0:用于用户态程序,权限最低
2)EL1:给内核使用,权限稍高
3)EL2:虚拟化相关,权限更高
4)EL3:安全相关,权限最高
Linux内核中一般只使用EL0和EL1。
AArch64异常向量表中的异常包括:
1)Synchronous exception(同步异常)
2)SError
3)IRQ
4)FIQ
注:SError、IRQ和FIQ属于异步异常。
在Linux内核中,在 arch/arm64/kernel/entry.S 文件中定义了异常向量表,内容如下:
选取 el1_irq() 函数介绍Linux内核中断的调用流程。
文件: arch/arm64/kernel/entry.S ,调用流程如下:
1、handle_irq()初始化
在 DTS 解析阶段完成 handle_irq() 函数的初始化,流程如下:
gic_irq_domain_map() 函数中完成了 handle_irq() 函数的赋值,具体执行如下:
2、handle_irq()实现
以共享外设中断 SPI 的中断处理函数 handle_fasteoi_irq() 为例,继续跟踪中断的执行过程。
handle_irq_event_percpu() 函数会调用已经注册的中断处理函数,同时唤醒 irq_thread 线程。
3、中断处理线程
在使用 request_threaded_irq() 函数申请中断时,会创建一个 irq_thread 线程,调用流程如下:
irq_thread 线程平时在睡眠状态,等待 handle_irq_event_percpu() 函数唤醒,进一步执行已注册的中断处理线程函数。
使用 DRM 框架中 HDMI 中断验证中断调用流程。
文件: drivers\gpu\drm\bridge\synopsys\dw-hdmi.c
在中断处理函数 dw_hdmi_hardirq() 和中断处理线程函数 dw_hdmi_irq 中增加 dump_stack() 调用( 注:仅限于调试验证 )。
插入 HDMI 线,系统启动后,显示中断调用流程的日志如下:
和
在系统结构中,CPU工作的模式有两种,一种是中断,由各种设备发起;一种是轮询,由CPU主动发起。中断IRQ:
中断允许让设备(如键盘,串口卡,并口等设备)表明它们需要CPU。一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且调用一个称为中断处理器或中断服务程序(interrupt service routine)的特定程序。CPU处理完中断后,就会恢复执行之前被中断的程序。
中断分类:
硬中断+软中断
硬中断:
①非屏蔽中断:不能被屏蔽,硬件发生的错误:内存错误,风扇故障,温度传感器故障等。
②可屏蔽中断:可被CPU忽略或延迟处理。当缓存控制器的外部针脚被触发的时候就会产生这种类型的中断,而中断屏蔽寄存器就会将这样的中断屏蔽掉。我们可以将一个比特位设置为0,来禁用在此针脚触发的中断。
软中断:
是软件实现的中断,也就是程序运行时其他程序对它的中断而硬中断是硬件实现的中断,是程序运行时设备对它的中断。
CPU之间的中断处理(IPI)
处理器间中断允许一个CPU向系统其他的CPU发送中断信号,处理器间中断(IPI)不是通过IRQ线传输的,而是作为信号直接放在连接所有CPU本地APIC的总线上。
CALL_FUNCTION_VECTOR (向量0xfb)
发往所有的CPU,但不包括发送者,强制这些CPU运行发送者传递过来的函数,相应的中断处理程序叫做call_function_interrupt(),例如,地址存放在群居变量call_data中来传递的函数,可能强制其他所有的CPU都停止,也可能强制它们设置内存类型范围寄存器的内容。通常,这种中断发往所有的CPU,但通过smp_call_function()执行调用函数的CPU除外。
RESCHEDULE_VECTOR (向量0xfc)
当一个CPU接收这种类型的中断时,相应的处理程序限定自己来应答中断,当从中断返回时,所有的重新调度都自动运行。
INVALIDATE_TLB_VECTOR (向量0xfd)
发往所有的CPU,但不包括发送者,强制它们的转换后援缓冲器TLB变为无效。相应的处理程序刷新处理器的某些TLB表项。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)