1、当出现某种事件时,系统就会查异常表,这个异常表是在系统启动的时候建立的,上面有异常号与处理程序之间的对应关系。在计算机中,处理器定义了一些异常,如缺页等,操作系统也定义了一些异常,系统调用都对应一个异常号,exit()编号为1。
2、异常的类别:中断、陷阱、故障和终止。
中断:来自处理器外部的io设备信号,是异步的。
陷阱:最总要的用途是系统调用,从程序员的角度看,系统调用和函数调用是一样的,然而他们的实现时非常不同的,普通函数运行在用户模式,系统调用运行在内核模式。同步。
故障:由错误情况引起,调用故障处理程序,可能修正也可能终止应用。同步。
终止:不可恢复的知名错误造成的结果,通常是一些硬件错误。同步。
3、进程:
3.1、时间上:在进程执行的过程中,我们感觉好像cpu在为这一个进程服务,其实不是,我们把每个进程看做一个独立的逻辑控制流,不同的逻辑流会抢占cpu,真正执行的只有一个,这里引出一个并发流的概念,如果两个逻辑流执行时间有重叠,我们称之为并发流,即使他们是运行在同一个处理器上,这种现象叫做并发。
3.2、又有自己的私有地址空间,存放数据代码等。
上下文:就是进程的状态,包括寄存器,内核栈,代码、数据等信息。
内核通过上下文切换实现进程的调度,保存当期上下文,回复之前上下文,执行新进程的上下文。
4、进程控制:
4.1、进程的创建:进程的创建使用fork,fork返回两个值,由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的,fork创建的进程和父进程有完全一样的上下文,把父进程的子进程也复制。
4.2、回收子进程:子进程执行完成之后,仍然在内存中,需要父进程进行回收,不回收的话,由init进程回收,父进程回收的方式waitid(pid,&status,0),pid指定子进程id,-1表示所有子进程,status返回子进程的结束状态。Wait(&status),相当于waitid(-1,&status,0)。返回pid,没有子进程返回-1,执行时会阻塞。
4.3、进程休眠:sleep,pause。
4.4、加载程序:execve函数。
4.5、程序是一堆代码和数据,进程是执行中程序的一个具体实例,fork作用进程,execve作用程序。
5、信号的问题:同一类型的信号最多只有一个待处理,一个处理,另一个阻塞。当有第三个同类型的信号来时,直接丢掉。
6.、操作进程的工具:
Strace:打印正在运行的程序和他的子程序调用的每个系统调用的轨迹。
Ps。
Top:当前进程资源使用的信息。
Tmap:显示进程的存储器映射、
/proc:内核数据的内容