我是靠谱客的博主 糊涂画板,最近开发中收集的这篇文章主要介绍操作系统:概述和进程管理一.操作系统概述二.进程管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这里写目录标题

  • 一.操作系统概述
    • 1.何为操作系统 ?
    • 2.操作系统的功能?
    • 3.操作系统的特征
    • 4.操作系统的运行机制
    • 5.系统调用
  • 二.进程管理
    • 1.进程和线程的区别?
    • 2.进程的状态与转换
    • 3.进程的组成
    • 4.进程控制
    • 5.进程的通信 ※
      • 父进程和子进程
    • 6.进程调度
      • 6.1 进程调度方式:
      • 6.2 进程调度算法:
    • 7.管程
    • 8.死锁

一.操作系统概述

1.何为操作系统 ?

计算机自下而上分为四个部分:硬件、操作系统、应用程序、用户;
操作系统本质是运行在计算机上的软件程序
操作系统管理计算机硬件,为应用程序提供基础,充当硬件和用户之间的中介。

2.操作系统的功能?

从上往下看:
管理计算机系统资源,如管理cpu、内存、存储器、等
从下往上看:
为用户提供了接口以让用户对系统提出一些服务要求

3.操作系统的特征

操作系统的基本特征: 并发、共享、虚拟、异步

并发:宏观上同时执行,实际是在多道程序环境下,程序分时交替执行
异步:多道程序环境下,进程的执行是走走停停的,以不可预知的速度向前推进。
共享:系统中的资源可供内存中多个并发执行的进程来使用
虚拟:指把物理上的实体变为若干逻辑上的对应物,从逻辑上扩充了内存,使用户看到的内存远大于实际容量

4.操作系统的运行机制

CPU执行进程时有两种状态:
用户态:只执行非特权指令,
核心态可以执行特权指令,可以运行所有进程访问所有资源(操作系统运行在核心态)

用户态→核心态:只能通过中断来实现
核心态→用户态:通过特权指令,将pws设置为用户态即可;
核心态指令实际上包括系统调用类指令和一些对时钟、中断、原语的操作指令;

特权指令:指令的权限最大,如清内存、置时钟、分配系统资源等;

1.时钟管理:用来计时
2.中断机制:中断指来自cpu之外的事件发生,异常是内中断,指cpu内部出现内存溢出、地址越界等;
为了提高cpu利用率,可以使cpu从用户态进入核心态,此时操作系统会介入,
3.原语:最底层,有原子性的程序

5.系统调用

指用户在程序中调用操作系统提供的一些子功能,由于系统的资源都由操作系统来管理,所以与资源相关的操作都必须通过系统调用的方式向操作系统提出服务要求,并由操作系统代完成
如:设备管理、文件管理、内存管理、进程通信、进程控制

二.进程管理

1.进程和线程的区别?

引入:
引入进程是为了能使多道程序并发执行,提高资源利用率和吞吐量;
而引用线程是为了则是为了减小程序在并发时的开销,提高并发性能;

对比:
线程是CPU执行的最小单元进程是除了CPU以外的系统资源的分配单元
进程是程序的⼀次执行过程,是系统运⾏程序的独立的基本单位;也是操作系统进行资源分配和调度的基本单位;

线程可以理解为”轻量级的进程“;

线程是进程中的一个实体;

线程与进程相似,但线程是⼀个比进程更⼩的执行单位。
⼀个进程在其执行的过程中可以产生多个线程。

操作系统中:
进程是同⼀段时间内,可以同时执行的程序,而线程则是在同⼀程序内几乎同时执行⼀个以上的程序段

Java中:
执行一个java程序,这就启动了一个Java进程,系统会给进程分配内存,进程的一部分内存会用来运行jvm虚拟机;
而java进程中有多个线程,共享进程的堆和方法区,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。所以系统在产⽣⼀个线程,或是在各个线程之间作切换⼯作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

操作系统中
进程实体 = PCB进程控制块 + 程序段 + 数据段
系统利用PCB来描述进程的状态,以此控制和管理进程;

2.进程的状态与转换

创建态:进程正在被创建,申请一个空白的PCB填写进程信息,由系统为其分配运行的资源,然后将进程转入就绪态;
就绪态:进程获得了除处理机以外的所有资源,一旦抢占到时间片就可以立即运行
运行态:进程正在处理及运行;
阻塞态(等待态):进程正在等待某一事件如 I/O处理,进程会放弃之前抢到的时间片,此时处理机空闲也不能运行该进程;
结束态:进程退出运行
在这里插入图片描述

就绪态→运行态:处于就绪态的进程被调度后,获得处理机资源,则进程由就绪态切换为运行态
运行态→就绪态:运行态的进程在时间片用完后,让出处理机;此外,在可剥夺操作系统中,当有更高级的进程时,则正在执行的进程会转换为就绪态,让高级的进程执行
运行态→阻塞态:进程请求某一事件的发生(如I/O操作完成),进程就会由运行态转换为阻塞态;进程以系统调用的形式请求操作系统提供服务,
阻塞态→就绪态:等待事件的完成,如I/O操作结束时,进程由阻塞态转为就绪态;

