您的位置:首页 > 其它

20155335 俞昆 第六周《信息安全系统设计基础》

2017-10-29 23:56 225 查看

教材学习内容总结

当Unix系统级函数遇到错误时,它们典型地会返回―1,并设置全局整数变量errno来表示什么出错了。程序员应该总是检查错误,但是不幸的是,许多人都忽略了错误检查,因为它使代码变得臃肿,而且难以读懂。

回收子进程的两种方法:1,内核的init进程 2,父进程waitpid函数

如果父进程没有回收它的僵死子进程就终止了,那么内核就会安排init进城来回收它们。init进程的PID为1,并且是在系统初始化时创建的。

一个进程可以通过调用waitpid函数来等待它的子进程终止或停止。

像Unix外壳和Web服务器这样的程序大量使用了fork和e×ecve函数。外壳是一个交互型的应用程序,它代表用户运行其他程序。最早的外壳是Sh程序,后面出现了一些变种,比如csh、tcsh、ksh和bash。外壳执行一系列的读/求值(readeaUte)步骤然后终止。

在某些情况下,read和write传送的字节比应用程序要求的要少,这些不足值不表示有错误

数据传送指令有四个变种:movb传送字节、movw传送字、movl传送双字、movq传送四字。

汇编代码也使用后缀'l'来表示4字节整数和8字节双精度浮点数。二者之所以不矛盾使用为使用的是一组完全不同的指令和寄存器。

指令可以对16个寄存器的低位字节中存放的不同大小的数据进行操作

操作数:立即数、寄存器、内存引用。

数据传送指令:MOV类。

源操作数指定一个立即数,目的操作数指定一个位置。

cltq指令只作用于寄存器%eax和%rax

局部变量通常是保存在寄存中,而不是内存中。访问寄存器比访问内存要快得多。

当强制类型转换既涉及大小有涉及C语言中的符号变化时,操作应该先改变大小。

栈指针%rsp保存着栈顶元素的地址。

压栈:先移动指针,再存储数据。出栈:先读数据,再上移指针。

栈和程序代码以及其他形式的程序数据都是放在统一内存中,所以程序可以用标准的内存寻址方法访问栈内的任意位置。

ADD:addb\w\l\q

1、判定等待集合的成员(由参数pid确定) pid>0,等待集合就是一个单独的子进程,它的进程ID等于pid pid=-1,等待集合就是由父进程所有的子进程组成的

2、修改默认行为 WNOHANG:默认行为是挂起调用进程,直到有子进程终止 WUNTRCED:默认行为是只返回已经终止的子进程 WNOHANG|WUNTRCED:立即返回

3、检查已回收子进程的退出状态

4、错误条件 如果调用进程没有子进程,那么waitpid返回-1,设置errno为ECHILD 如果waidpid函数被一个信号中断,那么它返回-1,并设置errno为EINTR

5、wait函数

6、使用waitpid的示例

8.4.4 让进程休眠

教材学习中的问题和解决过程

代码调试中的问题和解决过程

文件上传出现了问题,重新整理了一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: