操作系统学习笔记——第二章 进程管理 和 第三章 死锁

在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

参考书:《操作系统》谌卫军等,清华大学出版社,2012年5月
参考视频:清航全套计算机专业课视频

目录

第二章 进程管理

1.进程(Process)

2.线程(Thread)

3.进程间通信

4.经典的IPC问题

5.进程调度

第三章 死锁

第二章 进程管理(进程三种状态的转换?如何共享数据?低级通信?高级通信?互斥(引入的原因及如何解决)?PV原语、经典的三大IPC问题及解决方案、进程调度的优先级、死锁)

1.进程(Process)

为什么使用进程?Why processes?

为了提高计算机系统中各种资源的利用率,现代操作系统广泛采用多道程序技术(multi-programming),使多个程序同时在系统中存在并运行。

X86 CPU 寄存器

程序1      程序2

 

问题:硬件只有一份,如何使这两个程序同时运行?

为此,操作系统设计者提出了进程的概念。

什么是进程?A process = a program in execution

一个进程应该包括:

-程序的代码;

-程序的数据;

-CPU寄存器的值,如PC,用来指示下一条将运行的指令、通用寄存器等;

-堆、栈;

-一组系统资源(如地址空间、打开的文件)

总之,进程包含了正在运行的一个程序的所有状态信息。

扩展:栈的作用是什么?保存临时数据、函数调用时来分配栈针来存放形参和局部变量

进程和程序的区别?

程序是静态的,进程是动态的。

进程的特性

-动态性:程序的运行状态在变,PC、寄存器、堆和栈等;

-独立性:是一个独立的实体,是计算机系统资源的使用单位。每一个进程在一个“虚拟计算机”上运行,每个进程都有“自己”的PC和内部状态,运行时独立于其他的进程(虚拟PC和物理PC);

如何实现逻辑PC?

在内存开辟一段空间,实现不同进程物理PC和逻辑PC轮流切换。

引起进程创建的三个主要事件?

-系统初始化时;

-在一个正在运行的进程当中,执行了创建进程的系统调用;

-用户请求创建一个新进程。

进程的三个基本状态

-运行状态(Running):进程占有CPU,并在CPU上运行。处于此状态的进程数目小于等于CPU的数目。

-就绪状态(Ready):进程已经具备运行条件,但由于CPU忙暂时不能运行,只要分得CPU即可运行;

(万事俱备只欠东风,只欠CPU)

-阻塞状态(Blocked/Waited):指进程因等待某种事件的发生而暂时不能运行的状态(如I/O操作或进程同步),此时,即使CPU空闲,该进程也不能运行。

类比:修自行车……(运行——正在修;就绪——正在修别人的车,等空闲修;阻塞——坏零件,买回来才能修)

进程的状态及其转换

引起进程状态转换的具体原因如下:

运行态→等待态:等待使用资源;如等待外设传输;等待人工干预。

等待态→就绪态:资源得到满足;如外设传输结束;人工干预完成。

运行态→就绪态:运行时间片到;出现有更高优先权进程。

就绪态—→运行态:CPU 空闲时选择一个就绪进程。

问题:1)进程正常运行(未阻塞)时处于什么状态?运行态或就绪态

2)此页正在讲的PPT处于什么状态?阻塞态

3)是否有其他的状态转换?没有,这三种只有四种情况。

程序 = 数据结构 + 算法

描述进程的数据结构:进程控制块(Process Control Block,PCB)。

系统为每个进程都维护了一个PCB,用来保存与进程有关的各种状态信息。

PCB中的主要内容

系统用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标志。

进程的创建:为该进程生成一个PCB;

进程的终止:回收它的PCB;

进程的组织管理:通过对PCB的组织管理来实现;

状态队列

-由操作系统来维护一组队列,用来表示系统当中所有进程的当前状态;

-不同的状态分别用不同的队列来表示(运行队列、就绪队列、各种类型的阻塞队列);

-每个进程的PCB都根据它的状态加入到相应的队列当中,当一个进程的状态发生变化时,它的PCB从一个状态队列中脱离出来,加入到另外一个队列。

如何实现队列?链表

2.线程(Thread)

 为什么要引入线程?

【案例】编写一个MP3播放软件。核心功能模块有三个:1)从MP3音频文件当中读取数据;2)对数据进行解压缩;3)把解压缩后的音频数据播放出来。

单进程的实现方法

 1 main()
 2 {
 3     while(TRUE)
 4     {
 5         Read();//I/O
 6         Decompress();//CPU
 7         Play();//I/O         
 8     }
 9 }
10 Read(){……}//读数据
11 Decompress(){……}//解压缩
12 Play(){……}//播放

问题:1)播放出来的声音能否连贯?2)各个函数之间不是并发执行,影响资源的使用效率;

 多进程的实现方法

问题:进程之间如何通信,共享数据?

怎么来解决这些问题?

需要提出一种新的实体,满足一下特性:1)实体之间可以并发地执行;2)实体之间共享相同的地址空间;

这种实体就是:线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值