JAVA 应用优雅关闭
Linux 信号
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。通俗来讲,信号就是进程间的一种异步通信机制。
对于内核来说,信号的意义在于通知进程让进程知道已经发生了某个特定事件,或/和强迫进程执行它的信号处理程序,比如本文[……]
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。通俗来讲,信号就是进程间的一种异步通信机制。
对于内核来说,信号的意义在于通知进程让进程知道已经发生了某个特定事件,或/和强迫进程执行它的信号处理程序,比如本文[……]
从OS / VM角度谈一谈栈的应用
系统中一个栈代表一个执行流,那么到底有多少种栈
首先用户空间,也就是进程至少有一个用户栈(每个线程有一个独立的用户栈)
中断、异常处理程序有独立的调用栈
系统调用有独立的调用栈 – 进程(线程)的内核栈
信号处理程序的执行肯定是在用户[……]
本文涉及到中断/异常、系统调用、信号、进程切换,因为有这之间涉及到很多依赖,而很多概念容易混淆,所以专门梳理一下概念
中断是由间隔定时器和I/O设备产生的,即CPU的外围设备产生,以通知CPU一个事件的发生,硬件上存在可编程中断控制器(PIC, APIC),负责向 CPU[……]
一. 轮询
试想这样一种情形, 一个主线程中创建两个(多个)工作线程, 主线程需要等待一个或者多个工作线程执行结束.
比较直接的做法就是主线程中用一个循环, 每次都锁住和工作线程相同的一个互斥锁并检查是否有工作线程已经结束.
#include <stdio.h> #inc[......]
背景: sleep函数会将进程投入睡眠, 直到被时钟中断唤醒. 而”睡眠”这个状态含义是进程不在CPU上运行, 并不是 CPU 投入”睡眠”, 当时钟中断到来时经过进程调度重新将 CPU 让给之前睡眠的进程
那么问题就来了, 如果一个系统中每个进程都主动或者被动进入睡眠状态, 比如10个进程都[……]