阻塞态只能切换到就绪态,不能直接切换到运行态;
就绪态不能直接切换道阻塞态;

3.进程的组成

进程是一个独立运行的单位,也是操作系统进行资源分配和调度的基本单位;
进程由进程控制块PCB + 程序段 + 数据段 组成;
PCB进程控制块:进程控制块常驻内存,并在进程结束时删除,PCB是进程实体的一部分,是进程存在的唯一标志;
进程执行时,操作系统通过PCB了解进程的状态信息;
程序段:
程序段就是能被调度程序调度到cpu执行的程序代码段;程序可被多个进程共享;
数据段:
进程的数据段可以是进程对应的程序加工处理的原始数据也可以是程序执行时产生的中间或最终结果;

4.进程控制

进程控制就是对系统的所有进程实施有效的管理;
一般把进程控制用的程序成为“原语”,原语具有原子性,不可再分;
进程的控制是通过系统调用进入内核,再有内核的程序来完成,即任何进程都是在操作系统内核的支持下运行的;

1.创建进程
为进程分配一个唯一的进程标识号,然后新建一个空白的PCB进程控制快,填写进程信息,由系统为其分配运行的资源,然后将进程转入就绪态,等待调度运行;
允许父进程创建子进程;

2.进程的终止
引起进程终止的事件:
①正常结束
②异常结束,指进程运行时发生了某种异常事件,如存储越界、非法指令、I/O故障等
③外界干预;
过程:根据进程标识符,①从PCB读取进程的状态,若处于执行状态则终止运行,②将处理及资源分配给其他进程,③将PCB从所在队列删除;

3.进程的阻塞
正在执行的进程由于等待某事件的发生(如I/O处理)就会由运行态变为阻塞态,由系统执行阻塞原语(Block),只有从运行态才可能转为阻塞态;
过程:根据进程标识符找到对应的PCB,①从PCB读取进程的状态,若进程为运行态则保护其现场,③其状态转换为阻塞态,停止运行,③将PCB插入相应时间的等待队列,将处理机资源调度给其他就绪进程;

4.进程切换
进程切换指处理机从一个进程的运行转到另一个进程上运行,
过程:保存处理上下文,包括程序计数器和其他寄存器;更新PCB信息;把旧进程的PCB移入就绪、阻塞队列;选择新进程执行,更新PCB;更新内存中数据结构;恢复处理机上下文;

5.进程的通信 ※

进程通信指的是进程之间的信息交换;
每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核

  1. pipe管道通信
    管道”指用于连接读进程和写进程的一段【内核】的缓存,大小受限,以字节流形式单向写入
    管道是“半双工”通信,即某一时刻只能单向传输;
    只能在父子进程间使用,为客服这个缺点有了有名管道,以磁盘文件形式存在;
    数据被写满才能读,读空了才能写;
    缺点: ①管道这种通信方式效率低,不适合进程间频繁地交换数据②数据大小有限,不适合大文件
    优点: 简单,可以知道数据是否被读取

  2. 消息队列
    管道的通信方式是效率低的,因此管道不适合进程间频繁地交换数据;对于这个问题,消息队列的通信模式就可以解决。
    本质:消息队列是保存在【内核】中的消息链表
    如A 进程要给 B 进程发送消息,A 进程把数据放在对应的消息队列后就可以正常返回了,B 进程需要的时候再去读取数据就可以了。
    缺点:通信不及时 ②不适合比较大数据的传输 ③存在用户态与内核态之间的数据拷贝开销
    优点: 解决了管道通信效率低的问题;

  3. 共享内存(最快)
    消息队列的读取和写入的过程,都会有发生用户态与内核态之间的数据拷贝过程。那共享内存的方式,就很好的解决了这一问题;
    共享内存的机制,就是直接分配了一块虚拟(逻辑)地址空间来,映射到相同的物理内存中;
    这样这个进程写入的东西,另外一个进程马上就能看到了,都不需要拷贝来拷贝去,传来传去,大大提高了进程间通信的速度。
    在这里插入图片描述
    优点: ①效率高 ②解决了消息队列存在用户态和内核态数据拷贝开销问题;
    缺点: ①没有提供同步机制,需要使用同步互斥工具(信号量—P、V操作),多个进程读写容易错乱;

  4. 信号量作为同步机制的内存共享
    共享内存通信方式就是如果多个进程同时修改同一个共享内存,很有可能就冲突了。
    为了防止多进程竞争共享资源,而造成的数据错乱,所以需要保护机制,使得共享的资源,在任意时刻只能被一个进程访问。正好,信号量就实现了这一保护机制;
    信号量其实是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据;
    信号量只能被P、V两个原语来访问,P是申请资源,信号量-1,V是释放资源,信号量+1;
    利用不同的信号量初始值和P、V操作实现互斥、同步功能;

  5. 信号
    信号主要用于通知某个进程发生了什么事;
    上面的进程间通信都是常规状态下的工作模式。对于异常情况下的工作模式,就需要用「信号」的方式来通知进程。
    如:kill -9 1050 ,表示给 PID 为 1050 的进程发送 SIGKILL 信号,用来立即结束该进程;
    信号是进程间通信机制中唯一的异步通信机制,因为可以在任何时候发送信号给某一进程;
    进程有三种方式响应信号 1. 执行默认操作、2. 捕捉信号、3. 忽略信号;

  6. Socket
    前面提到的管道、消息队列、共享内存、信号量和信号都是在同一台主机上进行进程间通信,那要想跨网络与【不同主机】的进程之间通信,就需要 Socket 通信了;
    socket是一种面相网络的一种进程间通讯方式;是对TCP/IP、UDP协议的封装;
    socket本身是接口而不是协议;通过socket来使TCP/UDP协议;
    会有参数选择IPV4、IPV6、UDP、TCP

