热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

操作系统原理(进程管理)

一、进程1、前驱图有向无环图结点表示一条语句、一个程序段或进程有向边表示两结点之间的偏序关系或前驱关系(p1-p2表示p1一定要发生在p2的前边࿰

一、进程

1、前驱图

有向无环图

结点表示一条语句、一个程序段或进程

有向边表示两结点之间的偏序关系或前驱关系(p1->p2表示p1一定要发生在p2的前边,换句话说,只有p1发生了,p2才能发生。)

特点:前驱图不存在循环。

2、程序的顺序执行

按先后顺序执行语句操作。

单道批处理系统的执行方式。

特点:

顺序性、

封闭性(程序执行时独占全机资源,各资源状态只有本程序才能改变)、

可在现性(只要程序执行环境和初始条件相同,无论以何种方式(连续,走停)运行,其结果都相同)

3、程序的并发执行

逻辑上相互独立的程序或程序段在执行过程中执行时间在客观上互相重叠。即一个程序还未结束,另一程序可以开始。

目的:提高资源利用率

特点:

间断(异步)性:一个程序可能走到中途停下来,失去原有的时序关系(意思就是执行不是连续的,但会停止一下又继续)

失去封闭性:共享资源,即一个程序写到存储器内的数据可能会被另一个程序修改,失去原有的不变特征。、

失去可再现性:外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。(例:两个程序都有输出,两次执行可能执行顺序不同导致输出结果不同)

问题:资源共享

{cpu如何调度可使得每个用户公平得到cpu、资源使用的冲突与竞争、并行程序间如何正确传递信息(?)(个人理解:我如何确定你传给我的信息是没有失真的?)}

4、进程

描述程序执行的动态特征。

目的:解决程序并发执行时的系统资源共享的问题。

定义:

1)进程是程序的一次执行过程

2)进程是一个程序及其数据在处理机上顺序执行所发生的活动

3)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位。

补充:进程包括程序段、数据段、和一个称为进程控制块(PCB)的数据结构。

进程控制块

{

进程标识符、进程状态、程序计数器、cpu寄存器、cpu调度信息、内存管理信息、记账信息、I/O状态信息。

}

进程控制块是由OS维护的用来记录进程相关信息的一块内存。

是OS感知进程存在的唯一依据。

是操作系统中最重要的记录型数据结构。

#创建进程时应先创建相应的PCB,然后操作系统才能根据PCB中的信息对进程进行管理和控制,当进程完成时,系统释放PCB,释放后进程随之消亡。

#进程控制块处在核心段,通常不能通过程序自身的代码直接访问,而要通过系统调用,或OS来访问。

特征:

动态性:具有动态的地址空间

并发性:多个进程实体,同存于内存中,能同一时间段内同时运行。

独立性:各进程的地址空间相互独立,除非采用进程间通信手段。即系统中独立获得资源,独立调度的基本单位。

异步性:进程按各自独立,不可预知的速度进行。

进程与程序的区别:

1)主动,动态与被动,静态之分

2)暂时和永久之分

3)组成不同

4)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程。通过调用关系,一个进程可包含多个程序。

//进程并非一直处于执行状态,由“执行-暂停-执行”的活动规律。

//进程的生命周期可以划分为一组状态。

******

有一个小的分派程序:能使处理器从一个进程切换到另一个进程

处理机分派器是操作系统中的一段代码

功能:

把处理机从一个进程切换到另一个进程。

防止某进程独占处理机。

*******

五个基本的进程状态:

新建状态:刚被建立

终止状态:进程执行刚结束,还未撤销

就绪态:进程已获得除cpu以外的其他资源。

执行态:获得了cpu

阻塞态:进程因等待某事件而暂时不能运行的状态

#就绪态不能转换到阻塞态(应执行态),阻塞态不能转换到执行态(应就绪态)。

补充:进程由内存调到外存——进入挂起状态

PCB的组织方式:

链表加索引

各不同状态的PCB(进程)以链表的形式存储和调用。用与状态相对应的指针对各状态链表遍历。

各不同状态的PCB(进程)以索引表的形式存储和调用。用与状态相对应的index对各状态链表遍历。

二、进程控制

系统使用一些具有特有功能的程序段控制进程。

目的:达到多进程高效并发执行协调,实现资源共享。

是由OS内核通过原语操作实现的

原语:由若干指令构成的“原子操作”过程。作为一个整体不可分割(要么全部完成,要么全部不做)

即:原语是系统态下执行的某些具有特定功能的程序段。

许多系统调用的就是原语。

进程控制的原语:{创建原语、撤销原语、阻塞原语、唤醒原语……}

父进程与子进程

关系构成:树

继承:子进程可以从父进程中继承用户标识符、环境变量、打开文件、文件系统的当前目录、控制终端、已经连接的共享存储区、信息处理例程入口表等。

撤销:子进程撤销时,归还从父进程继承的资源;父进程撤销时,同时撤销其所有子进程。

