2018-2019-1 20165219 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
一
异常:是控制流中的突变,一部分由硬件实现,一部分由操作系统实现,用来响应处理器状态中的某些变化。
异常的类别:
中断:是一步发生的,是来自处理器外部的I/O设备的信号的结果。
陷阱:是有意的异常,是执行一条指令的结果。
故障:由错误情况引起,可以被故障处理程修正。
终止:是不可修复的致命错误导致的。
二
系统中的每个程序都运行在某个进程的上下文中
父进程通过调用fork函数来创建一个新的运行的子进程
fork函数调用一次返回两次。一次是返回到父进程,另一次是返回到新创建的子进程,父进程和子进程是并发执行的。
几个抽象:
逻辑控制流:提供一个假象,好像我们的程序独占地使用处理器
私有的地址空间:提供一个假象,好像我们的程序独占地使用内存系统
进程控制:
回收子进程
当一个进程由于某种原因终止时,进程被保持在一种已终止的状态中,直到被它的父进程回收。
一个进程调用waitpid函数等待它的子进程终止或停止
`#include <sys/types.h>
include <wait.h>
pid_t waitpid(pid_t pid,int *statusp,int options);`
运行程序
execve函数在当前进程的上下文中加载并运行一个新程序
课上测试补做
实现ls
打开目录文件
针对目录文件
读取目录条目
显示文件名
关闭文件目录文件
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
void do_ls(char []);
int main(int argc, char *argv[])
{
if ( argc == 1 )
do_ls( "." );
else
while ( --argc ){
printf("%s:
", *++argv );
do_ls( *argv );
}
return 0;
}
void do_ls( char dirname[] )
{
DIR *dir_ptr;
struct dirent *direntp;
if ( ( dir_ptr = opendir( dirname ) ) == NULL )
fprintf(stderr,"ls1: cannot open %s
", dirname);
else
{
while ( ( direntp = readdir( dir_ptr ) ) != NULL )
printf("%s
", direntp->d_name );
closedir(dir_ptr);
}
}
~