进程线程

来源:互联网 发布:httpclient java 编辑:程序博客网 时间:2024/05/17 21:07

阅读《操作系统设计与实现上册》的一点总结

进程就是正在执行中的程序,包括计数器,寄存器和变量当前值

一)进程介绍

1.1进程创建:

1.系统初始化
2.正在运行的一个进程执行了创建了进程的系统调用
3.用户请求创建新进程
4.批处理作业的初始化

1.2进程的终止:

1.正常退出(自愿)
2.出错退出(自愿)
3.严重错误(非自愿)
4.被其他进程杀死(非自愿)

1.3进程的状态

1.运行态(该时刻占用处理机)
2.就绪态(因其他进程运行而暂时被挂起)
3.阻塞态(除非外部事件发生,否则不能运行)
这三种状态有四种可能转换关系:
1.运行态到阻塞态(进程等待输入而阻塞或者执行系统调用(例如:pause))
2.运行态到就绪态(调度器选择另一个进程)
3.就绪态到运行态(调度器选择当前进程)
3.阻塞态到就绪态(出现有效输入)

1.4进程的实现

操作系统通过维护进程表(结构数组)来实现进程模型,每个进程占用一个进程表项(进程控制块),包括了程序计数器,堆栈指针,内存分配状况,所打开的文件状态,账号和调度信息,以及其他进程由运行态转换到就绪态或者阻塞态时必须保存的信息,保证该进程随后还能回到中断之前的状态,再次启动。

1.5线程

进程用来调度资源,而线程是cpu中调度的实体。
1.进程中线程共享项:
地址空间,全局变量,打开文件,子进程,定时器,信号和信号处理程序,统计信息。
2.线程私有项:
程序计数器,寄存器,堆栈,状态。
实现线程包:
1.在用户空间实现:每个进程拥有专用线程表。
2.在内核实现:内核拥有线程表。
用户空间级线程切换速度比内核级线程快得多,但是若一个线程阻塞,则内核把整个进程阻塞(因为内核不知道其他线程存在)。

二)进程间通信

2.1竞争条件

两个或者多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,就成为竞争条件。(时钟中断影响)

2.2临界区

对共享内存进行访问的程序片段称为临界区
保证共享数据的并发进程能正确高效进行操作的四个条件:
1.任何两个进程不能同时处于临界区。
2.不应对cpu的速度和数目做任何假设。
3.临界区外的进程不得阻塞其他进程。
4.不得使进程在临界区外无休止地等待。

2.3忙等待形式的互斥

1.关闭中断
2.锁变量
3.严格交替法:不适用与两个进程速度差距太大的情况。自旋锁(适用忙等待的锁)
4.Peterson解决方案
5.TSL指令
Peterson解决方案和TSL指令解法正确,但是存在忙等待。

2.4睡眠和唤醒

优先级反转问题:若存在L和H进程,H优先级高,当L处于临界区中,若H从就绪到运行时,L不会调度,造成L无法离开临界区,H无限等待。
进程间通信原语:睡眠(sleep)唤醒(wakeup)
生产者-消费者问题

2.5信号量
0 0