标签:pat 进程id get 运行 c程序 通过 控制流 一个 结构
介绍:现代系统通过使控制流发生突变来对异常情况作出反应,这些突变称为异常控制流。
异常:异常控制流的一种形式,一部分由硬件实现,一部分由操作系统实现。
异常处理的三种情况
处理程序将控制返回给当前指令Icurr,当事件发生时正在执行的指令。
处理程序将控制返回给Inext,如果没有发生异常将会执行的下一条指令。
处理程序终止被中断的程序。
异常表:
异常的剖析:
异常与过程调用的不同之处:
1、过程调用时,在跳转处理程序之前,处理器将返回地址压入栈中。根据异常的类型,返回地址要么是当前指令,要么是下一条指令。
2、处理器也把一些额外的处理器状态压到栈里,在处理程序返回时,重新开始执行被中断的程序会需要这些状态。
3、如果控制从用户转移到内核,所有的这些项目都被压到内核栈中,而不是压到用户栈中。
4、异常处理程序在内核模式下。
异常的类别
中断:异步发生,来自处理器外部的I/O设备的信号的结果。
陷阱:有意的异常,是执行一条指令的结果。
故障:故障由错误情况引起,它可能被故障处理程序修正。
终止:终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。
异常属性表:
Linux/x86-64
除法错误:除零,或结果对于目标操作数来说太大。
一般保护故障:程序引用已给未定义的虚拟内存区域。
缺页:重新执行产生故障的指令。
机器检查:检测到致命的硬件错误。
属性表:
系统调用:C程序用syscall函数可以直接调用任何系统调用。
定义:一个执行中程序的实例
进程控制
获取进程ID:getpid函数返回调用进程的PID,gettpid返回的是它的父进程的PID。
pid_t getpid(void);
pid_t getppid(void);
创建和终止进程:
进程的三种状态:
1、运行:进程在CPU中或等待被执行。
2、终止:进程永远地停止。
3、停止:进程的执行被挂起,且不会被调度。
fork函数创建一个新的运行的子进程:
pid_t fork(void);
调用一次,返回两次。
参考伪代码实现ls的功能,提交代码的编译,运行结果截图
相关知识点:
参考了上学期Java学习搭档的代码如下:
运行结果:
实现ls -l 的功能,提交测试截图
相关知识点:
dirent结构体:
stat结构体:
运行截图:
2018-2019-1 20165320 《信息安全系统设计基础》第七周学习总结
标签:pat 进程id get 运行 c程序 通过 控制流 一个 结构
原文地址:https://www.cnblogs.com/Gst-Paul/p/9943344.html