2024年5月25日发(作者:)
操作系统的四个基本特征 1.并发concurrence 并行性与并发性这两个概念是既相似
又区别的两个概念。并行性是指两个或者多个事件在同一时刻发生这是一个具有微
观意义的概念即在物理上这些事件是同时发生的而并发性是指两个或者多个事件在
同一时间的间隔内发生它是一个较为宏观的概念。在多道程序环境下并发性是指在
一段时间内有多道程序在同时运行但在单处理机的系统中每一时刻仅能执行一道程
序故微观上这些程序是在交替执行的。应当指出通常的程序是静态实体它们是不能
并发执行的。为了使程序能并发执行系统必须分别为每个程序建立进程。进程又称
任务简单来说是指在系统中能独立运行并作为资源分配的基本单位它是一个活动的
实体。多个进程之间可以并发执行和交换信息。一个进程在运行时需要运行时需要
一定的资源如cpu存储空间及i/o设备等。在操作系统中引入进程的目的是使程序能并
发执行。 2.共享sharing 所谓共享是指系统中的资源可供内存中多个并发执行的进
程共同使用。由于资源的属性不同故多个进程对资源的共享方式也不同可以分为:
互斥共享方式和同时访问方式 3.虚拟virtual 是指通过技术吧一个物理实体变成若
干个逻辑上的对应物。在操作系统中虚拟的实现主要是通过分时的使用方法。显然
如果n是某一个物理设备所对应的虚拟逻辑设备数则虚拟设备的速度必然是物理设
备速度的1/n。 4.异步asynchronism 在多道程序设计环境下允许多个进程并发执行
由于资源等因素的限制通常进程的执行并非一气呵成而是以走走停停的方式运行。
内存中每个进程在何时执行何时暂停以怎样的方式向前推进每道程序总共需要多少
时间才能完成都是不可预知的。或者说进程是以一步的方式运行的。尽管如此但只
要运行环境相同作业经过多次运行都会获得完全相同的结果因此异步运行方式是运
行的。 可见操作系统为了使程序并发执行而产生了进程。 进程的定义:可并发执行
的程序在一个数据集合上的运行过程。 进程的特征: 1.动态性进程既然是进程实体
的执行过程因此进程是有一定的生命期。而程序只是一组有序指令的集合并放在某
种介质上本身无运行的含义因此程序是个静态的实体。 2.并发性 3.独立性这是指进
程实体是一个能独立运行的基本单位同时也是系统种独立获得资源和调度的基本单
位。 4.异步性 5.结构特征从结构上看进程实体是由程序段、数据段及进程控制块三
部分组成。 进程控制块PCB:进程控制块是进程实体的一部分它记录了操作系统所
需要的、用于描述进程情况及控制进程运行所需的全部信息。os是根据PCB来对并
发执行的进程进行控制和管理的 关于进程的总结: 定义:可并发执行的程序在一个
数据集合上的运行过程每个进程有一个自己的地址空间以及一个单一的控制流程。
要解决的问题:为了使程序能并发执行要并发执行就要隔离进程使进程独立即每个
进程有属于自己的数据段、程序段、进程控制块 线程的出现: 我们首先回顾进程的
两个基本属性:1进程使一个可拥有资源的独立单位2进程同时又是一个可以独立调
度和分派的基本单位。正是由于这两个基本属性才使进程成为一个能独立运行的基
本单位从而构成了进程并发执行的基础。 为了使程序能并发执行系统必须进行以下
操作: 1创建进程。创建一个进程时必须为之人、分配所必需的、除处理器以外的所
有资源如内存空间、I/O设备以及建立相应的PCB. 2撤消进程。系统在撤消进程时需
要先对这这些资源进行回收然后再撤销PCB. 3进程切换。在对进程进行切换时由于
要保留当前进程的CPU环境和设置新选中的进程的CPU环境为此须花费不少处理器
时间。 简言之由于进程是一个资源的拥有者因而在进程的创建、撤销、和切换的过
程中系统必须为之付出较大的时空开销也正因为如此在系统中设置的进程的数目不
宜过多进程的切换的频率也不宜过高但这也就限制了并发程度的进一步提高。为了
解决这个问题不少操作系统的学者们想到:将进程的两个属性分开由操作系统分开
处理。即对作为调度和分派的基本单位不同时作为独立分配资源的单位以使之轻装
运行而对拥有资源的基本单位又不频繁地对之进行切换在这种思想的指导下产生了
线程的概念。 线程引入的原因:为了减少程序并发执行所付出的时空开销使os具有
更好的并发性。 在引入线程的os中线程是进程中的一个实体进程中的一个或多个指
令执行流是被系统独立调度和分派的基本单位。线程基本上不再拥有系统资源只拥
有一点在运行中必不可少的资源如程序计数器、寄存器和栈但它可与同属一个进程
的其他线程功能共享进程所拥有的全部资源。线一个线程可以创建和撤销另一个线
程同一进程中的多个线程之间可以并发执行。 线程与进程的比较: 线程具有许多传
统进程所具有的特征故又称为轻型线程或进程元而把传统的进程称为重型进程。在
引入了线程的os中通常一个进程拥有若干个线程。下面从四个方面来比较线程与进
程。 1.调度 在原始的OS中拥有资源的基本单位和独立调度、分配的基本单位都是
进程。而在引入线程的OS中则把线程作为调度和分派的基本单位而把进程作为资源
拥有的基本单位使传统进程的两个属性分开线程便能轻装运行从而可以显著的提高
系统并发程度。在同一进程中线程的切换换嵋鸾糖谢辉谟梢桓鼋讨械南叱糖
谢坏搅硪唤讨械南叱淌苯嵋鸾糖谢弧?2.并发性 在引入线程的OS中不仅进
程之间可以并发执行而且在一个进程中的多个线程之间亦可以并发执行因而使OS
具有更好的并发性从而能更有效的使用系统资源和提高系统吞吐量。 3.拥有资源
不论是原始的OS还是设有线程的操作系统进程都是拥有资源的一个独立单位它可
以拥有自己的资源。线程自己基本不再拥有系统资源但它可以访问其隶属进程的资
源。 4.系统开销 由于在创建或撤销进程时系统都要为之分配或回收资源如内存空
间I/O设备等。因为OS所付出的开销将显著地大于在创建或撤销线程时的开销。类
似的在进行进程切换时涉及到整个当前进程CPU环境的保存以及新被调度运行的进
程的CPU环境设置。而线程切换只须保存和设置少量寄存器的内容并不涉及存储器
管理方面的操作。可见进程切换的开销也远大于线程切换的开销。此外由于同一进
程中的多个线程具有相同的地址空间使它们之间的同步和通信的实现变得比较容
易。 这个机制在现代操作系统的实现主要可分为两大类。即根据操作系统内核是否
对线程可感知分为内核线程和用户线程。 1.内核线程无论是用户进程中的线程还是
系统进程中的线程它们的创建、撤销和切换都是由内核实现的。在内核中保留了一
张线程控制块内核根据该控制块而感知线程的存在并对线程进行控制。 2.用户线程
它仅存在于用户级中对于这种线程的创建、撤销和切换都不利用系统调用实现因而
这种线程与内核无关。相应地内核也并不知道用户级线程的存在。调度的实现方式
是采用在用户空间增加运行库这些运行库被称为线程包每当用户进程获得CPU控制
权线程运行库决定该从哪里开始运行 实际上上面所说的线程是操作系统调度的基
本单位实际上指的只是内核线程。操作系统在调度时参考各进程内的线程运行情况
做出调度决定如果一个进程中没有就绪态的线程那么这个进程也不会被调度占用
CPU. 在Windows2000中操作系统进行调度时根本就不理采线程是属于哪个进程的
只是将所有的就绪线程统一排成若干个优先级队列然后进行调度。在这个情况下线
程的确成了调度的最小单位。 关于线程的总结: 出现的背景:由于进程是一个资源
的拥有者因而在进程的创建、撤销、和切换的过程中系统必须为之付出较大的时空
开销限制了并发程度的进一步提高。 要解决的问题:解决进程的创建、撤销、和切
换的过程中系统必须为之付出较大的时空开销的问题 解决的方法:将进程的两个属
性分开由操作系统分开处理。把独立调度、分配的基本单位这个属性分离出来作为
线程而把进程作为资源拥有的基本单位线程作为进程中的一个实体而存在。 应用程
序域的出现: 来自msdn 在.net出现以前一个进程下只能运行一个应用程序而在net
出现后一个进程下可以运行多个应用程序这都是因为应用程序域的出现。 以前使用
进程边界来隔离在同一台计算机上运行的应用程序。每一个应用程序被加载到单独
的进程中这样就将该应用程序与在同一台计算机上运行的其他应用程序相隔离。 隔
离这些应用程序的原因在于内存地址是与进程相关的在目标进程中不能通过任何有
意义的方式使用从一个进程传递到另一个进程的内存指针。此外您不能在两个进程
间进行直接调用。您必须代之以使用代理它提供一定程度的间接性。 应用程序域提
供安全而通用的处理单元公共语言运行库可使用它来提供应用程序之间的隔离。您
可以在具有同等隔离级别存在于单独的进程中的单个进程中运行几个应用程序域而
不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用
程序的能力显著增强了服务器的可伸缩性。 隔离应用程序对于应用程序安全也是十
分重要的。例如您可以在单个浏览器进程中运行几个Web应用程序中的控件同时使
这些控件不能访问彼此的数据和资源。 应用程序域所提供的隔离具有以下优点引入
原因: 在一个应用程序中出现的错误不会影响其他应用程序。因为类型安全的代码
不会导致内存错误所以使用应用程序域可以确保在一个域中运行的代码不会影响进
程中的其他应用程序。 能够在不停止整个进程的情况下停止单个应用程序。使用应
用程序域使您可以卸载在单个应用程序中运行的代码。 应用程序域形成了托管代码
的隔离、卸载和安全边界。线程是公共语言运行库用来执行代码的操作系统构造。
在运行时所有托管代码均加载到一个应用程序域中由特定的操作系统线程来运行。
应用程序域和线程之间不具有一对一的相关性。在任意给定时间在单个应用程序域
中可以执行几个线程而且特定线程并不局限在单个应用程序域内。也就是说线程可
以自由跨越应用程序域边界不为每个应用程序域创建新线程。 在任意给定时间每一
线程都在一个应用程序域中执行。运行库会跟踪在哪些应用程序域中有哪些线程正
在运行。


发布评论