操作系统要点--1. 进程、线程 2. 并发
操作系统要点
- 进程、线程
- 并发、
(补充更新中)
1、进程&线程
-
一个进程是由一个PCB数据结构和一个可执行代码的指令序列所组成,是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
进程的特征
进程的基本特征是动态性和并发性。同时进程还具有顺序性、独立性和异步性等特征。
在进程的定义中,已强调了进程的动态性。即进程是有生命期的,具体表现在:它是由 “创建”而产生,因“调度程序” 调度而运行,由于“I/O操作”而阻塞,最终,因“退出”而 消亡。进程的并发性将在后面并发的章节叙述。
进程的顺序性是指在单个顺序处理机上,机器指令的执行以及硬件操作是严格按照程序指令的顺序进行的。例如,i386处理器工作时,必须等—条指令执行结束后,硬件才检查是否有硬中断诮求;如果没有请求,再接着执行下一条指令;而如果有请求,CPU允许中断,并且该中断请求排队在前面(优先级高),CPU将响应这个中断请求,从而转去执行中断服务例程。 也就是说,进程的顺序性是指,系统中正在运行的进程不管是发生同步事件还是异步事件,只有当其中的一个操作结束后,才开始其后续的操作。
进程的独立性是指每一个进程是系统中一个独立的实体,它有自己的程序计数器和内部状态。因此进程是系统进行资源分配和调度的独立单位。进程的异步性是指系统中的进程是按照各自独立的、不可确定的时间发生的。
在讲解线程前,我们先深入理解下进程的内存分配机制是怎样的。
-
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
-
在一个进程中允许有多个线程时 , 它们都共享该进程的状态和资源, 也就是说它们驻留在同一个用户地址空间中 、可以访问相同的数据。 当一个线程改变了所属进程的变量时,其他线程在下次访问该变量时就会看到这种改变。
---进程和线程的关系
-
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位
-
资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量
-
处理机分给线程,即真正在处理机上运行的是线程
-
线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步
---进程与线程的区别
- 进程有自己的独立地址空间,线程没有
- 进程是资源分配的最小单位,线程是CPU调度的最小单位
- 进程和线程通信方式不同(线程之间的通信比较方便。同一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。而进程之间的通信只能通过进程通信的方式进行。)
- 进程上下文切换开销大,线程开销小
- 一个进程挂掉了不会影响其他进程,而线程挂掉了会影响其他线程
- 对进程进程操作一般开销都比较大,对线程开销就小了
---线程同步
- 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
- 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
- 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
---进程同步
进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性
同步机制遵循的原则:
- 空闲让进;
- 忙则等待(保证对临界区的互斥访问);
- 有限等待(有限代表有限的时间,避免死等);
- 让权等待,(当进程不能进入自己的临界区时,应该释放处理机,以免陷入忙等状态)
---进程通信
进程通信是指在进程间传输数据(交换信息)。
进程通信根据交换信息量的多少和效率的高低,分为低级通信(只能传递状态和整数值)和高级通信(提高信号通信的效率,传递大量数据,减轻程序编制的复杂度)。
其中高级进程通信分为三种方式:共享内存模式、消息传递模式、共享文件模式
---线程通信
同一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。
2、并发
操作系统的基本控制原理都是围绕进程展开的。但是,进程控制的复杂性是由操作系统的并发机制引起的。
在支持多道程序环境的通用操作系统中 ,允许一个或若十个进程在系统中并发执行, 但由于系统硬件资源的有限性, 使得并发执行的若干进程之间会出现竞争系统有限软硬件资源的现象。 这些资源包括处理器、 内存、I/0设备以及数据库等, 这就需要操作系统来协调和优化分配系统共享资源。 特别是在单处理器系统中,任一时刻 CPU 只能运行一个进程, 而其他进程只能是等待 CPU 或其他资源。为了公平合理地对待所有进程, 内核为每个进程分配一小段时间一小段时间被称为时间片。 一旦正在被运行进程的时间片用完, CPU 就立即被切换去执行另一个等待运行的就绪进程。由于 CPU 的运行速度很快, 造成若干个进程同时在运行的一 种虚拟假像。 这就是多道程序的并发控制。
并发是指在同一时间间隔内对资源的共享。即内存中的多个进程分时共享CPU、内存以及 I/O设备。显然,并发机制可以高效地使用CPU,协调高速CPU与慢速外设的矛盾。但是处理并发并不容易。在内存中同时驻留多个进程需要特殊的硬件以及软件的配合对其进行保护,以免各个进程的信息被窃取并遭到攻击。因此,现代操作系统的一个重要内容就是管理计算机的并发操作。
操作系统要实现并发控制的设计目标,离不开硬件平台的支持。因为内核必须使用中断机制和硬件上下文切换机制,才能实现多道程序的分时共享,否则CPU无法知道某个进程的时间片已经耗尽,需要调用另一个进程运行。另外,还要考虑CPU执行进程切换的时间开销要尽可能的小,如果CPU执行进程切换的时间开销太大,则多道程序设计将失去意义。
操作系统中的许多迫切需要解决与研究的问题都是由并发机制而引起的。例如:围绕若 “竞争条件”而引入了临界区、原子操作、同步与互斥、锁变量,等等。因此,并发控制向程序设计人员提出了新的重要的学习目标。因为并发程序并不总是按照预期的结果运行。因此调试并发程序是一件棘手的事,而且并发程序典型的不易解决的毛病是,一个并发程序编译运行后,大多数情况下运行结果都很好,但是极少数的情况下它会莫名其妙地失败,而且无法找到原因。
为了实现分时共享,内核必须将时间片已经耗尽的当前进程挂起,然后从就绪队列中选择,一个具有较高优先权的进程投入运行这个过程称为进程切换,或叫任务切换、上下文切换。