引起创建进程的事件:

  1. 交互登录:终端用户登录到系统(进程代表终端用户)
  2. 作业调度:作业被调度程序选中成为执行态(进程担负作业执行的任务)
  3. OS因为提供一项服务而创建:OS为用户程序创建一个新进程,代表用户程序执行一个功能。
  4. 由现有进程生成:为了程序的并行性创建新进程。

前三个是系统内核创建。

进程的创建实质上是生成一个PCB

【申请空白PCB】->【为新进程分配资源】->【初始化进程控制块】->【将新进程插入就绪队列】

终止程序:

也称为“退出”或主程序返回:调用exit()可终止程序

引起进程终止的事件:

  • 正常结束
  • 异常结束
  • 外界干预

释放资源:【释放内外存空间】、【关闭所有打开文件】、【释放共享内存段】

进程的阻塞和唤醒:

引起进程阻塞和唤醒的事件:

  • 请求系统服务
  • 启动某种操作
  • 新数据尚未到达
  • 无新工作可做

#发生条件尚不具备时,进程自己调用阻塞原语阻塞自己

#一个处于阻塞状态的进程不可能自己唤醒自己

#当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。

//阻塞是进程自身的一种主动行为。

//唤醒:将进程状态转换成就绪态

进程的挂起与激活:

用户请求或父进程请求将自己的某个子进程挂起时,系统调用suspend()将指定进程或阻塞状态的进程挂起。

#当发生激活进程的事件时,若进程驻留在外存而内存中已有足够的空间,则调用active()激活。

********************************************************************************

进程间存在两种关系:

相互合作(操作顺序冲突)(个人理解:职能相干)

竞争资源:(共享外设、内存(变量)等资源)

协调好这些关系的过程——进程的同步

进程同步的主要工作:

  • 相互合作方面(间接相互制约):保证相互合作的诸进程在执行次序上的协调——同步
  • 竞争资源方面(直接相互制约):保证诸进程能互斥地访问临界资源

临界资源:计算机中的有些软硬件资源,当多个进程对其进行访问时(关键是进行写入和修改),必须互斥地进行,这些一次只允许一个进程使用的资源称为临界资源。

临界资源需要采用互斥方式,实现对资源的共享。

--------------------------------------------------------------------------------------------------

一个访问临界资源的程序包含【进入区、临界区、退出区、剩余区】

进入区:进入临界区之前,检查可否进入临界区的一段代码。(如果可以进入,则通常会设置“正在访问临界区”的标志)

临界区:每个进程中访问临界资源的那段程序称为临界区。

退出区:用于将“正在访问临界区”标志清除。

剩余区:代码中的其他部分。

进入区作用:{改变资源状态,阻塞等待资源释放}

退出区作用:{释放资源}

*******************************************************************************************

进程互斥:若干共享临界资源的进程彼此交换信息以保证排他性的进入各自的临界区。

进程同步:若干相互合作的进程彼此交换信息以保证在执行次序上的协调。

----------------------------------------------------------------------------------------------------------

同步和互斥的关系:

1)进程同步是一般情况,互斥是同步的一种特殊情况。

2)进程互斥可在具有一定逻辑关系的伙伴进程之间,也可在非伙伴进程之间。而同步发生在相互有逻辑关系的伙伴进程之间。

同步机制应遵循的准则:

  • 空闲则入:其他进程均不处于临界区
  • 忙则等待:已有进程处于其临界区
  • 有限等待:等待进入临界区的进程不能死等
  • 让权等待:不能进入临界区的进程,应当释放CPU(如转换到阻塞状态)

解决互斥的方法有软件方法也有硬件方法。

两种方法原理上类似:都是设置公共变量用来判断可否进入临界区和是否已经进入临界区,再当进程使用临界资源结束后,会通过修改那个公共变量来使临界资源被释放。

不同的是:软件方法是用户自己设计的,而硬件方法则是操作系统中自带的(个人理解:是操作系统设计者设计的)

“饥饿”现象:在一个可以预见的时间内,一个或多个进程得不到满足,如都不能访问临界资源。

产生原因:动态系统中,操作系统对每类系统资源需要确定分配策略,有时分配策略是不公平的,即不能保证等待时间上界的存在。当进程等待时间给进程推进和响应带明显影响时称发生了饥饿现象。

正确的算法是:先修改、后检查、后修改者等待

进入区:flag[i] = true;turn=j;while(flag[j] and turn == j)do no_op;

退出区:flag[i] = flase;

软件方法具有局限性:

{

不适用多进程

实现过于复杂

需要高编程技巧

}

可利用硬件指令:读写操作由一条指令完成,因而保证读操作和写操作不被打断。

硬件方法:中断屏蔽方法、硬件指令方法。

硬件方法局限:等待要耗费cpu时间,不能实现“让权等待”。

优点:适用任意数目的进程、简单、容易证明正确性、可以支持进程内存在多个临界区,只需要为每个临界区设立一个布尔变量

问题:为啥硬件比软件好,不应该一样吗,都是同样的原理?为啥软件方法的局限那么大?



推荐阅读
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
author-avatar
井爱3053_170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有