20165218 2018-2019-1 《信息安全系统》第八章学习总结

20165218 2018-2019-1 《信息安全系统》第八章学习总结

教材学习内容总结

异常

  • 异常的四个类别:中断、陷阱(和系统调用)、故障、终止
  • C程序用syscall函数可以直接调用任何系统调用

进程

  • 异常是允许操作系统内核提供进程概念的基本构造快

  • 系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需的状态组成。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。

  • 并发和并行

  • 每个私有地址空间都具有相同的通用结构,Linux进程的地址空间的组织结构

    • 代码段 .text:这是CPU执行的机器指令部分。通常正文段是共享的,而且是只读的,以防止程序修改其自身的指令。总是从地址0x400000开始。
    • 数据段 .data。数据段包含了程序中需要明确赋初值的变量。
    • 非初始化数据段 bss。bss 起始于 IBM 704汇编语言中的 Block Storage Start 指令的首字母缩写,并且沿用至今。
  • 运行在内核模式中的进程可以执行指令集中的任何指令,并且可以访问系统中的任何位置;用户模式中的进程不允许执行特权指令

graph LR
A[用户模式]-->|异常|B[内核模式]

进程控制

获取进程ID
#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void); //返回进程的PID
pid_t getppid(void); //返回父进程PID
终止进程
  • 进程总处于运行、停止(挂起)、终止三种状态之一。
#include <stdio.h>

void exit(int status);
    //status=0 进程正常终止;status=1或-1,进程异常退出
fork()函数创建子进程
#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);

fork()函数调用一次,返回两次。在父进程中,fork返回子进程PID,在子进程中,fork返回0。若调用了n次fork,则返回2^n次。

回收子进程
#include <sys/types.h>
#include <wait.h>

pid_t waitpid(pid_t pid, int *statusp, int options);
进程休眠
#include <unistd.h>

unsigned int sleep(unsigned int secs);//secs为请求休眠的时间

如果请求的时间已经到了,返回0,否则返回剩下的秒数。

加载并运行程序
#include <unistd.h>

int execve(const char *filename, const char *argv[], const char *envp);

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

代码托管

参考资料

原文地址:https://www.cnblogs.com/zicerain/p/9995309.html