现代操作系统学习(2)———进程与线程
首先推荐去看http://blog.****.net/debugingstudy/article/details/12668389
这篇博客总结的很好。另外我写这个系列的博客,目的主要是加深自己的学习印象,以及对书上的内容做个概括,记录主要的概念,想要快速看现代操作系统的可以看一看。
2.1进程
首先是进程模型,计算机上所有可运行的软件包括操作系统,被组织成若干顺序进程(sequential process)简称进程(process)。一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量当前值。从概念上说,每个进程拥有它自己的虚拟CPU,当然,实际上CPU在各个进程间来回切换。这种快速切换称为多道程序设计。下面这张图很容易看出快速切换的概念,
创建进程
有四种事件导致进程创建
1。系统初始化
2。执行了正在运行的进程所调用的进程创建系统调用
3。用户请求创建新进程
4。一个批处理作业初始化
在Windows中,和UNIX不同,一个Win32调用CreateProcess即处理进程的创建,又负责把正确的程序装入新进程。
进程终止
进程终止通常由下列条件引起
1。正常退出(自愿)
2。出错退出(自愿)
3。严重错误(非自愿)
4。被其他进程杀死(非自愿)
出错退出是程序错误导致——一条非法指令,引用不存在的内存,零除等
严重错误时例如cc foo.c编译foo.c文件,但是这个文件压根不存在,就会退出。
进程层次结构
进程状态
进程的三种状态
1。运行态(该时刻该进程实际占用CPU)
2。就绪态(可运行,但因为其他进程正在运行而暂停)
3。阻塞态(除非某种外部事件发生,否则不能运行)
进程的实现
为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表。每个进程占用一个进程表项。(进程表项也可称为进程控制块),是包含子进程状态的重要信息,包括程序计数器,堆栈指针,内存分配状态,打开文件状态,账号与调度信息以及其他由运行态到就绪态/阻塞态必须保存的信息。
多道程序设计模型
多道程序可以提高CPU利用率,那么如何说明利用率呢。
一个简单的模型为:假设一个进程等待I/O操作的时间与其停留在内存的时间比为p,当内存中同时有n个进程时,则所有n个进程都等待I/O(此时CPU空转)的概率是p的n次方,CPU的利用率由下式给出
线程
下面用一个例子来说明线程的应用
经典线程模型
用户空间实现线程
关于用户空间实现线程,建议看博客最上面给的那个链接,总结的非常好
我在这里列一下用户级线程的几个优缺点吧
内核级线程
混合实现
调度线程**机制
弹出式线程
进程间通信
1。竞争条件
2。临界区
3。忙等待的互斥
下面是几种互斥方案,在这些方案下,当一个进程在临界区更新共享内存时,其他进程不会进入临界区
生产者——消费者问题
信号量
用信号量解决生产消费者问题
互斥量
管程
消息传递
在网络中,消息有可能丢失,为了防止丢失,发送方接收方可以达成一致,一旦接收到信息,接收方马上会送一条特殊的确认消息,如果未收到确认,重发消息。这是消息系统不可靠消息成功通信的问题。
屏障
调度
何时调度
批处理服务调度
交互式系统调度
实时系统中的调度
习题
答案来源:https://wenku.baidu.com/view/8d5a7748a7c30c22590102020740be1e650eccde.html
作者辛苦整理的,我在这里用了,就给出链接,希望看到全部题目的可以去下载。