第十一周任务总结

一 异常处理

需要知道几个概念:异常号,异常表,异常表基址寄存器。

异常号:系统为每种类型的异常分配的唯一的非负整数。 异常表:系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址。 关系: 异常号是到异常表中的索引,异常表的起始地址放在异常表基址寄存器。

异常类似于过程调用,区别在:

处理器压入栈的返回地址,是当前指令地址或者下一条指令地址。 处理器也把一些额外的处理器状态压到栈里 如果控制一个用户程序到内核,所有项目都压到内核栈里。 异常处理程序运行在内核模式下,对所有的系统资源都有完全的访问权限。异常的类别——中断、陷阱、故障和终止

中断处理:异步是指硬件中断不是由任何一条指令造成的,而是由外部I/O设备的事件造成的。

二 陷阱和系统调用:

系统调用是一些封装好的函数,内部通过指令int n实现。 陷阱最重要的用途是提供系统调用。系统调用运行在内核模式中,并且可以访问内核中的栈。

系统调用的参数是通过通用寄存器而不是栈来传递的,如,%eax存储系统调用号,%ebx,%ecx,%edx,%esi,%edi,%ebp最多存储六个参数,%esp不能用,因为进入内核模式后,会覆盖掉它。

三 进程

定义:一个执行中的程序的实例。 【解释:系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需要的状态组成的。这个状态包括放在存储器中的程序的代码和数据等】 【每次用户通过向外壳输入一个可执行目标文件的名字,并运行一个程序的时候外壳就会创建一个新的进程;然后在这个新进程的上下文中运行这个可执行目标文件】 【应用程序也能够创建新的进程,然后再这个新进程的上下文中运行自己的代码或者其他应用程序】

进程&程序 进程提供给了应用程序几个关键抽象: 一个独立的逻辑控制流——提供好像程序独占处理器的假象; 一个私有的地址空间——提供好像程序独占存储系统的假象;

四 逻辑控制流

【为什么会有好像程序独占处理器的假象?】 首先,进程计数器(PC)中的每一个值都唯一地对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态链接的到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流。 其次,进程是轮流使用处理器的;每个进程执行它的流的一部分然后被挂起,其他进程执行。 然后,对于一个运行在其中一个进程上下文中的程序而言,它看上去就像是唯一地占用了处理器(只不过如果精确测量的话,会发现对于一个进程来说,它在执行期间好像被停顿了若干个很短的时间)。

五 并发流

引入:计算机系统中有很多逻辑流的不同形式,比如异常处理程序、进程、信号处理程序等; 概念:一个逻辑流的执行在时间上与另一个流重叠,称为并发流;多个流并发执行的现象称为并发;一个进程和其他进程轮流运行,称为多任务;又叫做时间分片。 对比:如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流。

六 进程控制 之 获取进程ID

含义:每个进程都有一个唯一的进程ID(PID); 获取:getpid函数获取进程的PID;getppid获取创建调用进程的进程(即它的父进程)的PID。 注释:以上两个函数的返回值为pid_t,在linux系统中,它在types.h中被定义为int

七 信号

在操作系统和应用程序之间:进程之间传送信号

一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。

低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

1、信号处理过程

1)发送信号:内核通过更新目的进程中上下文中的某个状态,发送一个信号给目的进程。发送信号有两个原因:a)内核检测到一个系统事件; b)一个进程调用kill函数,心事发送信号

2)接收信号:,目的进程就接收了信号。进程可以忽略这个信号,终止或者通过执行信号处理程序捕获这个信号。

注意:待处理信号,一种类型的信号只能有一种待处理信号,多余的不会排队,而是会舍掉 ; 信号还可以阻塞。

2、发送信号:/bin/kill , kill函数,键盘,alarm函数

进程组:每个进程都只属于一个进程组,进程组是由一个进程组ID来标识的。默认的,一个子进程和它的父进程同属于一个进程组。

在任何时刻,至多只有一个前台作业和0个或多个后台作业。外壳为每个作业创建一个独立的进程组,一个作业对应一个进程组。

八 非本地跳转

c语言中,用户级的异常控制流形式,通过setjmp和longjmp函数提供。

setjump函数在env缓冲区中保存当前调用环境,以供后面longjmp使用,并返回0.

调用环境:程序计数器,栈指针,通用目的寄存器

longjmp函数从env缓冲区中恢复调用环境,然后触发一个从最近一次初始化env的setjmp调用的返回。然后setjmp返回,并带有非零的返回值retva

九 操作进程的工具

STRACE:打印一个正在运行的程序和他的子程序调用的每个系统调用的痕迹 PS:列出当前系统中的进程,包括僵死进程 TOP:打印出关于当前进程资源使用的信息 PMAP:显示进程的存储器映射

参考:深入理解计算机系统 闫佳欣博客

一 异常处理

