进程线程模型

pthread_join 等待一个特定线程的退出

进程控制块分为调度信息和现场信息    进程标识符 进程当前状态 代码段指针

进程从运行——>就绪的原因可能是:1.被调度程序抢占处理机 2.进程完成创建 3.时间片用完

非抢占式能引起新的进程调度是:1.正在执行的进程运行完毕 正在执行的进程调用阻塞原语将自己阻塞进入等待状态3.正在执行的进程调用阻塞原语并因资源不足被阻塞 4.唤醒原语激活了资源进程 时间片用完

进程由:进程控制块 数据 指令代码组成

引入进程的原因:提高并发度  减少通信开销 线程之间的切换时间短  每个线程都有独有的栈

等待——>就绪 唤醒

当设备忙进程会进入等待状态 不会终止

运行中的三种状态:就绪 等待 运行

运行——>就绪  现场的信息都会保存到进程控制块当中

不同的进程执行的代码段可能相同

与本进程相关的内容只能由操作系统读取

当进程中请处理机得不到满足时 他将进入就绪态

管程只允许一个进程进入管理  从而实现进程的互斥 但无法保证其本身互斥

进程优先级:静态和动态  系统进程优先级高于用户进程优先级  静态优先级 进程创建时确定运行期间不会改变   动态优先级  创建时确定优先级 之后不断改变

所有进程必须调度才能在处理机上运行 没有被调度到的进程只能处于等待状态  操作系统可以根据不同情景分类应用多种进程调度算法

一个进程的状态变化不一定会引起令一个进程的状态变化  信号量初值一定大于0  进程是资源分配的基本单位 线程是处理机调度的基本单位 进程被挂起他可以是阻塞也可以是挂起 PV主要实现进程的互斥与同步

手动  阻塞——>挂起 suspend()

pthread_mutex_init() 创建一个互斥量

进程控制块PCB每个进程都有常驻内存  将CPU 分配给选中的进程  将CPU进程的现场信息保存到进程控制块当中 将选中的进程现场信息送到响应的寄存器中

单核处理机:处于运行状态的进程至多一个至少0个

调度时机 进程运行完毕 自我阻塞  时间片用完 资源没准备好  出现错误

可再入程序: 纯代码程度 运行中不需要修改

线程描述记录的信息有:线程ID 指令地址存储器  处理器寄存地址  硬件设备寄存的值  栈现场状态等少量私有线程

进程控制块的组织方式:线性方法 索引方法 链接方法

运行——>阻塞必然会引起一个状态到另一个状态的变化

三种线程实现机制:用户线程 内核线程 独立线程

实时系统算法设计的目标是:满足截至时间要求 满足可靠性要求

运行批处理作业大型计算中心算法设计目标:较高的CPU利用率 较短的周期时间 较大的吞吐量

现场信息:程序状态字 时钟 界地址寄存器

调度信息:进程名进程号存储信息 优先级当前状态资源清单 ”家族“关系

phread_create的四个参数(线程标识指针,用参数设置线程属性,入口函数的起始地址,入口函数的参数)

进程再花费计算和I/O时间不同分为两类:1。时间上花费多的是时间密集型 2.I/O上花费多的是I/O密集型

进程撤销原语撤销进程:找到对应进程的PCB 撤下其他的子孙进程 释放进程子u按 撤销该进程PCB

进程由:程序 数据 进程控制块组成  程序:指令 代码 数据

其中可能会出现的状态转换是:就绪态——>就绪挂起状态  运行态——>就绪挂起状态 阻塞态——>阻塞挂起状态 阻塞挂起状态——>就绪挂起状态

三种可能会出现的状态转换是:就绪态——>运行态  运行态——>阻塞态 运行态——>就绪态

进程具有并发性 动态性 独立性 交往性 异步性

异步性:每个进程都按照自己独立且不可预知的状态向前推进

进程控制原语有:创建进程 撤销进程 挂起进程 激活进程 唤醒进程 改变进程优先级

采用多线程模型的操作系统中 进程是资源分配的基本单位 线程是处理调度的基本单位

多道中程序设计:允许多个程序同时进入内存中并行

就绪——>运行一定不会引起调度  运行——>阻塞需要的数据没准备好

