【操作系统】进程与线程笔记

来源:互联网 发布:云帆翻墙软件下载 编辑:程序博客网 时间:2024/06/07 03:19

1. 进程的创建

有四种原因导致创建进程:

1)系统初始化

2)执行了从事创建进程的一个系统调用,该系统调用被正在运行的进程所调用

3)用户请求创建一个新进程

4)一个批处理作用的初始化

在UNIX里面可以用来创建新进程: fork。这个系统调用会创建一个跟父进程相同的副本。调用这个系统命令之后这两个进程(父进程和子进程)拥有相同的存储映像。在UNIX进程创建之后父进程和子进程都有各自不同的地址空间,如果其中某个进程在其他空间中修改了一个字,这个修改对其他进程而言是不可见的。

2. 进程的终止

通常由以下条件终止

1)正常退出

2)出错退出

3)严重错误

4)被其他进程杀死

在UNIX里面就是调用exit这个表明是正常退出;还有一种情况是比如gcc xxx发现文件并不存在属于非正常退出。

还有一些是进程错误退出,比如除0操作或引用了不存在的内存地址。第4类就是kill系统调用了。

3. 进程的状态

1)运行态,此时进程是占用CPU的

2)就绪态,可运行,但因为其他进程正在运行而暂时停止

3)阻塞态,除非某种外部事件发生否则进程不能运行

调度程序的主要工作就是决定应该运行哪个进程、何时运行及它应该运行多长时间。这个其实就是一个调度资源的程序,在分布式运算里面也会有这么一个角色存在。

4. 进程的实现

操作系统维护一张表格(一个结构数组)即进程表,每个进程占用一个进程表项,这个表项里面包含了进程状态的信息,它的程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞时必须保存的信息。

所有的中断都从保存寄存器开始,对当前进程,通常是在进程表项中,随后会从堆栈中删除由中断硬件机制存入堆栈的那部分信息并将堆栈指向一个由进程处理程序所使用的临时堆栈。一次中断发生后操作系统最底层的工作步骤

1)硬件压入堆栈程序计数器等

2)硬件从中断向量装入新程序计数器

3)汇编语言过程保存寄存器值

4)汇编语言过程设置新的堆栈

5)C中断服务例程运行

6)调度程序决定下一个将运行的进程

7)C过程返回至汇编代码

8)汇编语言过程开始运行新的当前进程

实际案例(课后作业)

a. 在Java或python里面模拟一下进程的中断操作,进程状态变换操作,比如如何让一个运行态转成阻塞态。

第二块内容:线程








原创粉丝点击