父进程和子进程

  • 父进程通过 fork() 函数创建子进程;
  • 子进程一经产生就与父进程并发执行;
  • 父进程和子进程访问的是同一块内存,但又相互独立的地址空间;
  • 最大区别是进程ID不一样;
  • 当父进程比子进程先结束,子进程会变成孤儿线程,会被回收;
  • 当子进程已经被回收,而父进程还在,则父亲从会变成僵尸线程,应尽量避免;

6.进程调度

调度在上下文切换时,是对处理机进行分配,以实现进程并发;
调度步骤
①选择一个进程
②切换进程

切换步骤
①保存原数据到PCB
②对新进程数据的恢复

6.1 进程调度方式:

所谓进程调度方式,指当某个进程正在处理及上执行时,若由更重要的进程需要处理,此时应该如何分配?
(1) 非剥夺调度方式(非抢占式)
指当进程在处理机上执行时,即使有更为重要的进程进入就绪队列,仍然让正在执行的进程继续执行,直到进程执行结束,或发生某种时间进入阻塞态
优点:实现简单、开销小
缺点:不适合实时系统

(2) 剥夺调度方式(抢占式)
指当进程在处理机上执行时,若有更为重要的进程进入就绪队列,则立即暂停正在执行的进程,将处理机分配给这个紧急的进程;

6.2 进程调度算法:

饥饿:某进程/作业长期得不到服务;

1.先来先服务 - 调度算法(非抢占式)
先进队列的任务被执行
缺点:看似公平,但如果一个长作业先进入,则后面的短作业就要等待很久,不会导致饥饿;

2.短时间优先 - 调度算法
执行运行时间最短的作业,
缺点:对长作业不公平,导致饥饿

3.优先级 - 调度算法
区分作业的紧急程度来执行
缺点:如果不断有优先级高的进程进来,会导致饥饿;

4.高响应比优先 - 调度算法
利用相应比公式,克服了饥饿,兼顾长作业

5.时间片轮转 - 调度算法(抢占式)
适用于分时系统;
先来先服务,每个进程只是用一个时间片,分时交替运行
缺点:开销大,不区分紧急程度

6.多级反馈队列 - 调度算法
结合了时间片轮转调度算法优先级调度算法
设置多个就绪队列,赋予不同的优先级;优先级越高,时间片长度越长;

7.管程

引入: 信号量机制中,大量的PV操作容易造成死锁,于是产生管程,保证了进程互斥,降低死锁可能性;

定义:共享资源的数据结构 + 对共享资源该数据结构的一组操作过程,即为管程;进程对资源的申请和释放都通过这组过程来实现;
可用synchronized来实现管程;

特点:
1.把共享资源封装,只能管程内的程序所访问;
2.每次只允许一个进程给进入管程;

8.死锁

指多个进程因竞争资源造成的一种互相等待的僵局,
程序在等待资源被释放,但资源无法被是否,若无外力作用将无法先前推进;

死锁的Java实现

死锁的必要条件: 其中一个不成立就不会死锁
1.互斥条件:资源只能被一个线程占用
2.请求保持条件:【线程阻塞时】,对已获得的资源不释放(自己不放)
3.不剥夺条件:线程已获得的资源不能被抢走(不能被抢)
4.循环等待条件:线程形成头尾相接的循环等待资源的关系

如何避免死锁:
1.互斥条件:无法破坏,用锁就是为了要互斥(临界资
源需要互斥访问,一次仅允许一个进程使用的资源即临界资源)
2.请求保持条件:一次性申请所有资源
3.不剥夺条件若线程申请不到资源,则主动释放资源
4.循环等待条件: 按照某一个顺序来申请资源,破坏循环等待条件

例子中解决方法:一次性申请所有资源,让线程t1 先用完o1、o2,再开启线程t2 (线程2 先Thread.sleep(2000) );

参考:小林coding

最后

以上就是糊涂画板为你收集整理的操作系统:概述和进程管理一.操作系统概述二.进程管理的全部内容,希望文章能够帮你解决操作系统:概述和进程管理一.操作系统概述二.进程管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部