进程的调度:任何进程调度厚才能运行 操作系统可以根据不同的情景分类应用多种进程调度算法  交互式系统一般采用时间片轮转调度算法

原文地址:https://www.cnblogs.com/liugangjiayou/p/11456741.html

时间: 2024-10-13 01:09:29

进程线程模型的相关文章

操作系统学习笔记----进程/线程模型----Coursera课程笔记

操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进程创建.撤销.阻塞.唤醒.... 0.2 线程模型 为什么引入线程 线程的组成 线程机制的实现 用户级线程.核心级线程.混合方式 1. 进程的基本概念 1.1 多道程序设计 允许多个程序同时进入内存运行,目的是为了提高CPU系统效率 1.2 并发环境与并发程序 并发环境: 一段时间间隔内,单处理器上

朴素的UNIX之-进程/线程模型

UNIX的传统倾向于将一个任务交给一个进程全权受理,但是一个任务内部也不仅仅是一个执行绪,比如一个公司的所有成员,大家都在做同一件事,每个人却只负责一部分,粒度减小之后,所有的事情便可以同时进行,不管怎样,大家还都共享着所有的资源.因此就出现了线程.线程其实就是共享资源的不同的执行绪.线程的语义和朴素的UNIX进程是不同的. 0.原始进程模型-著名的fork调用 朴素的UNIX进程依托于著名的fork调用,就是这个fork调用让UNIX进程和Windows进程截然不同,也正是因为这个fork调用

服务器端网络编程之线程模型

上一篇文章<服务器端网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程-线程模型的选择.本文将主要介绍传统的和目前流行的进程-线程模型,在讲进程-线程程模型之前需要先介绍一种设计模式: Reactor 模式,不明白的看这里<设计模式详解>,文中有一句话对 Reactor 模式总结的很好,引用下. Reactor 模式首先是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers:这个Ser

9 异常处理 操作系统 进程线程 队列+生产消费者模型 进程同步 回调函数

异常处理 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常的种类: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError 无法引入模块或包:基本上是路径问题或名称错误 IndentationError 语法错误(的子类) :代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访

多线程——线程模型

什么是程序? 安装在磁盘上的一段指令集合,它是静态的概念. 什么是进程? 它是运行中的程序,是动态的概念,每个进程都有独立的资源空间. 什么是线程? 线程,又称为轻量级进程,是程序执行流的最小单元,是程序中一个单一的顺序控制流程.线程是进程的一个实体,是被系统独立调度和分派的基本单位. 什么是多线程? 多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务. 多线程的特点 ①   一个进程可以包含一个或多个线程. ②   一个程序实现多个代码同时交替运行就需要产生多个线程. ③  

线程模型的综述

本文首先介绍了一些线程基础,比如并发.并行.内存分配.系统调用.POSIX线程.接着通过strace分析了线程与进程的区别.最后以Android.Golang等线程模型进行了分析. 基础 1. 什么是并发(Concurrent),什么是并行(Parallels)? 并发指同时进行多个计算任务. 并行指通过切换时间片模拟进行多个计算任务. 详细可以参考Difference between concurrent programming and parallel programming - stack

Netty线程模型

一.Reactor模型 1.单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接: 2)作为NIO客户端,向服务端发起TCP连接: 3)读取通信对端的请求或者应答消息: 4)向通信对端发送消息请求或者应答消息 Reactor单线程模型示意图如下所示: 由于Reactor模式使用的是异步非阻塞IO,所有的IO操作都不会导致阻塞,理论上一个线程可以独立处理所有IO相关的操作.从架构层面看,一个NI

Linux下进程线程,Nignx与php-fpm的进程线程方式

1.进程与线程区别 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源. "进程——资源分配的最小单位,线程——程序执行的最小单位" 进程有独立的地

Netty系列之Netty线程模型

1. 背景 1.1. Java线程模型的演进 1.1.1. 单线程 时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一. 在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能. 1.1.2. 多线程 随着硬件性能的提升,CPU的核数越来越越多,很多服务器标配已经达到32或64核.通过多线程并发编程,可以充分利用多核CPU的处理能力,提升系统的处理效率和并发性能. 相关