需要知道几个概念:异常号,异常表,异常表基址寄存器。

异常号:系统为每种类型的异常分配的唯一的非负整数。 异常表:系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址。 关系: 异常号是到异常表中的索引,异常表的起始地址放在异常表基址寄存器。

异常类似于过程调用,区别在:

处理器压入栈的返回地址,是当前指令地址或者下一条指令地址。 处理器也把一些额外的处理器状态压到栈里 如果控制一个用户程序到内核,所有项目都压到内核栈里。 异常处理程序运行在内核模式下,对所有的系统资源都有完全的访问权限。异常的类别——中断、陷阱、故障和终止

中断处理:异步是指硬件中断不是由任何一条指令造成的,而是由外部I/O设备的事件造成的。

二 陷阱和系统调用:

系统调用是一些封装好的函数,内部通过指令int n实现。 陷阱最重要的用途是提供系统调用。系统调用运行在内核模式中,并且可以访问内核中的栈。

系统调用的参数是通过通用寄存器而不是栈来传递的,如,%eax存储系统调用号,%ebx,%ecx,%edx,%esi,%edi,%ebp最多存储六个参数,%esp不能用,因为进入内核模式后,会覆盖掉它。

三 进程

定义:一个执行中的程序的实例。 【解释:系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需要的状态组成的。这个状态包括放在存储器中的程序的代码和数据等】 【每次用户通过向外壳输入一个可执行目标文件的名字,并运行一个程序的时候外壳就会创建一个新的进程;然后在这个新进程的上下文中运行这个可执行目标文件】 【应用程序也能够创建新的进程,然后再这个新进程的上下文中运行自己的代码或者其他应用程序】

进程&程序 进程提供给了应用程序几个关键抽象: 一个独立的逻辑控制流——提供好像程序独占处理器的假象; 一个私有的地址空间——提供好像程序独占存储系统的假象;

四 逻辑控制流

【为什么会有好像程序独占处理器的假象?】 首先,进程计数器(PC)中的每一个值都唯一地对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态链接的到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流。 其次,进程是轮流使用处理器的;每个进程执行它的流的一部分然后被挂起,其他进程执行。 然后,对于一个运行在其中一个进程上下文中的程序而言,它看上去就像是唯一地占用了处理器(只不过如果精确测量的话,会发现对于一个进程来说,它在执行期间好像被停顿了若干个很短的时间)。

五 并发流

引入:计算机系统中有很多逻辑流的不同形式,比如异常处理程序、进程、信号处理程序等; 概念:一个逻辑流的执行在时间上与另一个流重叠,称为并发流;多个流并发执行的现象称为并发;一个进程和其他进程轮流运行,称为多任务;又叫做时间分片。 对比:如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流。

六 进程控制 之 获取进程ID

含义:每个进程都有一个唯一的进程ID(PID); 获取:getpid函数获取进程的PID;getppid获取创建调用进程的进程(即它的父进程)的PID。 注释:以上两个函数的返回值为pid_t,在linux系统中,它在types.h中被定义为int

七 信号

在操作系统和应用程序之间:进程之间传送信号

一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。

低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

1、信号处理过程

1)发送信号:内核通过更新目的进程中上下文中的某个状态,发送一个信号给目的进程。发送信号有两个原因:a)内核检测到一个系统事件; b)一个进程调用kill函数,心事发送信号

2)接收信号:,目的进程就接收了信号。进程可以忽略这个信号,终止或者通过执行信号处理程序捕获这个信号。

注意:待处理信号,一种类型的信号只能有一种待处理信号,多余的不会排队,而是会舍掉 ; 信号还可以阻塞。

2、发送信号:/bin/kill , kill函数,键盘,alarm函数

进程组:每个进程都只属于一个进程组,进程组是由一个进程组ID来标识的。默认的,一个子进程和它的父进程同属于一个进程组。

在任何时刻,至多只有一个前台作业和0个或多个后台作业。外壳为每个作业创建一个独立的进程组,一个作业对应一个进程组。

八 非本地跳转

c语言中,用户级的异常控制流形式,通过setjmp和longjmp函数提供。

setjump函数在env缓冲区中保存当前调用环境,以供后面longjmp使用,并返回0.

调用环境:程序计数器,栈指针,通用目的寄存器

longjmp函数从env缓冲区中恢复调用环境,然后触发一个从最近一次初始化env的setjmp调用的返回。然后setjmp返回,并带有非零的返回值retva

九 操作进程的工具

STRACE:打印一个正在运行的程序和他的子程序调用的每个系统调用的痕迹 PS:列出当前系统中的进程,包括僵死进程 TOP:打印出关于当前进程资源使用的信息 PMAP:显示进程的存储器映射

参考:深入理解计算机系统 闫佳欣博客

你可能感兴趣的:(第十一周任务总结)